blob: 043115383cdb4d9f7df5cdb64746a4365ddbffb0 [file] [log] [blame]
/**
*
*/
package de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
import java.io.InputStream;
import net.sf.taverna.t2.activities.externaltool.RetrieveLoginFromTaverna;
import net.sf.taverna.t2.reference.AbstractExternalReference;
import net.sf.taverna.t2.reference.DereferenceException;
import net.sf.taverna.t2.reference.ExternalReferenceSPI;
import net.sf.taverna.t2.reference.ReferenceContext;
import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
import net.sf.taverna.t2.reference.ReferencedDataNature;
import org.apache.log4j.Logger;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.SftpException;
/**
* @author alanrw
*
*/
public class SshReference extends AbstractExternalReference implements
ExternalReferenceSPI {
private static Logger logger = Logger.getLogger(SshReference.class);
private String host = "127.0.0.1";
private int port = 22;
private String directory = "/tmp/";
private String subDirectory;
private String fileName;
private CredentialManager credentialManager;
private int dataNatureInteger = ReferencedDataNature.UNKNOWN.ordinal();
private String charset = "UTF-8";
public SshReference() {
super();
}
public SshReference(SshUrl url) {
super();
this.host = url.getSshNode().getHost();
this.port = url.getSshNode().getPort();
this.directory = url.getSshNode().getDirectory();
this.subDirectory = url.getSubDirectory();
this.fileName = url.getFileName();
this.setDataNature(url.getDataNature());
this.setCharset(url.getCharset());
}
/* (non-Javadoc)
* @see net.sf.taverna.t2.reference.ExternalReferenceSPI#getApproximateSizeInBytes()
*/
@Override
public Long getApproximateSizeInBytes() {
return 10000L;
}
/* (non-Javadoc)
* @see net.sf.taverna.t2.reference.ExternalReferenceSPI#openStream(net.sf.taverna.t2.reference.ReferenceContext)
*/
@Override
public InputStream openStream(ReferenceContext context)
throws DereferenceException {
try {
SshNode node = SshNodeFactory.getInstance().getSshNode(this.getHost(), this.getPort(), this.getDirectory());
String fullPath = getDirectory() + getSubDirectory() + "/" + getFileName();
ChannelSftp channel = SshPool.getSftpGetChannel(node, new RetrieveLoginFromTaverna(new SshUrl(node).toString(), credentialManager));
logger.info("Opening stream on " + fullPath);
return (channel.get(fullPath));
} catch (JSchException e) {
//TODO
logger.error(e);
} catch (SftpException e) {
// TODO Auto-generated catch block
logger.error(e);
}
return null;
}
/**
* @return the host
*/
public String getHost() {
return host;
}
/**
* @param host the host to set
*/
public void setHost(String host) {
this.host = host;
}
/**
* @return the port
*/
public int getPort() {
return port;
}
/**
* @param port the port to set
*/
public void setPort(int port) {
this.port = port;
}
/**
* @return the directory
*/
public String getDirectory() {
return directory;
}
/**
* @param directory the directory to set
*/
public void setDirectory(String directory) {
this.directory = directory;
}
/**
* @return the subDirectory
*/
public String getSubDirectory() {
return subDirectory;
}
/**
* @param subDirectory the subDirectory to set
*/
public void setSubDirectory(String subDirectory) {
this.subDirectory = subDirectory;
}
/**
* @return the fileName
*/
public String getFileName() {
return fileName;
}
/**
* @param fileName the fileName to set
*/
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFullPath() {
return getDirectory() + "/" + getSubDirectory() + "/" + getFileName();
}
public ReferencedDataNature getDataNature() {
return ReferencedDataNature.values()[dataNatureInteger];
}
public void setDataNature(ReferencedDataNature dataNature) {
this.dataNatureInteger = dataNature.ordinal();
}
public String getCharset() {
return charset;
}
public void setCredentialManager(CredentialManager credentialManager) {
this.credentialManager = credentialManager;
}
public void setCharset(String charset) {
this.charset = charset;
}
/**
* @return the dataNatureInteger
*/
public int getDataNatureInteger() {
return dataNatureInteger;
}
/**
* @param dataNatureInteger the dataNatureInteger to set
*/
public void setDataNatureInteger(int dataNatureInteger) {
this.dataNatureInteger = dataNatureInteger;
}
public SshReference clone() {
SshReference result = new SshReference();
result.setHost(this.getHost());
result.setPort(this.getPort());
result.setDirectory(this.getDirectory());
result.setSubDirectory(this.getSubDirectory());
result.setFileName(this.getFileName());
result.setDataNature(this.getDataNature());
result.setCharset(this.getCharset());
return result;
}
}