Repository: airavata
Updated Branches:
  refs/heads/develop f0c730cda -> d66d16980


adding parallelism type


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

Branch: refs/heads/develop
Commit: d66d16980be161817dd9c24048a99bc50183605c
Parents: f0c730c
Author: Chathuri Wimalasena <[email protected]>
Authored: Fri Feb 26 16:38:47 2016 -0500
Committer: Chathuri Wimalasena <[email protected]>
Committed: Fri Feb 26 16:38:47 2016 -0500

----------------------------------------------------------------------
 .../ApplicationParallelismType.java             |  90 -----
 .../apache/airavata/gfac/core/GFacUtils.java    |   2 +-
 .../app/catalog/impl/ComputeResourceImpl.java   |  33 ++
 .../catalog/model/ParallelismPrefixCommand.java |  78 +++++
 .../model/ParallelismPrefixCommand_PK.java      |  62 ++++
 .../resources/AppCatAbstractResource.java       |   7 +
 .../ParallelismPrefixCommandResource.java       | 350 +++++++++++++++++++
 .../app/catalog/util/AppCatalogJPAUtils.java    |  18 +
 .../catalog/util/AppCatalogResourceType.java    |   1 +
 .../util/AppCatalogThriftConversion.java        |  12 +
 .../src/main/resources/appcatalog-derby.sql     |   9 +
 .../src/main/resources/appcatalog-mysql.sql     |   9 +
 12 files changed, 580 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appdeployment/ApplicationParallelismType.java
----------------------------------------------------------------------
diff --git 
a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appdeployment/ApplicationParallelismType.java
 
b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appdeployment/ApplicationParallelismType.java
deleted file mode 100644
index 11323d2..0000000
--- 
a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/appcatalog/appdeployment/ApplicationParallelismType.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * 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.
- */
-
-/**
- * Autogenerated by Thrift Compiler (0.9.3)
- *
- * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
- *  @generated
- */
-package org.apache.airavata.model.appcatalog.appdeployment;
-
-
-import java.util.Map;
-import java.util.HashMap;
-import org.apache.thrift.TEnum;
-
-/**
- * Enumeration of application parallelism supported by Airavata
- * 
- * SERIAL:
- *  Single processor applications without any parallelization.
- * 
- * MPI:
- *  Messaging Passing Interface.
- * 
- * OPENMP:
- *  Shared Memory Implementtaion.
- * 
- * OPENMP_MPI:
- *  Hybrid Applications.
- * 
- */
-public enum ApplicationParallelismType implements org.apache.thrift.TEnum {
-  SERIAL(0),
-  MPI(1),
-  OPENMP(2),
-  OPENMP_MPI(3),
-  CCM(4),
-  CRAY_MPI(5);
-
-  private final int value;
-
-  private ApplicationParallelismType(int value) {
-    this.value = value;
-  }
-
-  /**
-   * Get the integer value of this enum value, as defined in the Thrift IDL.
-   */
-  public int getValue() {
-    return value;
-  }
-
-  /**
-   * Find a the enum type by its integer value, as defined in the Thrift IDL.
-   * @return null if the value is not found.
-   */
-  public static ApplicationParallelismType findByValue(int value) { 
-    switch (value) {
-      case 0:
-        return SERIAL;
-      case 1:
-        return MPI;
-      case 2:
-        return OPENMP;
-      case 3:
-        return OPENMP_MPI;
-      case 4:
-        return CCM;
-      case 5:
-        return CRAY_MPI;
-      default:
-        return null;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
 
b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
index 54f3715..1325659 100644
--- 
a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
+++ 
b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/GFacUtils.java
@@ -28,7 +28,6 @@ import org.apache.airavata.gfac.core.context.ProcessContext;
 import org.apache.airavata.gfac.core.context.TaskContext;
 import org.apache.airavata.messaging.core.MessageContext;
 import 
org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription;
-import 
org.apache.airavata.model.appcatalog.appdeployment.ApplicationParallelismType;
 import org.apache.airavata.model.appcatalog.appdeployment.CommandObject;
 import org.apache.airavata.model.appcatalog.computeresource.*;
 import 
org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference;
@@ -39,6 +38,7 @@ import org.apache.airavata.model.commons.ErrorModel;
 import org.apache.airavata.model.experiment.ExperimentModel;
 import org.apache.airavata.model.job.JobModel;
 import org.apache.airavata.model.messaging.event.*;
+import org.apache.airavata.model.parallelism.ApplicationParallelismType;
 import org.apache.airavata.model.process.ProcessModel;
 import 
org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel;
 import org.apache.airavata.model.status.*;

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ComputeResourceImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ComputeResourceImpl.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ComputeResourceImpl.java
index 3dbf671..e0e260c 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ComputeResourceImpl.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/impl/ComputeResourceImpl.java
@@ -24,6 +24,8 @@ package org.apache.airavata.registry.core.app.catalog.impl;
 import org.apache.airavata.model.appcatalog.computeresource.*;
 import org.apache.airavata.model.data.movement.*;
 import org.apache.airavata.model.data.movement.DMType;
+import org.apache.airavata.model.parallelism.ApplicationParallelismType;
+import 
org.apache.airavata.registry.core.app.catalog.model.ParallelismPrefixCommand;
 import org.apache.airavata.registry.core.app.catalog.resources.*;
 import 
org.apache.airavata.registry.core.app.catalog.util.AppCatalogThriftConversion;
 import org.apache.airavata.registry.core.app.catalog.util.AppCatalogUtils;
@@ -829,6 +831,17 @@ public class ComputeResourceImpl implements 
ComputeResource {
                                r.save();
                        }
                }
+
+        Map<ApplicationParallelismType, String> parallelismPrefix = 
resourceJobManager.getParallelismPrefix();
+        if (parallelismPrefix!=null && parallelismPrefix.size() != 0) {
+            for (ApplicationParallelismType commandType : 
parallelismPrefix.keySet()) {
+                ParallelismPrefixCommandResource r = new 
ParallelismPrefixCommandResource();
+                r.setCommandType(commandType.toString());
+                r.setCommand(parallelismPrefix.get(commandType));
+                r.setResourceJobManagerId(resource.getResourceJobManagerId());
+                r.save();
+            }
+        }
                return resource.getResourceJobManagerId();
        }
 
@@ -857,6 +870,26 @@ public class ComputeResourceImpl implements 
ComputeResource {
                     existingCommand.save();
                 }
             }
+
+            Map<ApplicationParallelismType, String> parallelismPrefix = 
updatedResourceJobManager.getParallelismPrefix();
+            if (parallelismPrefix!=null && parallelismPrefix.size() != 0) {
+                for (ApplicationParallelismType commandType : 
parallelismPrefix.keySet()) {
+                    ParallelismPrefixCommandResource r = new 
ParallelismPrefixCommandResource();
+                    Map<String, String> ids = new HashMap<String, String>();
+                    
ids.put(AppCatAbstractResource.ParallelismCommandConstants.RESOURCE_JOB_MANAGER_ID,
 resourceJobManagerId);
+                    
ids.put(AppCatAbstractResource.ParallelismCommandConstants.COMMAND_TYPE, 
commandType.toString());
+                    ParallelismPrefixCommandResource existingCommand;
+                    if (r.isExists(ids)){
+                        existingCommand = 
(ParallelismPrefixCommandResource)r.get(ids);
+                    }else {
+                        existingCommand = new 
ParallelismPrefixCommandResource();
+                    }
+                    existingCommand.setCommandType(commandType.toString());
+                    
existingCommand.setCommand(parallelismPrefix.get(commandType));
+                    
existingCommand.setResourceJobManagerId(resource.getResourceJobManagerId());
+                    existingCommand.save();
+                }
+            }
         }catch (Exception e){
             logger.error("Error while updating resource job manager..", e);
             throw new AppCatalogException(e);

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ParallelismPrefixCommand.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ParallelismPrefixCommand.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ParallelismPrefixCommand.java
new file mode 100644
index 0000000..17409bd
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ParallelismPrefixCommand.java
@@ -0,0 +1,78 @@
+/*
+ *
+ * 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.model;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Table(name = "PARALLELISM_COMMAND")
+@IdClass(ParallelismPrefixCommand_PK.class)
+public class ParallelismPrefixCommand implements Serializable {
+       
+       @Id
+       @Column(name = "RESOURCE_JOB_MANAGER_ID")
+       private String resourceJobManagerId;
+       
+       @ManyToOne(cascade= CascadeType.MERGE)
+       @JoinColumn(name = "RESOURCE_JOB_MANAGER_ID")
+       private ResourceJobManager resourceJobManager;
+       
+       @Id
+       @Column(name = "COMMAND_TYPE")
+       private String commandType;
+       
+       @Column(name = "COMMAND")
+       private String command;
+       
+       public String getResourceJobManagerId() {
+               return resourceJobManagerId;
+       }
+       
+       public ResourceJobManager getResourceJobManager() {
+               return resourceJobManager;
+       }
+       
+       public String getCommandType() {
+               return commandType;
+       }
+       
+       public String getCommand() {
+               return command;
+       }
+       
+       public void setResourceJobManagerId(String resourceJobManagerId) {
+               this.resourceJobManagerId=resourceJobManagerId;
+       }
+       
+       public void setResourceJobManager(ResourceJobManager 
resourceJobManager) {
+               this.resourceJobManager=resourceJobManager;
+       }
+       
+       public void setCommandType(String commandType) {
+               this.commandType=commandType;
+       }
+       
+       public void setCommand(String command) {
+               this.command=command;
+       }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ParallelismPrefixCommand_PK.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ParallelismPrefixCommand_PK.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ParallelismPrefixCommand_PK.java
new file mode 100644
index 0000000..cea91f0
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/model/ParallelismPrefixCommand_PK.java
@@ -0,0 +1,62 @@
+/*
+ *
+ * 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.model;
+
+import java.io.Serializable;
+
+public class ParallelismPrefixCommand_PK implements Serializable {
+       private String resourceJobManagerId;
+       private String commandType;
+       public ParallelismPrefixCommand_PK(String resourceJobManagerId, String 
commandType){
+               this.resourceJobManagerId = resourceJobManagerId;
+               this.commandType = commandType;
+       }
+
+       public ParallelismPrefixCommand_PK() {
+       }
+       
+       @Override
+       public boolean equals(Object o) {
+               return false;
+       }
+       
+       @Override
+       public int hashCode() {
+               return 1;
+       }
+       
+       public String getResourceJobManagerId() {
+               return resourceJobManagerId;
+       }
+       
+       public String getCommandType() {
+               return commandType;
+       }
+       
+       public void setResourceJobManagerId(String resourceJobManagerId) {
+               this.resourceJobManagerId=resourceJobManagerId;
+       }
+       
+       public void setCommandType(String commandType) {
+               this.commandType=commandType;
+       }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppCatAbstractResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppCatAbstractResource.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppCatAbstractResource.java
index 1766f00..2fb4a77 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppCatAbstractResource.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/AppCatAbstractResource.java
@@ -62,6 +62,7 @@ public abstract class AppCatAbstractResource implements 
AppCatalogResource {
        public static final String DATA_MOVEMENT_INTERFACE = 
"DataMovementInterface";
        public static final String RESOURCE_JOB_MANAGER = "ResourceJobManager";
        public static final String JOB_MANAGER_COMMAND = "JobManagerCommand";
+       public static final String PARALLELISM_PREFIX_COMMAND = 
"ParallelismPrefixCommand";
        public static final String LOCAL_SUBMISSION = "LocalSubmission";
        public static final String LOCAL_DATA_MOVEMENT = "LocalDataMovement";
        public static final String SSH_JOB_SUBMISSION = "SshJobSubmission";
@@ -361,6 +362,12 @@ public abstract class AppCatAbstractResource implements 
AppCatalogResource {
                public static final String COMMAND_TYPE = "commandType";
                public static final String COMMAND = "command";
        }
+
+    public final class ParallelismCommandConstants {
+        public static final String RESOURCE_JOB_MANAGER_ID = 
"resourceJobManagerId";
+        public static final String COMMAND_TYPE = "commandType";
+        public static final String COMMAND = "command";
+    }
        
        // Gridftp Data Movement Table
        public final class GridftpDataMovementConstants {

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/ParallelismPrefixCommandResource.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/ParallelismPrefixCommandResource.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/ParallelismPrefixCommandResource.java
new file mode 100644
index 0000000..3a1a038
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/resources/ParallelismPrefixCommandResource.java
@@ -0,0 +1,350 @@
+/*
+ *
+ * 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.*;
+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.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ParallelismPrefixCommandResource extends AppCatAbstractResource {
+       private final static Logger logger = 
LoggerFactory.getLogger(ParallelismPrefixCommandResource.class);
+       private String resourceJobManagerId;
+       private ResourceJobManagerResource resourceJobManagerResource;
+       private String commandType;
+       private String command;
+       
+       @Override
+       public void remove(Object identifier) throws AppCatalogException {
+               HashMap<String, String> ids;
+               if (identifier instanceof Map) {
+                       ids = (HashMap<String, String>) 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(PARALLELISM_PREFIX_COMMAND);
+                       
generator.setParameter(ParallelismCommandConstants.RESOURCE_JOB_MANAGER_ID, 
ids.get(ParallelismCommandConstants.RESOURCE_JOB_MANAGER_ID));
+                       
generator.setParameter(ParallelismCommandConstants.COMMAND_TYPE, 
ids.get(ParallelismCommandConstants.COMMAND_TYPE));
+                       Query q = generator.deleteQuery(em);
+                       q.executeUpdate();
+                       em.getTransaction().commit();
+            if (em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                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 {
+               HashMap<String, String> ids;
+               if (identifier instanceof Map) {
+                       ids = (HashMap<String, String>) 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(PARALLELISM_PREFIX_COMMAND);
+                       
generator.setParameter(ParallelismCommandConstants.RESOURCE_JOB_MANAGER_ID, 
ids.get(ParallelismCommandConstants.RESOURCE_JOB_MANAGER_ID));
+                       
generator.setParameter(ParallelismCommandConstants.COMMAND_TYPE, 
ids.get(ParallelismCommandConstants.COMMAND_TYPE));
+                       Query q = generator.selectQuery(em);
+                       ParallelismPrefixCommand parallelismPrefixCommand = 
(ParallelismPrefixCommand) q.getSingleResult();
+                       ParallelismPrefixCommandResource prefixCommandResource 
= (ParallelismPrefixCommandResource) 
AppCatalogJPAUtils.getResource(AppCatalogResourceType.PARALLELISM_PREFIX_COMMAND,
 parallelismPrefixCommand);
+                       em.getTransaction().commit();
+            if (em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+                       return prefixCommandResource;
+               } 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> parallelismCommandResources = new 
ArrayList<AppCatalogResource>();
+               EntityManager em = null;
+               try {
+                       em = AppCatalogJPAUtils.getEntityManager();
+                       em.getTransaction().begin();
+                       AppCatalogQueryGenerator generator = new 
AppCatalogQueryGenerator(PARALLELISM_PREFIX_COMMAND);
+                       Query q;
+                       if 
((fieldName.equals(ParallelismCommandConstants.RESOURCE_JOB_MANAGER_ID)) || 
(fieldName.equals(ParallelismCommandConstants.COMMAND_TYPE)) || 
(fieldName.equals(ParallelismCommandConstants.COMMAND))) {
+                               generator.setParameter(fieldName, value);
+                               q = generator.selectQuery(em);
+                               List<?> results = q.getResultList();
+                               for (Object result : results) {
+                                       ParallelismPrefixCommand prefixCommand 
= (ParallelismPrefixCommand) result;
+                                       ParallelismPrefixCommandResource 
parallelismPrefixCommandResource = (ParallelismPrefixCommandResource) 
AppCatalogJPAUtils.getResource(AppCatalogResourceType.PARALLELISM_PREFIX_COMMAND,
 prefixCommand);
+                                       
parallelismCommandResources.add(parallelismPrefixCommandResource);
+                               }
+                       } else {
+                               em.getTransaction().commit();
+                if (em.isOpen()) {
+                    if (em.getTransaction().isActive()){
+                        em.getTransaction().rollback();
+                    }
+                    em.close();
+                }
+                               logger.error("Unsupported field name for 
Parallelism Command Resource.", new IllegalArgumentException());
+                               throw new IllegalArgumentException("Unsupported 
field name for Parallelism Command Resource.");
+                       }
+                       em.getTransaction().commit();
+            if (em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                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 parallelismCommandResources;
+       }
+
+    @Override
+    public List<AppCatalogResource> 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> parallelismCommandResourceIDs = new 
ArrayList<String>();
+               EntityManager em = null;
+               try {
+                       em = AppCatalogJPAUtils.getEntityManager();
+                       em.getTransaction().begin();
+                       AppCatalogQueryGenerator generator = new 
AppCatalogQueryGenerator(PARALLELISM_PREFIX_COMMAND);
+                       Query q;
+                       if 
((fieldName.equals(ParallelismCommandConstants.RESOURCE_JOB_MANAGER_ID)) || 
(fieldName.equals(ParallelismCommandConstants.COMMAND_TYPE)) || 
(fieldName.equals(ParallelismCommandConstants.COMMAND))) {
+                               generator.setParameter(fieldName, value);
+                               q = generator.selectQuery(em);
+                               List<?> results = q.getResultList();
+                               for (Object result : results) {
+                                       ParallelismPrefixCommand 
parallelismPrefixCommand = (ParallelismPrefixCommand) result;
+                                       ParallelismPrefixCommandResource 
parallelismPrefixCommandResource = (ParallelismPrefixCommandResource) 
AppCatalogJPAUtils.getResource(AppCatalogResourceType.PARALLELISM_PREFIX_COMMAND,
 parallelismPrefixCommand);
+                                       
parallelismCommandResourceIDs.add(parallelismPrefixCommandResource.getResourceJobManagerId());
+                               }
+                       } else {
+                               em.getTransaction().commit();
+                if (em.isOpen()) {
+                    if (em.getTransaction().isActive()){
+                        em.getTransaction().rollback();
+                    }
+                    em.close();
+                }
+                               logger.error("Unsupported field name for 
Parallelism Command Resource.", new IllegalArgumentException());
+                               throw new IllegalArgumentException("Unsupported 
field name for Parallelism Command Resource.");
+                       }
+                       em.getTransaction().commit();
+            if (em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                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 parallelismCommandResourceIDs;
+       }
+       
+       @Override
+       public void save() throws AppCatalogException {
+               EntityManager em = null;
+               try {
+                       em = AppCatalogJPAUtils.getEntityManager();
+                       ParallelismPrefixCommand existingParallelismCommand = 
em.find(ParallelismPrefixCommand.class, new 
ParallelismPrefixCommand_PK(resourceJobManagerId, commandType));
+            if (em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+
+                       ParallelismPrefixCommand prefixCommand;
+                       em = AppCatalogJPAUtils.getEntityManager();
+                       em.getTransaction().begin();
+                       if (existingParallelismCommand == null) {
+                               prefixCommand = new ParallelismPrefixCommand();
+                       } else {
+                               prefixCommand = existingParallelismCommand;
+                       }
+                       
prefixCommand.setResourceJobManagerId(getResourceJobManagerId());
+                       ResourceJobManager resourceJobManager = 
em.find(ResourceJobManager.class, getResourceJobManagerId());
+                       prefixCommand.setResourceJobManager(resourceJobManager);
+                       prefixCommand.setCommandType(getCommandType());
+                       prefixCommand.setCommand(getCommand());
+                       if (existingParallelismCommand == null) {
+                               em.persist(prefixCommand);
+                       } else {
+                               em.merge(prefixCommand);
+                       }
+                       em.getTransaction().commit();
+            if (em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                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 {
+               HashMap<String, String> ids;
+               if (identifier instanceof Map) {
+                       ids = (HashMap<String, String>) 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();
+                       ParallelismPrefixCommand parallelismPrefixCommand = 
em.find(ParallelismPrefixCommand.class, new 
ParallelismPrefixCommand_PK(ids.get(ParallelismCommandConstants.RESOURCE_JOB_MANAGER_ID),
 ids.get(ParallelismCommandConstants.COMMAND_TYPE)));
+            if (em.isOpen()) {
+                if (em.getTransaction().isActive()){
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+                       return parallelismPrefixCommand != 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 getCommandType() {
+               return commandType;
+       }
+       
+       public String getCommand() {
+               return command;
+       }
+       
+       public void setResourceJobManagerId(String resourceJobManagerId) {
+               this.resourceJobManagerId=resourceJobManagerId;
+       }
+       
+       public void setResourceJobManagerResource(ResourceJobManagerResource 
resourceJobManagerResource) {
+               this.resourceJobManagerResource=resourceJobManagerResource;
+       }
+       
+       public void setCommandType(String commandType) {
+               this.commandType=commandType;
+       }
+       
+       public void setCommand(String command) {
+               this.command=command;
+       }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java
index d5e7549..6a16914 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java
@@ -349,6 +349,13 @@ public class AppCatalogJPAUtils {
                     logger.error("Object should be a Job Manager Command.", 
new IllegalArgumentException());
                     throw new IllegalArgumentException("Object should be a Job 
Manager Command.");
                 }
+            case PARALLELISM_PREFIX_COMMAND:
+                if (o instanceof ParallelismPrefixCommand) {
+                    return createParallelismCommand((ParallelismPrefixCommand) 
o);
+                } else {
+                    logger.error("Object should be a Parallelism Prefix 
Command.", new IllegalArgumentException());
+                    throw new IllegalArgumentException("Object should be a 
Parallelism Prefix Command.");
+                }
             case LOCAL_SUBMISSION:
                 if (o instanceof LocalSubmission) {
                     return createLocalSubmission((LocalSubmission) o);
@@ -416,6 +423,17 @@ public class AppCatalogJPAUtils {
         return jobManagerCommandResource;
     }
 
+    private static AppCatalogResource 
createParallelismCommand(ParallelismPrefixCommand o) {
+        ParallelismPrefixCommandResource parallelismPrefixCommandResource = 
new ParallelismPrefixCommandResource();
+        if (o != null) {
+            
parallelismPrefixCommandResource.setResourceJobManagerId(o.getResourceJobManagerId());
+            
parallelismPrefixCommandResource.setResourceJobManagerResource((ResourceJobManagerResource)
 createResourceJobManager(o.getResourceJobManager()));
+            
parallelismPrefixCommandResource.setCommandType(o.getCommandType());
+            parallelismPrefixCommandResource.setCommand(o.getCommand());
+        }
+        return parallelismPrefixCommandResource;
+    }
+
     private static AppCatalogResource 
createResourceJobManager(ResourceJobManager o) {
         ResourceJobManagerResource resourceJobManagerResource = new 
ResourceJobManagerResource();
         if (o != null) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogResourceType.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogResourceType.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogResourceType.java
index e30ea06..df66757 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogResourceType.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogResourceType.java
@@ -59,6 +59,7 @@ public enum AppCatalogResourceType {
        DATA_MOVEMENT_INTERFACE,
        RESOURCE_JOB_MANAGER,
        JOB_MANAGER_COMMAND,
+    PARALLELISM_PREFIX_COMMAND,
        LOCAL_SUBMISSION,
        LOCAL_DATA_MOVEMENT,
     MODULE_LOAD_CMD,

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
index b788109..aa98a21 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogThriftConversion.java
@@ -38,6 +38,8 @@ import org.apache.airavata.model.application.io.DataType;
 import org.apache.airavata.model.application.io.InputDataObjectType;
 import org.apache.airavata.model.application.io.OutputDataObjectType;
 import org.apache.airavata.model.data.movement.*;
+import org.apache.airavata.model.parallelism.ApplicationParallelismType;
+import 
org.apache.airavata.registry.core.app.catalog.model.ParallelismPrefixCommand;
 import org.apache.airavata.registry.core.app.catalog.resources.*;
 import org.apache.airavata.registry.cpi.AppCatalogException;
 
@@ -394,6 +396,16 @@ public class AppCatalogThriftConversion {
                        
r.getJobManagerCommands().put(JobManagerCommand.valueOf(rr.getCommandType()), 
rr.getCommand());
                        }
         }
+
+        r.setParallelismPrefix(new HashMap<ApplicationParallelismType, 
String>());
+        ParallelismPrefixCommandResource prefixCommandResource=new 
ParallelismPrefixCommandResource();
+        List<AppCatalogResource> resourceList = 
prefixCommandResource.get(AppCatAbstractResource.JobManagerCommandConstants.RESOURCE_JOB_MANAGER_ID,
 manager.getResourceJobManagerId());
+        if (resourceList != null && !resourceList.isEmpty()){
+            for (AppCatalogResource rrr : resourceList) {
+                ParallelismPrefixCommandResource 
rr=(ParallelismPrefixCommandResource)rrr;
+                
r.getParallelismPrefix().put(ApplicationParallelismType.valueOf(rr.getCommandType()),
 rr.getCommand());
+            }
+        }
        return r;
     }
     

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql 
b/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
index 078cd73..09cb6b2 100644
--- a/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
+++ b/modules/registry/registry-core/src/main/resources/appcatalog-derby.sql
@@ -423,6 +423,15 @@ CREATE TABLE JOB_MANAGER_COMMAND
         FOREIGN KEY (RESOURCE_JOB_MANAGER_ID) REFERENCES 
RESOURCE_JOB_MANAGER(RESOURCE_JOB_MANAGER_ID) ON DELETE CASCADE
 );
 
+CREATE TABLE PARALLELISM_COMMAND
+(
+        RESOURCE_JOB_MANAGER_ID VARCHAR (255) NOT NULL,
+        COMMAND_TYPE VARCHAR (255) NOT NULL,
+        COMMAND VARCHAR (255),
+        PRIMARY KEY (RESOURCE_JOB_MANAGER_ID,COMMAND_TYPE),
+        FOREIGN KEY (RESOURCE_JOB_MANAGER_ID) REFERENCES 
RESOURCE_JOB_MANAGER(RESOURCE_JOB_MANAGER_ID) ON DELETE CASCADE
+);
+
 CREATE TABLE LOCAL_SUBMISSION
 (
         RESOURCE_JOB_MANAGER_ID VARCHAR (255) NOT NULL,

http://git-wip-us.apache.org/repos/asf/airavata/blob/d66d1698/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql 
b/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
index 25024f5..b091c16 100644
--- a/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
+++ b/modules/registry/registry-core/src/main/resources/appcatalog-mysql.sql
@@ -421,6 +421,15 @@ CREATE TABLE JOB_MANAGER_COMMAND
         FOREIGN KEY (RESOURCE_JOB_MANAGER_ID) REFERENCES 
RESOURCE_JOB_MANAGER(RESOURCE_JOB_MANAGER_ID) ON DELETE CASCADE
 );
 
+CREATE TABLE PARALLELISM_COMMAND
+(
+        RESOURCE_JOB_MANAGER_ID VARCHAR (255) NOT NULL,
+        COMMAND_TYPE VARCHAR (255) NOT NULL,
+        COMMAND VARCHAR (255),
+        PRIMARY KEY (RESOURCE_JOB_MANAGER_ID,COMMAND_TYPE),
+        FOREIGN KEY (RESOURCE_JOB_MANAGER_ID) REFERENCES 
RESOURCE_JOB_MANAGER(RESOURCE_JOB_MANAGER_ID) ON DELETE CASCADE
+);
+
 CREATE TABLE LOCAL_SUBMISSION
 (
         RESOURCE_JOB_MANAGER_ID VARCHAR (255) NOT NULL,

Reply via email to