diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidStorageProcessor.java b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidStorageProcessor.java index 5920fd8b8e7a823674bf2fcfd6d7d5173691d296..e7a54a4bf615d69fa3482ad5dde2141880931426 100644 --- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidStorageProcessor.java +++ b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/dss/PlasmidStorageProcessor.java @@ -17,15 +17,18 @@ package ch.ethz.bsse.cisd.plasmid.dss; import java.io.File; -import java.io.IOException; import java.util.Properties; import org.apache.commons.io.FilenameUtils; +import org.apache.log4j.Logger; +import ch.ethz.bsse.cisd.plasmid.plasmapper.PlasMapperUploader; +import ch.ethz.bsse.cisd.plasmid.plasmapper.PlasMapperUploader.PlasMapperService; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; +import ch.systemsx.cisd.common.logging.LogCategory; +import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.mail.IMailClient; import ch.systemsx.cisd.etlserver.AbstractDelegatingStorageProcessor; -import ch.systemsx.cisd.etlserver.IStorageProcessor; import ch.systemsx.cisd.etlserver.ITypeExtractor; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; @@ -44,6 +47,12 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; */ public class PlasmidStorageProcessor extends AbstractDelegatingStorageProcessor { + private static final Logger operationLog = + LogFactory.getLogger(LogCategory.OPERATION, PlasmidStorageProcessor.class); + + // TODO 2010-08-28, Piotr Buczek: get from properties + private final static String PLASMAPPER_PATH = "/Users/buczekp/CISD/cifex/jetty/webapps"; + private static final String ORIGINAL_DIR = "original"; private static final String GENERATED_DIR = "generated"; @@ -52,16 +61,13 @@ public class PlasmidStorageProcessor extends AbstractDelegatingStorageProcessor private static final String PNG_FILE_EXTENSION = ".png"; + private PlasMapperUploader uploader = new PlasMapperUploader(); + public PlasmidStorageProcessor(Properties properties) { super(properties); } - public PlasmidStorageProcessor(IStorageProcessor delegatedProcessor) - { - super(delegatedProcessor); - } - @Override public File storeData(final DataSetInformation dataSetInformation, final ITypeExtractor typeExtractor, final IMailClient mailClient, @@ -74,7 +80,6 @@ public class PlasmidStorageProcessor extends AbstractDelegatingStorageProcessor DataSetTypeOracle.DataSetTypeInfo.SEQ_FILE.name())) { File originalDir = new File(answer, ORIGINAL_DIR); - assert originalDir.isDirectory(); File[] files = originalDir.listFiles(); assert files.length == 1; File seqFile = files[0]; @@ -86,10 +91,12 @@ public class PlasmidStorageProcessor extends AbstractDelegatingStorageProcessor File generatedDir = new File(answer, GENERATED_DIR); if (generatedDir.mkdir()) { - File pngFile = new File(generatedDir, pngFileName); - File gbFile = new File(generatedDir, gbFileName); - createEmptyFileHandled(pngFile); - createEmptyFileHandled(gbFile); + final File pngFileDest = new File(generatedDir, pngFileName); + final File gbFileDest = new File(generatedDir, gbFileName); + + operationLog.info("Uploading '" + seqFile.getName() + "' to PlasMapper."); + uploadAndMoveGeneratedFile(seqFile, PlasMapperService.GRAPHIC_MAP, pngFileDest); + uploadAndMoveGeneratedFile(seqFile, PlasMapperService.GENEBANK_OUTPUT, gbFileDest); } else { throw new EnvironmentFailureException("Couldn't create directory '" + generatedDir @@ -99,14 +106,24 @@ public class PlasmidStorageProcessor extends AbstractDelegatingStorageProcessor return answer; } - private static final void createEmptyFileHandled(File file) + private void uploadAndMoveGeneratedFile(final File seqFile, final PlasMapperService service, + final File destinationFile) { - try + String outputFilePath = uploader.upload(seqFile, service); + File outputFile = new File(PLASMAPPER_PATH + outputFilePath); + if (outputFile.isFile()) { - file.createNewFile(); - } catch (IOException ex) + operationLog.info("Moving file '" + outputFile.getName() + "' from '" + outputFile + + "' to " + destinationFile); + if (outputFile.renameTo(destinationFile) == false) + { + throw new EnvironmentFailureException("Couldn't move file '" + outputFile + + "' to '" + destinationFile + "'."); + } + } else { - throw new EnvironmentFailureException("Couldn't create file '" + file + "'.", ex); + throw new EnvironmentFailureException("'" + outputFile + + "' doesn't exist or is not a file."); } } diff --git a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/plasmapper/PlasMapperUploader.java b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/plasmapper/PlasMapperUploader.java index d346439819e2ff04eab3edde07f156353a592fe4..c56d93275485bcd8ef3b90827f6fd337fa128bea 100644 --- a/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/plasmapper/PlasMapperUploader.java +++ b/plasmid/source/java/ch/ethz/bsse/cisd/plasmid/plasmapper/PlasMapperUploader.java @@ -39,7 +39,7 @@ import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; /** - * Uploads provided file to PlasMapper. + * Uploads provided sequence file to PlasMapper. * * @author Piotr Buczek */ @@ -47,7 +47,59 @@ public class PlasMapperUploader { // http://www.java-tips.org/other-api-tips/httpclient/how-to-use-multipart-post-method-for-uploading.html - private final static String PLASMAPPER_URL = "http://localhost:8080/PlasMapper"; + private final static String PLASMAPPER_URL = "http://localhost:8082/PlasMapper"; + + private static Properties createDefaultProperties() + { + Properties result = new Properties(); + result.setProperty("vendor", "Amersham%20Pharmacia"); + result.setProperty("showOption", "1,2,3,4,5,6,7,8,9"); + result.setProperty("restriction", "1"); + result.setProperty("orfLen", "200"); + result.setProperty("strand", "1,2"); + result.setProperty("featureName1", ""); + result.setProperty("featureName2", ""); + result.setProperty("featureName3", ""); + result.setProperty("featureName4", ""); + result.setProperty("featureName5", ""); + result.setProperty("featureName6", ""); + result.setProperty("dir1", "1"); + result.setProperty("dir2", "1"); + result.setProperty("dir3", "1"); + result.setProperty("dir4", "1"); + result.setProperty("dir5", "1"); + result.setProperty("dir6", "1"); + result.setProperty("category1", "origin_of_replication"); + result.setProperty("category2", "origin_of_replication"); + result.setProperty("category3", "origin_of_replication"); + result.setProperty("category4", "origin_of_replication"); + result.setProperty("category5", "origin_of_replication"); + result.setProperty("category6", "origin_of_replication"); + result.setProperty("stop1", ""); + result.setProperty("stop2", ""); + result.setProperty("stop3", ""); + result.setProperty("stop4", ""); + result.setProperty("stop5", ""); + result.setProperty("stop6", ""); + result.setProperty("scheme", "0"); + result.setProperty("shading", "0"); + result.setProperty("labColor", "0"); + result.setProperty("labelBox", "1"); + result.setProperty("labels", "0"); + result.setProperty("innerLabels", "0"); + result.setProperty("legend", "0"); + result.setProperty("arrow", "0"); + result.setProperty("tickMark", "0"); + result.setProperty("mapTitle", ""); + result.setProperty("comment", "Created using PlasMapper"); + result.setProperty("imageFormat", "PNG"); + result.setProperty("imageSize", "900 x 900"); + result.setProperty("backbone", "medium"); + result.setProperty("arc", "medium"); + result.setProperty("biomoby", "true"); // special: result of request == relative path to PNG + // file + return result; + } public enum PlasMapperService { @@ -80,53 +132,7 @@ public class PlasMapperUploader public static void main(String[] args) { - Properties p = new Properties(); - p.setProperty("vendor", "Amersham%20Pharmacia"); - p.setProperty("showOption", "1,2,3,4,5,6,7,8,9"); - p.setProperty("restriction", "1"); - p.setProperty("orfLen", "200"); - p.setProperty("strand", "1,2"); - p.setProperty("featureName1", ""); - p.setProperty("featureName2", ""); - p.setProperty("featureName3", ""); - p.setProperty("featureName4", ""); - p.setProperty("featureName5", ""); - p.setProperty("featureName6", ""); - p.setProperty("dir1", "1"); - p.setProperty("dir2", "1"); - p.setProperty("dir3", "1"); - p.setProperty("dir4", "1"); - p.setProperty("dir5", "1"); - p.setProperty("dir6", "1"); - p.setProperty("category1", "origin_of_replication"); - p.setProperty("category2", "origin_of_replication"); - p.setProperty("category3", "origin_of_replication"); - p.setProperty("category4", "origin_of_replication"); - p.setProperty("category5", "origin_of_replication"); - p.setProperty("category6", "origin_of_replication"); - p.setProperty("stop1", ""); - p.setProperty("stop2", ""); - p.setProperty("stop3", ""); - p.setProperty("stop4", ""); - p.setProperty("stop5", ""); - p.setProperty("stop6", ""); - p.setProperty("scheme", "0"); - p.setProperty("shading", "0"); - p.setProperty("labColor", "0"); - p.setProperty("labelBox", "1"); - p.setProperty("labels", "0"); - p.setProperty("innerLabels", "0"); - p.setProperty("legend", "0"); - p.setProperty("arrow", "0"); - p.setProperty("tickMark", "0"); - p.setProperty("mapTitle", ""); - p.setProperty("comment", "Created using PlasMapper"); - p.setProperty("imageFormat", "PNG"); - p.setProperty("imageSize", "900 x 900"); - p.setProperty("backbone", "medium"); - p.setProperty("arc", "medium"); - p.setProperty("biomoby", "true"); // special: result of request == relative path to PNG file - + Properties p = createDefaultProperties(); PlasMapperUploader uploader = new PlasMapperUploader(p); uploader.upload(new File("PRS316.gb"), PlasMapperService.GRAPHIC_MAP); } @@ -138,23 +144,25 @@ public class PlasMapperUploader this.properties = properties; } + public PlasMapperUploader() + { + this(createDefaultProperties()); + } + /** * Makes an HTTP multipart POST request with given file. * - * @param gbFile file to be uploaded + * @param seqFile file to be uploaded * @param service service to be used for upload * @return the server's response to the request depending on the service (path to output image * or sequence in genebank format) */ - public String upload(File gbFile, PlasMapperService service) + public String upload(File seqFile, PlasMapperService service) { - assert gbFile.getName().toLowerCase().endsWith(".gb"); - assert gbFile.exists(); - final PostMethod post = new PostMethod(service.getServiceURL()); try { - Part filePart = new FilePart(FILE_PART_NAME, gbFile); + Part filePart = new FilePart(FILE_PART_NAME, seqFile); Part[] parts = createParts(filePart, properties); post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams())); HttpClient client = new HttpClient(); @@ -167,8 +175,12 @@ public class PlasMapperUploader + post.getStatusLine())); } String response = post.getResponseBodyAsString(); - System.err.println(String.format("Response of service: '%s'", response)); - operationLog.info(String.format("Response of service: '%s'", response)); + if (response.endsWith("\n")) + { + response = response.substring(0, response.lastIndexOf("\n")); + } + System.err.println(String.format("Response of %s service: '%s'", service, response)); + operationLog.info(String.format("Response of %s service: '%s'", service, response)); return response; } catch (final Exception ex) {