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/06/28 09:02:26 UTC

git commit: updating the resource layer

Repository: airavata
Updated Branches:
  refs/heads/master 69be6c770 -> da5d2f3ae


updating the resource layer


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

Branch: refs/heads/master
Commit: da5d2f3ae3030a28c634b7e2e5a9a97b7a379249
Parents: 69be6c7
Author: Sachith Withana <sa...@apache.org>
Authored: Sat Jun 28 12:34:30 2014 +0530
Committer: Sachith Withana <sa...@apache.org>
Committed: Sat Jun 28 12:34:30 2014 +0530

----------------------------------------------------------------------
 .../resources/DataMovementProtocolResource.java | 331 ++++++++++++++-
 .../resources/GSISSHSubmissionResource.java     | 407 +++++++++++++++++++
 .../data/resources/HostAliasResource.java       |   4 +-
 .../data/resources/HostIPAddressResource.java   |   6 +-
 .../JobSubmissionProtocolResource.java          |  51 +--
 .../data/resources/SSHSubmissionResource.java   | 331 +++++++++++++++
 6 files changed, 1099 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/da5d2f3a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/DataMovementProtocolResource.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/DataMovementProtocolResource.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/DataMovementProtocolResource.java
index 6c42d49..c7cd333 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/DataMovementProtocolResource.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/DataMovementProtocolResource.java
@@ -1,4 +1,333 @@
 package org.apache.aiaravata.application.catalog.data.resources;
 
-public class DataMovementProtocolResource {
+import org.airavata.appcatalog.cpi.AppCatalogException;
+import org.apache.aiaravata.application.catalog.data.model.ComputeResource;
+import org.apache.aiaravata.application.catalog.data.model.DataMovementProtocol;
+import org.apache.aiaravata.application.catalog.data.model.DataMovementProtocolPK;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogJPAUtils;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogQueryGenerator;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogResourceType;
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class DataMovementProtocolResource extends AbstractResource {
+
+    private final static Logger logger = LoggerFactory.getLogger(DataMovementProtocolResource.class);
+
+    private String resourceID;
+    private String dataMoveID;
+    private String jobType;
+    private ComputeHostResource computeHostResource;
+
+    public void remove(Object identifier) throws AppCatalogException {
+        HashMap<String, String> ids;
+        if (identifier instanceof Map) {
+            ids = (HashMap) identifier;
+        } else {
+            logger.error("Identifier should be a map with the field name and it's value");
+            throw new AppCatalogException("Identifier should be a map with the field name and it's value");
+        }
+
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(DATA_MOVEMENT_PROTOCOL);
+            generator.setParameter(DataMoveProtocolConstants.JOB_TYPE, ids.get(DataMoveProtocolConstants.JOB_TYPE));
+            generator.setParameter(DataMoveProtocolConstants.RESOURCE_ID, ids.get(DataMoveProtocolConstants.RESOURCE_ID));
+            generator.setParameter(DataMoveProtocolConstants.DATA_MOVE_ID, ids.get(DataMoveProtocolConstants.DATA_MOVE_ID));
+            Query q = generator.deleteQuery(em);
+            q.executeUpdate();
+            em.getTransaction().commit();
+            em.close();
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public Resource get(Object identifier) throws AppCatalogException {
+        HashMap<String, String> ids;
+        if (identifier instanceof Map) {
+            ids = (HashMap) identifier;
+        } else {
+            logger.error("Identifier should be a map with the field name and it's value");
+            throw new AppCatalogException("Identifier should be a map with the field name and it's value");
+        }
+
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(DATA_MOVEMENT_PROTOCOL);
+            generator.setParameter(DataMoveProtocolConstants.JOB_TYPE, ids.get(DataMoveProtocolConstants.JOB_TYPE));
+            generator.setParameter(DataMoveProtocolConstants.RESOURCE_ID, ids.get(DataMoveProtocolConstants.RESOURCE_ID));
+            generator.setParameter(DataMoveProtocolConstants.DATA_MOVE_ID, ids.get(DataMoveProtocolConstants.DATA_MOVE_ID));
+            Query q = generator.selectQuery(em);
+            DataMovementProtocol dataMovementProtocol = (DataMovementProtocol) q.getSingleResult();
+            DataMovementProtocolResource dataMovementProtocolResource =
+                    (DataMovementProtocolResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.DATA_MOVEMENT_PROTOCOL, dataMovementProtocol);
+            em.getTransaction().commit();
+            em.close();
+            return dataMovementProtocolResource;
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public List<Resource> get(String fieldName, Object value) throws AppCatalogException {
+        List<Resource> dataMoveProtocolResourcesList = new ArrayList<Resource>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(DATA_MOVEMENT_PROTOCOL);
+            List results;
+            if (fieldName.equals(DataMoveProtocolConstants.RESOURCE_ID)) {
+                generator.setParameter(DataMoveProtocolConstants.RESOURCE_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        DataMovementProtocol dataMovementProtocol = (DataMovementProtocol) result;
+                        DataMovementProtocolResource dataMovementProtocolResource =
+                                (DataMovementProtocolResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.DATA_MOVEMENT_PROTOCOL, dataMovementProtocol);
+                        dataMoveProtocolResourcesList.add(dataMovementProtocolResource);
+                    }
+                }
+            } else if (fieldName.equals(DataMoveProtocolConstants.JOB_TYPE)) {
+                generator.setParameter(DataMoveProtocolConstants.JOB_TYPE, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        DataMovementProtocol dataMovementProtocol = (DataMovementProtocol) result;
+                        DataMovementProtocolResource dataMovementProtocolResource =
+                                (DataMovementProtocolResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.DATA_MOVEMENT_PROTOCOL, dataMovementProtocol);
+                        dataMoveProtocolResourcesList.add(dataMovementProtocolResource);
+                    }
+                }
+            } else if (fieldName.equals(DataMoveProtocolConstants.DATA_MOVE_ID)) {
+                generator.setParameter(DataMoveProtocolConstants.DATA_MOVE_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        DataMovementProtocol dataMovementProtocol = (DataMovementProtocol) result;
+                        DataMovementProtocolResource dataMovementProtocolResource =
+                                (DataMovementProtocolResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.DATA_MOVEMENT_PROTOCOL, dataMovementProtocol);
+                        dataMoveProtocolResourcesList.add(dataMovementProtocolResource);
+                    }
+                }
+            } else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for Data Movement Protocol Resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for Data Movement Protocol Resource.");
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return dataMoveProtocolResourcesList;
+    }
+
+    public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+        List<String> dataMovementProtocolIDs = new ArrayList<String>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(DATA_MOVEMENT_PROTOCOL);
+            List results;
+            if (fieldName.equals(DataMoveProtocolConstants.DATA_MOVE_ID)) {
+                generator.setParameter(DataMoveProtocolConstants.DATA_MOVE_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        DataMovementProtocol dataMovementProtocol = (DataMovementProtocol) result;
+                        dataMovementProtocolIDs.add(dataMovementProtocol.getDataMoveID());
+                    }
+                }
+            } else if (fieldName.equals(DataMoveProtocolConstants.RESOURCE_ID)) {
+                generator.setParameter(DataMoveProtocolConstants.RESOURCE_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        DataMovementProtocol dataMovementProtocol = (DataMovementProtocol) result;
+                        dataMovementProtocolIDs.add(dataMovementProtocol.getDataMoveID());
+                    }
+                }
+            } else if (fieldName.equals(DataMoveProtocolConstants.JOB_TYPE)) {
+                generator.setParameter(DataMoveProtocolConstants.JOB_TYPE, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        DataMovementProtocol dataMovementProtocol = (DataMovementProtocol) result;
+                        dataMovementProtocolIDs.add(dataMovementProtocol.getDataMoveID());
+                    }
+                }
+            } else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for Data Move Protocol resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for Data Move Protocol Resource.");
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return dataMovementProtocolIDs;
+    }
+
+    public void save() throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            DataMovementProtocol existingDataMovementProtocol = em.find(DataMovementProtocol.class, new DataMovementProtocolPK(resourceID, dataMoveID, jobType));
+            em.close();
+
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (existingDataMovementProtocol != null) {
+                existingDataMovementProtocol.setJobType(jobType);
+                existingDataMovementProtocol.setDataMoveID(dataMoveID);
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
+                existingDataMovementProtocol.setComputeResource(computeResource);
+                existingDataMovementProtocol.setResourceID(resourceID);
+
+                em.merge(existingDataMovementProtocol);
+            } else {
+                DataMovementProtocol dataMovementProtocol = new DataMovementProtocol();
+                dataMovementProtocol.setJobType(jobType);
+                dataMovementProtocol.setDataMoveID(dataMoveID);
+                dataMovementProtocol.setResourceID(resourceID);
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
+                dataMovementProtocol.setComputeResource(computeResource);
+
+                em.persist(dataMovementProtocol);
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public boolean isExists(Object identifier) throws AppCatalogException {
+        HashMap<String, String> ids;
+        if (identifier instanceof Map) {
+            ids = (HashMap) identifier;
+        } else {
+            logger.error("Identifier should be a map with the field name and it's value");
+            throw new AppCatalogException("Identifier should be a map with the field name and it's value");
+        }
+
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            DataMovementProtocol dataMovementProtocol = em.find(DataMovementProtocol.class, new DataMovementProtocolPK(
+                    ids.get(DataMoveProtocolConstants.RESOURCE_ID),
+                    ids.get(DataMoveProtocolConstants.DATA_MOVE_ID), ids.get(DataMoveProtocolConstants.JOB_TYPE)));
+
+            em.close();
+            return dataMovementProtocol != null;
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public String getResourceID() {
+        return resourceID;
+    }
+
+    public void setResourceID(String resourceID) {
+        this.resourceID = resourceID;
+    }
+
+    public String getDataMoveID() {
+        return dataMoveID;
+    }
+
+    public void setDataMoveID(String dataMoveID) {
+        this.dataMoveID = dataMoveID;
+    }
+
+    public String getJobType() {
+        return jobType;
+    }
+
+    public void setJobType(String jobType) {
+        this.jobType = jobType;
+    }
+
+    public ComputeHostResource getComputeHostResource() {
+        return computeHostResource;
+    }
+
+    public void setComputeHostResource(ComputeHostResource computeHostResource) {
+        this.computeHostResource = computeHostResource;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/da5d2f3a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/GSISSHSubmissionResource.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/GSISSHSubmissionResource.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/GSISSHSubmissionResource.java
new file mode 100644
index 0000000..caecaf4
--- /dev/null
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/GSISSHSubmissionResource.java
@@ -0,0 +1,407 @@
+package org.apache.aiaravata.application.catalog.data.resources;
+
+import org.airavata.appcatalog.cpi.AppCatalogException;
+import org.apache.aiaravata.application.catalog.data.model.ComputeResource;
+import org.apache.aiaravata.application.catalog.data.model.GSISSHSubmission;
+import org.apache.aiaravata.application.catalog.data.model.SSHSubmission;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogJPAUtils;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogQueryGenerator;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogResourceType;
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.ArrayList;
+import java.util.List;
+
+public class GSISSHSubmissionResource extends AbstractResource {
+
+    private final static Logger logger = LoggerFactory.getLogger(GSISSHSubmissionResource.class);
+
+    private String resourceID;
+    private String submissionID;
+    private String resourceJobManager;
+    private int sshPort;
+    private String installedPath;
+    private String monitorMode;
+
+    private ComputeHostResource computeHostResource;
+
+    public void remove(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(GSISSH_SUBMISSION);
+            generator.setParameter(GSISSHSubmissionConstants.SUBMISSION_ID, identifier);
+            Query q = generator.deleteQuery(em);
+            q.executeUpdate();
+            em.getTransaction().commit();
+            em.close();
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public Resource get(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(GSISSH_SUBMISSION);
+            generator.setParameter(GSISSHSubmissionConstants.SUBMISSION_ID, identifier);
+            Query q = generator.selectQuery(em);
+            GSISSHSubmission gsisshSubmission = (GSISSHSubmission) q.getSingleResult();
+            GSISSHSubmissionResource gsisshSubmissionResource =
+                    (GSISSHSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.GSISSH_SUBMISSION
+                            , gsisshSubmission);
+            em.getTransaction().commit();
+            em.close();
+            return gsisshSubmissionResource;
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public List<Resource> get(String fieldName, Object value) throws AppCatalogException {
+        List<Resource> gsiSSHSubmissionResourceList = new ArrayList<Resource>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(GSISSH_SUBMISSION);
+            List results;
+            if (fieldName.equals(GSISSHSubmissionConstants.SUBMISSION_ID)) {
+                generator.setParameter(GSISSHSubmissionConstants.SUBMISSION_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        GSISSHSubmissionResource gsisshSubmissionResource =
+                                (GSISSHSubmissionResource) AppCatalogJPAUtils.getResource(
+                                        AppCatalogResourceType.GSISSH_SUBMISSION, gsisshSubmission);
+                        gsiSSHSubmissionResourceList.add(gsisshSubmissionResource);
+                    }
+                }
+            } else if (fieldName.equals(GSISSHSubmissionConstants.RESOURCE_ID)) {
+                generator.setParameter(GSISSHSubmissionConstants.RESOURCE_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        GSISSHSubmissionResource gsisshSubmissionResource =
+                                (GSISSHSubmissionResource) AppCatalogJPAUtils.getResource(
+                                        AppCatalogResourceType.GSISSH_SUBMISSION, gsisshSubmission);
+                        gsiSSHSubmissionResourceList.add(gsisshSubmissionResource);
+                    }
+                }
+            }else if (fieldName.equals(GSISSHSubmissionConstants.MONITOR_MODE)) {
+                generator.setParameter(GSISSHSubmissionConstants.MONITOR_MODE, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        GSISSHSubmissionResource gsisshSubmissionResource =
+                                (GSISSHSubmissionResource) AppCatalogJPAUtils.getResource(
+                                        AppCatalogResourceType.GSISSH_SUBMISSION, gsisshSubmission);
+                        gsiSSHSubmissionResourceList.add(gsisshSubmissionResource);
+                    }
+                }
+            }else if (fieldName.equals(GSISSHSubmissionConstants.INSTALLED_PATH)) {
+                generator.setParameter(GSISSHSubmissionConstants.INSTALLED_PATH, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        GSISSHSubmissionResource gsisshSubmissionResource =
+                                (GSISSHSubmissionResource) AppCatalogJPAUtils.getResource(
+                                        AppCatalogResourceType.GSISSH_SUBMISSION, gsisshSubmission);
+                        gsiSSHSubmissionResourceList.add(gsisshSubmissionResource);
+                    }
+                }
+            }else if (fieldName.equals(GSISSHSubmissionConstants.SSH_PORT)) {
+                generator.setParameter(GSISSHSubmissionConstants.SSH_PORT, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        GSISSHSubmissionResource gsisshSubmissionResource =
+                                (GSISSHSubmissionResource) AppCatalogJPAUtils.getResource(
+                                        AppCatalogResourceType.GSISSH_SUBMISSION, gsisshSubmission);
+                        gsiSSHSubmissionResourceList.add(gsisshSubmissionResource);
+                    }
+                }
+            } else if (fieldName.equals(GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER)) {
+                generator.setParameter(GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        GSISSHSubmissionResource gsisshSubmissionResource =
+                                (GSISSHSubmissionResource) AppCatalogJPAUtils.getResource(
+                                        AppCatalogResourceType.GSISSH_SUBMISSION, gsisshSubmission);
+                        gsiSSHSubmissionResourceList.add(gsisshSubmissionResource);
+                    }
+                }
+            }else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for GSISSH submission resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for GSISSH Submission resource.");
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return gsiSSHSubmissionResourceList;
+    }
+
+    public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+        List<String> gsiSSHSubmissionResourceIDs = new ArrayList<String>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(GSISSH_SUBMISSION);
+            List results;
+            if (fieldName.equals(GSISSHSubmissionConstants.SUBMISSION_ID)) {
+                generator.setParameter(GSISSHSubmissionConstants.SUBMISSION_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        gsiSSHSubmissionResourceIDs.add(gsisshSubmission.getSubmissionID());
+                    }
+                }
+            }else if (fieldName.equals(GSISSHSubmissionConstants.SSH_PORT)) {
+                generator.setParameter(GSISSHSubmissionConstants.SSH_PORT, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        gsiSSHSubmissionResourceIDs.add(gsisshSubmission.getSubmissionID());
+                    }
+                }
+            }else if (fieldName.equals(GSISSHSubmissionConstants.MONITOR_MODE)) {
+                generator.setParameter(GSISSHSubmissionConstants.MONITOR_MODE, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        gsiSSHSubmissionResourceIDs.add(gsisshSubmission.getSubmissionID());
+                    }
+                }
+            }else if (fieldName.equals(GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER)) {
+                generator.setParameter(GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        gsiSSHSubmissionResourceIDs.add(gsisshSubmission.getSubmissionID());
+                    }
+                }
+            }else if (fieldName.equals(GSISSHSubmissionConstants.INSTALLED_PATH)) {
+                generator.setParameter(GSISSHSubmissionConstants.INSTALLED_PATH, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        gsiSSHSubmissionResourceIDs.add(gsisshSubmission.getSubmissionID());
+                    }
+                }
+            }else if (fieldName.equals(GSISSHSubmissionConstants.RESOURCE_ID)) {
+                generator.setParameter(GSISSHSubmissionConstants.RESOURCE_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GSISSHSubmission gsisshSubmission = (GSISSHSubmission) result;
+                        gsiSSHSubmissionResourceIDs.add(gsisshSubmission.getSubmissionID());
+                    }
+                }
+            }  else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for GSISSH Submission resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for GSISSH Submission resource.");
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return gsiSSHSubmissionResourceIDs;
+    }
+
+    public void save() throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            GSISSHSubmission existingGSISSHSubmission = em.find(GSISSHSubmission.class, submissionID);
+            em.close();
+
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (existingGSISSHSubmission !=  null){
+                existingGSISSHSubmission.setSubmissionID(submissionID);
+                existingGSISSHSubmission.setResourceID(resourceID);
+                existingGSISSHSubmission.setSshPort(sshPort);
+                existingGSISSHSubmission.setResourceJobManager(resourceJobManager);
+                existingGSISSHSubmission.setInstalledPath(installedPath);
+                existingGSISSHSubmission.setMonitorMode(monitorMode);
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
+                existingGSISSHSubmission.setComputeResource(computeResource);
+
+                em.merge(existingGSISSHSubmission);
+            }else {
+                GSISSHSubmission gsisshSubmission = new GSISSHSubmission();
+                gsisshSubmission.setResourceID(resourceID);
+                gsisshSubmission.setSubmissionID(submissionID);
+                gsisshSubmission.setSshPort(sshPort);
+                gsisshSubmission.setResourceJobManager(resourceJobManager);
+                gsisshSubmission.setInstalledPath(installedPath);
+                gsisshSubmission.setMonitorMode(monitorMode);
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
+                gsisshSubmission.setComputeResource(computeResource);
+                em.persist(gsisshSubmission);
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+
+    }
+
+    public boolean isExists(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            GSISSHSubmission gsisshSubmission = em.find(GSISSHSubmission.class, identifier);
+            em.close();
+            return gsisshSubmission != null;
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public String getResourceID() {
+        return resourceID;
+    }
+
+    public void setResourceID(String resourceID) {
+        this.resourceID = resourceID;
+    }
+
+    public String getSubmissionID() {
+        return submissionID;
+    }
+
+    public void setSubmissionID(String submissionID) {
+        this.submissionID = submissionID;
+    }
+
+    public String getResourceJobManager() {
+        return resourceJobManager;
+    }
+
+    public void setResourceJobManager(String resourceJobManager) {
+        this.resourceJobManager = resourceJobManager;
+    }
+
+    public int getSshPort() {
+        return sshPort;
+    }
+
+    public void setSshPort(int sshPort) {
+        this.sshPort = sshPort;
+    }
+
+    public String getInstalledPath() {
+        return installedPath;
+    }
+
+    public void setInstalledPath(String installedPath) {
+        this.installedPath = installedPath;
+    }
+
+    public String getMonitorMode() {
+        return monitorMode;
+    }
+
+    public void setMonitorMode(String monitorMode) {
+        this.monitorMode = monitorMode;
+    }
+
+    public ComputeHostResource getComputeHostResource() {
+        return computeHostResource;
+    }
+
+    public void setComputeHostResource(ComputeHostResource computeHostResource) {
+        this.computeHostResource = computeHostResource;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/da5d2f3a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostAliasResource.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostAliasResource.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostAliasResource.java
index 54cd61a..3f0201a 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostAliasResource.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostAliasResource.java
@@ -211,7 +211,7 @@ public class HostAliasResource extends AbstractResource {
             em.getTransaction().begin();
             if (existingHostAlias !=  null){
                 existingHostAlias.setAlias(alias);
-                ComputeResource computeResource = em.find(ComputeResource.class, computeHostResource.getResoureId());
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
                 existingHostAlias.setComputeResource(computeResource);
                 existingHostAlias.setResourceID(resourceID);
 
@@ -220,7 +220,7 @@ public class HostAliasResource extends AbstractResource {
                 HostAlias hostAlias = new HostAlias();
                 hostAlias.setAlias(alias);
                 hostAlias.setResourceID(resourceID);
-                ComputeResource computeResource = em.find(ComputeResource.class, computeHostResource.getResoureId());
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
                 hostAlias.setComputeResource(computeResource);
 
                 em.persist(hostAlias);

http://git-wip-us.apache.org/repos/asf/airavata/blob/da5d2f3a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostIPAddressResource.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostIPAddressResource.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostIPAddressResource.java
index 5ad6562..888fae4 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostIPAddressResource.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/HostIPAddressResource.java
@@ -215,16 +215,16 @@ public class HostIPAddressResource extends AbstractResource{
             em.getTransaction().begin();
             if (existingHostIP !=  null){
                 existingHostIP.setIpaddress(ipaddress);
-                ComputeResource computeResource = em.find(ComputeResource.class, computeHostResource.getResoureId());
-                existingHostIP.setComputeResource(computeResource);
                 existingHostIP.setResourceID(resourceID);
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
+                existingHostIP.setComputeResource(computeResource);
 
                 em.merge(existingHostIP);
             }else {
                 HostIPAddress hostIPAddress = new HostIPAddress();
                 hostIPAddress.setIpaddress(ipaddress);
                 hostIPAddress.setResourceID(resourceID);
-                ComputeResource computeResource = em.find(ComputeResource.class, computeHostResource.getResoureId());
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
                 hostIPAddress.setComputeResource(computeResource);
 
                 em.persist(hostIPAddress);

http://git-wip-us.apache.org/repos/asf/airavata/blob/da5d2f3a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/JobSubmissionProtocolResource.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/JobSubmissionProtocolResource.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/JobSubmissionProtocolResource.java
index a9e2517..a84131b 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/JobSubmissionProtocolResource.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/JobSubmissionProtocolResource.java
@@ -29,9 +29,9 @@ public class JobSubmissionProtocolResource extends AbstractResource {
 
     public void remove(Object identifier) throws AppCatalogException {
         HashMap<String, String> ids;
-        if (identifier instanceof Map){
-            ids = (HashMap)identifier;
-        }else {
+        if (identifier instanceof Map) {
+            ids = (HashMap) identifier;
+        } else {
             logger.error("Identifier should be a map with the field name and it's value");
             throw new AppCatalogException("Identifier should be a map with the field name and it's value");
         }
@@ -40,7 +40,7 @@ public class JobSubmissionProtocolResource extends AbstractResource {
         try {
             em = AppCatalogJPAUtils.getEntityManager();
             em.getTransaction().begin();
-            AppCatalogQueryGenerator generator= new AppCatalogQueryGenerator(JOB_SUBMISSION_PROTOCOL);
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(JOB_SUBMISSION_PROTOCOL);
             generator.setParameter(JobSubmissionProtocolConstants.RESOURCE_ID, ids.get(JobSubmissionProtocolConstants.RESOURCE_ID));
             generator.setParameter(JobSubmissionProtocolConstants.SUBMISSION_ID, ids.get(JobSubmissionProtocolConstants.SUBMISSION_ID));
             generator.setParameter(JobSubmissionProtocolConstants.JOB_TYPE, ids.get(JobSubmissionProtocolConstants.JOB_TYPE));
@@ -53,7 +53,7 @@ public class JobSubmissionProtocolResource extends AbstractResource {
             throw new AppCatalogException(e);
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();
@@ -63,9 +63,9 @@ public class JobSubmissionProtocolResource extends AbstractResource {
 
     public Resource get(Object identifier) throws AppCatalogException {
         HashMap<String, String> ids;
-        if (identifier instanceof Map){
-            ids = (HashMap)identifier;
-        }else {
+        if (identifier instanceof Map) {
+            ids = (HashMap) identifier;
+        } else {
             logger.error("Identifier should be a map with the field name and it's value");
             throw new AppCatalogException("Identifier should be a map with the field name and it's value");
         }
@@ -119,7 +119,7 @@ public class JobSubmissionProtocolResource extends AbstractResource {
                         jobSubmissionProtocolResourceList.add(jobSubmissionProtocolResource);
                     }
                 }
-            }else if (fieldName.equals(JobSubmissionProtocolConstants.JOB_TYPE)) {
+            } else if (fieldName.equals(JobSubmissionProtocolConstants.JOB_TYPE)) {
                 generator.setParameter(JobSubmissionProtocolConstants.JOB_TYPE, value);
                 q = generator.selectQuery(em);
                 results = q.getResultList();
@@ -131,7 +131,7 @@ public class JobSubmissionProtocolResource extends AbstractResource {
                         jobSubmissionProtocolResourceList.add(jobSubmissionProtocolResource);
                     }
                 }
-            }else if (fieldName.equals(HostIPAddressConstants.RESOURCE_ID)) {
+            } else if (fieldName.equals(HostIPAddressConstants.RESOURCE_ID)) {
                 generator.setParameter(HostIPAddressConstants.RESOURCE_ID, value);
                 q = generator.selectQuery(em);
                 results = q.getResultList();
@@ -181,7 +181,7 @@ public class JobSubmissionProtocolResource extends AbstractResource {
                 if (results.size() != 0) {
                     for (Object result : results) {
                         JobSubmissionProtocol jobSubmissionProtocol = (JobSubmissionProtocol) result;
-                        jobSubmissionProtocolIDs.add(jobSubmissionProtocol.getResourceID());
+                        jobSubmissionProtocolIDs.add(jobSubmissionProtocol.getSubmissionID());
                     }
                 }
             } else if (fieldName.equals(JobSubmissionProtocolConstants.RESOURCE_ID)) {
@@ -191,17 +191,17 @@ public class JobSubmissionProtocolResource extends AbstractResource {
                 if (results.size() != 0) {
                     for (Object result : results) {
                         JobSubmissionProtocol jobSubmissionProtocol = (JobSubmissionProtocol) result;
-                        jobSubmissionProtocolIDs.add(jobSubmissionProtocol.getResourceID());
+                        jobSubmissionProtocolIDs.add(jobSubmissionProtocol.getSubmissionID());
                     }
                 }
-            }else if (fieldName.equals(JobSubmissionProtocolConstants.JOB_TYPE)) {
+            } else if (fieldName.equals(JobSubmissionProtocolConstants.JOB_TYPE)) {
                 generator.setParameter(JobSubmissionProtocolConstants.JOB_TYPE, value);
                 q = generator.selectQuery(em);
                 results = q.getResultList();
                 if (results.size() != 0) {
                     for (Object result : results) {
                         JobSubmissionProtocol jobSubmissionProtocol = (JobSubmissionProtocol) result;
-                        jobSubmissionProtocolIDs.add(jobSubmissionProtocol.getResourceID());
+                        jobSubmissionProtocolIDs.add(jobSubmissionProtocol.getSubmissionID());
                     }
                 }
             } else {
@@ -223,31 +223,32 @@ public class JobSubmissionProtocolResource extends AbstractResource {
                 em.close();
             }
         }
-        return jobSubmissionProtocolIDs;    }
+        return jobSubmissionProtocolIDs;
+    }
 
     public void save() throws AppCatalogException {
         EntityManager em = null;
         try {
             em = AppCatalogJPAUtils.getEntityManager();
-            JobSubmissionProtocol existingJobSubProtocol = em.find(JobSubmissionProtocol.class, new JobSubmissionProtocolPK(resourceID,submissionID,jobType));
+            JobSubmissionProtocol existingJobSubProtocol = em.find(JobSubmissionProtocol.class, new JobSubmissionProtocolPK(resourceID, submissionID, jobType));
             em.close();
 
             em = AppCatalogJPAUtils.getEntityManager();
             em.getTransaction().begin();
-            if (existingJobSubProtocol !=  null){
+            if (existingJobSubProtocol != null) {
                 existingJobSubProtocol.setJobType(jobType);
                 existingJobSubProtocol.setSubmissionID(submissionID);
-                ComputeResource computeResource = em.find(ComputeResource.class, computeHostResource.getResoureId());
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
                 existingJobSubProtocol.setComputeResource(computeResource);
                 existingJobSubProtocol.setResourceID(resourceID);
 
                 em.merge(existingJobSubProtocol);
-            }else {
+            } else {
                 JobSubmissionProtocol jobSubmissionProtocol = new JobSubmissionProtocol();
                 jobSubmissionProtocol.setJobType(jobType);
                 jobSubmissionProtocol.setSubmissionID(submissionID);
                 jobSubmissionProtocol.setResourceID(resourceID);
-                ComputeResource computeResource = em.find(ComputeResource.class, computeHostResource.getResoureId());
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
                 jobSubmissionProtocol.setComputeResource(computeResource);
 
                 em.persist(jobSubmissionProtocol);
@@ -259,7 +260,7 @@ public class JobSubmissionProtocolResource extends AbstractResource {
             throw new AppCatalogException(e);
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();
@@ -270,9 +271,9 @@ public class JobSubmissionProtocolResource extends AbstractResource {
 
     public boolean isExists(Object identifier) throws AppCatalogException {
         HashMap<String, String> ids;
-        if (identifier instanceof Map){
-            ids = (HashMap)identifier;
-        }else {
+        if (identifier instanceof Map) {
+            ids = (HashMap) identifier;
+        } else {
             logger.error("Identifier should be a map with the field name and it's value");
             throw new AppCatalogException("Identifier should be a map with the field name and it's value");
         }
@@ -281,7 +282,7 @@ public class JobSubmissionProtocolResource extends AbstractResource {
         try {
             em = AppCatalogJPAUtils.getEntityManager();
             JobSubmissionProtocol jobSubmissionProtocol = em.find(JobSubmissionProtocol.class, new JobSubmissionProtocolPK(ids.get(JobSubmissionProtocolConstants.RESOURCE_ID),
-                    ids.get(JobSubmissionProtocolConstants.SUBMISSION_ID),ids.get(JobSubmissionProtocolConstants.JOB_TYPE)));
+                    ids.get(JobSubmissionProtocolConstants.SUBMISSION_ID), ids.get(JobSubmissionProtocolConstants.JOB_TYPE)));
 
             em.close();
             return jobSubmissionProtocol != null;

http://git-wip-us.apache.org/repos/asf/airavata/blob/da5d2f3a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/SSHSubmissionResource.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/SSHSubmissionResource.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/SSHSubmissionResource.java
new file mode 100644
index 0000000..b29c64c
--- /dev/null
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/resources/SSHSubmissionResource.java
@@ -0,0 +1,331 @@
+package org.apache.aiaravata.application.catalog.data.resources;
+
+import org.airavata.appcatalog.cpi.AppCatalogException;
+import org.apache.aiaravata.application.catalog.data.model.ComputeResource;
+import org.apache.aiaravata.application.catalog.data.model.SSHSubmission;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogJPAUtils;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogQueryGenerator;
+import org.apache.aiaravata.application.catalog.data.util.AppCatalogResourceType;
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SSHSubmissionResource extends AbstractResource {
+    private final static Logger logger = LoggerFactory.getLogger(SSHSubmissionResource.class);
+
+    private String resourceID;
+    private String submissionID;
+    private String resourceJobManager;
+    private int sshPort;
+    private ComputeHostResource computeHostResource;
+
+
+    public void remove(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(SSH_SUBMISSION);
+            generator.setParameter(SSHSubmissionConstants.SUBMISSION_ID, identifier);
+            Query q = generator.deleteQuery(em);
+            q.executeUpdate();
+            em.getTransaction().commit();
+            em.close();
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public Resource get(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(SSH_SUBMISSION);
+            generator.setParameter(SSHSubmissionConstants.SUBMISSION_ID, identifier);
+            Query q = generator.selectQuery(em);
+            SSHSubmission sshSubmission = (SSHSubmission) q.getSingleResult();
+            SSHSubmissionResource sshSubmissionResource =
+                    (SSHSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.SSH_SUBMISSION, sshSubmission);
+            em.getTransaction().commit();
+            em.close();
+            return sshSubmissionResource;
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public List<Resource> get(String fieldName, Object value) throws AppCatalogException {
+        List<Resource> sshSubmissionResourceList = new ArrayList<Resource>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(SSH_SUBMISSION);
+            List results;
+            if (fieldName.equals(SSHSubmissionConstants.SUBMISSION_ID)) {
+                generator.setParameter(SSHSubmissionConstants.SUBMISSION_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        SSHSubmission sshSubmission = (SSHSubmission) result;
+                        SSHSubmissionResource sshSubmissionResource =
+                                (SSHSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.SSH_SUBMISSION, sshSubmission);
+                        sshSubmissionResourceList.add(sshSubmissionResource);
+                    }
+                }
+            } else if (fieldName.equals(SSHSubmissionConstants.RESOURCE_ID)) {
+                generator.setParameter(SSHSubmissionConstants.RESOURCE_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        SSHSubmission sshSubmission = (SSHSubmission) result;
+                        SSHSubmissionResource sshSubmissionResource =
+                                (SSHSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.SSH_SUBMISSION, sshSubmission);
+                        sshSubmissionResourceList.add(sshSubmissionResource);
+                    }
+                }
+            } else if (fieldName.equals(SSHSubmissionConstants.SSH_PORT)) {
+                generator.setParameter(SSHSubmissionConstants.SSH_PORT, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        SSHSubmission sshSubmission = (SSHSubmission) result;
+                        SSHSubmissionResource sshSubmissionResource =
+                                (SSHSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.SSH_SUBMISSION, sshSubmission);
+                        sshSubmissionResourceList.add(sshSubmissionResource);
+                    }
+                }
+            } else if (fieldName.equals(SSHSubmissionConstants.RESOURCE_JOB_MANAGER)) {
+                generator.setParameter(SSHSubmissionConstants.RESOURCE_JOB_MANAGER, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        SSHSubmission sshSubmission = (SSHSubmission) result;
+                        SSHSubmissionResource sshSubmissionResource =
+                                (SSHSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.SSH_SUBMISSION, sshSubmission);
+                        sshSubmissionResourceList.add(sshSubmissionResource);
+                    }
+                }
+            } else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for SSH submission resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for SSH Submission resource.");
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return sshSubmissionResourceList;
+    }
+
+    public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+        List<String> sshSubmissionResourceIDs = new ArrayList<String>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(SSH_SUBMISSION);
+            List results;
+            if (fieldName.equals(SSHSubmissionConstants.SUBMISSION_ID)) {
+                generator.setParameter(SSHSubmissionConstants.SUBMISSION_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        SSHSubmission sshSubmission = (SSHSubmission) result;
+                        sshSubmissionResourceIDs.add(sshSubmission.getSubmissionID());
+                    }
+                }
+            } else if (fieldName.equals(SSHSubmissionConstants.RESOURCE_ID)) {
+                generator.setParameter(SSHSubmissionConstants.RESOURCE_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        SSHSubmission sshSubmission = (SSHSubmission) result;
+                        sshSubmissionResourceIDs.add(sshSubmission.getSubmissionID());
+                    }
+                }
+            }else if (fieldName.equals(SSHSubmissionConstants.RESOURCE_JOB_MANAGER)) {
+                generator.setParameter(SSHSubmissionConstants.RESOURCE_JOB_MANAGER, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        SSHSubmission sshSubmission = (SSHSubmission) result;
+                        sshSubmissionResourceIDs.add(sshSubmission.getSubmissionID());
+                    }
+                }
+            }else if (fieldName.equals(SSHSubmissionConstants.SSH_PORT)) {
+                generator.setParameter(SSHSubmissionConstants.SSH_PORT, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        SSHSubmission sshSubmission = (SSHSubmission) result;
+                        sshSubmissionResourceIDs.add(sshSubmission.getSubmissionID());
+                    }
+                }
+            } else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for SSH Submission resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for SSH Submission resource.");
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return sshSubmissionResourceIDs;
+    }
+
+    public void save() throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            SSHSubmission existingSSHSubmission = em.find(SSHSubmission.class, submissionID);
+            em.close();
+
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (existingSSHSubmission !=  null){
+                existingSSHSubmission.setSubmissionID(submissionID);
+                existingSSHSubmission.setResourceID(resourceID);
+                existingSSHSubmission.setSshPort(sshPort);
+                existingSSHSubmission.setResourceJobManager(resourceJobManager);
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
+                existingSSHSubmission.setComputeResource(computeResource);
+
+                em.merge(existingSSHSubmission);
+            }else {
+                SSHSubmission sshSubmission = new SSHSubmission();
+                sshSubmission.setResourceID(resourceID);
+                sshSubmission.setSubmissionID(submissionID);
+                sshSubmission.setSshPort(sshPort);
+                sshSubmission.setResourceJobManager(resourceJobManager);
+                ComputeResource computeResource = em.find(ComputeResource.class, resourceID);
+                sshSubmission.setComputeResource(computeResource);
+                em.persist(sshSubmission);
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public boolean isExists(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            SSHSubmission sshSubmission = em.find(SSHSubmission.class, identifier);
+            em.close();
+            return sshSubmission != null;
+        } catch (ApplicationSettingsException e) {
+            logger.error(e.getMessage(), e);
+            throw new AppCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    public String getResourceID() {
+        return resourceID;
+    }
+
+    public void setResourceID(String resourceID) {
+        this.resourceID = resourceID;
+    }
+
+    public String getSubmissionID() {
+        return submissionID;
+    }
+
+    public void setSubmissionID(String submissionID) {
+        this.submissionID = submissionID;
+    }
+
+    public String getResourceJobManager() {
+        return resourceJobManager;
+    }
+
+    public void setResourceJobManager(String resourceJobManager) {
+        this.resourceJobManager = resourceJobManager;
+    }
+
+    public int getSshPort() {
+        return sshPort;
+    }
+
+    public void setSshPort(int sshPort) {
+        this.sshPort = sshPort;
+    }
+
+    public ComputeHostResource getComputeHostResource() {
+        return computeHostResource;
+    }
+
+    public void setComputeHostResource(ComputeHostResource computeHostResource) {
+        this.computeHostResource = computeHostResource;
+    }
+}