JWS-114 Bumping varied config files and jetbrains xmls. Also adding some java classes...
authorFábio Madeira <fmmarquesmadeira@dundee.ac.uk>
Tue, 11 Apr 2017 16:44:30 +0000 (17:44 +0100)
committerFábio Madeira <fmmarquesmadeira@dundee.ac.uk>
Tue, 11 Apr 2017 16:48:06 +0000 (17:48 +0100)
13 files changed:
.classpath
.idea/kotlinc.xml [new file with mode: 0644]
.idea/workspace.xml
ExecutionStatistic/log/log11.dat [new file with mode: 0644]
WEB-INF/classes/lib/testng-5.10-jdk15.jar [new file with mode: 0644]
WEB-INF/classes/log4j.properties.dundee [new file with mode: 0644]
WEB-INF/classes/log4j.properties.full [new file with mode: 0644]
WEB-INF/classes/log4j.properties.statdb [new file with mode: 0644]
engine/compbio/engine/client/Util.java [new file with mode: 0644]
engine/compbio/engine/cluster/drmaa/AsyncJobRunner.java [new file with mode: 0644]
engine/compbio/engine/cluster/drmaa/ClusterUtil.java [new file with mode: 0644]
engine/compbio/engine/cluster/drmaa/JobRunner.java [new file with mode: 0644]
runner/compbio/runner/Util.java [new file with mode: 0644]

index 46b788d..11405ea 100644 (file)
@@ -16,6 +16,7 @@
        <classpathentry kind="lib" path="WEB-INF/lib/jstl-1.1.2.jar"/>
        <classpathentry kind="lib" path="WEB-INF/lib/standard-1.1.2.jar"/>
        <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v7.0"/>
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7.0_45"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="lib" path="lib/servlet-api.jar"/>
        <classpathentry kind="output" path="WEB-INF/classes"/>
 </classpath>
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644 (file)
index 0000000..1c24f9a
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="KotlinCommonCompilerArguments">
+    <option name="languageVersion" value="1.1" />
+    <option name="apiVersion" value="1.1" />
+  </component>
+</project>
\ No newline at end of file
index 863a1f6..3169d8a 100644 (file)
@@ -6,11 +6,9 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="e8b4b79e-8aed-4386-9e7f-8dda0becf4dd" name="Default" comment="">
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/deployment.xml" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/webServers.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/ant.xml" afterPath="$PROJECT_DIR$/.idea/ant.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.classpath" afterPath="$PROJECT_DIR$/.classpath" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.xml" afterPath="$PROJECT_DIR$/build.xml" />
     </list>
     <ignored path="jabaws-dev.iws" />
     <ignored path=".idea/workspace.xml" />
   </component>
   <component name="FileEditorManager">
     <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file leaf-file-name="build.xml" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/build.xml">
+      <file leaf-file-name="template_header.jsp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/website/template_header.jsp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="328">
-              <caret line="564" column="68" lean-forward="true" selection-start-line="564" selection-start-column="68" selection-end-line="564" selection-end-column="68" />
-              <folding />
+            <state relative-caret-position="278">
+              <caret line="121" column="28" lean-forward="false" selection-start-line="121" selection-start-column="28" selection-end-line="121" selection-end-column="28" />
+              <folding>
+                <marker date="1491927253000" expanded="true" signature="6644:6648" ph="..." />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name=".gitignore" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/.gitignore">
+      <file leaf-file-name="Joblist.jsp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/website/statpages/Joblist.jsp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="0">
+            <state relative-caret-position="-846">
               <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="RegistryWS.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/RegistryWS.java">
+      <file leaf-file-name="MonthlySummary.jsp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/website/statpages/MonthlySummary.jsp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="705">
-              <caret line="47" column="13" lean-forward="false" selection-start-line="47" selection-start-column="13" selection-end-line="47" selection-end-column="13" />
+            <state relative-caret-position="650">
+              <caret line="99" column="143" lean-forward="false" selection-start-line="99" selection-start-column="143" selection-end-line="99" selection-end-column="143" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="HttpCodeResponseServiceStatus.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/webservices/compbio/stat/servlet/HttpCodeResponseServiceStatus.java">
+      <file leaf-file-name="download.jsp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/website/download.jsp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="1035">
-              <caret line="69" column="28" lean-forward="false" selection-start-line="69" selection-start-column="28" selection-end-line="69" selection-end-column="28" />
-              <folding />
+            <state relative-caret-position="276">
+              <caret line="174" column="167" lean-forward="false" selection-start-line="174" selection-start-column="167" selection-end-line="174" selection-end-column="167" />
+              <folding>
+                <marker date="1491927221000" expanded="true" signature="12213:12354" ph="..." />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="WSTester.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/WSTester.java">
+      <file leaf-file-name="Executable.properties" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/conf/Executable.properties">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="6720">
-              <caret line="448" column="60" lean-forward="false" selection-start-line="448" selection-start-column="60" selection-end-line="448" selection-end-column="60" />
+            <state relative-caret-position="-1988">
+              <caret line="64" column="78" lean-forward="false" selection-start-line="64" selection-start-column="29" selection-end-line="64" selection-end-column="78" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="WSTesterTester.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/testsrc/compbio/ws/client/WSTesterTester.java">
+      <file leaf-file-name="Executable.properties.dundee" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/conf/Executable.properties.dundee">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="510">
-              <caret line="34" column="32" lean-forward="false" selection-start-line="34" selection-start-column="32" selection-end-line="34" selection-end-column="32" />
+            <state relative-caret-position="-2948">
+              <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="Alignment.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/datamodel/compbio/data/sequence/Alignment.java">
+      <file leaf-file-name="Engine.cluster.properties" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/conf/Engine.cluster.properties">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="645">
-              <caret line="43" column="20" lean-forward="false" selection-start-line="43" selection-start-column="15" selection-end-line="43" selection-end-column="20" />
+            <state relative-caret-position="255">
+              <caret line="17" column="24" lean-forward="true" selection-start-line="17" selection-start-column="24" selection-end-line="17" selection-end-column="24" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="SequenceUtil.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/datamodel/compbio/data/sequence/SequenceUtil.java">
+      <file leaf-file-name="template_footer.jsp" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/website/template_footer.jsp">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="912">
-              <caret line="504" column="56" lean-forward="false" selection-start-line="504" selection-start-column="56" selection-end-line="504" selection-end-column="56" />
+            <state relative-caret-position="264">
+              <caret line="68" column="28" lean-forward="false" selection-start-line="68" selection-start-column="28" selection-end-line="68" selection-end-column="28" />
               <folding />
             </state>
           </provider>
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>&lt;target name=</find>
-      <find>jabaws</find>
-      <find>2.1</find>
-      <find>jpred</find>
-      <find>http://localhost:8080/jabaws/RegistryWS?wsdl</find>
-      <find>RegistryWS?wsdl</find>
-      <find>RegistryWS</find>
-      <find>8080</find>
-      <find>project</find>
+      <find>http://webserv1.cluster.lifesci.dundee.ac.uk:8089/jabaws/ProbconsWS?wsdl</find>
+      <find>http://webserv1.cluster.lifesci.dundee.ac.uk:8089S?wsdl</find>
+      <find>http://webserv1.cluster.lifesci.dundee.ac.uk:8089</find>
+      <find>localhost</find>
+      <find>http://localhost:8080</find>
+      <find>Preset Huge alignments</find>
+      <find>Huge alignments</find>
+      <find>with</find>
+      <find>ResultNotAvailableException</find>
+      <find>test_outfile</find>
+      <find>FileNotFoundException</find>
+      <find>PStruct</find>
+      <find>mode</find>
+      <find>readStatisticsClusterExecution</find>
+      <find>testsrc</find>
+      <find>c</find>
+      <find>test_group_runner</find>
+      <find>singleTest</find>
+      <find>test_group_runner2</find>
+      <find>-c</find>
+      <find>test.</find>
+      <find>jaba.war</find>
+      <find>website</find>
+      <find>js</find>
+      <find>man_</find>
+      <find>man</find>
+      <find>ma</find>
+      <find>m</find>
+      <find>j</find>
+      <find>jsp</find>
     </findStrings>
     <replaceStrings>
       <replace>2.2</replace>
+      <replace>target=&quot;1.8&quot;</replace>
+      <replace>webapps/jabaws</replace>
+      <replace>test_group_runner</replace>
+      <replace>test_group_runner2</replace>
     </replaceStrings>
     <dirStrings>
       <dir>$PROJECT_DIR$</dir>
+      <dir>$PROJECT_DIR$/testsrc</dir>
+      <dir>$PROJECT_DIR$/website/statpages</dir>
     </dirStrings>
   </component>
   <component name="FindManager">
   <component name="IdeDocumentHistory">
     <option name="CHANGED_PATHS">
       <list>
-        <option value="$PROJECT_DIR$/wsbuild.xml" />
-        <option value="$PROJECT_DIR$/website/about.jsp" />
-        <option value="$PROJECT_DIR$/website/template_header.jsp" />
-        <option value="$PROJECT_DIR$/website/template_footer.jsp" />
-        <option value="$PROJECT_DIR$/website/statpages/ServicesStatus.jsp" />
-        <option value="$PROJECT_DIR$/website/statpages/MonthlySummary.jsp" />
-        <option value="$PROJECT_DIR$/website/statpages/Joblist.jsp" />
-        <option value="$PROJECT_DIR$/.gitignore" />
-        <option value="$PROJECT_DIR$/build.xml" />
         <option value="$PROJECT_DIR$/webservices/compbio/data/msa/Category.java" />
         <option value="$PROJECT_DIR$/datamodel/compbio/data/sequence/Alignment.java" />
         <option value="$PROJECT_DIR$/datamodel/compbio/data/sequence/Program.java" />
         <option value="$PROJECT_DIR$/webservices/compbio/ws/server/resource/JpredWS.wsdl" />
         <option value="$PROJECT_DIR$/webservices/compbio/ws/client/Services.java" />
         <option value="$PROJECT_DIR$/website/man_docs.jsp" />
+        <option value="$PROJECT_DIR$/conf/Engine.cluster.properties" />
+        <option value="$PROJECT_DIR$/conf/Engine.local.properties" />
+        <option value="$PROJECT_DIR$/webservices/compbio/ws/client/AAConClient.java" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/ws/server/RegistryWSTester.java" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/ws/client/WSTesterTester.java" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/ws/client/TestRNAalifoldWS.java" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/ws/client/TestIUPredWS.java" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/ws/client/TestAAConWS.java" />
+        <option value="$PROJECT_DIR$/testsrc/testdata/MuscleLimits.xml" />
+        <option value="$PROJECT_DIR$/datamodel/compbio/data/sequence/RNAStructReader.java" />
+        <option value="$PROJECT_DIR$/conf/settings/RNAalifoldParameters.xml" />
+        <option value="$PROJECT_DIR$/conf/settings/TcoffeeParameters.xml" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/runner/structure/RNAalifoldParametersTester.java" />
+        <option value="$PROJECT_DIR$/conf/settings/TcoffeePresets.xml" />
+        <option value="$PROJECT_DIR$/binaries/src/setexecflag.sh" />
+        <option value="$PROJECT_DIR$/conf/Executable.properties" />
+        <option value="$PROJECT_DIR$/binaries/src/compilebin.sh" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/runner/msa/ClustalOTester.java" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/runner/msa/TcoffeeParametersTester.java" />
+        <option value="$PROJECT_DIR$/testsrc/compbio/metadata/AllTestSuit.java" />
+        <option value="$PROJECT_DIR$/docs/generate_man.sh" />
+        <option value="$PROJECT_DIR$/website/man_serverwar.jsp" />
+        <option value="$PROJECT_DIR$/website/man_pages_old/man_stats.jsp" />
+        <option value="$PROJECT_DIR$/website/man_about.jsp" />
+        <option value="$PROJECT_DIR$/website/man_pages_old/man_about.jsp" />
+        <option value="$PROJECT_DIR$/website/index.jsp" />
+        <option value="$PROJECT_DIR$/website/about.jsp" />
+        <option value="$PROJECT_DIR$/website/getting_started.jsp" />
+        <option value="$PROJECT_DIR$/website/template_footer.jsp" />
+        <option value="$PROJECT_DIR$/build.xml" />
+        <option value="$PROJECT_DIR$/website/statpages/ServicesStatus.jsp" />
+        <option value="$PROJECT_DIR$/website/statpages/MonthlySummary.jsp" />
+        <option value="$PROJECT_DIR$/website/template_header.jsp" />
+        <option value="$PROJECT_DIR$/website/download.jsp" />
       </list>
     </option>
   </component>
     <sorting>DEFINITION_ORDER</sorting>
   </component>
   <component name="ProjectFrameBounds">
-    <option name="x" value="1440" />
+    <option name="x" value="1439" />
     <option name="y" value="23" />
     <option name="width" value="1920" />
-    <option name="height" value="1139" />
+    <option name="height" value="1140" />
   </component>
   <component name="ProjectInspectionProfilesVisibleTreeState">
     <entry key="Project Default">
       <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
-      <pane id="Scratches" />
-      <pane id="Scope" />
+      <pane id="PackagesPane" />
       <pane id="ProjectPane">
         <subPane>
           <PATH>
               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="jabaws-dev" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="jabaws" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="website" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="jabaws-dev" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="jabaws" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="conf" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
         </subPane>
       </pane>
-      <pane id="PackagesPane" />
+      <pane id="Scratches" />
+      <pane id="Scope" />
     </panes>
   </component>
   <component name="PropertiesComponent">
     <property name="settings.editor.selected.configurable" value="web.server" />
   </component>
   <component name="RecentsManager">
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/website/man_pages_old" />
+      <recent name="$PROJECT_DIR$/website" />
+    </key>
     <key name="CopyFile.RECENT_KEYS">
       <recent name="$PROJECT_DIR$/website" />
       <recent name="$PROJECT_DIR$/website/static/css" />
       <recent name="$PROJECT_DIR$/website/static/img" />
     </key>
   </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
   <component name="RunManager">
     <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
       <module name="" />
       <listeners />
       <method />
     </configuration>
+    <configuration default="true" type="BashConfigurationType" factoryName="Bash">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="INTERPRETER_PATH" value="/bin/bash" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="PARAMETERS" value="" />
+      <module name="" />
+      <envs />
+      <method />
+    </configuration>
     <configuration default="true" type="Cold Fusion runner description" factoryName="Cold Fusion" custom_browser="" web_path="">
       <method />
     </configuration>
       <envs />
       <method />
     </configuration>
-    <configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs>
-        <env name="PYTHONUNBUFFERED" value="1" />
-      </envs>
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="TARGET" value="" />
-      <option name="SETTINGS_FILE" value="" />
-      <option name="CUSTOM_SETTINGS" value="false" />
-      <option name="USE_OPTIONS" value="false" />
-      <option name="OPTIONS" value="" />
-      <method />
-    </configuration>
     <configuration default="true" type="FlashRunConfigurationType" factoryName="Flash App">
       <option name="BCName" value="" />
       <option name="IOSSimulatorSdkPath" value="" />
       <envs />
       <method />
     </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
+      <node-interpreter value="project" />
+      <working-dir value="" />
+      <envs />
+      <scope-kind value="ALL" />
+      <method />
+    </configuration>
     <configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
       <config-file value="" />
       <node-interpreter value="project" />
       <envs />
       <method />
     </configuration>
-    <configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="">
-      <method />
-    </configuration>
-    <configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="ADDITIONAL_ARGS" value="" />
-      <method />
-    </configuration>
-    <configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="ADDITIONAL_ARGS" value="" />
-      <method />
-    </configuration>
-    <configuration default="true" type="PythonConfigurationType" factoryName="Python">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs>
-        <env name="PYTHONUNBUFFERED" value="1" />
-      </envs>
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="PARAMETERS" value="" />
-      <option name="SHOW_COMMAND_LINE" value="false" />
-      <method />
-    </configuration>
     <configuration default="true" type="Remote" factoryName="Remote">
       <option name="USE_SOCKET_TRANSPORT" value="true" />
       <option name="SERVER_MODE" value="false" />
       <option name="PORT" value="5005" />
       <method />
     </configuration>
-    <configuration default="true" type="ScalaTestRunConfiguration" factoryName="ScalaTest">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <setting name="path" value="" />
-      <setting name="package" value="" />
-      <setting name="vmparams" value="" />
-      <setting name="params" value="" />
-      <setting name="workingDirectory" value="" />
-      <setting name="searchForTest" value="Across module dependencies" />
-      <setting name="testName" value="" />
-      <setting name="testKind" value="Class" />
-      <setting name="showProgressMessages" value="true" />
-      <classRegexps />
-      <testRegexps />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="Specs2RunConfiguration" factoryName="Specs2">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <setting name="path" value="" />
-      <setting name="package" value="" />
-      <setting name="vmparams" value="" />
-      <setting name="params" value="" />
-      <setting name="workingDirectory" value="" />
-      <setting name="searchForTest" value="Across module dependencies" />
-      <setting name="testName" value="" />
-      <setting name="testKind" value="Class" />
-      <setting name="showProgressMessages" value="true" />
-      <classRegexps />
-      <testRegexps />
-      <envs />
-      <method />
-    </configuration>
     <configuration default="true" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
       <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
       <module name="" />
       <listeners />
       <method />
     </configuration>
-    <configuration default="true" type="Tox" factoryName="Tox">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <module name="jabaws-dev" />
-      <method />
-    </configuration>
     <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
       <node-interpreter>project</node-interpreter>
       <node-options />
       <envs />
       <method />
     </configuration>
-    <configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
-      <node-interpreter>project</node-interpreter>
-      <node-options />
-      <working-directory />
-      <pass-parent-env>true</pass-parent-env>
-      <envs />
-      <ui />
-      <extra-mocha-options />
-      <test-kind>DIRECTORY</test-kind>
-      <test-directory />
-      <recursive>false</recursive>
-      <method />
-    </configuration>
     <configuration default="true" type="osgi.bnd.run" factoryName="Run Launcher">
       <method />
     </configuration>
     <configuration default="true" type="osgi.bnd.run" factoryName="Test Launcher (JUnit)">
       <method />
     </configuration>
-    <configuration default="true" type="tests" factoryName="Attests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="Doctests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="Nosetests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <option name="PARAMS" value="" />
-      <option name="USE_PARAM" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="Unittests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <option name="PUREUNITTEST" value="true" />
-      <option name="PARAMS" value="" />
-      <option name="USE_PARAM" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="py.test">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="jabaws-dev" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <option name="testToRun" value="" />
-      <option name="keywords" value="" />
-      <option name="params" value="" />
-      <option name="USE_PARAM" value="false" />
-      <option name="USE_KEYWORD" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="uTestRunConfiguration" factoryName="utest">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <setting name="path" value="" />
-      <setting name="package" value="" />
-      <setting name="vmparams" value="" />
-      <setting name="params" value="" />
-      <setting name="workingDirectory" value="" />
-      <setting name="searchForTest" value="Across module dependencies" />
-      <setting name="testName" value="" />
-      <setting name="testKind" value="Class" />
-      <setting name="showProgressMessages" value="true" />
-      <classRegexps />
-      <testRegexps />
-      <envs />
-      <method />
-    </configuration>
     <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
       <Host>localhost</Host>
       <Port>5050</Port>
       <workItem from="1488379246606" duration="1813000" />
       <workItem from="1488465570952" duration="1210000" />
       <workItem from="1488793686482" duration="4738000" />
+      <workItem from="1488993581303" duration="2096000" />
+      <workItem from="1489054273480" duration="14478000" />
+      <workItem from="1489083059587" duration="197000" />
+      <workItem from="1489140248528" duration="5292000" />
+      <workItem from="1489399347089" duration="8523000" />
+      <workItem from="1489487518570" duration="568000" />
+      <workItem from="1489576926071" duration="308000" />
+      <workItem from="1490604978271" duration="567000" />
+      <workItem from="1491214270330" duration="475000" />
+      <workItem from="1491295038045" duration="3347000" />
+      <workItem from="1491304154631" duration="589000" />
+      <workItem from="1491395781492" duration="12000" />
+      <workItem from="1491395838802" duration="22000" />
+      <workItem from="1491396051400" duration="60000" />
+      <workItem from="1491396130484" duration="17581000" />
+      <workItem from="1491419018389" duration="234000" />
+      <workItem from="1491422575753" duration="2626000" />
+      <workItem from="1491468765003" duration="11402000" />
+      <workItem from="1491554212248" duration="1423000" />
+      <workItem from="1491814142568" duration="6739000" />
+      <workItem from="1491900607240" duration="2564000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="37407000" />
+    <option name="totallyTimeSpent" value="129320000" />
   </component>
   <component name="TodoView" selected-index="0">
     <todo-panel id="selected-file">
     </todo-panel>
   </component>
   <component name="ToolWindowManager">
-    <frame x="1440" y="23" width="1920" height="1139" extended-state="6" />
-    <editor active="false" />
+    <frame x="1439" y="23" width="1920" height="1140" extended-state="6" />
+    <editor active="true" />
     <layout>
       <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Nl-Palette" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32908913" sideWeight="0.5042598" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3297456" sideWeight="0.5042598" order="7" side_tool="true" content_ui="tabs" />
       <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Java Enterprise" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
       <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="File Transfer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18021548" sideWeight="0.49520767" order="8" side_tool="false" content_ui="tabs" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32804233" sideWeight="0.4969605" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="File Transfer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.18003914" sideWeight="0.49520767" order="8" side_tool="false" content_ui="tabs" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32804233" sideWeight="0.4969605" order="7" side_tool="false" content_ui="tabs" />
       <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18636848" sideWeight="0.8368368" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.23003195" sideWeight="0.8368368" order="0" side_tool="false" content_ui="combo" />
       <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32876712" sideWeight="0.49574015" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.24544074" sideWeight="0.19223987" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Nl-Palette" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32978722" sideWeight="0.7918871" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3297456" sideWeight="0.5042598" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Dependency Viewer" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="1.0" sideWeight="0.8089802" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32994652" sideWeight="0.6556557" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.24919786" sideWeight="0.6556557" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32685512" sideWeight="0.4939117" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32804233" sideWeight="0.4969605" order="6" side_tool="false" content_ui="tabs" />
       <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.21621622" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Java Enterprise" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.26631394" sideWeight="0.4969605" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="File Transfer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18003914" sideWeight="0.49520767" order="8" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32804233" sideWeight="0.4969605" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="JetGradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.23003195" sideWeight="0.8368368" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32908913" sideWeight="0.49574015" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32876712" sideWeight="0.49574015" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.24544074" sideWeight="0.19223987" order="2" side_tool="true" content_ui="tabs" />
     </layout>
   </component>
   <component name="TypeScriptGeneratedFilesManager">
     </buildFile>
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/conf/GA.properties">
+    <entry file="file://$PROJECT_DIR$/conf/settings/ClustalParameters.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="270">
-          <caret line="18" column="0" lean-forward="true" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
+        <state relative-caret-position="418">
+          <caret line="166" column="24" lean-forward="true" selection-start-line="166" selection-start-column="24" selection-end-line="166" selection-end-column="24" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/conf/Executable.properties.dundee">
+    <entry file="file://$PROJECT_DIR$/datamodel/compbio/metadata/ResultNotAvailableException.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-2997">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        <state relative-caret-position="435">
+          <caret line="29" column="13" lean-forward="false" selection-start-line="29" selection-start-column="13" selection-end-line="29" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/conf/Executable.properties">
+    <entry file="file://$PROJECT_DIR$/binaries/src/mafft/license.extensions" />
+    <entry file="file://$PROJECT_DIR$/binaries/src/mafft/core/Makefile">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-519">
-          <caret line="12" column="60" lean-forward="false" selection-start-line="12" selection-start-column="60" selection-end-line="12" selection-end-column="60" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/WEB-INF/classes/compbio/runner/predictors/Jpred.class" />
-    <entry file="file://$PROJECT_DIR$/runner/compbio/runner/RunnerUtil.java">
+    <entry file="file://$PROJECT_DIR$/datamodel/compbio/metadata/RunnerConfig.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="252">
-          <caret line="46" column="19" lean-forward="false" selection-start-line="46" selection-start-column="19" selection-end-line="46" selection-end-column="19" />
+        <state relative-caret-position="-56">
+          <caret line="44" column="13" lean-forward="false" selection-start-line="44" selection-start-column="13" selection-end-line="44" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/runner/compbio/runner/package-info.java">
+    <entry file="file://$PROJECT_DIR$/webservices/compbio/stat/servlet/DownloadRedirector.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        <state relative-caret-position="135">
+          <caret line="9" column="13" lean-forward="false" selection-start-line="9" selection-start-column="13" selection-end-line="9" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/runner/compbio/runner/OptionCombinator.java">
+    <entry file="file://$PROJECT_DIR$/conf/settings/MuscleLimits.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="330">
-          <caret line="48" column="19" lean-forward="false" selection-start-line="48" selection-start-column="19" selection-end-line="48" selection-end-column="19" />
+        <state relative-caret-position="510">
+          <caret line="34" column="0" lean-forward="false" selection-start-line="34" selection-start-column="0" selection-end-line="34" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/CmdHelper.java">
+    <entry file="file://$PROJECT_DIR$/testsrc/testdata/MuscleLimits.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="465">
-          <caret line="124" column="0" lean-forward="false" selection-start-line="124" selection-start-column="0" selection-end-line="124" selection-end-column="0" />
+        <state relative-caret-position="210">
+          <caret line="14" column="8" lean-forward="true" selection-start-line="14" selection-start-column="8" selection-end-line="14" selection-end-column="8" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/Constraints.java">
+    <entry file="file://$PROJECT_DIR$/conf/settings/ClustalPresets.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="267">
-          <caret line="19" column="6" lean-forward="false" selection-start-line="19" selection-start-column="6" selection-end-line="19" selection-end-column="6" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/IOHelper.java">
+    <entry file="file://$PROJECT_DIR$/conf/settings/AAConPresets.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-918">
-          <caret line="34" column="13" lean-forward="false" selection-start-line="34" selection-start-column="13" selection-end-line="34" selection-end-column="13" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/MetadataHelper.java">
+    <entry file="file://$PROJECT_DIR$/conf/settings/MusclePresets.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-18">
-          <caret line="36" column="13" lean-forward="false" selection-start-line="36" selection-start-column="13" selection-end-line="36" selection-end-column="13" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/data/msa/RegistryWS.java">
+    <entry file="file://$PROJECT_DIR$/datamodel/compbio/data/sequence/RNAStructReader.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="346">
-          <caret line="33" column="17" lean-forward="false" selection-start-line="33" selection-start-column="17" selection-end-line="33" selection-end-column="17" />
+        <state relative-caret-position="240">
+          <caret line="16" column="0" lean-forward="true" selection-start-line="16" selection-start-column="0" selection-end-line="16" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/data/msa/MsaWS.java">
+    <entry file="file://$PROJECT_DIR$/testsrc/compbio/runner/structure/RNAalifoldParametersTester.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="630">
-          <caret line="42" column="3" lean-forward="true" selection-start-line="42" selection-start-column="3" selection-end-line="42" selection-end-column="3" />
+        <state relative-caret-position="3206">
+          <caret line="266" column="51" lean-forward="false" selection-start-line="266" selection-start-column="51" selection-end-line="266" selection-end-column="51" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/client_help.txt">
+    <entry file="file://$PROJECT_DIR$/conf/settings/RNAalifoldParameters.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        <state relative-caret-position="255">
+          <caret line="17" column="14" lean-forward="false" selection-start-line="17" selection-start-column="14" selection-end-line="17" selection-end-column="14" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/package-info.java">
+    <entry file="file://$PROJECT_DIR$/testsrc/compbio/runner/structure/RNAalifoldTester.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        <state relative-caret-position="630">
+          <caret line="42" column="36" lean-forward="true" selection-start-line="42" selection-start-column="36" selection-end-line="42" selection-end-column="36" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/WEB-INF/web.xml">
+    <entry file="file://$PROJECT_DIR$/binaries/src/setexecflag.sh">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="334">
-          <caret line="184" column="23" lean-forward="true" selection-start-line="184" selection-start-column="23" selection-end-line="184" selection-end-column="23" />
+        <state relative-caret-position="345">
+          <caret line="23" column="41" lean-forward="false" selection-start-line="23" selection-start-column="17" selection-end-line="23" selection-end-column="41" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wsbuild.xml">
+    <entry file="file://$PROJECT_DIR$/testsrc/compbio/runner/msa/TcoffeeTester.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="211">
-          <caret line="20" column="24" lean-forward="false" selection-start-line="20" selection-start-column="24" selection-end-line="20" selection-end-column="24" />
-          <folding />
+        <state relative-caret-position="207">
+          <caret line="28" column="31" lean-forward="true" selection-start-line="28" selection-start-column="31" selection-end-line="28" selection-end-column="31" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/wsbuild.log">
+    <entry file="file://$PROJECT_DIR$/conf/settings/TcoffeePresets.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="454">
-          <caret line="45" column="55" lean-forward="true" selection-start-line="45" selection-start-column="55" selection-end-line="45" selection-end-column="55" />
+        <state relative-caret-position="120">
+          <caret line="8" column="43" lean-forward="false" selection-start-line="8" selection-start-column="43" selection-end-line="8" selection-end-column="43" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/binaries/src/jpred/jpred.pl">
+    <entry file="file://$PROJECT_DIR$/conf/settings/TcoffeeParameters.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="60">
-          <caret line="4" column="0" lean-forward="false" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
+        <state relative-caret-position="345">
+          <caret line="23" column="90" lean-forward="true" selection-start-line="23" selection-start-column="90" selection-end-line="23" selection-end-column="90" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/data/msa/Category.java">
+    <entry file="file://$PROJECT_DIR$/testsrc/compbio/runner/msa/TcoffeeParametersTester.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="193">
-          <caret line="83" column="46" lean-forward="false" selection-start-line="83" selection-start-column="41" selection-end-line="83" selection-end-column="46" />
+        <state relative-caret-position="-1815">
+          <caret line="54" column="0" lean-forward="true" selection-start-line="54" selection-start-column="0" selection-end-line="54" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/datamodel/compbio/data/sequence/Program.java">
+    <entry file="file://$PROJECT_DIR$/testsrc/compbio/runner/msa/ClustalOTester.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="537">
-          <caret line="70" column="0" lean-forward="false" selection-start-line="70" selection-start-column="2" selection-end-line="70" selection-end-column="9" />
+        <state relative-caret-position="5145">
+          <caret line="343" column="34" lean-forward="false" selection-start-line="343" selection-start-column="34" selection-end-line="343" selection-end-column="34" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/testsrc/compbio/data/sequence/SequenceUtilTester.java">
+    <entry file="file://$PROJECT_DIR$/testsrc/compbio/metadata/AllTestSuit.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="3630">
-          <caret line="406" column="33" lean-forward="true" selection-start-line="406" selection-start-column="33" selection-end-line="406" selection-end-column="33" />
+        <state relative-caret-position="30">
+          <caret line="2" column="4" lean-forward="true" selection-start-line="2" selection-start-column="4" selection-end-line="2" selection-end-column="4" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/testsrc/compbio/runner/msa/TcoffeeTester.java">
+    <entry file="file://$PROJECT_DIR$/docs/_build/html/index.html" />
+    <entry file="file://$PROJECT_DIR$/docs/conf.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="193">
-          <caret line="59" column="40" lean-forward="false" selection-start-line="59" selection-start-column="35" selection-end-line="59" selection-end-column="40" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/Jws2Client.java">
+    <entry file="file://$PROJECT_DIR$/docs/generate_manual.sh">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="211">
-          <caret line="187" column="21" lean-forward="true" selection-start-line="187" selection-start-column="21" selection-end-line="187" selection-end-column="21" />
-          <folding />
+        <state relative-caret-position="150">
+          <caret line="10" column="0" lean-forward="false" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/ServicesUtil.java">
+    <entry file="file://$PROJECT_DIR$/docs/README.txt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="105">
-          <caret line="7" column="40" lean-forward="false" selection-start-line="7" selection-start-column="35" selection-end-line="7" selection-end-column="40" />
+        <state relative-caret-position="270">
+          <caret line="18" column="0" lean-forward="false" selection-start-line="18" selection-start-column="0" selection-end-line="18" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/conf/settings/JpredLimits.xml">
+    <entry file="file://$PROJECT_DIR$/website/man_pages_old/man_serverwar.jsp">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="30">
-          <caret line="2" column="47" lean-forward="false" selection-start-line="2" selection-start-column="47" selection-end-line="2" selection-end-column="47" />
+          <caret line="105" column="34" lean-forward="false" selection-start-line="105" selection-start-column="34" selection-end-line="105" selection-end-column="34" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/resource/ClustalWS_schema1.xsd">
+    <entry file="file://$PROJECT_DIR$/website/man_pages_old/man_about.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1470">
-          <caret line="157" column="24" lean-forward="false" selection-start-line="157" selection-start-column="24" selection-end-line="157" selection-end-column="24" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/engine/compbio/engine/client/SkeletalExecutable.java">
+    <entry file="file://$PROJECT_DIR$/website/man_pages_old/man_stats.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-3030">
-          <caret line="34" column="22" lean-forward="false" selection-start-line="34" selection-start-column="22" selection-end-line="34" selection-end-column="22" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/testsrc/compbio/runner/predictors/JpredTester.java">
+    <entry file="file://$PROJECT_DIR$/website/index.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="516">
-          <caret line="362" column="0" lean-forward="true" selection-start-line="18" selection-start-column="0" selection-end-line="362" selection-end-column="0" />
+        <state relative-caret-position="3060">
+          <caret line="204" column="42" lean-forward="false" selection-start-line="204" selection-start-column="42" selection-end-line="204" selection-end-column="42" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/GLprobsWS.java">
+    <entry file="file://$PROJECT_DIR$/website/about.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="780">
-          <caret line="52" column="13" lean-forward="false" selection-start-line="52" selection-start-column="13" selection-end-line="52" selection-end-column="13" />
+        <state relative-caret-position="1350">
+          <caret line="91" column="41" lean-forward="false" selection-start-line="90" selection-start-column="27" selection-end-line="91" selection-end-column="41" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/WSUtil.java">
+    <entry file="file://$PROJECT_DIR$/website/getting_started.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="448">
-          <caret line="196" column="5" lean-forward="false" selection-start-line="179" selection-start-column="4" selection-end-line="196" selection-end-column="5" />
+        <state relative-caret-position="3555">
+          <caret line="240" column="42" lean-forward="false" selection-start-line="240" selection-start-column="42" selection-end-line="240" selection-end-column="42" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/runner/compbio/runner/predictors/Jpred.java">
+    <entry file="file://$PROJECT_DIR$/binaries/src/compilebin.sh">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="2280">
-          <caret line="152" column="0" lean-forward="true" selection-start-line="18" selection-start-column="0" selection-end-line="152" selection-end-column="0" />
+        <state relative-caret-position="-252">
+          <caret line="47" column="0" lean-forward="true" selection-start-line="47" selection-start-column="0" selection-end-line="47" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/datamodel/compbio/data/sequence/JpredAlignment.java">
+    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/AAConWS.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="668">
-          <caret line="229" column="0" lean-forward="true" selection-start-line="19" selection-start-column="0" selection-end-line="229" selection-end-column="0" />
+        <state relative-caret-position="165">
+          <caret line="11" column="78" lean-forward="false" selection-start-line="11" selection-start-column="78" selection-end-line="11" selection-end-column="78" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/JpredWS.java">
+    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/resource/AAConWS.wsdl">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="45">
-          <caret line="3" column="3" lean-forward="true" selection-start-line="3" selection-start-column="3" selection-end-line="3" selection-end-column="3" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/resource/JpredWS.wsdl">
+    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/resource/MsaWS.wsdl">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="465">
-          <caret line="31" column="15" lean-forward="true" selection-start-line="31" selection-start-column="15" selection-end-line="31" selection-end-column="15" />
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/binaries/src/setexecflag.sh">
+    <entry file="file://$PROJECT_DIR$/wsbuild.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="510">
-          <caret line="34" column="35" lean-forward="false" selection-start-line="34" selection-start-column="35" selection-end-line="34" selection-end-column="35" />
+        <state relative-caret-position="30">
+          <caret line="2" column="53" lean-forward="false" selection-start-line="2" selection-start-column="53" selection-end-line="2" selection-end-column="53" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/binaries/src/compilebin.sh">
+    <entry file="file://$PROJECT_DIR$/build.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1500">
-          <caret line="100" column="5" lean-forward="false" selection-start-line="100" selection-start-column="5" selection-end-line="100" selection-end-column="5" />
-          <folding />
+        <state relative-caret-position="3">
+          <caret line="217" column="30" lean-forward="false" selection-start-line="217" selection-start-column="30" selection-end-line="217" selection-end-column="30" />
+          <folding>
+            <marker date="1491927263000" expanded="true" signature="20494:20519" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="20675:20924" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="20748:20760" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="20861:20913" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="21433:21839" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="21537:21828" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="22069:22133" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="22106:22121" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="22191:22702" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="22278:22691" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="22776:23327" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="22909:23316" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="23379:23939" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="23520:23928" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="24004:24543" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="24124:24532" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="24603:25137" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="24718:25126" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="25197:25731" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="25312:25720" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="25795:26334" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="25915:26323" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="26424:26942" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="26581:26931" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="27019:27537" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="27176:27526" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="27603:28148" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="27722:28137" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="28203:28721" ph="..." />
+            <marker date="1491927263000" expanded="true" signature="28302:28710" ph="..." />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/Services.java">
+    <entry file="file://$PROJECT_DIR$/website/statpages/StatisticsTable.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
+        <state relative-caret-position="-111">
           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/website/tests/Ant suite/testng.xml.html">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="120">
-          <caret line="0" column="1728" lean-forward="false" selection-start-line="0" selection-start-column="1728" selection-end-line="0" selection-end-column="1728" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/website/tests/Ant suite/methods-not-run.html">
+    <entry file="file://$PROJECT_DIR$/website/statpages/ServicesStatus.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="30">
-          <caret line="2" column="26" lean-forward="false" selection-start-line="2" selection-start-column="26" selection-end-line="2" selection-end-column="26" />
+        <state relative-caret-position="474">
+          <caret line="189" column="36" lean-forward="false" selection-start-line="189" selection-start-column="36" selection-end-line="189" selection-end-column="36" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/server/RegistryWS.java">
+    <entry file="file://$PROJECT_DIR$/website/statpages/Statistics.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="705">
-          <caret line="47" column="13" lean-forward="false" selection-start-line="47" selection-start-column="13" selection-end-line="47" selection-end-column="13" />
+        <state relative-caret-position="-336">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/stat/servlet/HttpCodeResponseServiceStatus.java">
+    <entry file="file://$PROJECT_DIR$/website/statpages/MonthlySummary.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1035">
-          <caret line="69" column="28" lean-forward="false" selection-start-line="69" selection-start-column="28" selection-end-line="69" selection-end-column="28" />
+        <state relative-caret-position="650">
+          <caret line="99" column="143" lean-forward="false" selection-start-line="99" selection-start-column="143" selection-end-line="99" selection-end-column="143" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/webservices/compbio/ws/client/WSTester.java">
+    <entry file="file://$PROJECT_DIR$/website/statpages/Joblist.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="6720">
-          <caret line="448" column="60" lean-forward="false" selection-start-line="448" selection-start-column="60" selection-end-line="448" selection-end-column="60" />
+        <state relative-caret-position="-846">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/testsrc/compbio/ws/client/WSTesterTester.java">
+    <entry file="file://$PROJECT_DIR$/website/template_footer.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="510">
-          <caret line="34" column="32" lean-forward="false" selection-start-line="34" selection-start-column="32" selection-end-line="34" selection-end-column="32" />
+        <state relative-caret-position="264">
+          <caret line="68" column="28" lean-forward="false" selection-start-line="68" selection-start-column="28" selection-end-line="68" selection-end-column="28" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/datamodel/compbio/data/sequence/Alignment.java">
+    <entry file="file://$PROJECT_DIR$/website/template_header.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="645">
-          <caret line="43" column="20" lean-forward="false" selection-start-line="43" selection-start-column="15" selection-end-line="43" selection-end-column="20" />
-          <folding />
+        <state relative-caret-position="278">
+          <caret line="121" column="28" lean-forward="false" selection-start-line="121" selection-start-column="28" selection-end-line="121" selection-end-column="28" />
+          <folding>
+            <marker date="1491927253000" expanded="true" signature="6644:6648" ph="..." />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/datamodel/compbio/data/sequence/SequenceUtil.java">
+    <entry file="file://$PROJECT_DIR$/website/download.jsp">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="912">
-          <caret line="504" column="56" lean-forward="false" selection-start-line="504" selection-start-column="56" selection-end-line="504" selection-end-column="56" />
-          <folding />
+        <state relative-caret-position="276">
+          <caret line="174" column="167" lean-forward="false" selection-start-line="174" selection-start-column="167" selection-end-line="174" selection-end-column="167" />
+          <folding>
+            <marker date="1491927221000" expanded="true" signature="12213:12354" ph="..." />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/website/man_docs.jsp">
+    <entry file="file://$PROJECT_DIR$/conf/Engine.cluster.properties">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="395">
-          <caret line="136" column="37" lean-forward="true" selection-start-line="136" selection-start-column="37" selection-end-line="136" selection-end-column="37" />
+        <state relative-caret-position="255">
+          <caret line="17" column="24" lean-forward="true" selection-start-line="17" selection-start-column="24" selection-end-line="17" selection-end-column="24" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/website/download.jsp">
+    <entry file="file://$PROJECT_DIR$/conf/Executable.properties">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-2155">
-          <caret line="40" column="32" lean-forward="true" selection-start-line="40" selection-start-column="32" selection-end-line="40" selection-end-column="32" />
+        <state relative-caret-position="-1988">
+          <caret line="64" column="78" lean-forward="false" selection-start-line="64" selection-start-column="29" selection-end-line="64" selection-end-column="78" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/website/static/css/main.css">
+    <entry file="file://$PROJECT_DIR$/conf/GA.properties">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-90">
+        <state relative-caret-position="0">
           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/build.xml">
+    <entry file="file://$PROJECT_DIR$/conf/Engine.local.properties">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="328">
-          <caret line="564" column="68" lean-forward="true" selection-start-line="564" selection-start-column="68" selection-end-line="564" selection-end-column="68" />
+        <state relative-caret-position="345">
+          <caret line="23" column="49" lean-forward="true" selection-start-line="23" selection-start-column="49" selection-end-line="23" selection-end-column="49" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/.gitignore">
+    <entry file="file://$PROJECT_DIR$/conf/Executable.properties.dundee">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
+        <state relative-caret-position="-2948">
           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
           <folding />
         </state>
diff --git a/ExecutionStatistic/log/log11.dat b/ExecutionStatistic/log/log11.dat
new file mode 100644 (file)
index 0000000..ede267a
Binary files /dev/null and b/ExecutionStatistic/log/log11.dat differ
diff --git a/WEB-INF/classes/lib/testng-5.10-jdk15.jar b/WEB-INF/classes/lib/testng-5.10-jdk15.jar
new file mode 100644 (file)
index 0000000..67463a7
Binary files /dev/null and b/WEB-INF/classes/lib/testng-5.10-jdk15.jar differ
diff --git a/WEB-INF/classes/log4j.properties.dundee b/WEB-INF/classes/log4j.properties.dundee
new file mode 100644 (file)
index 0000000..eee5a76
--- /dev/null
@@ -0,0 +1,51 @@
+
+# change this 
+logDir =/homes/www-jws2/logs
+
+log4j.rootLogger=ERROR, stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%m%n
+
+log4j.logger.compbio=TRACE, ACTIVITY
+log4j.appender.ACTIVITY=org.apache.log4j.RollingFileAppender
+log4j.appender.ACTIVITY.File=${logDir}/activity.log
+log4j.appender.ACTIVITY.MaxFileSize=10MB
+log4j.appender.ACTIVITY.MaxBackupIndex=10000
+log4j.appender.ACTIVITY.layout=org.apache.log4j.PatternLayout
+log4j.appender.ACTIVITY.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p %3x - %m%n
+
+log4j.logger.ClustalWS-stats=INFO, STAT
+log4j.logger.MuscleWS-stats=INFO, STAT
+log4j.logger.TcoffeeWS-stats=INFO, STAT
+log4j.logger.MafftWS-stats=INFO, STAT
+log4j.logger.ProbconsWS-stats=INFO, STAT
+log4j.appender.STAT=org.apache.log4j.RollingFileAppender
+log4j.appender.STAT.File=${logDir}/wsaccess.log
+log4j.appender.STAT.MaxFileSize=10MB
+log4j.appender.STAT.MaxBackupIndex=10000
+log4j.appender.STAT.layout=org.apache.log4j.PatternLayout
+log4j.appender.STAT.layout.ConversionPattern=%t %d %m%n
+
+
+# Uncomment for separate local engine execution log
+#log4j.logger.compbio.engine.local.LocalExecutorService=INFO, C
+#log4j.appender.C=org.apache.log4j.FileAppender
+#log4j.appender.C.File=LocalExecutorService.log
+#log4j.appender.C.layout=org.apache.log4j.PatternLayout
+#log4j.appender.C.layout.ConversionPattern=%m%n
+
+#Parameter combinator logger (testing only)
+#log4j.logger.RunnerLogger=ERROR, RUNNER
+#log4j.appender.RUNNER=org.apache.log4j.FileAppender
+#log4j.appender.RUNNER.File=RunnerParam.log 
+#log4j.appender.RUNNER.layout=org.apache.log4j.PatternLayout
+#log4j.appender.RUNNER.layout.ConversionPattern=%r [%t] %p %c %x - %m%n
+
+
+#Not used - collection of patterns
+# %d{ABSOLUTE} %5p %c{1}:%L -
+#log4j.appender.C.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+# %d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - 
+#log4j.appender.ClustalWS-stats.layout.ConversionPattern=%p %d %t %C{4} %m%n
diff --git a/WEB-INF/classes/log4j.properties.full b/WEB-INF/classes/log4j.properties.full
new file mode 100644 (file)
index 0000000..a906597
--- /dev/null
@@ -0,0 +1,62 @@
+
+## CHANGE THIS (The root directory where to store all the log files)  
+#logDir = .
+
+## Uncomment to enable JWS2 activity logging to standard out (to the console if available)
+## for possible log levels please refer to Log4j documentation http://logging.apache.org/log4j/1.2/manual.html 
+## Valid log levels are:
+## TRACE - log everything from below including very detailed messages (useful for debugging only)
+## DEBUG - log everything from below including some minor events (useful for debugging only)
+## INFO - log everything from below including some information messages
+## WARN - log error and warnings
+## ERROR - log errors and fatal events only 
+## FATAL - log fatal events only
+
+#log4j.rootLogger=ERROR, stdout
+#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+#log4j.appender.stdout.Target=System.out
+#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+#log4j.appender.stdout.layout.ConversionPattern=%m%n
+
+## Uncomment to enable JWS2 activity logging to the file
+#log4j.logger.compbio=ERROR, ACTIVITY
+#log4j.appender.ACTIVITY=org.apache.log4j.RollingFileAppender
+#log4j.appender.ACTIVITY.File=${logDir}/activity.log
+#log4j.appender.ACTIVITY.MaxFileSize=10MB
+#log4j.appender.ACTIVITY.MaxBackupIndex=10000
+#log4j.appender.ACTIVITY.layout=org.apache.log4j.PatternLayout
+#log4j.appender.ACTIVITY.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p %3x - %m%n
+
+## Uncomment for web access logging. Please do not change the log level!
+#log4j.logger.ClustalWS-stats=INFO, STAT
+#log4j.logger.MuscleWS-stats=INFO, STAT
+#log4j.logger.TcoffeeWS-stats=INFO, STAT
+#log4j.logger.MafftWS-stats=INFO, STAT
+#log4j.logger.ProbconsWS-stats=INFO, STAT
+#log4j.appender.STAT=org.apache.log4j.RollingFileAppender
+#log4j.appender.STAT.File=${logDir}/wsaccess.log
+#log4j.appender.STAT.MaxFileSize=10MB
+#log4j.appender.STAT.MaxBackupIndex=10000
+#log4j.appender.STAT.layout=org.apache.log4j.PatternLayout
+#log4j.appender.STAT.layout.ConversionPattern=%t %d %m%n
+
+## Uncomment for separate local engine execution log (debugging only)
+#log4j.logger.compbio.engine.local.LocalExecutorService=INFO, C
+#log4j.appender.C=org.apache.log4j.FileAppender
+#log4j.appender.C.File=LocalExecutorService.log
+#log4j.appender.C.layout=org.apache.log4j.PatternLayout
+#log4j.appender.C.layout.ConversionPattern=%m%n
+
+## Parameter combinator logger (testing only)
+#log4j.logger.RunnerLogger=ERROR, RUNNER
+#log4j.appender.RUNNER=org.apache.log4j.FileAppender
+#log4j.appender.RUNNER.File=RunnerParam.log 
+#log4j.appender.RUNNER.layout=org.apache.log4j.PatternLayout
+#log4j.appender.RUNNER.layout.ConversionPattern=%r [%t] %p %c %x - %m%n
+
+
+## NOT IN USE - collection of patterns choose the one that suits you
+# %d{ABSOLUTE} %5p %c{1}:%L -
+#log4j.appender.C.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+# %d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - 
+#log4j.appender.ClustalWS-stats.layout.ConversionPattern=%p %d %t %C{4} %m%n
diff --git a/WEB-INF/classes/log4j.properties.statdb b/WEB-INF/classes/log4j.properties.statdb
new file mode 100644 (file)
index 0000000..4c983ed
--- /dev/null
@@ -0,0 +1,27 @@
+
+## CHANGE THIS (The root directory where to store all the log files)  
+#logDir = .
+
+## Uncomment to enable JWS2 activity logging to standard out (to the console if available)
+## for possible log levels please refer to Log4j documentation http://logging.apache.org/log4j/1.2/manual.html 
+## Valid log levels are:
+## TRACE - log everything from below including very detailed messages (useful for debugging only)
+## DEBUG - log everything from below including some minor events (useful for debugging only)
+## INFO - log everything from below including some information messages
+## WARN - log error and warnings
+## ERROR - log errors and fatal events only 
+## FATAL - log fatal events only
+
+##################################################################################################################################
+log4j.rootLogger=ERROR, R
+log4j.appender.R=org.apache.log4j.FileAppender
+log4j.appender.R.File=logs/StatDBcleaningErrorFile.log
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=%m%n %d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - 
+
+# %d{ABSOLUTE} %5p %c{1}:%L -
+log4j.logger.compbio=WARN, B
+log4j.appender.B=org.apache.log4j.FileAppender
+log4j.appender.B.File=logs/StatDBcleaningWarningFile.log
+log4j.appender.B.layout=org.apache.log4j.PatternLayout
+log4j.appender.B.layout.ConversionPattern=%m%n %d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - 
diff --git a/engine/compbio/engine/client/Util.java b/engine/compbio/engine/client/Util.java
new file mode 100644 (file)
index 0000000..6fcdff7
--- /dev/null
@@ -0,0 +1,417 @@
+/* Copyright (c) 2009 Peter Troshin
+ *  
+ *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0     
+ * 
+ *  This library is free software; you can redistribute it and/or modify it under the terms of the
+ *  Apache License version 2 as published by the Apache Software Foundation
+ * 
+ *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache 
+ *  License for more details.
+ * 
+ *  A copy of the license is in apache_license.txt. It is also available here:
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
+ * 
+ * Any republication or derived work distributed in source code form
+ * must include this copyright and license notice.
+ */
+
+package compbio.engine.client;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.security.InvalidParameterException;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import compbio.engine.client.Executable.ExecProvider;
+import compbio.engine.conf.DirectoryManager;
+import compbio.engine.conf.PropertyHelperManager;
+import compbio.metadata.JobStatus;
+import compbio.metadata.LimitsManager;
+import compbio.metadata.ResultNotAvailableException;
+import compbio.util.FileUtil;
+import compbio.util.PropertyHelper;
+import compbio.util.SysPrefs;
+
+public final class Util {
+
+       private static final PropertyHelper ph = PropertyHelperManager
+                       .getPropertyHelper();
+
+       private static final Logger log = Logger.getLogger(Util.class);
+
+       public static boolean isValidJobId(final String key) {
+               if (compbio.util.Util.isEmpty(key)) {
+                       return false;
+               }
+               int delIdx = key.indexOf(DirectoryManager.DELIM);
+               if (delIdx < 0) {
+                       return false;
+               }
+               String id = key.substring(delIdx + DirectoryManager.DELIM.length());
+               try {
+                       Long.parseLong(id);
+               } catch (NumberFormatException e) {
+                       log.debug("Invalid key! " + e.getLocalizedMessage());
+                       return false;
+               }
+               return true;
+       }
+
+       public static void writeStatFile(String workDirectory,
+                       String fileAndEventName) {
+               // never override old stat files!
+               // Work directory could be null for cancelled or incomplete jobs, just
+               // ignore
+               if (!compbio.util.Util.isEmpty(workDirectory)) {
+                       writeFile(workDirectory, fileAndEventName,
+                                       new Long(System.currentTimeMillis()).toString(), false);
+               }
+       }
+
+       public static void writeFile(String workDirectory, String fileAndEventName,
+                       String content, boolean override) {
+               File file = null;
+               if (compbio.util.Util.isEmpty(workDirectory)) {
+                       log.debug("Calling compbio.engine.Util.writeFile() with not work directory."
+                                       + " Skipping writing statistics!");
+                       return;
+               }
+               assert !compbio.util.Util.isEmpty(content) : "Content expected!";
+               FileWriter writer = null;
+               try {
+                       file = new File(workDirectory, fileAndEventName);
+                       // Do not override existing files unless asked to do so !
+                       if (file.exists() && !override) {
+                               return;
+                       }
+                       writer = new FileWriter(file);
+                       writer.write(content);
+                       writer.close();
+                       log.debug("File " + fileAndEventName + " with content: " + content
+                                       + " has been recorder successfully! ");
+               } catch (IOException e) {
+                       log.error("Could not record the " + fileAndEventName + " file in "
+                                       + workDirectory + " for local execution! Ignoring... "
+                                       + e.getMessage());
+               } finally {
+                       FileUtil.closeSilently(log, writer);
+               }
+       }
+
+       public static final boolean writeMarker(String workDirectory,
+                       JobStatus fileType) {
+               if (fileType == null) {
+                       throw new NullPointerException("MarkerType must be provided!");
+               }
+               if (fileType == fileType.FINISHED || fileType == fileType.STARTED) {
+                       throw new IllegalArgumentException(
+                                       "Please use Util.writeStatFile(workDirectory, fileAndEventName) to record FINISHED and STARTED statuses!");
+               }
+               if (!PathValidator.isValidDirectory(workDirectory)) {
+                       // This is OK as some task could be cancelled even before they
+                       // started
+                       log.warn("Attempting to write " + fileType
+                                       + " marker in the work directory " + workDirectory
+                                       + " is not provided or does not exist!");
+                       return false;
+               }
+               try {
+                       File sfile = new File(workDirectory, fileType.toString());
+                       if (!sfile.exists()) {
+                               return sfile.createNewFile();
+                       }
+               } catch (IOException e) {
+                       log.error(
+                                       "Could not record stat marker file " + fileType
+                                                       + " into the directory " + workDirectory + " ! "
+                                                       + e.getMessage(), e.getCause());
+               }
+               return false;
+       }
+
+       public static boolean isMarked(String workDirectory, JobStatus marker) {
+               if (!PathValidator.isValidDirectory(workDirectory)) {
+                       throw new NullPointerException("Work directory " + workDirectory
+                                       + " is not provided or does not exist!");
+               }
+               return new File(workDirectory, marker.toString()).exists();
+       }
+
+       public static Map<String, String> mergeEnvVariables(
+                       final Map<String, String> sysEnvTobeModified,
+                       final Map<String, String> variables) {
+               if (variables.containsKey(EnvVariableProcessor.PATH)) {
+                       String propPath = variables.get(EnvVariableProcessor.PATH);
+                       String sysPATH = sysEnvTobeModified.get(EnvVariableProcessor.PATH);
+                       String syspath = sysEnvTobeModified.get(EnvVariableProcessor.PATH
+                                       .toLowerCase());
+                       // This version appears surprisingly often on windows machines
+                       boolean added = false;
+                       String sysPath = sysEnvTobeModified.get("Path");
+                       if (sysPATH != null) {
+                               sysEnvTobeModified.put(EnvVariableProcessor.PATH, sysPATH
+                                               + File.pathSeparator + propPath);
+                               added = true;
+                       }
+                       if (syspath != null) {
+                               sysEnvTobeModified.put(EnvVariableProcessor.PATH.toLowerCase(),
+                                               syspath + File.pathSeparator + propPath);
+                               added = true;
+                       }
+                       if (sysPath != null) {
+                               sysEnvTobeModified.put("Path", sysPath + File.pathSeparator
+                                               + propPath);
+                               added = true;
+                       }
+                       // If not path variable is found, then add it
+                       if (!added) {
+                               sysEnvTobeModified.put(EnvVariableProcessor.PATH, propPath);
+                       }
+                       variables.remove(EnvVariableProcessor.PATH);
+               }
+               sysEnvTobeModified.putAll(variables);
+               return sysEnvTobeModified;
+       }
+
+       public static String convertToAbsolute(String relativePath) {
+               // If specified path is relative, than make it absolute
+               String absolute = relativePath;
+               if (!PathValidator.isAbsolutePath(relativePath)) {
+                       absolute = PropertyHelperManager.getLocalPath() + relativePath;
+                       Util.log.trace("Changing local path in enviromental variable to absolute: FROM "
+                                       + relativePath + " TO " + absolute);
+               }
+               return absolute;
+       }
+
+       public static String getExecProperty(String propertySpec, Executable<?> exec) {
+               assert !compbio.util.Util.isEmpty(propertySpec);
+               assert exec != null;
+               return Util.getExecProperty(propertySpec, exec.getClass());
+       }
+
+       public static String getExecProperty(String propertySpec, Class<?> clazz) {
+               assert !compbio.util.Util.isEmpty(propertySpec);
+               assert clazz != null;
+               String property = clazz.getSimpleName().toLowerCase() + "."
+                               + propertySpec.toLowerCase();
+               log.trace("Processing property: " + property);
+               return ph.getProperty(property);
+       }
+
+       public static String getFullPath(String workDirectory, String fileName) {
+               assert !compbio.util.Util.isEmpty(fileName) : "Filename must be provided! ";
+               assert !compbio.util.Util.isEmpty(workDirectory) : "Workdirectory must be provided! ";
+               return workDirectory + File.separator + fileName;
+       }
+
+       public static String getCommand(ExecProvider provider, Class<?> clazz) {
+               if (provider == ExecProvider.Any) {
+                       throw new IllegalArgumentException(
+                                       "A particular execution environment must be chosen");
+               }
+               String execCommandName = clazz.getSimpleName().toLowerCase();
+               String bin = "";
+               if (provider == ExecProvider.Local) {
+                       if (SysPrefs.isWindows) {
+                               bin = ph.getProperty("local." + execCommandName
+                                               + ".bin.windows");
+                       } else {
+                               bin = ph.getProperty("local." + execCommandName + ".bin");
+                       }
+                       // For executable Jar files the location of Java executable is not
+                       // required for local execution. If it is not provided, JABAWS will
+                       // attempt to use Java from JAVA_HOME env variable
+                       if (isJavaLibrary(clazz)) {
+                               if (compbio.util.Util.isEmpty(bin)) {
+                                       bin = getJava();
+                               }
+                       }
+                       // If path to executable defined in the properties is not absolute,
+                       // then make it so
+                       // as setting working directory of ProcessBuilder will make it
+                       // impossible
+                       // to find an executable otherwise
+                       if (!compbio.util.Util.isEmpty(bin)
+                                       && !PathValidator.isAbsolutePath(bin)) {
+                               bin = bin.trim();
+                               if (bin.equalsIgnoreCase("java")
+                                               || bin.equalsIgnoreCase("java.exe")) {
+                                       // do not make path absolute to the java executable if
+                                       // relative path is provided. Java executable is not a part
+                                       // of JABAWS distribution!
+                               } else {
+                                       bin = PropertyHelperManager.getLocalPath() + bin;
+                               }
+                       }
+               } else {
+                       bin = ph.getProperty("cluster." + execCommandName + ".bin");
+               }
+               // Could have done: Set executable flag if not set
+               // but - do not because in some cases more than one file must be made
+               // executable!
+               /*
+                * if (!compbio.util.Util.isEmpty(bin)) { File command = new File(bin);
+                * if (!command.canExecute()) { log.debug(
+                * "The command line binary is not executable! (just unpacked from war file? )"
+                * ); log.debug("Attempting to set executable flag for command: " +
+                * bin); command.setExecutable(true, false); } }
+                */
+               log.debug("Using executable: " + bin);
+               return bin; // File.separator
+       }
+       /**
+        * Returns true of executableName.jar.file property has some value in the
+        * Executable.properties file, false otherwise.
+        * 
+        * @param clazz
+        * @return
+        */
+       public static boolean isJavaLibrary(Class<?> clazz) {
+               String execCommandName = clazz.getSimpleName().toLowerCase();
+               String java_lib = ph.getProperty(execCommandName + ".jar.file");
+               return !compbio.util.Util.isEmpty(java_lib);
+       }
+
+       /**
+        * Returns the absolute path to the Java executable from JAVA_HOME
+        * 
+        * @return returns the absolute path to the Java executable from JAVA_HOME
+        */
+       public static String getJava() {
+               String javahome = System.getProperty("java.home");
+               if (compbio.util.Util.isEmpty(javahome)) {
+                       javahome = System.getenv("JAVA_HOME");
+               }
+               if (compbio.util.Util.isEmpty(javahome)) {
+                       log.warn("Cannot find Java in java.home system property "
+                                       + "or JAVA_HOME environment variable! ");
+                       return null;
+               }
+               File jh = new File(javahome);
+               if (jh.exists() && jh.isDirectory()) {
+                       String java = javahome + File.separator + "bin" + File.separator
+                                       + "java";
+                       if (SysPrefs.isWindows) {
+                               java += ".exe";
+                       }
+                       File jexe = new File(java);
+                       if (jexe.exists() && jexe.isFile() && jexe.canExecute()) {
+                               log.info("Using Java from: " + jexe.getAbsolutePath());
+                               return jexe.getAbsolutePath();
+                       } else {
+                               log.warn("Cannot find java executable in the JAVA_HOME!");
+                       }
+               } else {
+                       log.warn("JAVA_HOME does not seems to point to a valid directory! Value: "
+                                       + javahome);
+               }
+               return null;
+       }
+
+       public static ExecProvider getSupportedRuntimes(Class<?> clazz) {
+               boolean localRuntimeSupport = false;
+               boolean clusterRuntimeSupport = false;
+               String executableName = clazz.getSimpleName().toLowerCase();
+               String localRuntime1 = ph.getProperty("local." + executableName
+                               + ".bin.windows");
+               String localRuntime2 = ph.getProperty("local." + executableName
+                               + ".bin");
+               if (!compbio.util.Util.isEmpty(localRuntime1)
+                               || !compbio.util.Util.isEmpty(localRuntime2)) {
+                       localRuntimeSupport = true;
+               } else {
+                       localRuntimeSupport = isJavaLibrary(clazz) && getJava() != null;
+               }
+
+               String clusterRuntime = ph.getProperty("cluster." + executableName
+                               + ".bin");
+               if (!compbio.util.Util.isEmpty(clusterRuntime)) {
+                       clusterRuntimeSupport = true;
+               }
+               if (localRuntimeSupport && clusterRuntimeSupport) {
+                       return ExecProvider.Any;
+               } else if (localRuntimeSupport) {
+                       return ExecProvider.Local;
+               } else if (clusterRuntimeSupport) {
+                       return ExecProvider.Cluster;
+               }
+               // Means executable cannot be executed -> is improperly configured
+               // should be ignored
+               throw new InvalidParameterException(
+                               "Executable is not provided for any runtime environments");
+       }
+       public static ConfiguredExecutable<?> loadExecutable(String taskId)
+                       throws ResultNotAvailableException {
+               String workDir = compbio.engine.Configurator.getWorkDirectory(taskId);
+               // The results for this job has been collected once, or the JVM may
+               // have been restarted,
+               // so that the job is not in the job list
+               // ->load a ConfiguredExercutable from saved run and return it
+               FileInputStream fileInStream = null;
+               ConfiguredExecutable<?> exec = null;
+               try {
+                       fileInStream = new FileInputStream(workDir + File.separator
+                                       + RunConfiguration.rconfigFile);
+                       RunConfiguration rconf = RunConfiguration.load(fileInStream);
+                       exec = ConfExecutable.newConfExecutable(rconf);
+                       fileInStream.close();
+               } catch (FileNotFoundException e) {
+                       log.error(
+                                       "Could not find run configuration to load!"
+                                                       + e.getLocalizedMessage(), e.getCause());
+                       throw new ResultNotAvailableException(
+                                       "Could not find run configuration to load!"
+                                                       + e.getMessage(), e.getCause());
+               } catch (IOException e) {
+                       log.error(
+                                       "IO Exception while reading run configuration file!"
+                                                       + e.getLocalizedMessage(), e.getCause());
+                       throw new ResultNotAvailableException(
+                                       "Could not load run configuration!" + e.getMessage(),
+                                       e.getCause());
+               } finally {
+                       FileUtil.closeSilently(log, fileInStream);
+               }
+               return exec;
+       }
+
+       /**
+        * For now just assume that all parameters which came in needs setting it
+        * will be a client responsibility to prepare RunnerConfig object then
+        * 
+        * @param rconfig
+        * @return
+        * 
+        *         public static List<String> toOptionString(RunnerConfig<?>
+        *         rconfig) { String option = ""; List<String> options = new
+        *         ArrayList<String>(); for (Parameter<?> par :
+        *         rconfig.getParameters()) { if (par.getPossibleValues().isEmpty())
+        *         { option = par.getOptionName(); } else { option =
+        *         par.getOptionName() + "=" + par.getPossibleValues().get(0); } //
+        *         separate options options.add(option); } return options; }
+        */
+
+       public static <T> LimitsManager<T> getLimits(Class<T> clazz) {
+               LimitsManager<T> limits = null;
+               try {
+                       limits = ConfExecutable.getRunnerLimits(clazz);
+               } catch (FileNotFoundException e) {
+                       Util.log.warn("No limits are found for " + clazz + " executable! "
+                                       + e.getLocalizedMessage(), e.getCause());
+                       // its ok, limit may not be initialized
+               } catch (IOException e) {
+                       Util.log.warn("IO exception while attempting to read limits for "
+                                       + clazz + " executable! " + e.getLocalizedMessage(),
+                                       e.getCause());
+               }
+               return limits;
+       }
+
+}
diff --git a/engine/compbio/engine/cluster/drmaa/AsyncJobRunner.java b/engine/compbio/engine/cluster/drmaa/AsyncJobRunner.java
new file mode 100644 (file)
index 0000000..b9785ef
--- /dev/null
@@ -0,0 +1,100 @@
+/* Copyright (c) 2009 Peter Troshin
+ *  
+ *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0     
+ * 
+ *  This library is free software; you can redistribute it and/or modify it under the terms of the
+ *  Apache License version 2 as published by the Apache Software Foundation
+ * 
+ *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache 
+ *  License for more details.
+ * 
+ *  A copy of the license is in apache_license.txt. It is also available here:
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
+ * 
+ * Any republication or derived work distributed in source code form
+ * must include this copyright and license notice.
+ */
+
+package compbio.engine.cluster.drmaa;
+
+import org.apache.log4j.Logger;
+import org.ggf.drmaa.DrmaaException;
+
+import compbio.engine.AsyncExecutor;
+import compbio.engine.Cleaner;
+import compbio.engine.Configurator;
+import compbio.engine.client.ConfiguredExecutable;
+import compbio.engine.client.Util;
+import compbio.metadata.JobSubmissionException;
+import compbio.metadata.ResultNotAvailableException;
+
+/**
+ * Single cluster job runner class
+ * 
+ * @author pvtroshin
+ * @version 1.0 August 2009
+ * 
+ *          TODO after call to submitJob() no setters really work as the job
+ *          template gets deleted, this needs to be taken into account in this
+ *          class design!
+ */
+public class AsyncJobRunner implements AsyncExecutor {
+
+       private static Logger log = Logger.getLogger(AsyncJobRunner.class);
+
+       @Override
+       public String submitJob(ConfiguredExecutable<?> executable)
+                       throws JobSubmissionException {
+               JobRunner jr = new JobRunner(executable);
+               jr.submitJob(); // ignore cluster job id as it could be retrieved from
+               // fs
+               return executable.getTaskId();
+       }
+
+       @Override
+       public boolean cancelJob(String jobId) {
+               ClusterSession clustSession = ClusterSession.getInstance();
+               return compbio.engine.cluster.drmaa.ClusterUtil.cancelJob(jobId,
+                               clustSession);
+       }
+
+       /**
+        * This will never return clust.engine.JobStatus.CANCELLED as for sun grid
+        * engine cancelled job is the same as failed. Cancelled jobs needs to be
+        * tracked manually!
+        */
+       @Override
+       public compbio.metadata.JobStatus getJobStatus(String jobId) {
+               return JobRunner.getJobStatus(jobId);
+       }
+
+       @Override
+       public boolean cleanup(String jobId) {
+               String workDir = Configurator.getWorkDirectory(jobId);
+               return Cleaner.deleteAllFiles(workDir);
+       }
+
+       @Override
+       public ConfiguredExecutable<?> getResults(String jobId)
+                       throws ResultNotAvailableException {
+
+               assert Util.isValidJobId(jobId);
+
+               ClusterSession csession = ClusterSession.getInstance();
+               ConfiguredExecutable<?> exec;
+               try {
+                       exec = csession.getResults(jobId);
+               } catch (DrmaaException e) {
+                       log.error(e.getLocalizedMessage(), e.getCause());
+                       throw new ResultNotAvailableException(e);
+               }
+               return exec;
+       }
+
+       @Override
+       public String getWorkDirectory(String jobId) {
+               return Configurator.getWorkDirectory(jobId);
+       }
+
+} // class end
diff --git a/engine/compbio/engine/cluster/drmaa/ClusterUtil.java b/engine/compbio/engine/cluster/drmaa/ClusterUtil.java
new file mode 100644 (file)
index 0000000..9ce527c
--- /dev/null
@@ -0,0 +1,95 @@
+/* Copyright (c) 2009 Peter Troshin
+ *  
+ *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0     
+ * 
+ *  This library is free software; you can redistribute it and/or modify it under the terms of the
+ *  Apache License version 2 as published by the Apache Software Foundation
+ * 
+ *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache 
+ *  License for more details.
+ * 
+ *  A copy of the license is in apache_license.txt. It is also available here:
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
+ * 
+ * Any republication or derived work distributed in source code form
+ * must include this copyright and license notice.
+ */
+package compbio.engine.cluster.drmaa;
+
+import java.io.IOException;
+import java.text.NumberFormat;
+
+import org.apache.log4j.Logger;
+import org.ggf.drmaa.DrmaaException;
+import org.ggf.drmaa.JobInfo;
+import org.ggf.drmaa.Session;
+
+import compbio.engine.Configurator;
+import compbio.engine.client.Util;
+import compbio.metadata.JobExecutionException;
+import compbio.metadata.JobStatus;
+
+public class ClusterUtil {
+
+       private static final Logger log = Logger.getLogger(ClusterUtil.class);
+
+       public static final NumberFormat CLUSTER_STAT_IN_SEC = NumberFormat
+                       .getInstance();
+
+       static {
+               CLUSTER_STAT_IN_SEC.setMinimumFractionDigits(4);
+       }
+
+       public static final boolean cancelJob(final String jobId,
+                       ClusterSession csession) {
+               assert Util.isValidJobId(jobId);
+               boolean cancelled = true;
+               Session session = csession.getSession();
+               try {
+                       log.info("Job " + jobId + " is successfully cancelled");
+                       compbio.engine.client.Util.writeMarker(Configurator.getWorkDirectory(jobId),
+                                       JobStatus.CANCELLED);
+                       session.control(ClusterSession.getClusterJobId(jobId).getJobId(),
+                                       Session.TERMINATE);
+               } catch (DrmaaException e) {
+                       // Log silently
+                       log.error("Job " + jobId + " cancellation failed!");
+                       log.error("Cause: " + e.getLocalizedMessage(), e.getCause());
+                       cancelled = false;
+               } catch (IOException e) {
+                       log.error(
+                                       "Could not read JOBID file to determine cluster jobid for taskid: "
+                                                       + jobId + " Message: " + e.getLocalizedMessage(), e
+                                                       .getCause());
+               } finally {
+                       log
+                                       .trace("Job "
+                                                       + jobId
+                                                       + " has been successfully removed from the cluster engine job list");
+                       csession.removeJob(jobId);
+               }
+               return cancelled;
+       }
+
+       public static final JobInfo waitForResult(ClusterSession csession,
+                       String jobId) throws JobExecutionException {
+               JobInfo jinfo = null;
+               assert Util.isValidJobId(jobId);
+               try {
+                       jinfo = csession.waitForJob(jobId);
+               } catch (DrmaaException e) {
+                       log.error(e.getLocalizedMessage(), e.getCause());
+                       throw new JobExecutionException(e);
+               } catch (IOException e) {
+                       log.error("Could not read JOBID file for job " + jobId
+                                       + " Message " + e.getMessage(), e.getCause());
+                       throw new JobExecutionException(e);
+               } finally {
+                       // at this point the job has finished
+                       csession.removeJob(jobId);
+               }
+               return jinfo;
+       }
+
+}
diff --git a/engine/compbio/engine/cluster/drmaa/JobRunner.java b/engine/compbio/engine/cluster/drmaa/JobRunner.java
new file mode 100644 (file)
index 0000000..fdceb72
--- /dev/null
@@ -0,0 +1,395 @@
+/* Copyright (c) 2009 Peter Troshin
+ *  
+ *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0     
+ * 
+ *  This library is free software; you can redistribute it and/or modify it under the terms of the
+ *  Apache License version 2 as published by the Apache Software Foundation
+ * 
+ *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache 
+ *  License for more details.
+ * 
+ *  A copy of the license is in apache_license.txt. It is also available here:
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
+ * 
+ * Any republication or derived work distributed in source code form
+ * must include this copyright and license notice.
+ */
+
+package compbio.engine.cluster.drmaa;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.ggf.drmaa.DrmaaException;
+import org.ggf.drmaa.InvalidJobException;
+import org.ggf.drmaa.JobInfo;
+import org.ggf.drmaa.JobTemplate;
+import org.ggf.drmaa.Session;
+
+import compbio.engine.Cleaner;
+import compbio.engine.ClusterJobId;
+import compbio.engine.Configurator;
+import compbio.engine.SyncExecutor;
+
+import compbio.engine.client.ConfiguredExecutable;
+import compbio.engine.client.Executable;
+import compbio.engine.client.PathValidator;
+import compbio.engine.client.PipedExecutable;
+import compbio.engine.client.Util;
+import compbio.engine.client.Executable.ExecProvider;
+import compbio.metadata.JobExecutionException;
+import compbio.metadata.JobStatus;
+import compbio.metadata.JobSubmissionException;
+import compbio.metadata.ResultNotAvailableException;
+
+/**
+ * Single cluster job runner class
+ * 
+ * @author pvtroshin
+ * @date August 2009
+ * 
+ *       TODO after call to submitJob() no setters really work as the job
+ *       template gets deleted, this needs to be taken into account in this
+ *       class design!
+ */
+public class JobRunner implements SyncExecutor {
+
+       final JobTemplate jobtempl;
+       static ClusterSession clustSession = ClusterSession.getInstance();
+       static Session session = clustSession.getSession();
+       static final Logger log = Logger.getLogger(JobRunner.class);
+       final ConfiguredExecutable<?> confExecutable;
+       private final String workDirectory;
+       String jobId;
+
+       public JobRunner(ConfiguredExecutable<?> confExec)
+                       throws JobSubmissionException {
+               try {
+                       String command = confExec.getCommand(ExecProvider.Cluster);
+                       PathValidator.validateExecutable(command);
+                       log.debug("Setting command " + command);
+
+                       jobtempl = session.createJobTemplate();
+                       jobtempl.setRemoteCommand(command);
+                       jobtempl.setJoinFiles(false);
+                       setJobName(confExec.getExecutable().getClass().getSimpleName());
+
+                       this.workDirectory = confExec.getWorkDirectory();
+                       assert !compbio.util.Util.isEmpty(workDirectory);
+
+                       // Tell the job where to get/put things
+                       jobtempl.setWorkingDirectory(this.workDirectory);
+
+                       /*
+                        * Set environment variables for the process if any
+                        */
+                       Map<String, String> jobEnv = confExec.getEnvironment();
+                       if (jobEnv != null && !jobEnv.isEmpty()) {
+                               setJobEnvironmentVariables(jobEnv);
+                       }
+                       List<String> args = confExec.getParameters().getCommands();
+                       // Set optional parameters
+                       if (args != null && args.size() > 0) {
+                               jobtempl.setArgs(args);
+                       }
+
+                       /*
+                        * If executable need in/out data to be piped into it
+                        */
+                       if (confExec.getExecutable() instanceof PipedExecutable<?>) {
+                               setPipes(confExec);
+                       }
+
+                       /*
+                        * If executable require special cluster configuration parameters to
+                        * be set e.g. queue, ram, time etc
+                        */
+                       setNativeSpecs(confExec.getExecutable());
+
+
+                       log.trace("using arguments: " + jobtempl.getArgs());
+                       this.confExecutable = confExec;
+                       // Save run configuration
+                       confExec.saveRunConfiguration();
+
+               } catch (DrmaaException e) {
+                       log.error(e.getLocalizedMessage(), e.getCause());
+                       throw new JobSubmissionException(e);
+               } catch (IOException e) {
+                       log.error(e.getLocalizedMessage(), e.getCause());
+                       throw new JobSubmissionException(e);
+               } 
+
+       }
+
+       void setPipes(ConfiguredExecutable<?> executable) throws DrmaaException {
+
+               String output = executable.getOutput();
+               String error = executable.getError();
+               // Standard drmaa path format is hostname:path
+               // to avoid supplying hostnames with all local paths just prepend colon
+               // to the path
+               // Input and output can be null as in and out files may be defined in
+               // parameters
+               /*
+                * Use this for piping input into the process if (input != null) { if
+                * (!input.contains(":")) { input = makeLocalPath(input);
+                * log.trace("converting input to " + input); }
+                * jobtempl.setInputPath(input); log.debug("use Input: " +
+                * jobtempl.getInputPath()); }
+                */
+               if (output != null) {
+                       if (!output.contains(":")) {
+                               output = makeLocalPath(output);
+                       }
+                       jobtempl.setOutputPath(output);
+                       log.debug("Output to: " + jobtempl.getOutputPath());
+               }
+               if (error != null) {
+                       if (!error.contains(":")) {
+                               error = makeLocalPath(error);
+                       }
+                       jobtempl.setErrorPath(error);
+                       log.debug("Output errors to: " + jobtempl.getErrorPath());
+               }
+
+       }
+
+       void setNativeSpecs(Executable<?> executable) throws DrmaaException {
+               String nativeSpecs = executable.getClusterJobSettings(); 
+               if(!compbio.util.Util.isEmpty(nativeSpecs)) {
+                       log.debug("Using cluster job settings: " + nativeSpecs);
+                       jobtempl.setNativeSpecification(nativeSpecs);
+               }
+       }
+
+       void setEmail(String email) {
+               log.trace("Setting email to:" + email);
+               try {
+                       jobtempl.setEmail(Collections.singleton(email));
+                       jobtempl.setBlockEmail(false);
+               } catch (DrmaaException e) {
+                       log.debug(e.getLocalizedMessage());
+                       throw new IllegalArgumentException(e);
+               }
+       }
+
+       void setJobName(String name) {
+               log.trace("Setting job name to:" + name);
+               try {
+                       jobtempl.setJobName(name);
+               } catch (DrmaaException e) {
+                       log.debug(e.getLocalizedMessage());
+                       throw new IllegalArgumentException(e);
+               }
+       }
+
+       @SuppressWarnings("unchecked")
+       void setJobEnvironmentVariables(Map<String, String> env_variables) {
+               assert env_variables != null && !env_variables.isEmpty();
+               try {
+                       log.trace("Setting job environment to:" + env_variables);
+                       Map<String, String> sysEnv = jobtempl.getJobEnvironment();
+                       if (sysEnv != null && !sysEnv.isEmpty()) {
+                               Util.mergeEnvVariables(sysEnv, env_variables);
+                       } else {
+                               sysEnv = env_variables;
+                       }
+                       jobtempl.setJobEnvironment(sysEnv);
+
+               } catch (DrmaaException e) {
+                       log.debug(e.getLocalizedMessage());
+                       throw new IllegalArgumentException(e);
+               }
+       }
+
+       private static String makeLocalPath(String path) {
+               return ":" + path;
+       }
+
+       public boolean deepClean() {
+               throw new UnsupportedOperationException();
+               // TODO
+               /*
+                * remove all files from these this.jobtempl.getInputPath();
+                * this.jobtempl.getOutputPath(); this.jobtempl.getWorkingDirectory();
+                */
+               // executable.getInputFiles();
+       }
+
+       /**
+        * This will never return clust.engine.JobStatus.CANCELLED as for sun grid
+        * engine cancelled job is the same as failed. Cancelled jobs needs to be
+        * tracked manually!
+        */
+       static compbio.metadata.JobStatus getJobStatus(String jobId) {
+               try {
+                       ClusterJobId clusterJobId = ClusterSession.getClusterJobId(jobId);
+                       switch (clustSession.getJobStatus(clusterJobId)) {
+                       case Session.DONE:
+                               compbio.engine.client.Util.writeStatFile(Configurator.getWorkDirectory(jobId),
+                                               JobStatus.FINISHED.toString());
+
+                               return compbio.metadata.JobStatus.FINISHED;
+                       case Session.FAILED:
+                               compbio.engine.client.Util.writeMarker(Configurator.getWorkDirectory(jobId),
+                                               JobStatus.FAILED);
+
+                               return compbio.metadata.JobStatus.FAILED;
+
+                       case Session.RUNNING:
+                               // will not persist this status as temporary
+                               return compbio.metadata.JobStatus.RUNNING;
+
+                       case Session.SYSTEM_SUSPENDED:
+                       case Session.USER_SYSTEM_SUSPENDED:
+                       case Session.USER_SUSPENDED:
+                       case Session.USER_SYSTEM_ON_HOLD:
+                       case Session.USER_ON_HOLD:
+                       case Session.SYSTEM_ON_HOLD:
+                       case Session.QUEUED_ACTIVE:
+                               // will not persist this status as temporary
+                               return compbio.metadata.JobStatus.PENDING;
+
+                       default:
+                               // It is possible that the this status is returned for a job that is almost completed
+                               // when a state is changed from RUNNING to DONE
+                               // It looks like a bug in DRMAA SGE implementation 
+                               return compbio.metadata.JobStatus.UNDEFINED;
+                       }
+               } catch (InvalidJobException e) {
+                       log.info("Job " + jobId + " could not be located by DRMAA "
+                                       + e.getLocalizedMessage(), e.getCause());
+                       log.info("Attempting to determine the status by marker files");
+                       return getRecordedJobStatus(jobId);
+               } catch (DrmaaException e) {
+                       log.error(
+                                       "Exception in DRMAA system while quering the job status: "
+                                                       + e.getLocalizedMessage(), e.getCause());
+               } catch (IOException e) {
+                       log.error("Could not read JOBID for taskId: " + jobId
+                                       + " Message: " + e.getLocalizedMessage(), e.getCause());
+               }
+
+               return JobStatus.UNDEFINED;
+       }
+
+       static JobStatus getRecordedJobStatus(String jobId) { 
+               /*
+                * Job has already been removed from the task list, so it running
+                * status could not be determined. Most likely it has been
+                * cancelled, finished or failed.
+                */
+               String workDir = Configurator.getWorkDirectory(jobId);
+               if (Util.isMarked(workDir, JobStatus.FINISHED)
+                               || Util.isMarked(workDir, JobStatus.COLLECTED)) {
+                       return JobStatus.FINISHED;
+               }
+               if (Util.isMarked(workDir, JobStatus.CANCELLED)) {
+                       return JobStatus.CANCELLED;
+               }
+               if (Util.isMarked(workDir, JobStatus.FAILED)) {
+                       return JobStatus.FAILED;
+               }
+               return JobStatus.UNDEFINED; 
+       }
+       
+       
+       @Override
+       public boolean cleanup() {
+               /*
+                * TODO there is two additional files created by sun grid engine which
+                * are named as follows: output this.getWorkDirectory() +
+                * executable.getClass().getSimpleName() + "." + "o" + this.jobId; error
+                * this.getWorkDirectory() + executable.getClass().getSimpleName() + "."
+                * + "e" + this.jobId; individual executable does not know about these
+                * two unless it implements PipedExecutable which need to collect data
+                * from these streams Thus this method will fail to remove the task
+                * directory completely
+                */
+               return Cleaner.deleteFiles(confExecutable);
+       }
+
+       JobInfo waitForJob(String jobId) throws JobExecutionException {
+               assert Util.isValidJobId(jobId);
+               return ClusterUtil.waitForResult(clustSession, jobId);
+       }
+
+       boolean cancelJob(String jobId) {
+               assert Util.isValidJobId(jobId);
+               return compbio.engine.cluster.drmaa.ClusterUtil.cancelJob(jobId,
+                               clustSession);
+       }
+
+       @Override
+       public boolean cancelJob() {
+               return cancelJob(this.jobId);
+       }
+
+       String submitJob() throws JobSubmissionException {
+
+               String jobId;
+               try {
+                       jobId = session.runJob(jobtempl);
+                       log.info("submitted single job with jobids:");
+                       log.info("\t \"" + jobId + "\"");
+                       session.deleteJobTemplate(jobtempl);
+                       clustSession.addJob(jobId, confExecutable);
+               } catch (DrmaaException e) {
+                       e.printStackTrace();
+                       throw new JobSubmissionException(e);
+               }
+
+               return this.confExecutable.getTaskId();
+       }
+
+       public String getWorkDirectory() {
+               return this.workDirectory;
+       }
+
+       @Override
+       public void executeJob() throws JobSubmissionException {
+               this.jobId = submitJob();
+       }
+
+       /**
+        * This method will block before the calculation has completed and then
+        * return the object containing a job execution statistics
+        * 
+        * @return
+        * @throws JobExecutionException
+        */
+       public JobInfo getJobInfo() throws JobExecutionException {
+               return waitForJob(this.jobId);
+       }
+
+       @Override
+       public ConfiguredExecutable<?> waitForResult() throws JobExecutionException {
+               ConfiguredExecutable<?> confExec;
+               try {
+                       confExec = new AsyncJobRunner().getResults(this.jobId);
+                       if (confExec == null) {
+                               log.warn("Could not find results of job " + this.jobId);
+                       }
+               } catch (ResultNotAvailableException e) {
+                       log.error(e.getMessage(), e.getCause());
+                       throw new JobExecutionException(e);
+               }
+               return confExec;
+       }
+
+       @Override
+       public compbio.metadata.JobStatus getJobStatus() {
+               return getJobStatus(this.jobId);
+       }
+
+       public static JobRunner getInstance(ConfiguredExecutable<?> executable)
+                       throws JobSubmissionException {
+               return new JobRunner(executable);
+       }
+
+} // class end
diff --git a/runner/compbio/runner/Util.java b/runner/compbio/runner/Util.java
new file mode 100644 (file)
index 0000000..7734c86
--- /dev/null
@@ -0,0 +1,134 @@
+/* Copyright (c) 2011 Peter Troshin
+ *  
+ *  JAva Bioinformatics Analysis Web Services (JABAWS) @version: 2.0     
+ * 
+ *  This library is free software; you can redistribute it and/or modify it under the terms of the
+ *  Apache License version 2 as published by the Apache Software Foundation
+ * 
+ *  This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache 
+ *  License for more details.
+ * 
+ *  A copy of the license is in apache_license.txt. It is also available here:
+ * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
+ * 
+ * Any republication or derived work distributed in source code form
+ * must include this copyright and license notice.
+ */
+
+package compbio.runner;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+
+import compbio.data.sequence.Alignment;
+import compbio.data.sequence.ClustalAlignmentUtil;
+import compbio.data.sequence.FastaSequence;
+import compbio.data.sequence.Score;
+import compbio.data.sequence.SequenceUtil;
+import compbio.data.sequence.UnknownFileFormatException;
+import compbio.engine.client.ConfExecutable;
+import compbio.engine.client.ConfiguredExecutable;
+import compbio.engine.client.Executable;
+import compbio.engine.conf.PropertyHelperManager;
+import compbio.metadata.JobSubmissionException;
+import compbio.metadata.PresetManager;
+import compbio.metadata.RunnerConfig;
+import compbio.util.PropertyHelper;
+
+public final class Util {
+
+       public static Logger log = Logger.getLogger(Util.class);
+
+       private static final PropertyHelper ph = PropertyHelperManager
+                       .getPropertyHelper();
+
+       public static final String SPACE = " ";
+
+       public static synchronized <T> RunnerConfig<T> getSupportedOptions(
+                       Class<? extends Executable<T>> clazz) {
+               try {
+                       return ConfExecutable.getRunnerOptions(clazz);
+               } catch (FileNotFoundException e) {
+                       log.error(
+                                       "Could not load " + clazz + " Parameters !"
+                                                       + e.getMessage(), e.getCause());
+               } catch (IOException e) {
+                       log.error("IO exception while reading " + clazz + " Parameters !"
+                                       + e.getMessage(), e.getCause());
+               }
+               return null;
+       }
+
+       public static <T> PresetManager<T> getPresets(
+                       Class<? extends Executable<T>> clazz) {
+               try {
+                       return ConfExecutable.getRunnerPresets(clazz);
+               } catch (FileNotFoundException e) {
+                       log.warn(
+                                       "No presets are found for " + clazz + " executable! "
+                                                       + e.getLocalizedMessage(), e.getCause());
+               } catch (IOException e) {
+                       log.warn("IO exception while reading presents! for " + clazz
+                                       + " executable! " + e.getLocalizedMessage(), e.getCause());
+               }
+               return null;
+       }
+
+       public static final Alignment readClustalFile(String workDirectory,
+                       String clustFile) throws UnknownFileFormatException, IOException,
+                       FileNotFoundException, NullPointerException {
+               assert !compbio.util.Util.isEmpty(workDirectory);
+               assert !compbio.util.Util.isEmpty(clustFile);
+               File cfile = new File(compbio.engine.client.Util.getFullPath(
+                               workDirectory, clustFile));
+               log.trace("CLUSTAL OUTPUT FILE PATH: " + cfile.getAbsolutePath());
+               if (!(cfile.exists() && cfile.length() > 0)) {
+                       throw new FileNotFoundException("Result for the jobId "
+                                       + workDirectory + " with file name " + clustFile
+                                       + " is not found!");
+               }
+               return ClustalAlignmentUtil.readClustalFile(cfile);
+       }
+
+       public static final Map<String, Score> readJronnFile(String workDirectory,
+                       String clustFile) throws UnknownFileFormatException, IOException,
+                       FileNotFoundException, NullPointerException {
+               assert !compbio.util.Util.isEmpty(workDirectory);
+               assert !compbio.util.Util.isEmpty(clustFile);
+               File cfile = new File(compbio.engine.client.Util.getFullPath(
+                               workDirectory, clustFile));
+               log.trace("Jronn OUTPUT FILE PATH: " + cfile.getAbsolutePath());
+               if (!(cfile.exists() && cfile.length() > 0)) {
+                       throw new FileNotFoundException("Result for the jobId "
+                                       + workDirectory + " with file name " + clustFile
+                                       + " is not found!");
+               }
+               return SequenceUtil.readJRonn(cfile);
+       }
+
+       public static void writeInput(List<FastaSequence> sequences,
+                       ConfiguredExecutable<?> exec) throws JobSubmissionException {
+
+               try {
+                       File filein = new File(exec.getInput());
+                       FileOutputStream fout = new FileOutputStream(filein);
+                       log.debug("File path: " + filein.getAbsolutePath());
+                       SequenceUtil.writeFasta(fout, sequences);
+                       fout.close();
+               } catch (IOException e) {
+                       log.error("IOException while writing input file into the disk: "
+                                       + e.getLocalizedMessage(), e);
+                       throw new JobSubmissionException(
+                                       "We are sorry by JABAWS server seems to have a problem! "
+                                                       + e.getLocalizedMessage(), e);
+               }
+       }
+
+}