You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sm...@apache.org on 2016/03/11 07:57:23 UTC

[07/16] airavata git commit: adding working directory archive flag

adding working directory archive flag


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

Branch: refs/heads/master
Commit: 7fbc6241f6ccf76c4829ed2ca745913d95a680ff
Parents: 75fb3b3
Author: Suresh Marru <sm...@apache.org>
Authored: Mon Mar 7 13:25:13 2016 -0500
Committer: Suresh Marru <sm...@apache.org>
Committed: Mon Mar 7 13:25:13 2016 -0500

----------------------------------------------------------------------
 .../application_interface_model_types.cpp       |  22 ++++
 .../application_interface_model_types.h         |  12 +-
 .../Model/AppCatalog/AppInterface/Types.php     |  23 ++++
 .../model/appcatalog/appinterface/ttypes.py     |  15 ++-
 .../ApplicationInterfaceDescription.java        | 113 ++++++++++++++++++-
 .../main/resources/airavata-server.properties   |   3 +-
 .../catalog/impl/ApplicationInterfaceImpl.java  |   2 +
 .../app/catalog/model/ApplicationInterface.java |  11 +-
 .../catalog/resources/AppInterfaceResource.java |  11 ++
 .../util/AppCatalogThriftConversion.java        |   1 +
 .../src/main/resources/appcatalog-derby.sql     |   1 +
 .../src/main/resources/appcatalog-mysql.sql     |   6 +-
 .../application_interface_model.thrift          |   3 +-
 13 files changed, 211 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.cpp
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.cpp
index 69df9f2..068f8f1 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.cpp
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.cpp
@@ -63,6 +63,11 @@ void ApplicationInterfaceDescription::__set_applicationOutputs(const std::vector
 __isset.applicationOutputs = true;
 }
 
+void ApplicationInterfaceDescription::__set_archiveWorkingDirectory(const bool val) {
+  this->archiveWorkingDirectory = val;
+__isset.archiveWorkingDirectory = true;
+}
+
 uint32_t ApplicationInterfaceDescription::read(::apache::thrift::protocol::TProtocol* iprot) {
 
   apache::thrift::protocol::TInputRecursionTracker tracker(*iprot);
@@ -170,6 +175,14 @@ uint32_t ApplicationInterfaceDescription::read(::apache::thrift::protocol::TProt
           xfer += iprot->skip(ftype);
         }
         break;
+      case 7:
+        if (ftype == ::apache::thrift::protocol::T_BOOL) {
+          xfer += iprot->readBool(this->archiveWorkingDirectory);
+          this->__isset.archiveWorkingDirectory = true;
+        } else {
+          xfer += iprot->skip(ftype);
+        }
+        break;
       default:
         xfer += iprot->skip(ftype);
         break;
@@ -243,6 +256,11 @@ uint32_t ApplicationInterfaceDescription::write(::apache::thrift::protocol::TPro
     }
     xfer += oprot->writeFieldEnd();
   }
+  if (this->__isset.archiveWorkingDirectory) {
+    xfer += oprot->writeFieldBegin("archiveWorkingDirectory", ::apache::thrift::protocol::T_BOOL, 7);
+    xfer += oprot->writeBool(this->archiveWorkingDirectory);
+    xfer += oprot->writeFieldEnd();
+  }
   xfer += oprot->writeFieldStop();
   xfer += oprot->writeStructEnd();
   return xfer;
@@ -256,6 +274,7 @@ void swap(ApplicationInterfaceDescription &a, ApplicationInterfaceDescription &b
   swap(a.applicationModules, b.applicationModules);
   swap(a.applicationInputs, b.applicationInputs);
   swap(a.applicationOutputs, b.applicationOutputs);
+  swap(a.archiveWorkingDirectory, b.archiveWorkingDirectory);
   swap(a.__isset, b.__isset);
 }
 
@@ -266,6 +285,7 @@ ApplicationInterfaceDescription::ApplicationInterfaceDescription(const Applicati
   applicationModules = other18.applicationModules;
   applicationInputs = other18.applicationInputs;
   applicationOutputs = other18.applicationOutputs;
+  archiveWorkingDirectory = other18.archiveWorkingDirectory;
   __isset = other18.__isset;
 }
 ApplicationInterfaceDescription& ApplicationInterfaceDescription::operator=(const ApplicationInterfaceDescription& other19) {
@@ -275,6 +295,7 @@ ApplicationInterfaceDescription& ApplicationInterfaceDescription::operator=(cons
   applicationModules = other19.applicationModules;
   applicationInputs = other19.applicationInputs;
   applicationOutputs = other19.applicationOutputs;
+  archiveWorkingDirectory = other19.archiveWorkingDirectory;
   __isset = other19.__isset;
   return *this;
 }
@@ -287,6 +308,7 @@ void ApplicationInterfaceDescription::printTo(std::ostream& out) const {
   out << ", " << "applicationModules="; (__isset.applicationModules ? (out << to_string(applicationModules)) : (out << "<null>"));
   out << ", " << "applicationInputs="; (__isset.applicationInputs ? (out << to_string(applicationInputs)) : (out << "<null>"));
   out << ", " << "applicationOutputs="; (__isset.applicationOutputs ? (out << to_string(applicationOutputs)) : (out << "<null>"));
+  out << ", " << "archiveWorkingDirectory="; (__isset.archiveWorkingDirectory ? (out << to_string(archiveWorkingDirectory)) : (out << "<null>"));
   out << ")";
 }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.h
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.h
index adafa82..cec4016 100644
--- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.h
+++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/application_interface_model_types.h
@@ -41,11 +41,12 @@ namespace apache { namespace airavata { namespace model { namespace appcatalog {
 class ApplicationInterfaceDescription;
 
 typedef struct _ApplicationInterfaceDescription__isset {
-  _ApplicationInterfaceDescription__isset() : applicationDescription(false), applicationModules(false), applicationInputs(false), applicationOutputs(false) {}
+  _ApplicationInterfaceDescription__isset() : applicationDescription(false), applicationModules(false), applicationInputs(false), applicationOutputs(false), archiveWorkingDirectory(true) {}
   bool applicationDescription :1;
   bool applicationModules :1;
   bool applicationInputs :1;
   bool applicationOutputs :1;
+  bool archiveWorkingDirectory :1;
 } _ApplicationInterfaceDescription__isset;
 
 class ApplicationInterfaceDescription {
@@ -53,7 +54,7 @@ class ApplicationInterfaceDescription {
 
   ApplicationInterfaceDescription(const ApplicationInterfaceDescription&);
   ApplicationInterfaceDescription& operator=(const ApplicationInterfaceDescription&);
-  ApplicationInterfaceDescription() : applicationInterfaceId("DO_NOT_SET_AT_CLIENTS"), applicationName(), applicationDescription() {
+  ApplicationInterfaceDescription() : applicationInterfaceId("DO_NOT_SET_AT_CLIENTS"), applicationName(), applicationDescription(), archiveWorkingDirectory(false) {
   }
 
   virtual ~ApplicationInterfaceDescription() throw();
@@ -63,6 +64,7 @@ class ApplicationInterfaceDescription {
   std::vector<std::string>  applicationModules;
   std::vector< ::apache::airavata::model::application::io::InputDataObjectType>  applicationInputs;
   std::vector< ::apache::airavata::model::application::io::OutputDataObjectType>  applicationOutputs;
+  bool archiveWorkingDirectory;
 
   _ApplicationInterfaceDescription__isset __isset;
 
@@ -78,6 +80,8 @@ class ApplicationInterfaceDescription {
 
   void __set_applicationOutputs(const std::vector< ::apache::airavata::model::application::io::OutputDataObjectType> & val);
 
+  void __set_archiveWorkingDirectory(const bool val);
+
   bool operator == (const ApplicationInterfaceDescription & rhs) const
   {
     if (!(applicationInterfaceId == rhs.applicationInterfaceId))
@@ -100,6 +104,10 @@ class ApplicationInterfaceDescription {
       return false;
     else if (__isset.applicationOutputs && !(applicationOutputs == rhs.applicationOutputs))
       return false;
+    if (__isset.archiveWorkingDirectory != rhs.__isset.archiveWorkingDirectory)
+      return false;
+    else if (__isset.archiveWorkingDirectory && !(archiveWorkingDirectory == rhs.archiveWorkingDirectory))
+      return false;
     return true;
   }
   bool operator != (const ApplicationInterfaceDescription &rhs) const {

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/AppInterface/Types.php
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/AppInterface/Types.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/AppInterface/Types.php
index 1d09112..e2143f0 100644
--- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/AppInterface/Types.php
+++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/AppCatalog/AppInterface/Types.php
@@ -57,6 +57,10 @@ class ApplicationInterfaceDescription {
    * @var \Airavata\Model\Application\Io\OutputDataObjectType[]
    */
   public $applicationOutputs = null;
+  /**
+   * @var bool
+   */
+  public $archiveWorkingDirectory = false;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -99,6 +103,10 @@ class ApplicationInterfaceDescription {
             'class' => '\Airavata\Model\Application\Io\OutputDataObjectType',
             ),
           ),
+        7 => array(
+          'var' => 'archiveWorkingDirectory',
+          'type' => TType::BOOL,
+          ),
         );
     }
     if (is_array($vals)) {
@@ -120,6 +128,9 @@ class ApplicationInterfaceDescription {
       if (isset($vals['applicationOutputs'])) {
         $this->applicationOutputs = $vals['applicationOutputs'];
       }
+      if (isset($vals['archiveWorkingDirectory'])) {
+        $this->archiveWorkingDirectory = $vals['archiveWorkingDirectory'];
+      }
     }
   }
 
@@ -216,6 +227,13 @@ class ApplicationInterfaceDescription {
             $xfer += $input->skip($ftype);
           }
           break;
+        case 7:
+          if ($ftype == TType::BOOL) {
+            $xfer += $input->readBool($this->archiveWorkingDirectory);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -295,6 +313,11 @@ class ApplicationInterfaceDescription {
       }
       $xfer += $output->writeFieldEnd();
     }
+    if ($this->archiveWorkingDirectory !== null) {
+      $xfer += $output->writeFieldBegin('archiveWorkingDirectory', TType::BOOL, 7);
+      $xfer += $output->writeBool($this->archiveWorkingDirectory);
+      $xfer += $output->writeFieldEnd();
+    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/appinterface/ttypes.py
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/appinterface/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/appinterface/ttypes.py
index 7e0ca14..4cadd1e 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/appinterface/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/appcatalog/appinterface/ttypes.py
@@ -41,6 +41,7 @@ class ApplicationInterfaceDescription:
    - applicationModules
    - applicationInputs
    - applicationOutputs
+   - archiveWorkingDirectory
   """
 
   thrift_spec = (
@@ -51,15 +52,17 @@ class ApplicationInterfaceDescription:
     (4, TType.LIST, 'applicationModules', (TType.STRING,None), None, ), # 4
     (5, TType.LIST, 'applicationInputs', (TType.STRUCT,(apache.airavata.model.application.io.ttypes.InputDataObjectType, apache.airavata.model.application.io.ttypes.InputDataObjectType.thrift_spec)), None, ), # 5
     (6, TType.LIST, 'applicationOutputs', (TType.STRUCT,(apache.airavata.model.application.io.ttypes.OutputDataObjectType, apache.airavata.model.application.io.ttypes.OutputDataObjectType.thrift_spec)), None, ), # 6
+    (7, TType.BOOL, 'archiveWorkingDirectory', None, False, ), # 7
   )
 
-  def __init__(self, applicationInterfaceId=thrift_spec[1][4], applicationName=None, applicationDescription=None, applicationModules=None, applicationInputs=None, applicationOutputs=None,):
+  def __init__(self, applicationInterfaceId=thrift_spec[1][4], applicationName=None, applicationDescription=None, applicationModules=None, applicationInputs=None, applicationOutputs=None, archiveWorkingDirectory=thrift_spec[7][4],):
     self.applicationInterfaceId = applicationInterfaceId
     self.applicationName = applicationName
     self.applicationDescription = applicationDescription
     self.applicationModules = applicationModules
     self.applicationInputs = applicationInputs
     self.applicationOutputs = applicationOutputs
+    self.archiveWorkingDirectory = archiveWorkingDirectory
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
@@ -117,6 +120,11 @@ class ApplicationInterfaceDescription:
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
+      elif fid == 7:
+        if ftype == TType.BOOL:
+          self.archiveWorkingDirectory = iprot.readBool()
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -160,6 +168,10 @@ class ApplicationInterfaceDescription:
         iter20.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
+    if self.archiveWorkingDirectory is not None:
+      oprot.writeFieldBegin('archiveWorkingDirectory', TType.BOOL, 7)
+      oprot.writeBool(self.archiveWorkingDirectory)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -179,6 +191,7 @@ class ApplicationInterfaceDescription:
     value = (value * 31) ^ hash(self.applicationModules)
     value = (value * 31) ^ hash(self.applicationInputs)
     value = (value * 31) ^ hash(self.applicationOutputs)
+    value = (value * 31) ^ hash(self.archiveWorkingDirectory)
     return value
 
   def __repr__(self):

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appinterface/ApplicationInterfaceDescription.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appinterface/ApplicationInterfaceDescription.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appinterface/ApplicationInterfaceDescription.java
index 973c179..77daa76 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appinterface/ApplicationInterfaceDescription.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appinterface/ApplicationInterfaceDescription.java
@@ -74,6 +74,7 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
   private static final org.apache.thrift.protocol.TField APPLICATION_MODULES_FIELD_DESC = new org.apache.thrift.protocol.TField("applicationModules", org.apache.thrift.protocol.TType.LIST, (short)4);
   private static final org.apache.thrift.protocol.TField APPLICATION_INPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("applicationInputs", org.apache.thrift.protocol.TType.LIST, (short)5);
   private static final org.apache.thrift.protocol.TField APPLICATION_OUTPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("applicationOutputs", org.apache.thrift.protocol.TType.LIST, (short)6);
+  private static final org.apache.thrift.protocol.TField ARCHIVE_WORKING_DIRECTORY_FIELD_DESC = new org.apache.thrift.protocol.TField("archiveWorkingDirectory", org.apache.thrift.protocol.TType.BOOL, (short)7);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -87,6 +88,7 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
   private List<String> applicationModules; // optional
   private List<org.apache.airavata.model.application.io.InputDataObjectType> applicationInputs; // optional
   private List<org.apache.airavata.model.application.io.OutputDataObjectType> applicationOutputs; // optional
+  private boolean archiveWorkingDirectory; // optional
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
@@ -95,7 +97,8 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
     APPLICATION_DESCRIPTION((short)3, "applicationDescription"),
     APPLICATION_MODULES((short)4, "applicationModules"),
     APPLICATION_INPUTS((short)5, "applicationInputs"),
-    APPLICATION_OUTPUTS((short)6, "applicationOutputs");
+    APPLICATION_OUTPUTS((short)6, "applicationOutputs"),
+    ARCHIVE_WORKING_DIRECTORY((short)7, "archiveWorkingDirectory");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -122,6 +125,8 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
           return APPLICATION_INPUTS;
         case 6: // APPLICATION_OUTPUTS
           return APPLICATION_OUTPUTS;
+        case 7: // ARCHIVE_WORKING_DIRECTORY
+          return ARCHIVE_WORKING_DIRECTORY;
         default:
           return null;
       }
@@ -162,7 +167,9 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
   }
 
   // isset id assignments
-  private static final _Fields optionals[] = {_Fields.APPLICATION_DESCRIPTION,_Fields.APPLICATION_MODULES,_Fields.APPLICATION_INPUTS,_Fields.APPLICATION_OUTPUTS};
+  private static final int __ARCHIVEWORKINGDIRECTORY_ISSET_ID = 0;
+  private byte __isset_bitfield = 0;
+  private static final _Fields optionals[] = {_Fields.APPLICATION_DESCRIPTION,_Fields.APPLICATION_MODULES,_Fields.APPLICATION_INPUTS,_Fields.APPLICATION_OUTPUTS,_Fields.ARCHIVE_WORKING_DIRECTORY};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -181,6 +188,8 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
     tmpMap.put(_Fields.APPLICATION_OUTPUTS, new org.apache.thrift.meta_data.FieldMetaData("applicationOutputs", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
             new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.application.io.OutputDataObjectType.class))));
+    tmpMap.put(_Fields.ARCHIVE_WORKING_DIRECTORY, new org.apache.thrift.meta_data.FieldMetaData("archiveWorkingDirectory", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ApplicationInterfaceDescription.class, metaDataMap);
   }
@@ -188,6 +197,8 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
   public ApplicationInterfaceDescription() {
     this.applicationInterfaceId = "DO_NOT_SET_AT_CLIENTS";
 
+    this.archiveWorkingDirectory = false;
+
   }
 
   public ApplicationInterfaceDescription(
@@ -203,6 +214,7 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
    * Performs a deep copy on <i>other</i>.
    */
   public ApplicationInterfaceDescription(ApplicationInterfaceDescription other) {
+    __isset_bitfield = other.__isset_bitfield;
     if (other.isSetApplicationInterfaceId()) {
       this.applicationInterfaceId = other.applicationInterfaceId;
     }
@@ -230,6 +242,7 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
       }
       this.applicationOutputs = __this__applicationOutputs;
     }
+    this.archiveWorkingDirectory = other.archiveWorkingDirectory;
   }
 
   public ApplicationInterfaceDescription deepCopy() {
@@ -245,6 +258,8 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
     this.applicationModules = null;
     this.applicationInputs = null;
     this.applicationOutputs = null;
+    this.archiveWorkingDirectory = false;
+
   }
 
   public String getApplicationInterfaceId() {
@@ -430,6 +445,28 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
     }
   }
 
+  public boolean isArchiveWorkingDirectory() {
+    return this.archiveWorkingDirectory;
+  }
+
+  public void setArchiveWorkingDirectory(boolean archiveWorkingDirectory) {
+    this.archiveWorkingDirectory = archiveWorkingDirectory;
+    setArchiveWorkingDirectoryIsSet(true);
+  }
+
+  public void unsetArchiveWorkingDirectory() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __ARCHIVEWORKINGDIRECTORY_ISSET_ID);
+  }
+
+  /** Returns true if field archiveWorkingDirectory is set (has been assigned a value) and false otherwise */
+  public boolean isSetArchiveWorkingDirectory() {
+    return EncodingUtils.testBit(__isset_bitfield, __ARCHIVEWORKINGDIRECTORY_ISSET_ID);
+  }
+
+  public void setArchiveWorkingDirectoryIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __ARCHIVEWORKINGDIRECTORY_ISSET_ID, value);
+  }
+
   public void setFieldValue(_Fields field, Object value) {
     switch (field) {
     case APPLICATION_INTERFACE_ID:
@@ -480,6 +517,14 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
       }
       break;
 
+    case ARCHIVE_WORKING_DIRECTORY:
+      if (value == null) {
+        unsetArchiveWorkingDirectory();
+      } else {
+        setArchiveWorkingDirectory((Boolean)value);
+      }
+      break;
+
     }
   }
 
@@ -503,6 +548,9 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
     case APPLICATION_OUTPUTS:
       return getApplicationOutputs();
 
+    case ARCHIVE_WORKING_DIRECTORY:
+      return isArchiveWorkingDirectory();
+
     }
     throw new IllegalStateException();
   }
@@ -526,6 +574,8 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
       return isSetApplicationInputs();
     case APPLICATION_OUTPUTS:
       return isSetApplicationOutputs();
+    case ARCHIVE_WORKING_DIRECTORY:
+      return isSetArchiveWorkingDirectory();
     }
     throw new IllegalStateException();
   }
@@ -597,6 +647,15 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
         return false;
     }
 
+    boolean this_present_archiveWorkingDirectory = true && this.isSetArchiveWorkingDirectory();
+    boolean that_present_archiveWorkingDirectory = true && that.isSetArchiveWorkingDirectory();
+    if (this_present_archiveWorkingDirectory || that_present_archiveWorkingDirectory) {
+      if (!(this_present_archiveWorkingDirectory && that_present_archiveWorkingDirectory))
+        return false;
+      if (this.archiveWorkingDirectory != that.archiveWorkingDirectory)
+        return false;
+    }
+
     return true;
   }
 
@@ -634,6 +693,11 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
     if (present_applicationOutputs)
       list.add(applicationOutputs);
 
+    boolean present_archiveWorkingDirectory = true && (isSetArchiveWorkingDirectory());
+    list.add(present_archiveWorkingDirectory);
+    if (present_archiveWorkingDirectory)
+      list.add(archiveWorkingDirectory);
+
     return list.hashCode();
   }
 
@@ -705,6 +769,16 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetArchiveWorkingDirectory()).compareTo(other.isSetArchiveWorkingDirectory());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetArchiveWorkingDirectory()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.archiveWorkingDirectory, other.archiveWorkingDirectory);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     return 0;
   }
 
@@ -780,6 +854,12 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
       }
       first = false;
     }
+    if (isSetArchiveWorkingDirectory()) {
+      if (!first) sb.append(", ");
+      sb.append("archiveWorkingDirectory:");
+      sb.append(this.archiveWorkingDirectory);
+      first = false;
+    }
     sb.append(")");
     return sb.toString();
   }
@@ -807,6 +887,8 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
 
   private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
     try {
+      // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+      __isset_bitfield = 0;
       read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
     } catch (org.apache.thrift.TException te) {
       throw new java.io.IOException(te);
@@ -911,6 +993,14 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
+          case 7: // ARCHIVE_WORKING_DIRECTORY
+            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+              struct.archiveWorkingDirectory = iprot.readBool();
+              struct.setArchiveWorkingDirectoryIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
           default:
             org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
         }
@@ -983,6 +1073,11 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
           oprot.writeFieldEnd();
         }
       }
+      if (struct.isSetArchiveWorkingDirectory()) {
+        oprot.writeFieldBegin(ARCHIVE_WORKING_DIRECTORY_FIELD_DESC);
+        oprot.writeBool(struct.archiveWorkingDirectory);
+        oprot.writeFieldEnd();
+      }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -1015,7 +1110,10 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
       if (struct.isSetApplicationOutputs()) {
         optionals.set(3);
       }
-      oprot.writeBitSet(optionals, 4);
+      if (struct.isSetArchiveWorkingDirectory()) {
+        optionals.set(4);
+      }
+      oprot.writeBitSet(optionals, 5);
       if (struct.isSetApplicationDescription()) {
         oprot.writeString(struct.applicationDescription);
       }
@@ -1046,6 +1144,9 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
           }
         }
       }
+      if (struct.isSetArchiveWorkingDirectory()) {
+        oprot.writeBool(struct.archiveWorkingDirectory);
+      }
     }
 
     @Override
@@ -1055,7 +1156,7 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
       struct.setApplicationInterfaceIdIsSet(true);
       struct.applicationName = iprot.readString();
       struct.setApplicationNameIsSet(true);
-      BitSet incoming = iprot.readBitSet(4);
+      BitSet incoming = iprot.readBitSet(5);
       if (incoming.get(0)) {
         struct.applicationDescription = iprot.readString();
         struct.setApplicationDescriptionIsSet(true);
@@ -1101,6 +1202,10 @@ public class ApplicationInterfaceDescription implements org.apache.thrift.TBase<
         }
         struct.setApplicationOutputsIsSet(true);
       }
+      if (incoming.get(4)) {
+        struct.archiveWorkingDirectory = iprot.readBool();
+        struct.setArchiveWorkingDirectoryIsSet(true);
+      }
     }
   }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/modules/configuration/server/src/main/resources/airavata-server.properties
----------------------------------------------------------------------
diff --git a/modules/configuration/server/src/main/resources/airavata-server.properties b/modules/configuration/server/src/main/resources/airavata-server.properties
index 0b7be61..000e183 100644
--- a/modules/configuration/server/src/main/resources/airavata-server.properties
+++ b/modules/configuration/server/src/main/resources/airavata-server.properties
@@ -37,6 +37,7 @@ registry.jdbc.url=jdbc:derby://localhost:1527/experiment_catalog;create=true;use
 #registry.jdbc.url=jdbc:mysql://localhost:3306/experiment_catalog
 registry.jdbc.user=airavata
 registry.jdbc.password=airavata
+#FIXME: Probably the following property should be removed.
 start.derby.server.mode=true
 validationQuery=SELECT 1 from CONFIGURATION
 cache.enable=true
@@ -167,7 +168,7 @@ job.notification.flags=abe
 credential.store.keystore.url=/Users/chathuri/dev/airavata/credential-store/oa4mp/airavata_sym.jks
 credential.store.keystore.alias=airavata
 credential.store.keystore.password=airavata
-credential.store.jdbc.url=jdbc:derby://localhost:1527/experiment_catalog;create=true;user=airavata;password=airavata
+credential.store.jdbc.url=jdbc:derby://localhost:1527/credential-store;create=true;user=airavata;password=airavata
 credential.store.jdbc.user=airavata
 credential.store.jdbc.password=airavata
 credential.store.jdbc.driver=org.apache.derby.jdbc.ClientDriver

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ApplicationInterfaceImpl.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ApplicationInterfaceImpl.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ApplicationInterfaceImpl.java
index 0a5806a..e6af5bb 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ApplicationInterfaceImpl.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ApplicationInterfaceImpl.java
@@ -76,6 +76,7 @@ public class ApplicationInterfaceImpl implements ApplicationInterface {
             }
             resource.setAppDescription(applicationInterfaceDescription.getApplicationDescription());
             resource.setGatewayId(gatewayId);
+            resource.setArchiveWorkingDirectory(applicationInterfaceDescription.isArchiveWorkingDirectory());
             resource.save();
             applicationInterfaceDescription.setApplicationInterfaceId(resource.getInterfaceId());
 
@@ -177,6 +178,7 @@ public class ApplicationInterfaceImpl implements ApplicationInterface {
             AppInterfaceResource existingInterface = (AppInterfaceResource) resource.get(interfaceId);
             existingInterface.setAppName(updatedInterface.getApplicationName());
             existingInterface.setAppDescription(updatedInterface.getApplicationDescription());
+            existingInterface.setArchiveWorkingDirectory(updatedInterface.isArchiveWorkingDirectory());
             existingInterface.save();
 
             // remove existing modules before adding

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ApplicationInterface.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ApplicationInterface.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ApplicationInterface.java
index 7beb05c..30cc95f 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ApplicationInterface.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ApplicationInterface.java
@@ -42,7 +42,8 @@ public class ApplicationInterface implements Serializable {
     private Timestamp creationTime;
     @Column(name = "GATEWAY_ID")
     private String gatewayId;
-
+    @Column(name = "ARCHIVE_WORKING_DIRECTORY")
+    private boolean archiveWorkingDirectory;
     @Column(name = "UPDATE_TIME")
     private Timestamp updateTime;
 
@@ -54,6 +55,14 @@ public class ApplicationInterface implements Serializable {
         this.gatewayId = gatewayId;
     }
 
+    public boolean isArchiveWorkingDirectory() {
+        return archiveWorkingDirectory;
+    }
+
+    public void setArchiveWorkingDirectory(boolean archiveWorkingDirectory) {
+        this.archiveWorkingDirectory = archiveWorkingDirectory;
+    }
+
     public Timestamp getCreationTime() {
         return creationTime;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppInterfaceResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppInterfaceResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppInterfaceResource.java
index 967ebf4..72be684 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppInterfaceResource.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppInterfaceResource.java
@@ -45,6 +45,7 @@ public class AppInterfaceResource extends AppCatAbstractResource {
     private Timestamp createdTime;
     private Timestamp updatedTime;
     private String gatewayId;
+    private boolean archiveWorkingDirectory;
 
     public String getGatewayId() {
         return gatewayId;
@@ -54,6 +55,14 @@ public class AppInterfaceResource extends AppCatAbstractResource {
         this.gatewayId = gatewayId;
     }
 
+    public boolean isArchiveWorkingDirectory() {
+        return archiveWorkingDirectory;
+    }
+
+    public void setArchiveWorkingDirectory(boolean archiveWorkingDirectory) {
+        this.archiveWorkingDirectory = archiveWorkingDirectory;
+    }
+
     public Timestamp getCreatedTime() {
         return createdTime;
     }
@@ -360,6 +369,7 @@ public class AppInterfaceResource extends AppCatAbstractResource {
                 existigAppInterface.setAppDescription(appDescription);
                 existigAppInterface.setUpdateTime(AiravataUtils.getCurrentTimestamp());
                 existigAppInterface.setGatewayId(gatewayId);
+                existigAppInterface.setArchiveWorkingDirectory(archiveWorkingDirectory);
                 em.merge(existigAppInterface);
             }else {
                 ApplicationInterface applicationInterface = new ApplicationInterface();
@@ -368,6 +378,7 @@ public class AppInterfaceResource extends AppCatAbstractResource {
                 applicationInterface.setAppDescription(appDescription);
                 applicationInterface.setCreationTime(AiravataUtils.getCurrentTimestamp());
                 applicationInterface.setGatewayId(gatewayId);
+                applicationInterface.setArchiveWorkingDirectory(archiveWorkingDirectory);
                 em.persist(applicationInterface);
             }
             em.getTransaction().commit();

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
index aa98a21..9151e23 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
@@ -609,6 +609,7 @@ public class AppCatalogThriftConversion {
         description.setApplicationInterfaceId(resource.getInterfaceId());
         description.setApplicationName(resource.getAppName());
         description.setApplicationDescription(resource.getAppDescription());
+        description.setArchiveWorkingDirectory(resource.isArchiveWorkingDirectory());
 
         AppModuleMappingAppCatalogResourceAppCat appModuleMappingResource = new AppModuleMappingAppCatalogResourceAppCat();
         List<AppCatalogResource> appModules = appModuleMappingResource.get(AppCatAbstractResource.AppModuleMappingConstants.INTERFACE_ID, resource.getInterfaceId());

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql b/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
index 09cb6b2..0026834 100644
--- a/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
+++ b/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
@@ -268,6 +268,7 @@ CREATE TABLE APPLICATION_INTERFACE
          APPLICATION_NAME VARCHAR(255),
          APPLICATION_DESCRIPTION VARCHAR(500),
          GATEWAY_ID VARCHAR(255),
+         ARCHIVE_WORKING_DIRECTORY SMALLINT,
          CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
          UPDATE_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
          PRIMARY KEY(INTERFACE_ID)

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql b/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
index b091c16..8a042e2 100644
--- a/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
+++ b/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
@@ -266,8 +266,10 @@ CREATE TABLE APPLICATION_INTERFACE
          INTERFACE_ID VARCHAR(255),
          APPLICATION_NAME VARCHAR(255),
          APPLICATION_DESCRIPTION VARCHAR(500),
-	     CREATION_TIME TIMESTAMP DEFAULT NOW(),
-         UPDATE_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00' ,
+         GATEWAY_ID VARCHAR(255),
+         ARCHIVE_WORKING_DIRECTORY SMALLINT,
+	       CREATION_TIME TIMESTAMP DEFAULT NOW(),
+         UPDATE_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
          PRIMARY KEY(INTERFACE_ID)
 );
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/7fbc6241/thrift-interface-descriptions/data-models/app-catalog-models/application_interface_model.thrift
----------------------------------------------------------------------
diff --git a/thrift-interface-descriptions/data-models/app-catalog-models/application_interface_model.thrift b/thrift-interface-descriptions/data-models/app-catalog-models/application_interface_model.thrift
index 690e454..1598399 100644
--- a/thrift-interface-descriptions/data-models/app-catalog-models/application_interface_model.thrift
+++ b/thrift-interface-descriptions/data-models/app-catalog-models/application_interface_model.thrift
@@ -52,5 +52,6 @@ struct ApplicationInterfaceDescription {
     3: optional string applicationDescription,
     4: optional list<string> applicationModules,
     5: optional list<application_io_models.InputDataObjectType> applicationInputs,
-    6: optional list<application_io_models.OutputDataObjectType> applicationOutputs
+    6: optional list<application_io_models.OutputDataObjectType> applicationOutputs,
+    7: optional bool archiveWorkingDirectory = 0
 }
\ No newline at end of file