-How To add a new executable\r
+How To add a new executable.\r
\r
-1) Add executable to the binaries folder. If it has source code and can be \r
-recompiled for different platforms include it under binaries/src \r
-Edit binaries/src setexecutableflag.sh and compilebin.sh scripts accordingly. \r
+1) Add executable to the binaries folder. If it has source code and can be\r
+ recompiled for different platforms include it under binaries/src \r
+ Edit binaries/src setexecutableflag.sh and compilebin.sh scripts accordingly. \r
\r
2) Make sure all the dependencies of the software being installed are satisfied. \r
-If there are other binaries they should be included as well. Keep the dependant \r
-binaries in subfolder for the main executable. Update compile and setexecflag \r
-scripts accordingly. \r
+ If there are other binaries they should be included as well. Keep the dependant \r
+ binaries in subfolder for the main executable. Update compile and setexecflag \r
+ scripts accordingly. \r
\r
-3) Make sure executable \r
- - Does not have any hard links to its dependencies, e.g. is able to run from \r
- any installation folder and does not contain any hard coded paths. \r
- (TODO examples...) \r
+3) Make sure executable does not have any hard links to its dependencies, e.g. \r
+ is able to run from any installation folder and does not contain any hard \r
+ coded paths. (TODO examples...). \r
\r
4) Describe executable in conf/Exectuable.properties. The lowercase name of the \r
-wrapper should be included in the name of the property for example Clustal \r
-properties all include clustal as a part of the name e.g. local.clustalw.bin\r
-The same property for Mafft will be called local.mafft.bin. \r
+ wrapper should be included in the name of the property for example Clustal \r
+ properties all include clustal as a part of the name e.g. local.clustalw.bin \r
+ The same property for Mafft will be called local.mafft.bin. \r
\r
5) Add <ExecutableName>Limit.xml, <ExecutableName>Parameters.xml and \r
-<ExecutableName>Presets.xml. All are optional (should be at least). If the \r
-executable does not support parameters you do not have to refer to the \r
-XXXParameter.xml file into the Executable.properties file. The same is true for \r
-Presets and Limits. \r
+ <ExecutableName>Presets.xml. All are optional (should be at least). If the \r
+ executable does not support parameters you do not have to refer to the \r
+ XXXParameter.xml file into the Executable.properties file. The same is true \r
+ for Presets and Limits. \r
\r
6) Create a Java wrapper class for your executable. Create it within runner \r
-source directory. Examples of other wrappers can be found in compbio.runner.msa \r
-or compbio.runner.disorder packages. Wrapper should extend SkeletalExecutable<T> \r
-implements PipedExecutable<T> if you need to pass the input or collect the \r
-results from the standard in/out. Please see Mafft code as example. Wrapper \r
-should expend SkeletalExecutable<T> if input/output can be set as a parameter \r
-for an executable. Please see ClustalW code as example. \r
+ source directory. Examples of other wrappers can be found in compbio.runner.msa \r
+ or compbio.runner.disorder packages. Wrapper should extend SkeletalExecutable<T> \r
+ implements PipedExecutable<T> if you need to pass the input or collect the \r
+ results from the standard in/out. Please see Mafft code as example. Wrapper \r
+ should expend SkeletalExecutable<T> if input/output can be set as a parameter \r
+ for an executable. Please see ClustalW code as example. \r
\r
7) Create a testcase suit for your wrapper and run the test cases. \r
\r
8) Create parser for the output files of your executable. Suggested location \r
-compbio.data.sequence.SequenceUtil \r
+ compbio.data.sequence.SequenceUtil \r
\r
9) Test the parser\r
\r
For multiple sequence alignment an Msa interface should be used. \r
\r
11) If you find a web interface that matches your returning data type, then \r
-implement a web service which confirms to it within a webservices source folder \r
+ implement a web service which confirms to it within a webservices source \r
+ folder. \r
\r
12) Register web service in WEB-INF/ web.xml and sun-jaxws.xml\r
\r
13) Add generated wsdl to wsbuild.xml ant script to generate the stubs\r
\r
14) Run build-server task in wsbuild file. Watch for errors. If the task fails \r
-that means that JAXB cannot serialize some of the data structures. Add \r
-appropriate annotations to your data types.\r
-Also check that \r
- - you do not have interfaces to serialize. JAXB cannot serialize them.\r
- - you have a default no args constructor (can be private if you do not need it)\r
- - JAXB cannot serialize a Map, use custom data structure instead!\r
- - Enum cannot be serialized as its abstract class (do not confuse with enum \r
- which is fine)\r
- - Fields serialization leave a little more space for manoeuvre, so use it. If \r
- you do then you can accept and return interfaces, e.g. List, Map; abstract \r
- classes etc, from your methods. \r
- \r
-If you have the data on the server side, but nothing is coming through to the \r
-client, this is a JAXB serialization problem. They tend to be very silent and \r
-thus hard to debug. Check your data structure can be serialized! \r
-\r
-13) Modify the client to work with your new web service. Update Services \r
-enumeration to include new service and ensure that all the methods of this \r
-enumeration take into account the new service. In particular add the service to the \r
-compbio.ws.client.Services enumeration. Modify the getServiceImpl() and getServiceType()\r
-methods. Update the client help text (client_help.txt) and insert it into the Constraints class. \r
-\r
-14) Test the web service with the client. \r
-\r
-15) Make sure the statistics collector works fine with a new web service. \r
-\r
-16) Test on the cluster...\r
+ that means that JAXB cannot serialize some of the data structures. Add \r
+ appropriate annotations to your data types.\r
+ Also check that: \r
+ - you do not have interfaces to serialize. JAXB cannot serialize them.\r
+ - you have a default no args constructor (can be private if you do not need it)\r
+ - JAXB cannot serialize a Map, use custom data structure instead!\r
+ - Enum cannot be serialized as its abstract class (do not confuse with enum \r
+ which is fine)\r
+ - Fields serialization leave a little more space for manoeuvre, so use it. If \r
+ you do then you can accept and return interfaces, e.g. List, Map; abstract \r
+ classes etc, from your methods. \r
+\r
+ If you have the data on the server side, but nothing is coming through to the \r
+ client, this is a JAXB serialization problem. They tend to be very silent and \r
+ thus hard to debug. Check your data structure can be serialized! \r
+\r
+15) Modify the client to work with your new web service. Update Services \r
+ enumeration to include new service and ensure that all the methods of this \r
+ enumeration take into account the new service. In particular add the service \r
+ to the compbio.ws.client.Services enumeration. Modify the getServiceImpl() and \r
+ getServiceType() methods. Update the client help text (client_help.txt) and \r
+ insert it into the Constraints class. \r
+\r
+16) Test the web service with the client. \r
+\r
+17) Make sure the statistics collector works fine with a new web service. \r
+\r
+18) Test on the cluster...\r