Finally, the new web services are working
[jabaws.git] / runner / compbio / runner / msa / Probcons.java
1 /* Copyright (c) 2009 Peter Troshin\r
2  *  \r
3  *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0\r
4  * \r
5  *  This library is free software; you can redistribute it and/or modify it under the terms of the\r
6  *  Apache License version 2 as published by the Apache Software Foundation\r
7  * \r
8  *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without\r
9  *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache \r
10  *  License for more details.\r
11  * \r
12  *  A copy of the license is in apache_license.txt. It is also available here:\r
13  * @see: http://www.apache.org/licenses/LICENSE-2.0.txt\r
14  * \r
15  * Any republication or derived work distributed in source code form\r
16  * must include this copyright and license notice.\r
17  */\r
18 \r
19 package compbio.runner.msa;\r
20 \r
21 import java.io.FileNotFoundException;\r
22 import java.io.IOException;\r
23 import java.util.Arrays;\r
24 import java.util.List;\r
25 \r
26 import org.apache.log4j.Logger;\r
27 \r
28 import compbio.data.sequence.Alignment;\r
29 import compbio.data.sequence.UnknownFileFormatException;\r
30 import compbio.engine.client.Executable;\r
31 import compbio.engine.client.PipedExecutable;\r
32 import compbio.engine.client.SkeletalExecutable;\r
33 import compbio.metadata.Limit;\r
34 import compbio.metadata.LimitsManager;\r
35 import compbio.metadata.ResultNotAvailableException;\r
36 import compbio.runner.Util;\r
37 \r
38 public class Probcons extends SkeletalExecutable<Probcons> implements\r
39         PipedExecutable<Probcons> {\r
40 \r
41     private static Logger log = Logger.getLogger(Probcons.class);\r
42 \r
43     // Cache for Limits information\r
44     private static LimitsManager<Probcons> limits;\r
45     private final static String ANNOTATION = "annotation.txt";\r
46 \r
47     public static final String KEY_VALUE_SEPARATOR = Util.SPACE;\r
48 \r
49     /**\r
50      * \r
51      * @param workDirectory\r
52      */\r
53     public Probcons() {\r
54         addParameters(Arrays.asList("-v", "-clustalw", "-annot", ANNOTATION));\r
55         /*\r
56          * Could either have probabilities or the alignment, but not both "-t",\r
57          * "probabilities"\r
58          */\r
59     }\r
60 \r
61     @SuppressWarnings("unchecked")\r
62     @Override\r
63     public Alignment getResults(String workDirectory)\r
64             throws ResultNotAvailableException {\r
65         try {\r
66             return Util.readClustalFile(workDirectory, getOutput());\r
67         } catch (FileNotFoundException e) {\r
68             log.error(e.getMessage(), e.getCause());\r
69             throw new ResultNotAvailableException(e);\r
70         } catch (IOException e) {\r
71             log.error(e.getMessage(), e.getCause());\r
72             throw new ResultNotAvailableException(e);\r
73         } catch (UnknownFileFormatException e) {\r
74             log.error(e.getMessage(), e.getCause());\r
75             throw new ResultNotAvailableException(e);\r
76         } catch (NullPointerException e) {\r
77             log.error(e.getMessage(), e.getCause());\r
78             throw new ResultNotAvailableException(e);\r
79         }\r
80     }\r
81 \r
82     @Override\r
83     public List<String> getCreatedFiles() {\r
84         return Arrays.asList(getOutput(), ANNOTATION, getError());\r
85     }\r
86 \r
87     @Override\r
88     public Probcons setInput(String inFile) {\r
89         String input = getInput();\r
90         super.setInput(inFile);\r
91         // TODO replace with setLast\r
92         cbuilder.setParam(inFile);\r
93         return this;\r
94     }\r
95 \r
96     @Override\r
97     public Limit<Probcons> getLimit(String presetName) {\r
98         if (limits == null) {\r
99             limits = getLimits();\r
100         }\r
101         Limit<Probcons> limit = null;\r
102         if (limits != null) {\r
103             // this returns default limit if preset is undefined!\r
104             limit = limits.getLimitByName(presetName);\r
105         }\r
106         // If limit is not defined for a particular preset, then return default\r
107         // limit\r
108         if (limit == null) {\r
109             log.debug("Limit for the preset " + presetName\r
110                     + " is not found. Using default");\r
111             limit = limits.getDefaultLimit();\r
112         }\r
113         return limit;\r
114     }\r
115 \r
116     @Override\r
117     public LimitsManager<Probcons> getLimits() {\r
118         // synchronise on static field\r
119         synchronized (log) {\r
120             if (limits == null) {\r
121                 limits = Util.getLimits(this.getClass());\r
122             }\r
123         }\r
124         return limits;\r
125     }\r
126 \r
127     @Override\r
128     public Class<? extends Executable<?>> getType() {\r
129         return this.getClass();\r
130     }\r
131 }\r