Repository: airavata
Updated Branches:
  refs/heads/master 5b3c75f71 -> 0b6e1e5af


https://issues.apache.org/jira/browse/AIRAVATA-1046


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/0b6e1e5a
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/0b6e1e5a
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/0b6e1e5a

Branch: refs/heads/master
Commit: 0b6e1e5aff029450cfb554022ebc4889ad3e72ca
Parents: 5b3c75f
Author: Saminda Wijeratne <[email protected]>
Authored: Sun Mar 9 15:27:15 2014 -0400
Committer: Saminda Wijeratne <[email protected]>
Committed: Sun Mar 9 15:27:15 2014 -0400

----------------------------------------------------------------------
 .../common/utils/ApplicationSettings.java       | 47 +------------
 .../airavata/common/utils/StringUtil.java       | 51 ++++++++++++++
 .../apache/airavata/integration/BaseCaseIT.java |  8 ++-
 .../org/apache/airavata/server/ServerMain.java  | 71 ++++++++++++++++++--
 4 files changed, 126 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/0b6e1e5a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
----------------------------------------------------------------------
diff --git 
a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
 
b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
index 54225fa..f6d0cd8 100644
--- 
a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
+++ 
b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/ApplicationSettings.java
@@ -27,9 +27,7 @@ import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.HashMap;
 import java.util.List;
-import java.util.ListIterator;
 import java.util.Map;
 import java.util.Properties;
 import java.util.regex.Matcher;
@@ -39,12 +37,6 @@ import 
org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.common.exception.ApplicationSettingsLoadException;
 import org.apache.airavata.common.exception.ApplicationSettingsStoreException;
 import 
org.apache.airavata.common.exception.UnspecifiedApplicationSettingsException;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.PosixParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -267,44 +259,7 @@ public abstract class ApplicationSettings {
     }
     
     public static void mergeSettingsCommandLineArgs(String[] args){
-       properties.putAll(parseCommandLineOptions(args));
+       properties.putAll(StringUtil.parseCommandLineOptions(args));
     }
     
-    private static Options deriveCommandLineOptions(String[] args){
-       Options options = new Options();
-        for (String arg : args) {
-            if (arg.startsWith("--")){
-               arg=arg.substring(2);
-                int pos = arg.indexOf('=');
-                String opt = pos == -1 ? arg : arg.substring(0, pos); 
-                options.addOption(opt, true, "");
-            }
-        }
-        return options;
-    }
-    
-       private static Map<String, String> parseCommandLineOptions(String[] 
args) {
-               Map<String,String> commandLineOptions=new 
HashMap<String,String>();
-               CommandLineParser parser = new DynamicOptionPosixParser();
-               try {
-                       CommandLine cmdLine = 
parser.parse(deriveCommandLineOptions(args), args);
-                       for (Option s : cmdLine.getOptions()) {
-                               commandLineOptions.put(s.getOpt(), 
s.getValue());
-                       }
-               } catch (ParseException e1) {
-                       e1.printStackTrace();
-               }
-               return commandLineOptions;
-       }
-       
-       private static class DynamicOptionPosixParser extends PosixParser{
-               @Override
-               protected void processOption(String arg0, 
@SuppressWarnings("rawtypes") ListIterator arg1)
-                               throws ParseException {
-                       if (getOptions().hasOption(arg0)){
-                               super.processOption(arg0, arg1);
-                       }
-               }
-       }
-       
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/0b6e1e5a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java
----------------------------------------------------------------------
diff --git 
a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java
 
b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java
index d4eda58..044401f 100644
--- 
a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java
+++ 
b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/StringUtil.java
@@ -26,10 +26,18 @@ import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+
 public class StringUtil {
        public static final String DELIMETER=",";
        public static final String QUOTE="\"";
@@ -365,5 +373,48 @@ public class StringUtil {
         printStream.flush();
         return byteArrayOutputStream.toString();
     }
+    
+    public static Options deriveCommandLineOptions(String[] args){
+       Options options = new Options();
+        for (String arg : args) {
+            if (arg.startsWith("--")){
+               arg=arg.substring(2);
+                int pos = arg.indexOf('=');
+                String opt = pos == -1 ? arg : arg.substring(0, pos); 
+                options.addOption(opt, true, "");
+            }
+        }
+        return options;
+    }
+    
+       public static Map<String, String> parseCommandLineOptions(String[] 
args) {
+               Map<String,String> commandLineOptions=new 
HashMap<String,String>();
+               try {
+                       CommandLine cmdLine = getCommandLineParser(args);
+                       for (Option s : cmdLine.getOptions()) {
+                               commandLineOptions.put(s.getOpt(), 
s.getValue());
+                       }
+               } catch (ParseException e1) {
+                       e1.printStackTrace();
+               }
+               return commandLineOptions;
+       }
+
+       public static CommandLine getCommandLineParser(String[] args)
+                       throws ParseException {
+               CommandLineParser parser = new DynamicOptionPosixParser();
+               CommandLine cmdLine = 
parser.parse(deriveCommandLineOptions(args), args);
+               return cmdLine;
+       }
+       
+       private static class DynamicOptionPosixParser extends PosixParser{
+               @Override
+               protected void processOption(String arg0, 
@SuppressWarnings("rawtypes") ListIterator arg1)
+                               throws ParseException {
+                       if (getOptions().hasOption(arg0)){
+                               super.processOption(arg0, arg1);
+                       }
+               }
+       }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/0b6e1e5a/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java
----------------------------------------------------------------------
diff --git 
a/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java
 
b/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java
index dc0b5f2..e7bf3d2 100644
--- 
a/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java
+++ 
b/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java
@@ -22,6 +22,7 @@
 package org.apache.airavata.integration;
 
 import junit.framework.Assert;
+
 import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.client.tools.DocumentCreator;
 import org.apache.airavata.model.util.ExperimentModelUtil;
@@ -31,6 +32,7 @@ import org.apache.airavata.schemas.gfac.DataType;
 import org.apache.airavata.server.ServerMain;
 import org.apache.airavata.workflow.model.wf.Workflow;
 import org.apache.airavata.ws.monitor.*;
+import org.apache.commons.cli.ParseException;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
@@ -53,7 +55,11 @@ public class BaseCaseIT extends WorkflowIntegrationTestBase {
     public void setUp() throws Exception {
         new Thread() {
             public void run() {
-                ServerMain.main(new String[]{});
+                try {
+                                       ServerMain.main(new String[]{});
+                               } catch (Exception e) {
+                                       e.printStackTrace();
+                               }
             }
         }.start();
         Thread.sleep(10000);

http://git-wip-us.apache.org/repos/asf/airavata/blob/0b6e1e5a/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
----------------------------------------------------------------------
diff --git 
a/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java 
b/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
index bc9a5dd..eb9efb2 100644
--- a/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
+++ b/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
@@ -20,12 +20,19 @@
  */
 package org.apache.airavata.server;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.common.utils.IServer;
 import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.common.utils.StringUtil;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.ParseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,7 +41,8 @@ public class ServerMain {
        private static final String SERVERS_KEY="servers";
     private final static Logger logger = 
LoggerFactory.getLogger(ServerMain.class);
     private static boolean serversLoaded=false;
-    
+       private static final String stopFileNamePrefix = "airavata-server-stop";
+       private static final String serverStartedFileNamePrefix = 
"airavata-server-start";
     static{
                servers = new ArrayList<IServer>();
     }
@@ -74,11 +82,66 @@ public class ServerMain {
                });
        }
 
-       public static void main(String args[]) {
-               ServerSettings.mergeSettingsCommandLineArgs(args);
-               startAllServers();
+       public static void main(String args[]) throws ParseException, 
IOException {
+               CommandLine commandLineParser = 
StringUtil.getCommandLineParser(args);
+               
+               if (commandLineParser.getArgList().contains("stop")){
+                       if (isServerRunning()) {
+                               logger.info("Requesting airavata server to 
stop...");
+                               requestStop();
+                       }else{
+                               logger.error("Server is not running!!!");
+                       }
+               }else{
+                       setServerStarted();
+                       ServerSettings.mergeSettingsCommandLineArgs(args);
+                       startAllServers();
+                       while(!hasStopRequested()){
+                               try {
+                                       Thread.sleep(2000);
+                               } catch (InterruptedException e) {
+                                       stopAllServers();
+                               }
+                       }
+                       if (hasStopRequested()){
+                               stopAllServers();
+                               stopRequestServed();
+                       }
+               }
+       }
+
+       private static void requestStop() throws IOException {
+               //FIXME currently stop requests all the servers to stop
+               new File(stopFileNamePrefix).createNewFile();
+       }
+       
+       private static boolean hasStopRequested(){
+               return new File(stopFileNamePrefix).exists();
+       }
+       
+       private static void stopRequestServed(){
+               new File(stopFileNamePrefix).delete();
        }
 
+       private static boolean isServerRunning(){
+               return new File(serverStartedFileNamePrefix).exists();
+       }
+       
+       @SuppressWarnings({ "resource" })
+       private static void setServerStarted(){
+               try {
+                       File serverStartedFile = new 
File(serverStartedFileNamePrefix);
+                       serverStartedFile.createNewFile();
+                       serverStartedFile.deleteOnExit();
+                       new 
RandomAccessFile(serverStartedFile,"rw").getChannel().lock();
+               } catch (FileNotFoundException e) {
+                       e.printStackTrace();
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+       }
+       
+       
        public static void stopAllServers() {
                //stopping should be done in reverse order of starting the 
servers
                for(int i=servers.size()-1;i>=0;i--){

Reply via email to