You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2014/07/06 03:31:14 UTC

[2/2] git commit: https://issues.apache.org/jira/browse/AIRAVATA-1228

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


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

Branch: refs/heads/master
Commit: 097d955e3beeb9474e3418a6c2295cccce54832e
Parents: b085e96
Author: Saminda Wijeratne <sa...@gmail.com>
Authored: Sat Jul 5 21:30:38 2014 -0400
Committer: Saminda Wijeratne <sa...@gmail.com>
Committed: Sat Jul 5 21:30:38 2014 -0400

----------------------------------------------------------------------
 .../airavata/model/util/AppDeploymentUtil.java  |   3 +-
 .../model/util/ComputeResourceUtil.java         | 110 +--
 .../appcatalog/cpi/ComputeResource.java         | 104 +--
 .../catalog/data/impl/AppCatalogImpl.java       |   7 +
 .../data/impl/ApplicationDeploymentImpl.java    |   6 +-
 .../catalog/data/impl/ComputeResourceImpl.java  | 844 ++++++++++---------
 .../data/util/AppCatalogThriftConversion.java   | 477 +++++++----
 .../app/catalog/test/AppDeploymentTest.java     |   3 +-
 .../app/catalog/test/ComputeResourceTest.java   | 368 ++++----
 .../airavata/gfac/core/cpi/BetterGfacImpl.java  | 237 +++---
 10 files changed, 1147 insertions(+), 1012 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/097d955e/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/AppDeploymentUtil.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/AppDeploymentUtil.java b/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/AppDeploymentUtil.java
index 4e1a369..28a3c1d 100644
--- a/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/AppDeploymentUtil.java
+++ b/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/AppDeploymentUtil.java
@@ -35,7 +35,8 @@ public class AppDeploymentUtil {
         description.setComputeHostId(computeHost);
         description.setExecutablePath(executablePath);
         description.setAppDeploymentDescription(appDepDescription);
-        description.setModuleLoadCmd(moduleLoadCmd);
+        //TODO
+//        description.setModuleLoadCmd(moduleLoadCmd);
         return description;
     }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/097d955e/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ComputeResourceUtil.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ComputeResourceUtil.java b/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ComputeResourceUtil.java
index 8a885b6..dafe83a 100644
--- a/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ComputeResourceUtil.java
+++ b/airavata-api/airavata-model-utils/src/main/java/org/apache/airavata/model/util/ComputeResourceUtil.java
@@ -26,59 +26,59 @@ import org.apache.airavata.model.appcatalog.computeresource.*;
 import java.util.List;
 
 public class ComputeResourceUtil {
-    public static ComputeResourceDescription createComputeResource (String resourceName,
-                                                                    String resourceDesc,
-                                                                    String preferedSubmissionProtocol){
-        ComputeResourceDescription computeResource = new ComputeResourceDescription();
-        computeResource.setHostName(resourceName);
-        computeResource.setResourceDescription(resourceDesc);
-        computeResource.setPreferredJobSubmissionProtocol(preferedSubmissionProtocol);
-        return computeResource;
-    }
-
-    public static SSHJobSubmission createSSHJobSubmission (int sshPort,
-                                                        ResourceJobManager jobManager){
-        SSHJobSubmission jobSubmission = new SSHJobSubmission();
-        jobSubmission.setResourceJobManager(jobManager);
-        jobSubmission.setSshPort(sshPort);
-        return jobSubmission;
-    }
-
-    public static GSISSHJobSubmission createGSISSHJobSubmission (int sshPort,
-                                                              ResourceJobManager jobManager,
-                                                              String installedPath,
-                                                              String monitorMode){
-        GSISSHJobSubmission jobSubmission = new GSISSHJobSubmission();
-        jobSubmission.setResourceJobManager(jobManager);
-        jobSubmission.setSshPort(sshPort);
-        jobSubmission.setInstalledPath(installedPath);
-        jobSubmission.setMonitorMode(monitorMode);
-        return jobSubmission;
-    }
-
-    public static GlobusJobSubmission createGlobusJobSubmission (SecurityProtocol securityProtocol,
-                                                                 ResourceJobManager resourceJobManager,
-                                                                 List<String> globusEPs){
-        GlobusJobSubmission jobSubmission = new GlobusJobSubmission();
-        jobSubmission.setResourceJobManager(resourceJobManager);
-        jobSubmission.setSecurityProtocol(securityProtocol);
-        jobSubmission.setGlobusGateKeeperEndPoint(globusEPs);
-        return jobSubmission;
-    }
-
-    public static SCPDataMovement createSCPDataMovement (SecurityProtocol securityProtocol,
-                                                         int sshPort){
-        SCPDataMovement dataMovement = new SCPDataMovement();
-        dataMovement.setSecurityProtocol(securityProtocol);
-        dataMovement.setSshPort(sshPort);
-        return dataMovement;
-    }
-
-    public static GridFTPDataMovement createGridFTPDataMovement (SecurityProtocol securityProtocol,
-                                                                List<String> gridFTPEPs){
-        GridFTPDataMovement dataMovement = new GridFTPDataMovement();
-        dataMovement.setSecurityProtocol(securityProtocol);
-        dataMovement.setGridFTPEndPoint(gridFTPEPs);
-        return dataMovement;
-    }
+//    public static ComputeResourceDescription createComputeResource (String resourceName,
+//                                                                    String resourceDesc,
+//                                                                    String preferedSubmissionProtocol){
+//        ComputeResourceDescription computeResource = new ComputeResourceDescription();
+//        computeResource.setHostName(resourceName);
+//        computeResource.setResourceDescription(resourceDesc);
+//        computeResource.setPreferredJobSubmissionProtocol(preferedSubmissionProtocol);
+//        return computeResource;
+//    }
+//
+//    public static SSHJobSubmission createSSHJobSubmission (int sshPort,
+//                                                        ResourceJobManager jobManager){
+//        SSHJobSubmission jobSubmission = new SSHJobSubmission();
+//        jobSubmission.setResourceJobManager(jobManager);
+//        jobSubmission.setSshPort(sshPort);
+//        return jobSubmission;
+//    }
+//
+//    public static GSISSHJobSubmission createGSISSHJobSubmission (int sshPort,
+//                                                              ResourceJobManager jobManager,
+//                                                              String installedPath,
+//                                                              String monitorMode){
+//        GSISSHJobSubmission jobSubmission = new GSISSHJobSubmission();
+//        jobSubmission.setResourceJobManager(jobManager);
+//        jobSubmission.setSshPort(sshPort);
+//        jobSubmission.setInstalledPath(installedPath);
+//        jobSubmission.setMonitorMode(monitorMode);
+//        return jobSubmission;
+//    }
+//
+//    public static GlobusJobSubmission createGlobusJobSubmission (SecurityProtocol securityProtocol,
+//                                                                 ResourceJobManager resourceJobManager,
+//                                                                 List<String> globusEPs){
+//        GlobusJobSubmission jobSubmission = new GlobusJobSubmission();
+//        jobSubmission.setResourceJobManager(resourceJobManager);
+//        jobSubmission.setSecurityProtocol(securityProtocol);
+//        jobSubmission.setGlobusGateKeeperEndPoint(globusEPs);
+//        return jobSubmission;
+//    }
+//
+//    public static SCPDataMovement createSCPDataMovement (SecurityProtocol securityProtocol,
+//                                                         int sshPort){
+//        SCPDataMovement dataMovement = new SCPDataMovement();
+//        dataMovement.setSecurityProtocol(securityProtocol);
+//        dataMovement.setSshPort(sshPort);
+//        return dataMovement;
+//    }
+//
+//    public static GridFTPDataMovement createGridFTPDataMovement (SecurityProtocol securityProtocol,
+//                                                                List<String> gridFTPEPs){
+//        GridFTPDataMovement dataMovement = new GridFTPDataMovement();
+//        dataMovement.setSecurityProtocol(securityProtocol);
+//        dataMovement.setGridFTPEndPoint(gridFTPEPs);
+//        return dataMovement;
+//    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/097d955e/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java b/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java
index dbe0bf7..a4bea56 100644
--- a/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java
+++ b/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java
@@ -1,10 +1,16 @@
 package org.airavata.appcatalog.cpi;
 
-import org.apache.airavata.model.appcatalog.computeresource.*;
-
 import java.util.List;
 import java.util.Map;
 
+import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription;
+import org.apache.airavata.model.appcatalog.computeresource.DataMovementInterface;
+import org.apache.airavata.model.appcatalog.computeresource.GlobusJobSubmission;
+import org.apache.airavata.model.appcatalog.computeresource.GridFTPDataMovement;
+import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionInterface;
+import org.apache.airavata.model.appcatalog.computeresource.SCPDataMovement;
+import org.apache.airavata.model.appcatalog.computeresource.SSHJobSubmission;
+
 public interface ComputeResource {
     /**
      * This function will add a compute resource description to the database
@@ -31,21 +37,7 @@ public interface ComputeResource {
      * @param computeResourceId compute resource id
      * @param jobSubmissionId job submission id
      */
-    void addSSHJobSubmissionProtocol(String computeResourceId, String jobSubmissionId) throws AppCatalogException;
-
-    /**
-     * This method will add a GSISSHJobSubmission to the database
-     * @param gsisshJobSubmission GSISSHJobSubmission object
-     * @return uniquely generated submission id
-     */
-    String addGSISSHJobSubmission (GSISSHJobSubmission gsisshJobSubmission) throws AppCatalogException;
-
-    /**
-     * This will add a GSISSHJobSubmission protocol to the database
-     * @param computeResourceId compute resource id
-     * @param jobSubmissionId job submission id
-     */
-    void addGSISSHJobSubmissionProtocol (String computeResourceId, String jobSubmissionId) throws AppCatalogException;
+    void addSSHJobSubmissionProtocol(String computeResourceId, JobSubmissionInterface jobSubmissionInterface) throws AppCatalogException;
 
     /**
      * This method will add a GlobusJobSubmission to the database
@@ -73,7 +65,7 @@ public interface ComputeResource {
      * @param computeResourceId compute resource id
      * @param dataMoveId data movement id
      */
-    void addScpDataMovementProtocol (String computeResourceId, String dataMoveId) throws AppCatalogException;
+    void addScpDataMovementProtocol (String computeResourceId, DataMovementInterface dataMovementInterface) throws AppCatalogException;
 
     /**
      * This method will add a GridFTP Data movement to the database
@@ -103,33 +95,19 @@ public interface ComputeResource {
      */
     List<ComputeResourceDescription> getComputeResourceList (Map<String, String> filters) throws AppCatalogException;
 
-    /**
-     * This method will retrieve GSISSHJobSubmission object
-     * @param submissionId unique submission id
-     * @return GSISSHSubmission object
-     */
-    GSISSHJobSubmission getGSISSHJobSubmission (String submissionId) throws AppCatalogException;
-
-    /**
-     * This method will return a list of GSISSHSubmission objects according to given search criteria
-     * @param filters map should be provided as the field name and it's value
-     * @return list of GSISSHSubmission objects
-     */
-    List<GSISSHJobSubmission> getGSISSHJobSubmissionList (Map<String, String> filters) throws AppCatalogException;
-
-    /**
-     * This method will retrieve GlobusJobSubmission object
-     * @param submissionId unique submission id
-     * @return GlobusJobSubmission object
-     */
-    GlobusJobSubmission getGlobusJobSubmission (String submissionId) throws AppCatalogException;
-
-    /**
-     * This method will return a list of GlobusJobSubmission objects according to given search criteria
-     * @param filters map should be provided as the field name and it's value
-     * @return list of GlobusJobSubmission objects
-     */
-    List<GlobusJobSubmission> getGlobusJobSubmissionList (Map<String, String> filters) throws AppCatalogException;
+//    /**
+//     * This method will retrieve GlobusJobSubmission object
+//     * @param submissionId unique submission id
+//     * @return GlobusJobSubmission object
+//     */
+//    GlobusJobSubmission getGlobusJobSubmission (String submissionId) throws AppCatalogException;
+//
+//    /**
+//     * This method will return a list of GlobusJobSubmission objects according to given search criteria
+//     * @param filters map should be provided as the field name and it's value
+//     * @return list of GlobusJobSubmission objects
+//     */
+//    List<GlobusJobSubmission> getGlobusJobSubmissionList (Map<String, String> filters) throws AppCatalogException;
 
     /**
      * This method will retrieve GSISSHJobSubmission object
@@ -138,12 +116,12 @@ public interface ComputeResource {
      */
     SSHJobSubmission getSSHJobSubmission (String submissionId) throws AppCatalogException;
 
-    /**
-     * This method will return a list of GSISSHSubmission objects according to given search criteria
-     * @param filters map should be provided as the field name and it's value
-     * @return list of GSISSHSubmission objects
-     */
-    List<SSHJobSubmission> getSSHJobSubmissionList (Map<String, String> filters) throws AppCatalogException;
+//    /**
+//     * This method will return a list of GSISSHSubmission objects according to given search criteria
+//     * @param filters map should be provided as the field name and it's value
+//     * @return list of GSISSHSubmission objects
+//     */
+//    List<SSHJobSubmission> getSSHJobSubmissionList (Map<String, String> filters) throws AppCatalogException;
     /**
      * This method will retrieve SCP Data movement object
      * @param dataMoveId unique data move id
@@ -151,12 +129,12 @@ public interface ComputeResource {
      */
     SCPDataMovement getSCPDataMovement (String dataMoveId) throws AppCatalogException;
 
-    /**
-     * This method will return a list of SCPDataMovement objects according to given search criteria
-     * @param filters map should be provided as the field name and it's value
-     * @return list of SCPDataMovement objects
-     */
-    List<SCPDataMovement> getSCPDataMovementList (Map<String, String> filters) throws AppCatalogException;
+//    /**
+//     * This method will return a list of SCPDataMovement objects according to given search criteria
+//     * @param filters map should be provided as the field name and it's value
+//     * @return list of SCPDataMovement objects
+//     */
+//    List<SCPDataMovement> getSCPDataMovementList (Map<String, String> filters) throws AppCatalogException;
 
     /**
      * This method will retrieve GridFTPDataMovement object
@@ -165,12 +143,12 @@ public interface ComputeResource {
      */
     GridFTPDataMovement getGridFTPDataMovement (String dataMoveId) throws AppCatalogException;
 
-    /**
-     * This method will return a list of GridFTPDataMovement objects according to given search criteria
-     * @param filters map should be provided as the field name and it's value
-     * @return list of GridFTPDataMovement objects
-     */
-    List<GridFTPDataMovement> getGridFTPDataMovementList (Map<String, String> filters) throws AppCatalogException;
+//    /**
+//     * This method will return a list of GridFTPDataMovement objects according to given search criteria
+//     * @param filters map should be provided as the field name and it's value
+//     * @return list of GridFTPDataMovement objects
+//     */
+//    List<GridFTPDataMovement> getGridFTPDataMovementList (Map<String, String> filters) throws AppCatalogException;
 
     /**
      * This method will check whether the given resource already exists in the system

http://git-wip-us.apache.org/repos/asf/airavata/blob/097d955e/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogImpl.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogImpl.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogImpl.java
index aedbca1..efa61a8 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogImpl.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogImpl.java
@@ -22,9 +22,11 @@
 package org.apache.aiaravata.application.catalog.data.impl;
 
 import org.airavata.appcatalog.cpi.AppCatalog;
+import org.airavata.appcatalog.cpi.AppCatalogException;
 import org.airavata.appcatalog.cpi.ApplicationDeployment;
 import org.airavata.appcatalog.cpi.ApplicationInterface;
 import org.airavata.appcatalog.cpi.ComputeResource;
+import org.airavata.appcatalog.cpi.GProfile;
 
 public class AppCatalogImpl implements AppCatalog {
     @Override
@@ -41,4 +43,9 @@ public class AppCatalogImpl implements AppCatalog {
     public ApplicationDeployment getApplicationDeployment() {
         return new ApplicationDeploymentImpl();
     }
+
+	@Override
+	public GProfile getGatewayProfile() throws AppCatalogException {
+		return new GatewayProfileImpl();
+	}
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/097d955e/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java
index 6b751ab..c598fd3 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java
@@ -60,7 +60,8 @@ public class ApplicationDeploymentImpl implements ApplicationDeployment {
             deploymentResource.setHostResource((ComputeResourceResource)computeHostResource.get(deploymentDescription.getComputeHostId()));
             deploymentResource.setAppDes(deploymentDescription.getAppDeploymentDescription());
             deploymentResource.setExecutablePath(deploymentDescription.getExecutablePath());
-            deploymentResource.setEnvModuleLoadCMD(deploymentDescription.getModuleLoadCmd());
+            //TODO
+//            deploymentResource.setEnvModuleLoadCMD(deploymentDescription.getModuleLoadCmd());
             deploymentResource.save();
             deploymentDescription.setAppDeploymentId(deploymentResource.getDeploymentId());
 
@@ -127,7 +128,8 @@ public class ApplicationDeploymentImpl implements ApplicationDeployment {
             existingDep.setHostResource((ComputeResourceResource)computeHostResource.get(updatedDeployment.getComputeHostId()));
             existingDep.setAppDes(updatedDeployment.getAppDeploymentDescription());
             existingDep.setExecutablePath(updatedDeployment.getExecutablePath());
-            existingDep.setEnvModuleLoadCMD(updatedDeployment.getModuleLoadCmd());
+            //TODO
+//            existingDep.setEnvModuleLoadCMD(updatedDeployment.getModuleLoadCmd());
             existingDep.save();
 
             List<SetEnvPaths> libPrependPaths = updatedDeployment.getLibPrependPaths();

http://git-wip-us.apache.org/repos/asf/airavata/blob/097d955e/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java
index d23d5ea..b0903f7 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java
@@ -21,160 +21,170 @@
 
 package org.apache.aiaravata.application.catalog.data.impl;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.airavata.appcatalog.cpi.AppCatalogException;
 import org.airavata.appcatalog.cpi.ComputeResource;
-import org.apache.aiaravata.application.catalog.data.resources.*;
+import org.apache.aiaravata.application.catalog.data.resources.AbstractResource;
+import org.apache.aiaravata.application.catalog.data.resources.BatchQueueResource;
+import org.apache.aiaravata.application.catalog.data.resources.ComputeResourceFileSystemResource;
+import org.apache.aiaravata.application.catalog.data.resources.ComputeResourceResource;
+import org.apache.aiaravata.application.catalog.data.resources.DataMovementInterfaceResource;
+import org.apache.aiaravata.application.catalog.data.resources.DataMovementProtocolResource;
+import org.apache.aiaravata.application.catalog.data.resources.GridftpDataMovementResource;
+import org.apache.aiaravata.application.catalog.data.resources.GridftpEndpointResource;
+import org.apache.aiaravata.application.catalog.data.resources.HostAliasResource;
+import org.apache.aiaravata.application.catalog.data.resources.HostIPAddressResource;
+import org.apache.aiaravata.application.catalog.data.resources.JobSubmissionInterfaceResource;
+import org.apache.aiaravata.application.catalog.data.resources.Resource;
+import org.apache.aiaravata.application.catalog.data.resources.ScpDataMovementResource;
+import org.apache.aiaravata.application.catalog.data.resources.SshJobSubmissionResource;
 import org.apache.aiaravata.application.catalog.data.util.AppCatalogThriftConversion;
 import org.apache.aiaravata.application.catalog.data.util.AppCatalogUtils;
-import org.apache.airavata.model.appcatalog.computeresource.*;
+import org.apache.airavata.model.appcatalog.computeresource.BatchQueue;
+import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription;
+import org.apache.airavata.model.appcatalog.computeresource.DataMovementInterface;
+import org.apache.airavata.model.appcatalog.computeresource.DataMovementProtocol;
+import org.apache.airavata.model.appcatalog.computeresource.FileSystems;
+import org.apache.airavata.model.appcatalog.computeresource.GlobusJobSubmission;
+import org.apache.airavata.model.appcatalog.computeresource.GridFTPDataMovement;
+import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionInterface;
+import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol;
+import org.apache.airavata.model.appcatalog.computeresource.SCPDataMovement;
+import org.apache.airavata.model.appcatalog.computeresource.SSHJobSubmission;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 public class ComputeResourceImpl implements ComputeResource {
     private final static Logger logger = LoggerFactory.getLogger(ComputeResourceImpl.class);
 
     @Override
     public String addComputeResource(ComputeResourceDescription description) throws AppCatalogException {
         try {
-            ComputeResourceResource computeHostResource = new ComputeResourceResource();
-            computeHostResource.setHostName(description.getHostName());
-            computeHostResource.setResoureId(AppCatalogUtils.getID(description.getHostName()));
-            description.setResourceId(computeHostResource.getResoureId());
-            computeHostResource.setPreferredJobSubmissionProtocol(description.getPreferredJobSubmissionProtocol());
-            computeHostResource.setDescription(description.getResourceDescription());
-            computeHostResource.save();
-            description.setResourceId(computeHostResource.getResoureId());
-
-            Set<String> hostAliases = description.getHostAliases();
-            if (hostAliases != null && !hostAliases.isEmpty()) {
-                for (String alias : hostAliases) {
-                    HostAliasResource aliasResource = new HostAliasResource();
-                    aliasResource.setComputeHostResource(computeHostResource);
-                    aliasResource.setResourceID(computeHostResource.getResoureId());
-                    aliasResource.setAlias(alias);
-                    aliasResource.save();
-                }
-            }
-
-            Set<String> ipAddresses = description.getIpAddresses();
-            if (ipAddresses != null && !ipAddresses.isEmpty()) {
-                for (String ipAddress : ipAddresses) {
-                    HostIPAddressResource ipAddressResource = new HostIPAddressResource();
-                    ipAddressResource.setComputeHostResource(computeHostResource);
-                    ipAddressResource.setResourceID(computeHostResource.getResoureId());
-                    ipAddressResource.setIpaddress(ipAddress);
-                    ipAddressResource.save();
-                }
-            }
-
-            Map<String, JobSubmissionProtocol> jobSubmissionProtocols = description.getJobSubmissionProtocols();
-            if (jobSubmissionProtocols != null && !jobSubmissionProtocols.isEmpty()) {
-                for (String key : jobSubmissionProtocols.keySet()) {
-                    JobSubmissionProtocol jobSubmissionProtocol = jobSubmissionProtocols.get(key);
-                    JobSubmissionProtocolResource resource = new JobSubmissionProtocolResource();
-                    resource.setResourceID(computeHostResource.getResoureId());
-                    resource.setComputeHostResource(computeHostResource);
-                    resource.setSubmissionID(key);
-                    resource.setJobType(jobSubmissionProtocol.toString());
-                    resource.save();
-                }
-            }
-            Map<String, DataMovementProtocol> movementProtocols = description.getDataMovementProtocols();
-            if (movementProtocols != null && !movementProtocols.isEmpty()) {
-                for (String key : movementProtocols.keySet()) {
-                    DataMovementProtocol dataMovementProtocol = movementProtocols.get(key);
-                    DataMovementProtocolResource resource = new DataMovementProtocolResource();
-                    resource.setResourceID(computeHostResource.getResoureId());
-                    resource.setComputeHostResource(computeHostResource);
-                    resource.setDataMoveID(key);
-                    resource.setDataMoveType(dataMovementProtocol.toString());
-                    resource.save();
-                }
-            }
-            return computeHostResource.getResoureId();
+        	description.setComputeResourceId(AppCatalogUtils.getID(description.getHostName()));
+        	return saveComputeResourceDescriptorData(description);
         } catch (Exception e) {
             logger.error("Error while saving compute resource...", e);
             throw new AppCatalogException(e);
         }
     }
 
+	protected String saveComputeResourceDescriptorData(
+			ComputeResourceDescription description) throws AppCatalogException {
+		//TODO remove existing one
+		ComputeResourceResource computeHostResource = saveComputeResource(description);
+		saveHostAliases(description, computeHostResource);
+		saveIpAddresses(description, computeHostResource);
+		saveBatchQueues(description, computeHostResource);
+		saveFileSystems(description, computeHostResource);
+		saveJobSubmissionInterfaces(description, computeHostResource);
+		saveDataMovementInterfaces(description, computeHostResource);
+		return computeHostResource.getResourceId();
+	}
+
+	protected ComputeResourceResource saveComputeResource(
+			ComputeResourceDescription description) throws AppCatalogException {
+		ComputeResourceResource computeHostResource = AppCatalogThriftConversion.getComputeHostResource(description);
+		computeHostResource.save();
+		return computeHostResource;
+	}
+
+	protected void saveDataMovementInterfaces(
+			ComputeResourceDescription description,
+			ComputeResourceResource computeHostResource)
+			throws AppCatalogException {
+		List<DataMovementInterface> dataMovemenetInterfaces = description.getDataMovemenetInterfaces();
+		if (dataMovemenetInterfaces != null && !dataMovemenetInterfaces.isEmpty()) {
+		    for (DataMovementInterface dataMovementInterface : dataMovemenetInterfaces) {
+		    	DataMovementInterfaceResource dmir = AppCatalogThriftConversion.getDataMovementInterface(dataMovementInterface);
+		    	dmir.setComputeHostResource(computeHostResource);
+		    	dmir.setComputeResourceId(computeHostResource.getResourceId());
+				computeHostResource.save();
+		    }
+		}
+	}
+
+	protected void saveJobSubmissionInterfaces(
+			ComputeResourceDescription description,
+			ComputeResourceResource computeHostResource)
+			throws AppCatalogException {
+		List<JobSubmissionInterface> jobSubmissionInterfaces = description.getJobSubmissionInterfaces();
+		if (jobSubmissionInterfaces != null && !jobSubmissionInterfaces.isEmpty()) {
+		    for (JobSubmissionInterface jobSubmissionInterface : jobSubmissionInterfaces) {
+		    	JobSubmissionInterfaceResource jsir = AppCatalogThriftConversion.getJobSubmissionInterface(jobSubmissionInterface);
+				jsir.setComputeHostResource(computeHostResource);
+				jsir.setComputeResourceId(computeHostResource.getResourceId());
+				computeHostResource.save();
+		    }
+		}
+	}
+
+	protected void saveFileSystems(ComputeResourceDescription description,
+			ComputeResourceResource computeHostResource)
+			throws AppCatalogException {
+		Map<FileSystems, String> fileSystems = description.getFileSystems();
+		if (fileSystems != null && !fileSystems.isEmpty()) {
+		    for (FileSystems key : fileSystems.keySet()) {
+		    	ComputeResourceFileSystemResource computeResourceFileSystemResource = new ComputeResourceFileSystemResource();
+		    	computeResourceFileSystemResource.setComputeHostResource(computeHostResource);
+		    	computeResourceFileSystemResource.setComputeResourceId(computeHostResource.getResourceId());
+		    	computeResourceFileSystemResource.setFileSystem(key.toString());
+		    	computeResourceFileSystemResource.setPath(fileSystems.get(key));
+		    	computeResourceFileSystemResource.save();
+		    }
+		}
+	}
+
+	protected void saveBatchQueues(ComputeResourceDescription description,
+			ComputeResourceResource computeHostResource)
+			throws AppCatalogException {
+		List<BatchQueue> batchQueueList = description.getBatchQueues();
+		if (batchQueueList != null && !batchQueueList.isEmpty()) {
+		    for (BatchQueue batchQueue : batchQueueList) {
+		    	BatchQueueResource bq = AppCatalogThriftConversion.getBatchQueue(batchQueue);
+		    	bq.setComputeResourceId(computeHostResource.getResourceId());
+		    	bq.setComputeHostResource(computeHostResource);
+		        bq.save();
+		    }
+		}
+	}
+
+	protected void saveIpAddresses(ComputeResourceDescription description,
+			ComputeResourceResource computeHostResource)
+			throws AppCatalogException {
+		Set<String> ipAddresses = description.getIpAddresses();
+		if (ipAddresses != null && !ipAddresses.isEmpty()) {
+		    for (String ipAddress : ipAddresses) {
+		        HostIPAddressResource ipAddressResource = new HostIPAddressResource();
+		        ipAddressResource.setComputeHostResource(computeHostResource);
+		        ipAddressResource.setResourceID(computeHostResource.getResourceId());
+		        ipAddressResource.setIpaddress(ipAddress);
+		        ipAddressResource.save();
+		    }
+		}
+	}
+
+	protected void saveHostAliases(ComputeResourceDescription description,
+			ComputeResourceResource computeHostResource)
+			throws AppCatalogException {
+		Set<String> hostAliases = description.getHostAliases();
+		if (hostAliases != null && !hostAliases.isEmpty()) {
+		    for (String alias : hostAliases) {
+		        HostAliasResource aliasResource = new HostAliasResource();
+		        aliasResource.setComputeHostResource(computeHostResource);
+		        aliasResource.setResourceID(computeHostResource.getResourceId());
+		        aliasResource.setAlias(alias);
+		        aliasResource.save();
+		    }
+		}
+	}
+
     @Override
     public void updateComputeResource(String computeResourceId, ComputeResourceDescription updatedComputeResource) throws AppCatalogException{
         try {
-            ComputeResourceResource computeHostResource = new ComputeResourceResource();
-            ComputeResourceResource existingComputeResouce = (ComputeResourceResource)computeHostResource.get(computeResourceId);
-            existingComputeResouce.setHostName(updatedComputeResource.getHostName());
-            existingComputeResouce.setPreferredJobSubmissionProtocol(updatedComputeResource.getPreferredJobSubmissionProtocol());
-            existingComputeResouce.setDescription(updatedComputeResource.getResourceDescription());
-            existingComputeResouce.save();
-
-            Set<String> hostAliases = updatedComputeResource.getHostAliases();
-            if (hostAliases != null && !hostAliases.isEmpty()) {
-                for (String alias : hostAliases) {
-                    HostAliasResource aliasResource = new HostAliasResource();
-                    Map<String, String> ids = new HashMap<String, String>();
-                    ids.put(AbstractResource.HostAliasConstants.RESOURCE_ID, computeResourceId);
-                    ids.put(AbstractResource.HostAliasConstants.ALIAS, alias);
-                    HostAliasResource existingAlias = (HostAliasResource)aliasResource.get(ids);
-                    existingAlias.setComputeHostResource(existingComputeResouce);
-                    existingAlias.setAlias(alias);
-                    existingAlias.save();
-                }
-            }
-
-            Set<String> ipAddresses = updatedComputeResource.getIpAddresses();
-            if (ipAddresses != null && !ipAddresses.isEmpty()) {
-                for (String ipAddress : ipAddresses) {
-                    HostIPAddressResource ipAddressResource = new HostIPAddressResource();
-                    Map<String, String> ids = new HashMap<String, String>();
-                    ids.put(AbstractResource.HostIPAddressConstants.RESOURCE_ID, computeResourceId);
-                    ids.put(AbstractResource.HostIPAddressConstants.IP_ADDRESS, ipAddress);
-                    HostIPAddressResource existingIpAddress = (HostIPAddressResource)ipAddressResource.get(ids);
-                    existingIpAddress.setComputeHostResource(existingComputeResouce);
-                    existingIpAddress.setResourceID(computeResourceId);
-                    existingIpAddress.setIpaddress(ipAddress);
-                    existingIpAddress.save();
-                }
-            }
-            Map<String, JobSubmissionProtocol> jobSubmissionProtocols = updatedComputeResource.getJobSubmissionProtocols();
-            if (jobSubmissionProtocols != null && !jobSubmissionProtocols.isEmpty()) {
-                for (String submissionId : jobSubmissionProtocols.keySet()) {
-                    JobSubmissionProtocol jobSubmissionProtocol = jobSubmissionProtocols.get(submissionId);
-                    JobSubmissionProtocolResource resource = new JobSubmissionProtocolResource();
-                    Map<String, String> ids = new HashMap<String, String>();
-                    ids.put(AbstractResource.JobSubmissionProtocolConstants.RESOURCE_ID, computeResourceId);
-                    ids.put(AbstractResource.JobSubmissionProtocolConstants.SUBMISSION_ID, submissionId);
-                    ids.put(AbstractResource.JobSubmissionProtocolConstants.JOB_TYPE, jobSubmissionProtocol.toString());
-                    JobSubmissionProtocolResource existingJobProtocol = (JobSubmissionProtocolResource)resource.get(ids);
-                    existingJobProtocol.setResourceID(computeResourceId);
-                    existingJobProtocol.setComputeHostResource(existingComputeResouce);
-                    existingJobProtocol.setSubmissionID(submissionId);
-                    existingJobProtocol.setJobType(jobSubmissionProtocol.toString());
-                    existingJobProtocol.save();
-                }
-            }
-            Map<String, DataMovementProtocol> movementProtocols = updatedComputeResource.getDataMovementProtocols();
-            if (movementProtocols != null && !movementProtocols.isEmpty()) {
-                for (String dataMoveId : movementProtocols.keySet()) {
-                    DataMovementProtocol dataMovementProtocol = movementProtocols.get(dataMoveId);
-                    DataMovementProtocolResource resource = new DataMovementProtocolResource();
-                    Map<String, String> ids = new HashMap<String, String>();
-                    ids.put(AbstractResource.DataMoveProtocolConstants.RESOURCE_ID, computeResourceId);
-                    ids.put(AbstractResource.DataMoveProtocolConstants.DATA_MOVE_ID, dataMoveId);
-                    ids.put(AbstractResource.DataMoveProtocolConstants.DATA_MOVE_TYPE, dataMovementProtocol.toString());
-                    DataMovementProtocolResource existingDMP = (DataMovementProtocolResource)resource.get(ids);
-                    existingDMP.setResourceID(computeResourceId);
-                    existingDMP.setComputeHostResource(existingComputeResouce);
-                    existingDMP.setDataMoveID(dataMoveId);
-                    existingDMP.setDataMoveType(dataMovementProtocol.toString());
-                    existingDMP.save();
-                }
-            }
+        	saveComputeResourceDescriptorData(updatedComputeResource);
         } catch (Exception e) {
             logger.error("Error while updating compute resource...", e);
             throw new AppCatalogException(e);
@@ -184,159 +194,158 @@ public class ComputeResourceImpl implements ComputeResource {
     @Override
     public String addSSHJobSubmission(SSHJobSubmission sshJobSubmission) throws AppCatalogException {
         try {
-            SshJobSubmissionResource resource = new SshJobSubmissionResource();
-            String hostName = "SSH";
-            resource.setSubmissionID(AppCatalogUtils.getID(hostName));
-            resource.setSshPort(resource.getSshPort());
-            resource.setResourceJobManager(sshJobSubmission.getResourceJobManager().toString());
-            resource.save();
-            sshJobSubmission.setJobSubmissionDataID(resource.getSubmissionID());
-            return resource.getSubmissionID();
+        	sshJobSubmission.setJobSubmissionInterfaceId(AppCatalogUtils.getID("SSH"));
+        	return saveSSHJobSubmission(sshJobSubmission);
         }catch (Exception e) {
             logger.error("Error while saving SSH Job Submission...", e);
             throw new AppCatalogException(e);
         }
     }
 
+	protected String saveSSHJobSubmission(SSHJobSubmission sshJobSubmission)
+			throws AppCatalogException {
+		SshJobSubmissionResource resource = AppCatalogThriftConversion.getSSHJobSubmission(sshJobSubmission);
+		resource.save();
+		return resource.getJobSubmissionInterfaceId();
+	}
+
     @Override
-    public void addSSHJobSubmissionProtocol(String computeResourceId, String jobSubmissionId) throws AppCatalogException {
+    public void addSSHJobSubmissionProtocol(String computeResourceId, JobSubmissionInterface jobSubmissionInterface) throws AppCatalogException {
         try {
-            JobSubmissionProtocolResource resource = new JobSubmissionProtocolResource();
-            resource.setResourceID(computeResourceId);
-            resource.setSubmissionID(jobSubmissionId);
-            ComputeResourceDescription computeResource = getComputeResource(computeResourceId);
-            resource.setComputeHostResource(AppCatalogThriftConversion.getComputeHostResource(computeResource));
-            resource.setJobType(JobSubmissionProtocol.SSH.toString());
-            resource.save();
+        	if (jobSubmissionInterface.getJobSubmissionProtocol()!=JobSubmissionProtocol.SSH){
+        		throw new AppCatalogException("Invalid Job Submission Type "+jobSubmissionInterface.getJobSubmissionProtocol().toString());
+        	}
+        	JobSubmissionInterfaceResource jsi = AppCatalogThriftConversion.getJobSubmissionInterface(jobSubmissionInterface);
+        	jsi.setComputeResourceId(computeResourceId);
+        	ComputeResourceResource computeResourceResource = new ComputeResourceResource();
+        	computeResourceResource=(ComputeResourceResource)computeResourceResource.get(computeResourceId);
+        	jsi.setComputeHostResource(computeResourceResource);
+            jsi.save();
         }catch (Exception e){
             logger.error("Error while saving SSH Job Submission Protocol...", e);
             throw new AppCatalogException(e);
         }
     }
 
-    @Override
-    public String addGSISSHJobSubmission(GSISSHJobSubmission gsisshJobSubmission) throws AppCatalogException {
-        try {
-            GSISSHSubmissionResource resource = new GSISSHSubmissionResource();
-            String hostName = "GSISSH";
-            resource.setSubmissionID(AppCatalogUtils.getID(hostName));
-            resource.setSshPort(resource.getSshPort());
-            resource.setResourceJobManager(gsisshJobSubmission.getResourceJobManager().toString());
-            resource.setInstalledPath(gsisshJobSubmission.getInstalledPath());
-            resource.setMonitorMode(gsisshJobSubmission.getMonitorMode());
-            resource.save();
-            gsisshJobSubmission.setJobSubmissionDataID(resource.getSubmissionID());
-
-            Set<String> exports = gsisshJobSubmission.getExports();
-            if (exports != null && !exports.isEmpty()){
-                for (String export : exports){
-                    GSISSHExportResource exportResource = new GSISSHExportResource();
-                    exportResource.setSubmissionID(resource.getSubmissionID());
-                    exportResource.setExport(export);
-                    exportResource.setGsisshSubmissionResource(resource);
-                    exportResource.save();
-                }
-            }
-
-            List<String> preJobCommands = gsisshJobSubmission.getPreJobCommands();
-            if (preJobCommands != null && !preJobCommands.isEmpty()){
-                for (String command : preJobCommands){
-                    GSISSHPreJobCommandResource commandResource = new GSISSHPreJobCommandResource();
-                    commandResource.setSubmissionID(resource.getSubmissionID());
-                    commandResource.setCommand(command);
-                    commandResource.setGsisshSubmissionResource(resource);
-                    commandResource.save();
-                }
-            }
-
-            List<String> postJobCommands = gsisshJobSubmission.getPostJobCommands();
-            if (postJobCommands != null && !postJobCommands.isEmpty()){
-                for (String command : postJobCommands){
-                    GSISSHPostJobCommandResource commandResource = new GSISSHPostJobCommandResource();
-                    commandResource.setSubmissionID(resource.getSubmissionID());
-                    commandResource.setCommand(command);
-                    commandResource.setGsisshSubmissionResource(resource);
-                    commandResource.save();
-                }
-            }
-            return resource.getSubmissionID();
-        }catch (Exception e) {
-            logger.error("Error while saving GSISSH Job Submission...", e);
-            throw new AppCatalogException(e);
-        }
-    }
-
-    @Override
-    public void addGSISSHJobSubmissionProtocol(String computeResourceId, String jobSubmissionId) throws AppCatalogException {
-        try {
-            JobSubmissionProtocolResource resource = new JobSubmissionProtocolResource();
-            resource.setResourceID(computeResourceId);
-            resource.setSubmissionID(jobSubmissionId);
-            ComputeResourceDescription computeResource = getComputeResource(computeResourceId);
-            resource.setComputeHostResource(AppCatalogThriftConversion.getComputeHostResource(computeResource));
-            resource.setJobType(JobSubmissionProtocol.GSISSH.toString());
-            resource.save();
-        }catch (Exception e){
-            logger.error("Error while saving GSISSH Job Submission Protocol...", e);
-            throw new AppCatalogException(e);
-        }
-    }
+//    @Override
+//    public String addGSISSHJobSubmission(GSISSHJobSubmission gsisshJobSubmission) throws AppCatalogException {
+//        try {
+//            GSISSHSubmissionResource resource = new GSISSHSubmissionResource();
+//            String hostName = "GSISSH";
+//            resource.setSubmissionID(AppCatalogUtils.getID(hostName));
+//            resource.setSshPort(resource.getSshPort());
+//            resource.setResourceJobManager(gsisshJobSubmission.getResourceJobManager().toString());
+//            resource.setInstalledPath(gsisshJobSubmission.getInstalledPath());
+//            resource.setMonitorMode(gsisshJobSubmission.getMonitorMode());
+//            resource.save();
+//            gsisshJobSubmission.setJobSubmissionDataID(resource.getSubmissionID());
+//
+//            Set<String> exports = gsisshJobSubmission.getExports();
+//            if (exports != null && !exports.isEmpty()){
+//                for (String export : exports){
+//                    GSISSHExportResource exportResource = new GSISSHExportResource();
+//                    exportResource.setSubmissionID(resource.getSubmissionID());
+//                    exportResource.setExport(export);
+//                    exportResource.setGsisshSubmissionResource(resource);
+//                    exportResource.save();
+//                }
+//            }
+//
+//            List<String> preJobCommands = gsisshJobSubmission.getPreJobCommands();
+//            if (preJobCommands != null && !preJobCommands.isEmpty()){
+//                for (String command : preJobCommands){
+//                    GSISSHPreJobCommandResource commandResource = new GSISSHPreJobCommandResource();
+//                    commandResource.setSubmissionID(resource.getSubmissionID());
+//                    commandResource.setCommand(command);
+//                    commandResource.setGsisshSubmissionResource(resource);
+//                    commandResource.save();
+//                }
+//            }
+//
+//            List<String> postJobCommands = gsisshJobSubmission.getPostJobCommands();
+//            if (postJobCommands != null && !postJobCommands.isEmpty()){
+//                for (String command : postJobCommands){
+//                    GSISSHPostJobCommandResource commandResource = new GSISSHPostJobCommandResource();
+//                    commandResource.setSubmissionID(resource.getSubmissionID());
+//                    commandResource.setCommand(command);
+//                    commandResource.setGsisshSubmissionResource(resource);
+//                    commandResource.save();
+//                }
+//            }
+//            return resource.getSubmissionID();
+//        }catch (Exception e) {
+//            logger.error("Error while saving GSISSH Job Submission...", e);
+//            throw new AppCatalogException(e);
+//        }
+//    }
+//
+//    @Override
+//    public void addGSISSHJobSubmissionProtocol(String computeResourceId, String jobSubmissionId) throws AppCatalogException {
+//        try {
+//            JobSubmissionProtocolResource resource = new JobSubmissionProtocolResource();
+//            resource.setResourceID(computeResourceId);
+//            resource.setSubmissionID(jobSubmissionId);
+//            ComputeResourceDescription computeResource = getComputeResource(computeResourceId);
+//            resource.setComputeHostResource(AppCatalogThriftConversion.getComputeHostResource(computeResource));
+//            resource.setJobType(JobSubmissionProtocol.GSISSH.toString());
+//            resource.save();
+//        }catch (Exception e){
+//            logger.error("Error while saving GSISSH Job Submission Protocol...", e);
+//            throw new AppCatalogException(e);
+//        }
+//    }
 
     @Override
     public String addGlobusJobSubmission(GlobusJobSubmission globusJobSubmission) throws AppCatalogException {
-        try {
-            GlobusJobSubmissionResource resource = new GlobusJobSubmissionResource();
-            String hostName = "GLOBUS";
-            resource.setSubmissionID(AppCatalogUtils.getID(hostName));
-            resource.setSecurityProtocol(globusJobSubmission.getSecurityProtocol().toString());
-            resource.setResourceJobManager(globusJobSubmission.getResourceJobManager().toString());
-            resource.save();
-            globusJobSubmission.setJobSubmissionDataID(resource.getSubmissionID());
-            List<String> globusGateKeeperEndPoint = globusJobSubmission.getGlobusGateKeeperEndPoint();
-            if (globusGateKeeperEndPoint != null && !globusGateKeeperEndPoint.isEmpty()) {
-                for (String endpoint : globusGateKeeperEndPoint) {
-                    GlobusGKEndpointResource endpointResource = new GlobusGKEndpointResource();
-                    endpointResource.setSubmissionID(resource.getSubmissionID());
-                    endpointResource.setEndpoint(endpoint);
-                    endpointResource.setGlobusJobSubmissionResource(resource);
-                    endpointResource.save();
-                }
-            }
-            return resource.getSubmissionID();
-        } catch (Exception e) {
-            logger.error("Error while saving Globus Job Submission...", e);
-            throw new AppCatalogException(e);
-        }
-
+//        try {
+//            GlobusJobSubmissionResource resource = new GlobusJobSubmissionResource();
+//            String hostName = "GLOBUS";
+//            resource.setSubmissionID(AppCatalogUtils.getID(hostName));
+//            resource.setSecurityProtocol(globusJobSubmission.getSecurityProtocol().toString());
+//            resource.setResourceJobManager(globusJobSubmission.getResourceJobManager().toString());
+//            resource.save();
+//            globusJobSubmission.setJobSubmissionDataID(resource.getSubmissionID());
+//            List<String> globusGateKeeperEndPoint = globusJobSubmission.getGlobusGateKeeperEndPoint();
+//            if (globusGateKeeperEndPoint != null && !globusGateKeeperEndPoint.isEmpty()) {
+//                for (String endpoint : globusGateKeeperEndPoint) {
+//                    GlobusGKEndpointResource endpointResource = new GlobusGKEndpointResource();
+//                    endpointResource.setSubmissionID(resource.getSubmissionID());
+//                    endpointResource.setEndpoint(endpoint);
+//                    endpointResource.setGlobusJobSubmissionResource(resource);
+//                    endpointResource.save();
+//                }
+//            }
+//            return resource.getSubmissionID();
+//        } catch (Exception e) {
+//            logger.error("Error while saving Globus Job Submission...", e);
+//            throw new AppCatalogException(e);
+//        }
+    	return null;
     }
 
     @Override
     public void addGlobusJobSubmissionProtocol(String computeResourceId, String jobSubmissionId) throws AppCatalogException {
-        try {
-            JobSubmissionProtocolResource resource = new JobSubmissionProtocolResource();
-            resource.setResourceID(computeResourceId);
-            resource.setSubmissionID(jobSubmissionId);
-            ComputeResourceDescription computeResource = getComputeResource(computeResourceId);
-            resource.setComputeHostResource(AppCatalogThriftConversion.getComputeHostResource(computeResource));
-            resource.setJobType(JobSubmissionProtocol.GRAM.toString());
-            resource.save();
-        }catch (Exception e){
-            logger.error("Error while saving Globus Job Submission Protocol...", e);
-            throw new AppCatalogException(e);
-        }
+//        try {
+//            JobSubmissionProtocolResource resource = new JobSubmissionProtocolResource();
+//            resource.setResourceID(computeResourceId);
+//            resource.setSubmissionID(jobSubmissionId);
+//            ComputeResourceDescription computeResource = getComputeResource(computeResourceId);
+//            resource.setComputeHostResource(AppCatalogThriftConversion.getComputeHostResource(computeResource));
+//            resource.setJobType(JobSubmissionProtocol.GRAM.toString());
+//            resource.save();
+//        }catch (Exception e){
+//            logger.error("Error while saving Globus Job Submission Protocol...", e);
+//            throw new AppCatalogException(e);
+//        }
     }
 
     @Override
     public String addScpDataMovement(SCPDataMovement scpDataMovement) throws AppCatalogException {
         try {
-            ScpDataMovementResource resource = new ScpDataMovementResource();
-            String hostName = "SCP";
-            resource.setDataMoveID(AppCatalogUtils.getID(hostName));
-            resource.setSecurityProtocol(scpDataMovement.getSecurityProtocol().toString());
-            resource.setSshPort(scpDataMovement.getSshPort());
+        	scpDataMovement.setDataMovementInterfaceId(AppCatalogUtils.getID("SCP"));
+        	ScpDataMovementResource resource = AppCatalogThriftConversion.getSCPDataMovementDescription(scpDataMovement);
             resource.save();
-            scpDataMovement.setDataMovementDataID(resource.getDataMoveID());
-            return resource.getDataMoveID();
+            return resource.getDataMovementInterfaceId();
         }catch (Exception e){
             logger.error("Error while saving SCP Data Movement...", e);
             throw new AppCatalogException(e);
@@ -344,15 +353,17 @@ public class ComputeResourceImpl implements ComputeResource {
     }
 
     @Override
-    public void addScpDataMovementProtocol(String computeResourceId, String dataMoveId) throws AppCatalogException {
+    public void addScpDataMovementProtocol(String computeResourceId, DataMovementInterface dataMovementInterface) throws AppCatalogException {
         try {
-            DataMovementProtocolResource resource = new DataMovementProtocolResource();
-            resource.setResourceID(computeResourceId);
-            resource.setDataMoveID(dataMoveId);
-            ComputeResourceDescription computeResource = getComputeResource(computeResourceId);
-            resource.setComputeHostResource(AppCatalogThriftConversion.getComputeHostResource(computeResource));
-            resource.setDataMoveType(DataMovementProtocol.SCP.toString());
-            resource.save();
+        	if (dataMovementInterface.getDataMovementProtocol()!=DataMovementProtocol.SCP){
+        		throw new AppCatalogException("Invalid Data Movement Type "+dataMovementInterface.getDataMovementProtocol().toString());
+        	}
+        	DataMovementInterfaceResource dmi = AppCatalogThriftConversion.getDataMovementInterface(dataMovementInterface);
+        	dmi.setComputeResourceId(computeResourceId);
+        	ComputeResourceResource computeResourceResource = new ComputeResourceResource();
+        	computeResourceResource=(ComputeResourceResource)computeResourceResource.get(computeResourceId);
+        	dmi.setComputeHostResource(computeResourceResource);
+        	dmi.save();
         }catch (Exception e){
             logger.error("Error while saving SCP data movement Protocol...", e);
             throw new AppCatalogException(e);
@@ -362,24 +373,20 @@ public class ComputeResourceImpl implements ComputeResource {
     @Override
     public String addGridFTPDataMovement(GridFTPDataMovement gridFTPDataMovement) throws AppCatalogException {
         try {
-            GridftpDataMovementResource resource = new GridftpDataMovementResource();
-            String hostName = "GRID_FTP";
-            resource.setDataMoveID(AppCatalogUtils.getID(hostName));
-            resource.setSecurityProtocol(gridFTPDataMovement.getSecurityProtocol().toString());
+        	gridFTPDataMovement.setDataMovementInterfaceId(AppCatalogUtils.getID("SCP"));
+        	GridftpDataMovementResource resource = AppCatalogThriftConversion.getGridFTPDataMovementDescription(gridFTPDataMovement);
             resource.save();
-            gridFTPDataMovement.setDataMovementDataID(resource.getDataMoveID());
-
-            List<String> gridFTPEndPoint = gridFTPDataMovement.getGridFTPEndPoint();
+            List<String> gridFTPEndPoint = gridFTPDataMovement.getGridFTPEndPoints();
             if (gridFTPEndPoint != null && !gridFTPEndPoint.isEmpty()) {
                 for (String endpoint : gridFTPEndPoint) {
                     GridftpEndpointResource endpointResource = new GridftpEndpointResource();
-                    endpointResource.setDataMoveId(resource.getDataMoveID());
+                    endpointResource.setDataMovementInterfaceId(resource.getDataMovementInterfaceId());
                     endpointResource.setEndpoint(endpoint);
-                    endpointResource.setGridFTPDataMovementResource(resource);
+                    endpointResource.setGridftpDataMovementResource(resource);
                     endpointResource.save();
                 }
             }
-            return resource.getDataMoveID();
+            return resource.getDataMovementInterfaceId();
         }catch (Exception e){
             logger.error("Error while saving GridFTP Data Movement...", e);
             throw new AppCatalogException(e);
@@ -417,6 +424,7 @@ public class ComputeResourceImpl implements ComputeResource {
     @Override
     public List<ComputeResourceDescription> getComputeResourceList(Map<String, String> filters) throws AppCatalogException {
         try {
+        	//TODO check if this is correct way to do this
             ComputeResourceResource resource = new ComputeResourceResource();
             for (String fieldName : filters.keySet() ){
                 if (fieldName.equals(AbstractResource.ComputeResourceConstants.HOST_NAME)){
@@ -424,11 +432,6 @@ public class ComputeResourceImpl implements ComputeResource {
                     if (resources != null && !resources.isEmpty()){
                         return AppCatalogThriftConversion.getComputeDescriptionList(resources);
                     }
-                }else if (fieldName.equals(AbstractResource.ComputeResourceConstants.PREFERED_SUBMISSION_PROTOCOL)){
-                    List<Resource> resources = resource.get(AbstractResource.ComputeResourceConstants.PREFERED_SUBMISSION_PROTOCOL, filters.get(fieldName));
-                    if (resources != null && !resources.isEmpty()){
-                        return AppCatalogThriftConversion.getComputeDescriptionList(resources);
-                    }
                 }else {
                     logger.error("Unsupported field name for compute resource.", new IllegalArgumentException());
                     throw new IllegalArgumentException("Unsupported field name for compute resource.");
@@ -441,112 +444,115 @@ public class ComputeResourceImpl implements ComputeResource {
         return null;
     }
 
-    @Override
-    public GSISSHJobSubmission getGSISSHJobSubmission(String submissionId) throws AppCatalogException {
-        try {
-            GSISSHSubmissionResource resource = new GSISSHSubmissionResource();
-            GSISSHSubmissionResource submissionResource = (GSISSHSubmissionResource)resource.get(submissionId);
-            return AppCatalogThriftConversion.getGSISSHSubmissionDescription(submissionResource);
-        }catch (Exception e){
-            logger.error("Error while retrieving GSISSH Job Submission...", e);
-            throw new AppCatalogException(e);
-        }
-    }
-
-    @Override
-    public List<GSISSHJobSubmission> getGSISSHJobSubmissionList(Map<String, String> filters) throws AppCatalogException {
-        try {
-            GSISSHSubmissionResource resource = new GSISSHSubmissionResource();
-            for (String fieldName : filters.keySet() ){
-                if (fieldName.equals(AbstractResource.GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER)){
-                    List<Resource> resources = resource.get(AbstractResource.GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER, filters.get(fieldName));
-                    if (resources != null && !resources.isEmpty()){
-                        return AppCatalogThriftConversion.getGSISSHSubmissionList(resources);
-                    }
-                }else {
-                    logger.error("Unsupported field name for GSISSH Submission.", new IllegalArgumentException());
-                    throw new IllegalArgumentException("Unsupported field name for GSISSH Submission.");
-                }
-            }
-        }catch (Exception e){
-            logger.error("Error while retrieving GSISSH Submission list...", e);
-            throw new AppCatalogException(e);
-        }
-        return null;
-    }
-
-    @Override
-    public GlobusJobSubmission getGlobusJobSubmission(String submissionId) throws AppCatalogException {
-        try {
-            GlobusJobSubmissionResource resource = new GlobusJobSubmissionResource();
-            GlobusJobSubmissionResource submissionResource = (GlobusJobSubmissionResource)resource.get(submissionId);
-            return AppCatalogThriftConversion.getGlobusJobSubmissionDescription(submissionResource);
-        }catch (Exception e){
-            logger.error("Error while retrieving Globus Job Submission...", e);
-            throw new AppCatalogException(e);
-        }
-    }
-
-    @Override
-    public List<GlobusJobSubmission> getGlobusJobSubmissionList(Map<String, String> filters) throws AppCatalogException {
-        try {
-            GlobusJobSubmissionResource resource = new GlobusJobSubmissionResource();
-            for (String fieldName : filters.keySet() ){
-                if (fieldName.equals(AbstractResource.GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER)){
-                    List<Resource> resources = resource.get(AbstractResource.GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER, filters.get(fieldName));
-                    if (resources != null && !resources.isEmpty()){
-                        return AppCatalogThriftConversion.getGlobusSubmissionList(resources);
-                    }
-                }else if (fieldName.equals(AbstractResource.GlobusJobSubmissionConstants.SECURITY_PROTOCAL)){
-                    List<Resource> resources = resource.get(AbstractResource.GlobusJobSubmissionConstants.SECURITY_PROTOCAL, filters.get(fieldName));
-                    if (resources != null && !resources.isEmpty()){
-                        return AppCatalogThriftConversion.getGlobusSubmissionList(resources);
-                    }
-                }else {
-                    logger.error("Unsupported field name for Globus Submission.", new IllegalArgumentException());
-                    throw new IllegalArgumentException("Unsupported field name for Globus Submission.");
-                }
-            }
-        }catch (Exception e){
-            logger.error("Error while retrieving Globus Submission list...", e);
-            throw new AppCatalogException(e);
-        }
-        return null;
-    }
+//    @Override
+//    public GSISSHJobSubmission getGSISSHJobSubmission(String submissionId) throws AppCatalogException {
+//        try {
+//            GSISSHSubmissionResource resource = new GSISSHSubmissionResource();
+//            GSISSHSubmissionResource submissionResource = (GSISSHSubmissionResource)resource.get(submissionId);
+//            return AppCatalogThriftConversion.getGSISSHSubmissionDescription(submissionResource);
+//        }catch (Exception e){
+//            logger.error("Error while retrieving GSISSH Job Submission...", e);
+//            throw new AppCatalogException(e);
+//        }
+//    }
+//
+//    @Override
+//    public List<GSISSHJobSubmission> getGSISSHJobSubmissionList(Map<String, String> filters) throws AppCatalogException {
+//        try {
+//            GSISSHSubmissionResource resource = new GSISSHSubmissionResource();
+//            for (String fieldName : filters.keySet() ){
+//                if (fieldName.equals(AbstractResource.GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER)){
+//                    List<Resource> resources = resource.get(AbstractResource.GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER, filters.get(fieldName));
+//                    if (resources != null && !resources.isEmpty()){
+//                        return AppCatalogThriftConversion.getGSISSHSubmissionList(resources);
+//                    }
+//                }else {
+//                    logger.error("Unsupported field name for GSISSH Submission.", new IllegalArgumentException());
+//                    throw new IllegalArgumentException("Unsupported field name for GSISSH Submission.");
+//                }
+//            }
+//        }catch (Exception e){
+//            logger.error("Error while retrieving GSISSH Submission list...", e);
+//            throw new AppCatalogException(e);
+//        }
+//        return null;
+//    }
+//
+//    @Override
+//    public GlobusJobSubmission getGlobusJobSubmission(String submissionId) throws AppCatalogException {
+//        try {
+//        	GlobusJobSubmissionResource globusJobSubmissionResource = new GlobusJobSubmissionResource();
+//        	globusJobSubmissionResource=(GlobusJobSubmissionResource)globusJobSubmissionResource.get(submissionId);
+//        	AppCatalogThriftConversion.getglo
+//            GlobusJobSubmissionResource resource = globusJobSubmissionResource;
+//            GlobusJobSubmissionResource submissionResource = (GlobusJobSubmissionResource)resource.get(submissionId);
+//            return AppCatalogThriftConversion.getGlobusJobSubmissionDescription(submissionResource);
+//        }catch (Exception e){
+//            logger.error("Error while retrieving Globus Job Submission...", e);
+//            throw new AppCatalogException(e);
+//        }
+//    }
+//
+//    @Override
+//    public List<GlobusJobSubmission> getGlobusJobSubmissionList(Map<String, String> filters) throws AppCatalogException {
+//        try {
+//            GlobusJobSubmissionResource resource = new GlobusJobSubmissionResource();
+//            for (String fieldName : filters.keySet() ){
+//                if (fieldName.equals(AbstractResource.GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER)){
+//                    List<Resource> resources = resource.get(AbstractResource.GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER, filters.get(fieldName));
+//                    if (resources != null && !resources.isEmpty()){
+//                        return AppCatalogThriftConversion.getGlobusSubmissionList(resources);
+//                    }
+//                }else if (fieldName.equals(AbstractResource.GlobusJobSubmissionConstants.SECURITY_PROTOCAL)){
+//                    List<Resource> resources = resource.get(AbstractResource.GlobusJobSubmissionConstants.SECURITY_PROTOCAL, filters.get(fieldName));
+//                    if (resources != null && !resources.isEmpty()){
+//                        return AppCatalogThriftConversion.getGlobusSubmissionList(resources);
+//                    }
+//                }else {
+//                    logger.error("Unsupported field name for Globus Submission.", new IllegalArgumentException());
+//                    throw new IllegalArgumentException("Unsupported field name for Globus Submission.");
+//                }
+//            }
+//        }catch (Exception e){
+//            logger.error("Error while retrieving Globus Submission list...", e);
+//            throw new AppCatalogException(e);
+//        }
+//        return null;
+//    }
 
     @Override
     public SSHJobSubmission getSSHJobSubmission(String submissionId) throws AppCatalogException {
         try {
             SshJobSubmissionResource resource = new SshJobSubmissionResource();
-            SshJobSubmissionResource submissionResource = (SshJobSubmissionResource)resource.get(submissionId);
-            return AppCatalogThriftConversion.getSSHJobSubmissionDescription(submissionResource);
+            resource = (SshJobSubmissionResource)resource.get(submissionId);
+            return AppCatalogThriftConversion.getSSHJobSubmissionDescription(resource);
         }catch (Exception e){
             logger.error("Error while retrieving SSH Job Submission...", e);
             throw new AppCatalogException(e);
         }
     }
-
-    @Override
-    public List<SSHJobSubmission> getSSHJobSubmissionList(Map<String, String> filters) throws AppCatalogException {
-        try {
-            SshJobSubmissionResource resource = new SshJobSubmissionResource();
-            for (String fieldName : filters.keySet() ){
-               if (fieldName.equals(AbstractResource.SSHSubmissionConstants.RESOURCE_JOB_MANAGER)){
-                    List<Resource> resources = resource.get(AbstractResource.SSHSubmissionConstants.RESOURCE_JOB_MANAGER, filters.get(fieldName));
-                    if (resources != null && !resources.isEmpty()){
-                        return AppCatalogThriftConversion.getSSHSubmissionList(resources);
-                    }
-                }else {
-                    logger.error("Unsupported field name for SSH Submission.", new IllegalArgumentException());
-                    throw new IllegalArgumentException("Unsupported field name for SSH Submission.");
-                }
-            }
-        }catch (Exception e){
-            logger.error("Error while retrieving SSH Submission list...", e);
-            throw new AppCatalogException(e);
-        }
-        return null;
-    }
+//
+//    @Override
+//    public List<SSHJobSubmission> getSSHJobSubmissionList(Map<String, String> filters) throws AppCatalogException {
+//        try {
+//            SshJobSubmissionResource resource = new SshJobSubmissionResource();
+//            for (String fieldName : filters.keySet() ){
+//               if (fieldName.equals(AbstractResource.SSHSubmissionConstants.RESOURCE_JOB_MANAGER)){
+//                    List<Resource> resources = resource.get(AbstractResource.SSHSubmissionConstants.RESOURCE_JOB_MANAGER, filters.get(fieldName));
+//                    if (resources != null && !resources.isEmpty()){
+//                        return AppCatalogThriftConversion.getSSHSubmissionList(resources);
+//                    }
+//                }else {
+//                    logger.error("Unsupported field name for SSH Submission.", new IllegalArgumentException());
+//                    throw new IllegalArgumentException("Unsupported field name for SSH Submission.");
+//                }
+//            }
+//        }catch (Exception e){
+//            logger.error("Error while retrieving SSH Submission list...", e);
+//            throw new AppCatalogException(e);
+//        }
+//        return null;
+//    }
 
     @Override
     public SCPDataMovement getSCPDataMovement(String dataMoveId) throws AppCatalogException {
@@ -560,27 +566,27 @@ public class ComputeResourceImpl implements ComputeResource {
         }
     }
 
-    @Override
-    public List<SCPDataMovement> getSCPDataMovementList(Map<String, String> filters) throws AppCatalogException {
-        try {
-            ScpDataMovementResource resource = new ScpDataMovementResource();
-            for (String fieldName : filters.keySet() ){
-                if (fieldName.equals(AbstractResource.SCPDataMovementConstants.SECURITY_PROTOCOL)){
-                    List<Resource> resources = resource.get(AbstractResource.SCPDataMovementConstants.SECURITY_PROTOCOL, filters.get(fieldName));
-                    if (resources != null && !resources.isEmpty()){
-                        return AppCatalogThriftConversion.getSCPDataMovementList(resources);
-                    }
-                }else {
-                    logger.error("Unsupported field name for SCP Data movement.", new IllegalArgumentException());
-                    throw new IllegalArgumentException("Unsupported field name for SCP Data movement.");
-                }
-            }
-        }catch (Exception e){
-            logger.error("Error while retrieving SCP Data movement list...", e);
-            throw new AppCatalogException(e);
-        }
-        return null;
-    }
+//    @Override
+//    public List<SCPDataMovement> getSCPDataMovementList(Map<String, String> filters) throws AppCatalogException {
+//        try {
+//            ScpDataMovementResource resource = new ScpDataMovementResource();
+//            for (String fieldName : filters.keySet() ){
+//                if (fieldName.equals(AbstractResource.SCPDataMovementConstants.SECURITY_PROTOCOL)){
+//                    List<Resource> resources = resource.get(AbstractResource.SCPDataMovementConstants.SECURITY_PROTOCOL, filters.get(fieldName));
+//                    if (resources != null && !resources.isEmpty()){
+//                        return AppCatalogThriftConversion.getSCPDataMovementList(resources);
+//                    }
+//                }else {
+//                    logger.error("Unsupported field name for SCP Data movement.", new IllegalArgumentException());
+//                    throw new IllegalArgumentException("Unsupported field name for SCP Data movement.");
+//                }
+//            }
+//        }catch (Exception e){
+//            logger.error("Error while retrieving SCP Data movement list...", e);
+//            throw new AppCatalogException(e);
+//        }
+//        return null;
+//    }
 
     @Override
     public GridFTPDataMovement getGridFTPDataMovement(String dataMoveId) throws AppCatalogException {
@@ -594,27 +600,27 @@ public class ComputeResourceImpl implements ComputeResource {
         }
     }
 
-    @Override
-    public List<GridFTPDataMovement> getGridFTPDataMovementList(Map<String, String> filters) throws AppCatalogException {
-        try {
-            GridftpDataMovementResource resource = new GridftpDataMovementResource();
-            for (String fieldName : filters.keySet() ){
-                if (fieldName.equals(AbstractResource.GridFTPDataMovementConstants.SECURITY_PROTOCOL)){
-                    List<Resource> resources = resource.get(AbstractResource.GridFTPDataMovementConstants.SECURITY_PROTOCOL, filters.get(fieldName));
-                    if (resources != null && !resources.isEmpty()){
-                        return AppCatalogThriftConversion.getGridFTPDataMovementList(resources);
-                    }
-                }else {
-                    logger.error("Unsupported field name for GridFTP Data movement.", new IllegalArgumentException());
-                    throw new IllegalArgumentException("Unsupported field name for GridFTP Data movement.");
-                }
-            }
-        }catch (Exception e){
-            logger.error("Error while retrieving GridFTP Data movement list...", e);
-            throw new AppCatalogException(e);
-        }
-        return null;
-    }
+//    @Override
+//    public List<GridFTPDataMovement> getGridFTPDataMovementList(Map<String, String> filters) throws AppCatalogException {
+//        try {
+//            GridftpDataMovementResource resource = new GridftpDataMovementResource();
+//            for (String fieldName : filters.keySet() ){
+//                if (fieldName.equals(AbstractResource.GridFTPDataMovementConstants.SECURITY_PROTOCOL)){
+//                    List<Resource> resources = resource.get(AbstractResource.GridFTPDataMovementConstants.SECURITY_PROTOCOL, filters.get(fieldName));
+//                    if (resources != null && !resources.isEmpty()){
+//                        return AppCatalogThriftConversion.getGridFTPDataMovementList(resources);
+//                    }
+//                }else {
+//                    logger.error("Unsupported field name for GridFTP Data movement.", new IllegalArgumentException());
+//                    throw new IllegalArgumentException("Unsupported field name for GridFTP Data movement.");
+//                }
+//            }
+//        }catch (Exception e){
+//            logger.error("Error while retrieving GridFTP Data movement list...", e);
+//            throw new AppCatalogException(e);
+//        }
+//        return null;
+//    }
 
     @Override
     public boolean isComputeResourceExists(String resourceId) throws AppCatalogException {