You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2015/06/04 22:36:51 UTC

[05/52] [abbrv] [partial] airavata git commit: registry refactoring

http://git-wip-us.apache.org/repos/asf/airavata/blob/ec8c6202/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/SshJobSubmissionResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/SshJobSubmissionResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/SshJobSubmissionResource.java
new file mode 100644
index 0000000..ee14d76
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/SshJobSubmissionResource.java
@@ -0,0 +1,332 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.aiaravata.application.catalog.data.resources;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.airavata.appcatalog.cpi.AppCatalogException;
+import org.apache.aiaravata.application.catalog.data.model.ResourceJobManager;
+import org.apache.aiaravata.application.catalog.data.model.SshJobSubmission;
+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.apache.airavata.common.utils.AiravataUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SshJobSubmissionResource extends AbstractResource {
+	private final static Logger logger = LoggerFactory.getLogger(SshJobSubmissionResource.class);
+	private String resourceJobManagerId;
+	private ResourceJobManagerResource resourceJobManagerResource;
+	private String jobSubmissionInterfaceId;
+	private String alternativeSshHostname;
+	private String securityProtocol;
+	private int sshPort;
+    private String monitorMode;
+    private Timestamp createdTime;
+    private Timestamp updatedTime;
+
+    public Timestamp getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Timestamp createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public Timestamp getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(Timestamp updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+	
+	@Override
+	public void remove(Object identifier) throws AppCatalogException {
+		EntityManager em = null;
+		try {
+			em = AppCatalogJPAUtils.getEntityManager();
+			em.getTransaction().begin();
+			AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(SSH_JOB_SUBMISSION);
+			generator.setParameter(SshJobSubmissionConstants.JOB_SUBMISSION_INTERFACE_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();
+			}
+		}
+	}
+	
+	@Override
+	public Resource get(Object identifier) throws AppCatalogException {
+		EntityManager em = null;
+		try {
+			em = AppCatalogJPAUtils.getEntityManager();
+			em.getTransaction().begin();
+			AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(SSH_JOB_SUBMISSION);
+			generator.setParameter(SshJobSubmissionConstants.JOB_SUBMISSION_INTERFACE_ID, identifier);
+			Query q = generator.selectQuery(em);
+			SshJobSubmission sshJobSubmission = (SshJobSubmission) q.getSingleResult();
+			SshJobSubmissionResource sshJobSubmissionResource = (SshJobSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.SSH_JOB_SUBMISSION, sshJobSubmission);
+			em.getTransaction().commit();
+			em.close();
+			return sshJobSubmissionResource;
+		} 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();
+			}
+		}
+	}
+	
+	@Override
+	public List<Resource> get(String fieldName, Object value) throws AppCatalogException {
+		List<Resource> sshJobSubmissionResources = new ArrayList<Resource>();
+		EntityManager em = null;
+		try {
+			em = AppCatalogJPAUtils.getEntityManager();
+			em.getTransaction().begin();
+			AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(SSH_JOB_SUBMISSION);
+			Query q;
+			if ((fieldName.equals(SshJobSubmissionConstants.RESOURCE_JOB_MANAGER_ID)) || (fieldName.equals(SshJobSubmissionConstants.JOB_SUBMISSION_INTERFACE_ID)) || (fieldName.equals(SshJobSubmissionConstants.ALTERNATIVE_SSH_HOSTNAME)) || (fieldName.equals(SshJobSubmissionConstants.SECURITY_PROTOCOL)) || (fieldName.equals(SshJobSubmissionConstants.SSH_PORT))) {
+				generator.setParameter(fieldName, value);
+				q = generator.selectQuery(em);
+				List<?> results = q.getResultList();
+				for (Object result : results) {
+					SshJobSubmission sshJobSubmission = (SshJobSubmission) result;
+					SshJobSubmissionResource sshJobSubmissionResource = (SshJobSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.SSH_JOB_SUBMISSION, sshJobSubmission);
+					sshJobSubmissionResources.add(sshJobSubmissionResource);
+				}
+			} else {
+				em.getTransaction().commit();
+					em.close();
+				logger.error("Unsupported field name for Ssh Job Submission Resource.", new IllegalArgumentException());
+				throw new IllegalArgumentException("Unsupported field name for Ssh Job Submission Resource.");
+			}
+			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();
+			}
+		}
+		return sshJobSubmissionResources;
+	}
+
+    @Override
+    public List<Resource> getAll() throws AppCatalogException {
+        return null;
+    }
+
+    @Override
+    public List<String> getAllIds() throws AppCatalogException {
+        return null;
+    }
+
+    @Override
+	public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+		List<String> sshJobSubmissionResourceIDs = new ArrayList<String>();
+		EntityManager em = null;
+		try {
+			em = AppCatalogJPAUtils.getEntityManager();
+			em.getTransaction().begin();
+			AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(SSH_JOB_SUBMISSION);
+			Query q;
+			if ((fieldName.equals(SshJobSubmissionConstants.RESOURCE_JOB_MANAGER_ID)) || (fieldName.equals(SshJobSubmissionConstants.JOB_SUBMISSION_INTERFACE_ID)) || (fieldName.equals(SshJobSubmissionConstants.ALTERNATIVE_SSH_HOSTNAME)) || (fieldName.equals(SshJobSubmissionConstants.SECURITY_PROTOCOL)) || (fieldName.equals(SshJobSubmissionConstants.SSH_PORT))) {
+				generator.setParameter(fieldName, value);
+				q = generator.selectQuery(em);
+				List<?> results = q.getResultList();
+				for (Object result : results) {
+					SshJobSubmission sshJobSubmission = (SshJobSubmission) result;
+					SshJobSubmissionResource sshJobSubmissionResource = (SshJobSubmissionResource) AppCatalogJPAUtils.getResource(AppCatalogResourceType.SSH_JOB_SUBMISSION, sshJobSubmission);
+					sshJobSubmissionResourceIDs.add(sshJobSubmissionResource.getJobSubmissionInterfaceId());
+				}
+			} else {
+				em.getTransaction().commit();
+					em.close();
+				logger.error("Unsupported field name for Ssh Job Submission Resource.", new IllegalArgumentException());
+				throw new IllegalArgumentException("Unsupported field name for Ssh Job Submission Resource.");
+			}
+			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();
+			}
+		}
+		return sshJobSubmissionResourceIDs;
+	}
+	
+	@Override
+	public void save() throws AppCatalogException {
+		EntityManager em = null;
+		try {
+			em = AppCatalogJPAUtils.getEntityManager();
+			SshJobSubmission existingSshJobSubmission = em.find(SshJobSubmission.class, jobSubmissionInterfaceId);
+			em.close();
+			SshJobSubmission sshJobSubmission;
+			em = AppCatalogJPAUtils.getEntityManager();
+			em.getTransaction().begin();
+			if (existingSshJobSubmission == null) {
+				sshJobSubmission = new SshJobSubmission();
+                sshJobSubmission.setCreationTime(AiravataUtils.getCurrentTimestamp());
+			} else {
+				sshJobSubmission = existingSshJobSubmission;
+                sshJobSubmission.setUpdateTime(AiravataUtils.getCurrentTimestamp());
+			}
+			sshJobSubmission.setResourceJobManagerId(getResourceJobManagerId());
+			ResourceJobManager resourceJobManager = em.find(ResourceJobManager.class, getResourceJobManagerId());
+			sshJobSubmission.setResourceJobManager(resourceJobManager);
+			sshJobSubmission.setJobSubmissionInterfaceId(getJobSubmissionInterfaceId());
+			sshJobSubmission.setAlternativeSshHostname(getAlternativeSshHostname());
+			sshJobSubmission.setSecurityProtocol(getSecurityProtocol());
+			sshJobSubmission.setSshPort(getSshPort());
+            sshJobSubmission.setMonitorMode(getMonitorMode());
+            if (existingSshJobSubmission == null) {
+				em.persist(sshJobSubmission);
+			} else {
+				em.merge(sshJobSubmission);
+			}
+			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();
+			}
+		}
+	}
+	
+	@Override
+	public boolean isExists(Object identifier) throws AppCatalogException {
+		EntityManager em = null;
+		try {
+			em = AppCatalogJPAUtils.getEntityManager();
+			SshJobSubmission sshJobSubmission = em.find(SshJobSubmission.class, identifier);
+			em.close();
+			return sshJobSubmission != 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 getResourceJobManagerId() {
+		return resourceJobManagerId;
+	}
+	
+	public ResourceJobManagerResource getResourceJobManagerResource() {
+		return resourceJobManagerResource;
+	}
+	
+	public String getJobSubmissionInterfaceId() {
+		return jobSubmissionInterfaceId;
+	}
+	
+	public String getAlternativeSshHostname() {
+		return alternativeSshHostname;
+	}
+	
+	public String getSecurityProtocol() {
+		return securityProtocol;
+	}
+	
+	public int getSshPort() {
+		return sshPort;
+	}
+	
+	public void setResourceJobManagerId(String resourceJobManagerId) {
+		this.resourceJobManagerId=resourceJobManagerId;
+	}
+	
+	public void setResourceJobManagerResource(ResourceJobManagerResource resourceJobManagerResource) {
+		this.resourceJobManagerResource=resourceJobManagerResource;
+	}
+	
+	public void setJobSubmissionInterfaceId(String jobSubmissionInterfaceId) {
+		this.jobSubmissionInterfaceId=jobSubmissionInterfaceId;
+	}
+	
+	public void setAlternativeSshHostname(String alternativeSshHostname) {
+		this.alternativeSshHostname=alternativeSshHostname;
+	}
+	
+	public void setSecurityProtocol(String securityProtocol) {
+		this.securityProtocol=securityProtocol;
+	}
+	
+	public void setSshPort(int sshPort) {
+		this.sshPort=sshPort;
+	}
+
+    public String getMonitorMode() {
+        return monitorMode;
+    }
+
+    public void setMonitorMode(String monitorMode) {
+        this.monitorMode = monitorMode;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/ec8c6202/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreDataMovementAppCatalogResourceAppCat.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreDataMovementAppCatalogResourceAppCat.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreDataMovementAppCatalogResourceAppCat.java
new file mode 100644
index 0000000..af8899a
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreDataMovementAppCatalogResourceAppCat.java
@@ -0,0 +1,255 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.airavata.registry.core.app.catalog.resources;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.registry.core.app.catalog.model.UnicoreDataMovement;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogJPAUtils;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogQueryGenerator;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogResourceType;
+import org.apache.airavata.registry.cpi.AppCatalogException;
+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 UnicoreDataMovementAppCatalogResourceAppCat extends AppCatAbstractResource {
+	
+	private final static Logger logger = LoggerFactory.getLogger(UnicoreDataMovementAppCatalogResourceAppCat.class);
+	
+	private String dataMovementId;
+	private String securityProtocol;
+	private String unicoreEndpointUrl;
+
+	 public void remove(Object identifier) throws AppCatalogException {
+	        EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_DATA_MOVEMENT);
+	            generator.setParameter(UnicoreDataMovementConstants.DATAMOVEMENT_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 AppCatalogResource get(Object identifier) throws AppCatalogException {
+		 EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_DATA_MOVEMENT);
+	            generator.setParameter(UnicoreDataMovementConstants.DATAMOVEMENT_ID, identifier);
+	            Query q = generator.selectQuery(em);
+	            UnicoreDataMovement unicoreDataMovement = (UnicoreDataMovement) q.getSingleResult();
+	            UnicoreDataMovementAppCatalogResourceAppCat dataMovementResource =
+	            			(UnicoreDataMovementAppCatalogResourceAppCat) AppCatalogJPAUtils
+	            			.getResource(AppCatalogResourceType.UNICORE_DATA_MOVEMENT,
+							unicoreDataMovement);
+	            em.getTransaction().commit();
+	            em.close();
+	            return dataMovementResource;
+	        } 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<AppCatalogResource> get(String fieldName, Object value) throws AppCatalogException {
+	        List<AppCatalogResource> unicoreDMResourceList = new ArrayList<AppCatalogResource>();
+	        EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            Query q;
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_DATA_MOVEMENT);
+	            List results;
+	            if (fieldName.equals(UnicoreDataMovementConstants.UNICORE_ENDPOINT_URL)) {
+	                generator.setParameter(UnicoreDataMovementConstants.UNICORE_ENDPOINT_URL, value);
+	                q = generator.selectQuery(em);
+	                results = q.getResultList();
+	                if (results.size() != 0) {
+	                    for (Object result : results) {
+	                        UnicoreDataMovement dataMovement = (UnicoreDataMovement) result;
+	                        UnicoreDataMovementAppCatalogResourceAppCat unicoreJobSubmissionResource =
+	                                (UnicoreDataMovementAppCatalogResourceAppCat) AppCatalogJPAUtils.getResource(
+	                                        AppCatalogResourceType.UNICORE_DATA_MOVEMENT, dataMovement);
+	                        unicoreDMResourceList.add(unicoreJobSubmissionResource);
+	                    }
+	                }
+	            } else if (fieldName.equals(UnicoreDataMovementConstants.SECURITY_PROTOCAL)) {
+	                generator.setParameter(UnicoreDataMovementConstants.SECURITY_PROTOCAL, value);
+	                q = generator.selectQuery(em);
+	                results = q.getResultList();
+	                if (results.size() != 0) {
+	                    for (Object result : results) {
+	                        UnicoreDataMovement dataMovement = (UnicoreDataMovement) result;
+	                        UnicoreDataMovementAppCatalogResourceAppCat dataMovementResource =
+	                                (UnicoreDataMovementAppCatalogResourceAppCat) AppCatalogJPAUtils.getResource(
+	                                        AppCatalogResourceType.UNICORE_DATA_MOVEMENT, dataMovement);
+	                        unicoreDMResourceList.add(dataMovementResource);
+	                    }
+	                }
+	            } else {
+	                em.getTransaction().commit();
+	                em.close();
+	                logger.error("Unsupported field name for Unicore data movement resource.", new IllegalArgumentException());
+	                throw new IllegalArgumentException("Unsupported field name for Unicore data movement 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 unicoreDMResourceList;
+	    }
+
+	@Override
+	public List<AppCatalogResource> getAll() throws AppCatalogException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<String> getAllIds() throws AppCatalogException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+        return null;
+    }
+
+    public void save() throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            UnicoreDataMovement existingDataMovement = em.find(UnicoreDataMovement.class, dataMovementId);
+            em.close();
+
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (existingDataMovement != null) {
+                existingDataMovement.setDataMovementId(dataMovementId);;
+                existingDataMovement.setUnicoreEndpointUrl(unicoreEndpointUrl);
+                existingDataMovement.setSecurityProtocol(securityProtocol);
+                em.merge(existingDataMovement);
+            } else {
+                UnicoreDataMovement unicoreJobSubmission = new UnicoreDataMovement();
+                unicoreJobSubmission.setDataMovementId(dataMovementId);
+                unicoreJobSubmission.setUnicoreEndpointUrl(unicoreEndpointUrl);
+                unicoreJobSubmission.setSecurityProtocol(securityProtocol);
+                em.persist(unicoreJobSubmission);
+            }
+            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();
+            UnicoreDataMovement dataMovement = em.find(UnicoreDataMovement.class, identifier);
+            em.close();
+            return dataMovement != 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 getDataMovementId() {
+        return dataMovementId;
+    }
+
+    public void setDataMovementId(String dataMovementId) {
+        this.dataMovementId = dataMovementId;
+    }
+
+    public String getSecurityProtocol() {
+		return securityProtocol;
+	}
+
+	public void setSecurityProtocol(String securityProtocol) {
+		this.securityProtocol = securityProtocol;
+	}
+
+	public String getUnicoreEndpointUrl() {
+		return unicoreEndpointUrl;
+	}
+
+	public void setUnicoreEndpointUrl(String unicoreEndpointUrl) {
+		this.unicoreEndpointUrl = unicoreEndpointUrl;
+	}
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/ec8c6202/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreDataMovementResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreDataMovementResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreDataMovementResource.java
new file mode 100644
index 0000000..63f2b70
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreDataMovementResource.java
@@ -0,0 +1,255 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.aiaravata.application.catalog.data.resources;
+
+import org.airavata.appcatalog.cpi.AppCatalogException;
+import org.apache.aiaravata.application.catalog.data.model.UnicoreDataMovement;
+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 UnicoreDataMovementResource extends AbstractResource {
+	
+	private final static Logger logger = LoggerFactory.getLogger(UnicoreDataMovementResource.class);
+	
+	private String dataMovementId;
+	private String securityProtocol;
+	private String unicoreEndpointUrl;
+
+	 public void remove(Object identifier) throws AppCatalogException {
+	        EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_DATA_MOVEMENT);
+	            generator.setParameter(UnicoreDataMovementConstants.DATAMOVEMENT_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(UNICORE_DATA_MOVEMENT);
+	            generator.setParameter(UnicoreDataMovementConstants.DATAMOVEMENT_ID, identifier);
+	            Query q = generator.selectQuery(em);
+	            UnicoreDataMovement unicoreDataMovement = (UnicoreDataMovement) q.getSingleResult();
+	            UnicoreDataMovementResource dataMovementResource =
+	            			(UnicoreDataMovementResource) AppCatalogJPAUtils
+	            			.getResource(AppCatalogResourceType.UNICORE_DATA_MOVEMENT,
+							unicoreDataMovement);
+	            em.getTransaction().commit();
+	            em.close();
+	            return dataMovementResource;
+	        } 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> unicoreDMResourceList = new ArrayList<Resource>();
+	        EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            Query q;
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_DATA_MOVEMENT);
+	            List results;
+	            if (fieldName.equals(UnicoreDataMovementConstants.UNICORE_ENDPOINT_URL)) {
+	                generator.setParameter(UnicoreDataMovementConstants.UNICORE_ENDPOINT_URL, value);
+	                q = generator.selectQuery(em);
+	                results = q.getResultList();
+	                if (results.size() != 0) {
+	                    for (Object result : results) {
+	                        UnicoreDataMovement dataMovement = (UnicoreDataMovement) result;
+	                        UnicoreDataMovementResource unicoreJobSubmissionResource =
+	                                (UnicoreDataMovementResource) AppCatalogJPAUtils.getResource(
+	                                        AppCatalogResourceType.UNICORE_DATA_MOVEMENT, dataMovement);
+	                        unicoreDMResourceList.add(unicoreJobSubmissionResource);
+	                    }
+	                }
+	            } else if (fieldName.equals(UnicoreDataMovementConstants.SECURITY_PROTOCAL)) {
+	                generator.setParameter(UnicoreDataMovementConstants.SECURITY_PROTOCAL, value);
+	                q = generator.selectQuery(em);
+	                results = q.getResultList();
+	                if (results.size() != 0) {
+	                    for (Object result : results) {
+	                        UnicoreDataMovement dataMovement = (UnicoreDataMovement) result;
+	                        UnicoreDataMovementResource dataMovementResource =
+	                                (UnicoreDataMovementResource) AppCatalogJPAUtils.getResource(
+	                                        AppCatalogResourceType.UNICORE_DATA_MOVEMENT, dataMovement);
+	                        unicoreDMResourceList.add(dataMovementResource);
+	                    }
+	                }
+	            } else {
+	                em.getTransaction().commit();
+	                em.close();
+	                logger.error("Unsupported field name for Unicore data movement resource.", new IllegalArgumentException());
+	                throw new IllegalArgumentException("Unsupported field name for Unicore data movement 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 unicoreDMResourceList;
+	    }
+
+	@Override
+	public List<Resource> getAll() throws AppCatalogException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<String> getAllIds() throws AppCatalogException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+        return null;
+    }
+
+    public void save() throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            UnicoreDataMovement existingDataMovement = em.find(UnicoreDataMovement.class, dataMovementId);
+            em.close();
+
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (existingDataMovement != null) {
+                existingDataMovement.setDataMovementId(dataMovementId);;
+                existingDataMovement.setUnicoreEndpointUrl(unicoreEndpointUrl);
+                existingDataMovement.setSecurityProtocol(securityProtocol);
+                em.merge(existingDataMovement);
+            } else {
+                UnicoreDataMovement unicoreJobSubmission = new UnicoreDataMovement();
+                unicoreJobSubmission.setDataMovementId(dataMovementId);
+                unicoreJobSubmission.setUnicoreEndpointUrl(unicoreEndpointUrl);
+                unicoreJobSubmission.setSecurityProtocol(securityProtocol);
+                em.persist(unicoreJobSubmission);
+            }
+            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();
+            UnicoreDataMovement dataMovement = em.find(UnicoreDataMovement.class, identifier);
+            em.close();
+            return dataMovement != 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 getDataMovementId() {
+        return dataMovementId;
+    }
+
+    public void setDataMovementId(String dataMovementId) {
+        this.dataMovementId = dataMovementId;
+    }
+
+    public String getSecurityProtocol() {
+		return securityProtocol;
+	}
+
+	public void setSecurityProtocol(String securityProtocol) {
+		this.securityProtocol = securityProtocol;
+	}
+
+	public String getUnicoreEndpointUrl() {
+		return unicoreEndpointUrl;
+	}
+
+	public void setUnicoreEndpointUrl(String unicoreEndpointUrl) {
+		this.unicoreEndpointUrl = unicoreEndpointUrl;
+	}
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/ec8c6202/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreJobSubmissionAppCatalogResourceAppCat.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreJobSubmissionAppCatalogResourceAppCat.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreJobSubmissionAppCatalogResourceAppCat.java
new file mode 100644
index 0000000..ae029f2
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreJobSubmissionAppCatalogResourceAppCat.java
@@ -0,0 +1,328 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.airavata.registry.core.app.catalog.resources;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.registry.core.app.catalog.model.GlobusJobSubmission;
+import org.apache.airavata.registry.core.app.catalog.model.UnicoreJobSubmission;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogJPAUtils;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogQueryGenerator;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogResourceType;
+import org.apache.airavata.registry.cpi.AppCatalogException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class UnicoreJobSubmissionAppCatalogResourceAppCat extends AppCatAbstractResource {
+	
+	private final static Logger logger = LoggerFactory.getLogger(UnicoreJobSubmissionAppCatalogResourceAppCat.class);
+	
+	private String jobSubmissionInterfaceId;
+	private String securityProtocol;
+	private String unicoreEndpointUrl;
+
+	public void remove(Object identifier) throws AppCatalogException {
+	        EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_JOB_SUBMISSION);
+	            generator.setParameter(UnicoreJobSubmissionConstants.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 AppCatalogResource get(Object identifier) throws AppCatalogException {
+		 HashMap<String, String> ids;
+		 EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_JOB_SUBMISSION);
+	            generator.setParameter(UnicoreJobSubmissionConstants.SUBMISSION_ID, identifier);
+	            Query q = generator.selectQuery(em);
+	            UnicoreJobSubmission unicoreJobSubmission = (UnicoreJobSubmission) q.getSingleResult();
+	            UnicoreJobSubmissionAppCatalogResourceAppCat unicoreSubmissionResource =
+	            			(UnicoreJobSubmissionAppCatalogResourceAppCat) AppCatalogJPAUtils
+	            			.getResource(AppCatalogResourceType.UNICORE_JOB_SUBMISSION,
+							unicoreJobSubmission);
+	            em.getTransaction().commit();
+	            em.close();
+	            return unicoreSubmissionResource;
+	        } 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<AppCatalogResource> get(String fieldName, Object value) throws AppCatalogException {
+	        List<AppCatalogResource> unicoreSubmissionResourceList = new ArrayList<AppCatalogResource>();
+	        EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            Query q;
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_JOB_SUBMISSION);
+	            List results;
+	            if (fieldName.equals(UnicoreJobSubmissionConstants.UNICORE_ENDPOINT_URL)) {
+	                generator.setParameter(UnicoreJobSubmissionConstants.UNICORE_ENDPOINT_URL, value);
+	                q = generator.selectQuery(em);
+	                results = q.getResultList();
+	                if (results.size() != 0) {
+	                    for (Object result : results) {
+	                        UnicoreJobSubmission unicoreJobSubmission = (UnicoreJobSubmission) result;
+	                        UnicoreJobSubmissionAppCatalogResourceAppCat unicoreJobSubmissionResource =
+	                                (UnicoreJobSubmissionAppCatalogResourceAppCat) AppCatalogJPAUtils.getResource(
+	                                        AppCatalogResourceType.UNICORE_JOB_SUBMISSION, unicoreJobSubmission);
+	                        unicoreSubmissionResourceList.add(unicoreJobSubmissionResource);
+	                    }
+	                }
+	            } else if (fieldName.equals(UnicoreJobSubmissionConstants.SECURITY_PROTOCAL)) {
+	                generator.setParameter(UnicoreJobSubmissionConstants.SECURITY_PROTOCAL, value);
+	                q = generator.selectQuery(em);
+	                results = q.getResultList();
+	                if (results.size() != 0) {
+	                    for (Object result : results) {
+	                        UnicoreJobSubmission unicoreJobSubmission = (UnicoreJobSubmission) result;
+	                        UnicoreJobSubmissionAppCatalogResourceAppCat unicoreJobSubmissionResource =
+	                                (UnicoreJobSubmissionAppCatalogResourceAppCat) AppCatalogJPAUtils.getResource(
+	                                        AppCatalogResourceType.UNICORE_JOB_SUBMISSION, unicoreJobSubmission);
+	                        unicoreSubmissionResourceList.add(unicoreJobSubmissionResource);
+	                    }
+	                }
+	            }        
+	            else {
+	                em.getTransaction().commit();
+	                em.close();
+	                logger.error("Unsupported field name for Unicore submission resource.", new IllegalArgumentException());
+	                throw new IllegalArgumentException("Unsupported field name for Unicore 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 unicoreSubmissionResourceList;
+	    }
+
+	@Override
+	public List<AppCatalogResource> getAll() throws AppCatalogException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<String> getAllIds() throws AppCatalogException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+        List<String> globusSubmissionResourceIDs = new ArrayList<String>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(GLOBUS_SUBMISSION);
+            List results;
+            if (fieldName.equals(GlobusJobSubmissionConstants.SUBMISSION_ID)) {
+                generator.setParameter(GlobusJobSubmissionConstants.SUBMISSION_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GlobusJobSubmission globusJobSubmission = (GlobusJobSubmission) result;
+                        globusSubmissionResourceIDs.add(globusJobSubmission.getSubmissionID());
+                    }
+                }
+            } else if (fieldName.equals(GlobusJobSubmissionConstants.GLOBUS_GATEKEEPER_EP)) {
+                generator.setParameter(GlobusJobSubmissionConstants.GLOBUS_GATEKEEPER_EP, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GlobusJobSubmission globusJobSubmission = (GlobusJobSubmission) result;
+                        globusSubmissionResourceIDs.add(globusJobSubmission.getSubmissionID());
+                    }
+                }
+            }
+            else if (fieldName.equals(GlobusJobSubmissionConstants.SECURITY_PROTOCAL)) {
+                generator.setParameter(GlobusJobSubmissionConstants.SECURITY_PROTOCAL, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GlobusJobSubmission globusJobSubmission = (GlobusJobSubmission) result;
+                        globusSubmissionResourceIDs.add(globusJobSubmission.getSubmissionID());
+                    }
+                }
+            } else if (fieldName.equals(GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER)) {
+                generator.setParameter(GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GlobusJobSubmission globusJobSubmission = (GlobusJobSubmission) result;
+                        globusSubmissionResourceIDs.add(globusJobSubmission.getSubmissionID());
+                    }
+                }
+            } else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for Globus Submission resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for Globus 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 globusSubmissionResourceIDs;
+    }
+
+    public void save() throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            UnicoreJobSubmission existingUnicoreSubmission = em.find(UnicoreJobSubmission.class, jobSubmissionInterfaceId);
+            em.close();
+
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (existingUnicoreSubmission != null) {
+                existingUnicoreSubmission.setSubmissionID(jobSubmissionInterfaceId);;
+                existingUnicoreSubmission.setUnicoreEndpointUrl(unicoreEndpointUrl);
+                existingUnicoreSubmission.setSecurityProtocol(securityProtocol);
+
+                em.merge(existingUnicoreSubmission);
+            } else {
+            	UnicoreJobSubmission unicoreJobSubmission = new UnicoreJobSubmission();
+                unicoreJobSubmission.setSubmissionID(jobSubmissionInterfaceId);
+                unicoreJobSubmission.setUnicoreEndpointUrl(unicoreEndpointUrl);
+                unicoreJobSubmission.setSecurityProtocol(securityProtocol);
+                em.persist(unicoreJobSubmission);
+            }
+            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();
+            UnicoreJobSubmission unicoreJobSubmission = em.find(UnicoreJobSubmission.class, identifier);
+            em.close();
+            return unicoreJobSubmission != 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 getjobSubmissionInterfaceId() {
+		return jobSubmissionInterfaceId;
+	}
+
+	public void setjobSubmissionInterfaceId(String jobSubmissionInterfaceId) {
+		this.jobSubmissionInterfaceId = jobSubmissionInterfaceId;
+	}
+
+	public String getSecurityProtocol() {
+		return securityProtocol;
+	}
+
+	public void setSecurityProtocol(String securityProtocol) {
+		this.securityProtocol = securityProtocol;
+	}
+
+	public String getUnicoreEndpointUrl() {
+		return unicoreEndpointUrl;
+	}
+
+	public void setUnicoreEndpointUrl(String unicoreEndpointUrl) {
+		this.unicoreEndpointUrl = unicoreEndpointUrl;
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/ec8c6202/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreJobSubmissionResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreJobSubmissionResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreJobSubmissionResource.java
new file mode 100644
index 0000000..4c772e1
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/UnicoreJobSubmissionResource.java
@@ -0,0 +1,328 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.aiaravata.application.catalog.data.resources;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.airavata.appcatalog.cpi.AppCatalogException;
+import org.apache.aiaravata.application.catalog.data.model.GlobusJobSubmission;
+import org.apache.aiaravata.application.catalog.data.model.UnicoreJobSubmission;
+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;
+
+public class UnicoreJobSubmissionResource extends AbstractResource {
+	
+	private final static Logger logger = LoggerFactory.getLogger(UnicoreJobSubmissionResource.class);
+	
+	private String jobSubmissionInterfaceId;
+	private String securityProtocol;
+	private String unicoreEndpointUrl;
+
+	public void remove(Object identifier) throws AppCatalogException {
+	        EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_JOB_SUBMISSION);
+	            generator.setParameter(UnicoreJobSubmissionConstants.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 {
+		 HashMap<String, String> ids;
+		 EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_JOB_SUBMISSION);
+	            generator.setParameter(UnicoreJobSubmissionConstants.SUBMISSION_ID, identifier);
+	            Query q = generator.selectQuery(em);
+	            UnicoreJobSubmission unicoreJobSubmission = (UnicoreJobSubmission) q.getSingleResult();
+	            UnicoreJobSubmissionResource unicoreSubmissionResource =
+	            			(UnicoreJobSubmissionResource) AppCatalogJPAUtils
+	            			.getResource(AppCatalogResourceType.UNICORE_JOB_SUBMISSION,
+							unicoreJobSubmission);
+	            em.getTransaction().commit();
+	            em.close();
+	            return unicoreSubmissionResource;
+	        } 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> unicoreSubmissionResourceList = new ArrayList<Resource>();
+	        EntityManager em = null;
+	        try {
+	            em = AppCatalogJPAUtils.getEntityManager();
+	            em.getTransaction().begin();
+	            Query q;
+	            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(UNICORE_JOB_SUBMISSION);
+	            List results;
+	            if (fieldName.equals(UnicoreJobSubmissionConstants.UNICORE_ENDPOINT_URL)) {
+	                generator.setParameter(UnicoreJobSubmissionConstants.UNICORE_ENDPOINT_URL, value);
+	                q = generator.selectQuery(em);
+	                results = q.getResultList();
+	                if (results.size() != 0) {
+	                    for (Object result : results) {
+	                        UnicoreJobSubmission unicoreJobSubmission = (UnicoreJobSubmission) result;
+	                        UnicoreJobSubmissionResource unicoreJobSubmissionResource =
+	                                (UnicoreJobSubmissionResource) AppCatalogJPAUtils.getResource(
+	                                        AppCatalogResourceType.UNICORE_JOB_SUBMISSION, unicoreJobSubmission);
+	                        unicoreSubmissionResourceList.add(unicoreJobSubmissionResource);
+	                    }
+	                }
+	            } else if (fieldName.equals(UnicoreJobSubmissionConstants.SECURITY_PROTOCAL)) {
+	                generator.setParameter(UnicoreJobSubmissionConstants.SECURITY_PROTOCAL, value);
+	                q = generator.selectQuery(em);
+	                results = q.getResultList();
+	                if (results.size() != 0) {
+	                    for (Object result : results) {
+	                        UnicoreJobSubmission unicoreJobSubmission = (UnicoreJobSubmission) result;
+	                        UnicoreJobSubmissionResource unicoreJobSubmissionResource =
+	                                (UnicoreJobSubmissionResource) AppCatalogJPAUtils.getResource(
+	                                        AppCatalogResourceType.UNICORE_JOB_SUBMISSION, unicoreJobSubmission);
+	                        unicoreSubmissionResourceList.add(unicoreJobSubmissionResource);
+	                    }
+	                }
+	            }        
+	            else {
+	                em.getTransaction().commit();
+	                em.close();
+	                logger.error("Unsupported field name for Unicore submission resource.", new IllegalArgumentException());
+	                throw new IllegalArgumentException("Unsupported field name for Unicore 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 unicoreSubmissionResourceList;
+	    }
+
+	@Override
+	public List<Resource> getAll() throws AppCatalogException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<String> getAllIds() throws AppCatalogException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+    public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+        List<String> globusSubmissionResourceIDs = new ArrayList<String>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q;
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(GLOBUS_SUBMISSION);
+            List results;
+            if (fieldName.equals(GlobusJobSubmissionConstants.SUBMISSION_ID)) {
+                generator.setParameter(GlobusJobSubmissionConstants.SUBMISSION_ID, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GlobusJobSubmission globusJobSubmission = (GlobusJobSubmission) result;
+                        globusSubmissionResourceIDs.add(globusJobSubmission.getSubmissionID());
+                    }
+                }
+            } else if (fieldName.equals(GlobusJobSubmissionConstants.GLOBUS_GATEKEEPER_EP)) {
+                generator.setParameter(GlobusJobSubmissionConstants.GLOBUS_GATEKEEPER_EP, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GlobusJobSubmission globusJobSubmission = (GlobusJobSubmission) result;
+                        globusSubmissionResourceIDs.add(globusJobSubmission.getSubmissionID());
+                    }
+                }
+            }
+            else if (fieldName.equals(GlobusJobSubmissionConstants.SECURITY_PROTOCAL)) {
+                generator.setParameter(GlobusJobSubmissionConstants.SECURITY_PROTOCAL, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GlobusJobSubmission globusJobSubmission = (GlobusJobSubmission) result;
+                        globusSubmissionResourceIDs.add(globusJobSubmission.getSubmissionID());
+                    }
+                }
+            } else if (fieldName.equals(GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER)) {
+                generator.setParameter(GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER, value);
+                q = generator.selectQuery(em);
+                results = q.getResultList();
+                if (results.size() != 0) {
+                    for (Object result : results) {
+                        GlobusJobSubmission globusJobSubmission = (GlobusJobSubmission) result;
+                        globusSubmissionResourceIDs.add(globusJobSubmission.getSubmissionID());
+                    }
+                }
+            } else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for Globus Submission resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for Globus 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 globusSubmissionResourceIDs;
+    }
+
+    public void save() throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            UnicoreJobSubmission existingUnicoreSubmission = em.find(UnicoreJobSubmission.class, jobSubmissionInterfaceId);
+            em.close();
+
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (existingUnicoreSubmission != null) {
+                existingUnicoreSubmission.setSubmissionID(jobSubmissionInterfaceId);;
+                existingUnicoreSubmission.setUnicoreEndpointUrl(unicoreEndpointUrl);
+                existingUnicoreSubmission.setSecurityProtocol(securityProtocol);
+
+                em.merge(existingUnicoreSubmission);
+            } else {
+            	UnicoreJobSubmission unicoreJobSubmission = new UnicoreJobSubmission();
+                unicoreJobSubmission.setSubmissionID(jobSubmissionInterfaceId);
+                unicoreJobSubmission.setUnicoreEndpointUrl(unicoreEndpointUrl);
+                unicoreJobSubmission.setSecurityProtocol(securityProtocol);
+                em.persist(unicoreJobSubmission);
+            }
+            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();
+            UnicoreJobSubmission unicoreJobSubmission = em.find(UnicoreJobSubmission.class, identifier);
+            em.close();
+            return unicoreJobSubmission != 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 getjobSubmissionInterfaceId() {
+		return jobSubmissionInterfaceId;
+	}
+
+	public void setjobSubmissionInterfaceId(String jobSubmissionInterfaceId) {
+		this.jobSubmissionInterfaceId = jobSubmissionInterfaceId;
+	}
+
+	public String getSecurityProtocol() {
+		return securityProtocol;
+	}
+
+	public void setSecurityProtocol(String securityProtocol) {
+		this.securityProtocol = securityProtocol;
+	}
+
+	public String getUnicoreEndpointUrl() {
+		return unicoreEndpointUrl;
+	}
+
+	public void setUnicoreEndpointUrl(String unicoreEndpointUrl) {
+		this.unicoreEndpointUrl = unicoreEndpointUrl;
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/ec8c6202/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/WorkflowAppCatalogResourceAppCat.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/WorkflowAppCatalogResourceAppCat.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/WorkflowAppCatalogResourceAppCat.java
new file mode 100644
index 0000000..ffc0fff
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/WorkflowAppCatalogResourceAppCat.java
@@ -0,0 +1,382 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.registry.core.app.catalog.resources;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.utils.AiravataUtils;
+import org.apache.airavata.registry.core.app.catalog.model.Workflow;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogJPAUtils;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogQueryGenerator;
+import org.apache.airavata.registry.core.app.catalog.util.AppCatalogResourceType;
+import org.apache.airavata.registry.cpi.AppCatalogException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+public class WorkflowAppCatalogResourceAppCat extends AppCatAbstractResource {
+    private final static Logger logger = LoggerFactory.getLogger(WorkflowAppCatalogResourceAppCat.class);
+    private String wfName;
+    private String createdUser;
+    private String graph;
+    private String wfTemplateId;
+    private Timestamp createdTime;
+    private Timestamp updatedTime;
+    private String image;
+    private String gatewayId;
+
+    public Timestamp getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Timestamp createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public Timestamp getUpdatedTime() {
+        return updatedTime;
+    }
+
+    public void setUpdatedTime(Timestamp updatedTime) {
+        this.updatedTime = updatedTime;
+    }
+
+    public String getImage() {
+        return image;
+    }
+
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    public String getGatewayId() {
+        return gatewayId;
+    }
+
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
+
+    @Override
+    public void remove(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(WORKFLOW);
+            generator.setParameter(WorkflowConstants.WF_TEMPLATE_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();
+            }
+        }
+    }
+
+    @Override
+    public AppCatalogResource get(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(WORKFLOW);
+            generator.setParameter(WorkflowConstants.WF_TEMPLATE_ID, identifier);
+            Query q = generator.selectQuery(em);
+            Workflow workflow = (Workflow) q.getSingleResult();
+            WorkflowAppCatalogResourceAppCat workflowResource = (WorkflowAppCatalogResourceAppCat) AppCatalogJPAUtils.getResource(AppCatalogResourceType.WORKFLOW, workflow);
+            em.getTransaction().commit();
+            em.close();
+            return workflowResource;
+        } 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();
+            }
+        }
+    }
+
+    @Override
+    public List<AppCatalogResource> get(String fieldName, Object value) throws AppCatalogException {
+        List<AppCatalogResource> workflowResources = new ArrayList<AppCatalogResource>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(WORKFLOW);
+            Query q;
+            if ((fieldName.equals(WorkflowConstants.WF_NAME)) || (fieldName.equals(WorkflowConstants.CREATED_USER)) || (fieldName.equals(WorkflowConstants.GRAPH)) || (fieldName.equals(WorkflowConstants.WF_TEMPLATE_ID))) {
+                generator.setParameter(fieldName, value);
+                q = generator.selectQuery(em);
+                List<?> results = q.getResultList();
+                for (Object result : results) {
+                    Workflow workflow = (Workflow) result;
+                    WorkflowAppCatalogResourceAppCat workflowResource = (WorkflowAppCatalogResourceAppCat) AppCatalogJPAUtils.getResource(AppCatalogResourceType.WORKFLOW, workflow);
+                    workflowResources.add(workflowResource);
+                }
+            } else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for Workflow Resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for Workflow Resource.");
+            }
+            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();
+            }
+        }
+        return workflowResources;
+    }
+
+    @Override
+    public List<AppCatalogResource> getAll() throws AppCatalogException {
+        List<AppCatalogResource> workflows = new ArrayList<AppCatalogResource>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(WORKFLOW);
+            generator.setParameter(WorkflowConstants.GATEWAY_ID, gatewayId);
+            Query q = generator.selectQuery(em);
+            List results = q.getResultList();
+            if (results.size() != 0) {
+                for (Object result : results) {
+                    Workflow workflow = (Workflow) result;
+                    WorkflowAppCatalogResourceAppCat wfResource =
+                            (WorkflowAppCatalogResourceAppCat) AppCatalogJPAUtils.getResource(AppCatalogResourceType.WORKFLOW, workflow);
+                    workflows.add(wfResource);
+                }
+            }
+            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 workflows;
+    }
+
+    @Override
+    public List<String> getAllIds() throws AppCatalogException {
+        List<String> workflowIds = new ArrayList<String>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(WORKFLOW);
+            generator.setParameter(WorkflowConstants.GATEWAY_ID, gatewayId);
+            Query q = generator.selectQuery(em);
+            List results = q.getResultList();
+            if (results.size() != 0) {
+                for (Object result : results) {
+                    Workflow workflow = (Workflow) result;
+                    workflowIds.add(workflow.getWfTemplateId());
+                }
+            }
+            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 workflowIds;
+    }
+
+    @Override
+    public List<String> getIds(String fieldName, Object value) throws AppCatalogException {
+        List<String> workflowResourceIDs = new ArrayList<String>();
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            AppCatalogQueryGenerator generator = new AppCatalogQueryGenerator(WORKFLOW);
+            Query q;
+            if ((fieldName.equals(WorkflowConstants.WF_NAME)) || (fieldName.equals(WorkflowConstants.CREATED_USER)) || (fieldName.equals(WorkflowConstants.GRAPH)) || (fieldName.equals(WorkflowConstants.WF_TEMPLATE_ID))) {
+                generator.setParameter(fieldName, value);
+                q = generator.selectQuery(em);
+                List<?> results = q.getResultList();
+                for (Object result : results) {
+                    Workflow workflow = (Workflow) result;
+                    WorkflowAppCatalogResourceAppCat workflowResource = (WorkflowAppCatalogResourceAppCat) AppCatalogJPAUtils.getResource(AppCatalogResourceType.WORKFLOW, workflow);
+                    workflowResourceIDs.add(workflowResource.getWfTemplateId());
+                }
+            } else {
+                em.getTransaction().commit();
+                em.close();
+                logger.error("Unsupported field name for Workflow Resource.", new IllegalArgumentException());
+                throw new IllegalArgumentException("Unsupported field name for Workflow Resource.");
+            }
+            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();
+            }
+        }
+        return workflowResourceIDs;
+    }
+
+    @Override
+    public void save() throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            Workflow existingWorkflow = em.find(Workflow.class, wfTemplateId);
+            em.close();
+            Workflow workflow;
+            em = AppCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            if (existingWorkflow == null) {
+                workflow = new Workflow();
+                workflow.setCreationTime(AiravataUtils.getCurrentTimestamp());
+            } else {
+                workflow = existingWorkflow;
+                workflow.setUpdateTime(AiravataUtils.getCurrentTimestamp());
+            }
+            workflow.setWfName(getWfName());
+            workflow.setCreatedUser(getCreatedUser());
+            workflow.setGatewayId(gatewayId);
+            if (getGraph() != null){
+                workflow.setGraph(getGraph().toCharArray());
+            }
+            if (image != null){
+                workflow.setImage(image.getBytes());
+            }
+            workflow.setWfTemplateId(getWfTemplateId());
+            if (existingWorkflow == null) {
+                em.persist(workflow);
+            } else {
+                em.merge(workflow);
+            }
+            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();
+            }
+        }
+    }
+
+    @Override
+    public boolean isExists(Object identifier) throws AppCatalogException {
+        EntityManager em = null;
+        try {
+            em = AppCatalogJPAUtils.getEntityManager();
+            Workflow workflow = em.find(Workflow.class, identifier);
+            em.close();
+            return workflow != 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 getWfName() {
+        return wfName;
+    }
+
+    public String getCreatedUser() {
+        return createdUser;
+    }
+
+    public String getGraph() {
+        return graph;
+    }
+
+    public String getWfTemplateId() {
+        return wfTemplateId;
+    }
+
+    public void setWfName(String wfName) {
+        this.wfName=wfName;
+    }
+
+    public void setCreatedUser(String createdUser) {
+        this.createdUser=createdUser;
+    }
+
+    public void setGraph(String graph) {
+        this.graph=graph;
+    }
+
+    public void setWfTemplateId(String wfTemplateId) {
+        this.wfTemplateId=wfTemplateId;
+    }
+}