You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2014/03/11 17:40:55 UTC
git commit: adding project data to cpi - AIRAVATA-991, AIRAVATA-1006
Repository: airavata
Updated Branches:
refs/heads/master f7dba4ecb -> 44ec4d315
adding project data to cpi - AIRAVATA-991, AIRAVATA-1006
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/44ec4d31
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/44ec4d31
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/44ec4d31
Branch: refs/heads/master
Commit: 44ec4d31566fb2bab2f0b8c03bfa4af7e75f8287
Parents: f7dba4e
Author: chathuri <ch...@apache.org>
Authored: Tue Mar 11 12:40:46 2014 -0400
Committer: chathuri <ch...@apache.org>
Committed: Tue Mar 11 12:40:46 2014 -0400
----------------------------------------------------------------------
.../server/handler/AiravataServerHandler.java | 45 +++-
.../src/main/resources/registry-derby.sql | 13 +-
.../src/main/resources/registry-mysql.sql | 13 +-
.../java-client-samples/pom.xml | 10 +-
.../client/samples/CreateLaunchExperiment.java | 20 ++
.../main/resources/airavata-client.properties | 4 +-
.../airavata/common/utils/AiravataUtils.java | 16 ++
.../src/test/resources/registry-derby.sql | 15 +-
.../persistance/registry/jpa/ResourceType.java | 1 +
.../registry/jpa/impl/ExperimentRegistry.java | 67 +++---
.../registry/jpa/impl/ProjectRegistry.java | 211 +++++++++++++++++++
.../registry/jpa/impl/RegistryImpl.java | 30 ++-
.../persistance/registry/jpa/model/Project.java | 23 ++
.../registry/jpa/model/ProjectUser.java | 77 +++++++
.../registry/jpa/model/ProjectUser_PK.java | 62 ++++++
.../jpa/resources/AbstractResource.java | 7 +
.../registry/jpa/resources/ProjectResource.java | 87 +++++++-
.../jpa/resources/ProjectUserResource.java | 109 ++++++++++
.../registry/jpa/resources/Utils.java | 18 ++
.../jpa/utils/ThriftDataModelConversion.java | 22 ++
.../src/main/resources/META-INF/persistence.xml | 1 +
.../src/main/resources/registry-derby.sql | 13 +-
.../src/main/resources/registry-mysql.sql | 13 +-
.../src/test/resources/registry-derby.sql | 13 +-
.../airavata/registry/cpi/utils/Constants.java | 5 +
25 files changed, 823 insertions(+), 72 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
index 1002f91..9bfe446 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
@@ -32,10 +32,7 @@ import org.apache.airavata.orchestrator.client.OrchestratorClientFactory;
import org.apache.airavata.orchestrator.cpi.OrchestratorService;
import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory;
import org.apache.airavata.model.workspace.experiment.*;
-import org.apache.airavata.registry.cpi.ChildDataType;
-import org.apache.airavata.registry.cpi.DataType;
-import org.apache.airavata.registry.cpi.ParentDataType;
-import org.apache.airavata.registry.cpi.Registry;
+import org.apache.airavata.registry.cpi.*;
import org.apache.airavata.registry.cpi.utils.Constants;
import org.apache.thrift.TException;
import org.slf4j.Logger;
@@ -71,7 +68,14 @@ public class AiravataServerHandler implements Airavata.Iface {
*/
@Override
public String createProject(Project project, String userName) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
- return null;
+ try {
+ registry = RegistryFactory.getDefaultRegistry();
+ project.setOwner(userName);
+ return (String)registry.add(ParentDataType.PROJECT, project);
+ } catch (RegistryException e) {
+ logger.error("Error while creating the project", e);
+ throw new AiravataSystemException();
+ }
}
/**
@@ -81,7 +85,13 @@ public class AiravataServerHandler implements Airavata.Iface {
*/
@Override
public void updateProject(Project project) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-
+ try {
+ registry = RegistryFactory.getDefaultRegistry();
+ registry.update(DataType.PROJECT, project, project.getProjectID());
+ } catch (RegistryException e) {
+ logger.error("Error while updating the project", e);
+ throw new AiravataSystemException();
+ }
}
/**
@@ -91,7 +101,13 @@ public class AiravataServerHandler implements Airavata.Iface {
*/
@Override
public Project getProject(String projectId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
- return null;
+ try {
+ registry = RegistryFactory.getDefaultRegistry();
+ return (Project)registry.get(DataType.PROJECT, projectId);
+ } catch (RegistryException e) {
+ logger.error("Error while updating the project", e);
+ throw new AiravataSystemException();
+ }
}
/**
@@ -101,7 +117,20 @@ public class AiravataServerHandler implements Airavata.Iface {
*/
@Override
public List<Project> getAllUserProjects(String userName) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
- return null;
+ List<Project> projects = new ArrayList<Project>();
+ try {
+ registry = RegistryFactory.getDefaultRegistry();
+ List<Object> list = registry.get(DataType.PROJECT, Constants.FieldConstants.ProjectConstants.OWNER, userName);
+ if (list != null && !list.isEmpty()){
+ for (Object o : list){
+ projects.add((Project)o);
+ }
+ }
+ return projects;
+ } catch (RegistryException e) {
+ logger.error("Error while updating the project", e);
+ throw new AiravataSystemException();
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/airavata-api/airavata-api-server/src/main/resources/registry-derby.sql
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/resources/registry-derby.sql b/airavata-api/airavata-api-server/src/main/resources/registry-derby.sql
index b794ba0..245ae19 100644
--- a/airavata-api/airavata-api-server/src/main/resources/registry-derby.sql
+++ b/airavata-api/airavata-api-server/src/main/resources/registry-derby.sql
@@ -57,11 +57,22 @@ CREATE TABLE PROJECT
GATEWAY_NAME VARCHAR(255),
USER_NAME VARCHAR(255),
PROJECT_NAME VARCHAR(255),
+ DESCRIPTION VARCHAR(255),
+ CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (PROJECT_NAME),
FOREIGN KEY (GATEWAY_NAME) REFERENCES GATEWAY(GATEWAY_NAME) ON DELETE CASCADE,
FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
);
+CREATE TABLE PROJECT_USER
+(
+ PROJECT_NAME VARCHAR(255),
+ USER_NAME VARCHAR(255),
+ PRIMARY KEY (PROJECT_NAME,USER_NAME),
+ FOREIGN KEY (PROJECT_NAME) REFERENCES PROJECT(PROJECT_NAME) ON DELETE CASCADE,
+ FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
+);
+
CREATE TABLE PUBLISHED_WORKFLOW
(
GATEWAY_NAME VARCHAR(255),
@@ -131,7 +142,7 @@ CREATE TABLE EXPERIMENT
EXECUTION_USER VARCHAR(255),
PROJECT_NAME VARCHAR(255),
CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- EXPERIMENT_NAME VARCHAR(255),
+ EXPERIMENT_NAME VARCHAR(255) NOT NULL,
EXPERIMENT_DESCRIPTION VARCHAR(255),
APPLICATION_ID VARCHAR(255),
APPLICATION_VERSION VARCHAR(255),
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/airavata-api/airavata-api-server/src/main/resources/registry-mysql.sql
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/resources/registry-mysql.sql b/airavata-api/airavata-api-server/src/main/resources/registry-mysql.sql
index 21fb8ec..020dfd5 100644
--- a/airavata-api/airavata-api-server/src/main/resources/registry-mysql.sql
+++ b/airavata-api/airavata-api-server/src/main/resources/registry-mysql.sql
@@ -57,11 +57,22 @@ CREATE TABLE PROJECT
GATEWAY_NAME VARCHAR(255),
USER_NAME VARCHAR(255),
PROJECT_NAME VARCHAR(255),
+ DESCRIPTION VARCHAR(255),
+ CREATION_TIME TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (PROJECT_NAME),
FOREIGN KEY (GATEWAY_NAME) REFERENCES GATEWAY(GATEWAY_NAME) ON DELETE CASCADE,
FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
);
+CREATE TABLE PROJECT_USER
+(
+ PROJECT_NAME VARCHAR(255),
+ USER_NAME VARCHAR(255),
+ PRIMARY KEY (PROJECT_NAME,USER_NAME),
+ FOREIGN KEY (PROJECT_NAME) REFERENCES PROJECT(PROJECT_NAME) ON DELETE CASCADE,
+ FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
+);
+
CREATE TABLE PUBLISHED_WORKFLOW
(
GATEWAY_NAME VARCHAR(255),
@@ -131,7 +142,7 @@ CREATE TABLE EXPERIMENT
EXECUTION_USER VARCHAR(255),
PROJECT_NAME VARCHAR(255),
CREATION_TIME TIMESTAMP DEFAULT NOW(),
- EXPERIMENT_NAME VARCHAR(255),
+ EXPERIMENT_NAME VARCHAR(255) NOT NULL,
EXPERIMENT_DESCRIPTION VARCHAR(255),
APPLICATION_ID VARCHAR(255),
APPLICATION_VERSION VARCHAR(255),
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/airavata-api/airavata-client-sdks/java-client-samples/pom.xml
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/java-client-samples/pom.xml b/airavata-api/airavata-client-sdks/java-client-samples/pom.xml
index b5f2631..e9350f1 100644
--- a/airavata-api/airavata-client-sdks/java-client-samples/pom.xml
+++ b/airavata-api/airavata-client-sdks/java-client-samples/pom.xml
@@ -72,11 +72,11 @@
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j.version}</version>
</dependency>
- <!--<dependency>-->
- <!--<groupId>mysql</groupId>-->
- <!--<artifactId>mysql-connector-java</artifactId>-->
- <!--<version>5.1.17</version>-->
- <!--</dependency>-->
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.1.17</version>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java
index 6c11091..7a129c4 100644
--- a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java
+++ b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java
@@ -68,6 +68,11 @@ public class CreateLaunchExperiment {
System.out.println("Experiment ID : " + expId);
launchExperiment(airavata, expId);
System.out.println("Launched successfully");
+ List<Experiment> experiments = getExperimentsForUser(airavata, "admin");
+ for (Experiment exp : experiments){
+ System.out.println(" exp id : " + exp.getExperimentID());
+ }
+
// try {
// Thread.sleep(20000);
// } catch (InterruptedException e) {
@@ -373,4 +378,19 @@ public class CreateLaunchExperiment {
throw new TException(e);
}
}
+
+ public static List<Experiment> getExperimentsForUser (Airavata.Client client, String user){
+ try {
+ return client.getAllUserExperiments(user);
+ } catch (AiravataSystemException e) {
+ e.printStackTrace();
+ } catch (InvalidRequestException e) {
+ e.printStackTrace();
+ } catch (AiravataClientException e) {
+ e.printStackTrace();
+ }catch (TException e){
+ e.printStackTrace();
+ }
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/airavata-api/airavata-client-sdks/java-client-samples/src/main/resources/airavata-client.properties
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/java-client-samples/src/main/resources/airavata-client.properties b/airavata-api/airavata-client-sdks/java-client-samples/src/main/resources/airavata-client.properties
index 9786a1a..2a463b1 100644
--- a/airavata-api/airavata-client-sdks/java-client-samples/src/main/resources/airavata-client.properties
+++ b/airavata-api/airavata-client-sdks/java-client-samples/src/main/resources/airavata-client.properties
@@ -35,13 +35,13 @@ class.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.Airava
########################Registry JPA Implementation Settings########################
#for mysql [AiravataJPARegistry]
#registry.jdbc.driver=com.mysql.jdbc.Driver
-#registry.jdbc.url=jdbc:mysql://gw111.iu.xsede.org:3306/airavata
+#registry.jdbc.url=jdbc:mysql://localhost:3306/persistent_data
#for derby [AiravataJPARegistry]
registry.jdbc.driver=org.apache.derby.jdbc.ClientDriver
registry.jdbc.url=jdbc:derby://localhost:1527/persistent_data;create=true;user=airavata;password=airavata
registry.jdbc.user=airavata
-registry.jdbc.password=airavata12
+registry.jdbc.password=airavata
start.derby.server.mode=true
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java
----------------------------------------------------------------------
diff --git a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java
index 84b00f0..45d2b8f 100644
--- a/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java
+++ b/modules/commons/utils/src/main/java/org/apache/airavata/common/utils/AiravataUtils.java
@@ -21,6 +21,9 @@
package org.apache.airavata.common.utils;
+import java.sql.Timestamp;
+import java.util.Calendar;
+
public class AiravataUtils {
public static final String EXECUTION_MODE="application.execution.mode";
public static void setExecutionMode(ExecutionMode mode){
@@ -50,4 +53,17 @@ public class AiravataUtils {
public static void setExecutionAsClient(){
setExecutionMode(ExecutionMode.CLIENT);
}
+
+ public static Timestamp getCurrentTimestamp() {
+ Calendar calender = Calendar.getInstance();
+ java.util.Date d = calender.getTime();
+ return new Timestamp(d.getTime());
+ }
+
+ public static Timestamp getTime(long time) {
+ if (time == 0 || time < 0){
+ return getCurrentTimestamp();
+ }
+ return new Timestamp(time);
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/orchestrator/orchestrator-core/src/test/resources/registry-derby.sql
----------------------------------------------------------------------
diff --git a/modules/orchestrator/orchestrator-core/src/test/resources/registry-derby.sql b/modules/orchestrator/orchestrator-core/src/test/resources/registry-derby.sql
index 7b8fb39..245ae19 100644
--- a/modules/orchestrator/orchestrator-core/src/test/resources/registry-derby.sql
+++ b/modules/orchestrator/orchestrator-core/src/test/resources/registry-derby.sql
@@ -57,11 +57,22 @@ CREATE TABLE PROJECT
GATEWAY_NAME VARCHAR(255),
USER_NAME VARCHAR(255),
PROJECT_NAME VARCHAR(255),
+ DESCRIPTION VARCHAR(255),
+ CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (PROJECT_NAME),
FOREIGN KEY (GATEWAY_NAME) REFERENCES GATEWAY(GATEWAY_NAME) ON DELETE CASCADE,
FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
);
+CREATE TABLE PROJECT_USER
+(
+ PROJECT_NAME VARCHAR(255),
+ USER_NAME VARCHAR(255),
+ PRIMARY KEY (PROJECT_NAME,USER_NAME),
+ FOREIGN KEY (PROJECT_NAME) REFERENCES PROJECT(PROJECT_NAME) ON DELETE CASCADE,
+ FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
+);
+
CREATE TABLE PUBLISHED_WORKFLOW
(
GATEWAY_NAME VARCHAR(255),
@@ -131,7 +142,7 @@ CREATE TABLE EXPERIMENT
EXECUTION_USER VARCHAR(255),
PROJECT_NAME VARCHAR(255),
CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- EXPERIMENT_NAME VARCHAR(255),
+ EXPERIMENT_NAME VARCHAR(255) NOT NULL,
EXPERIMENT_DESCRIPTION VARCHAR(255),
APPLICATION_ID VARCHAR(255),
APPLICATION_VERSION VARCHAR(255),
@@ -255,7 +266,7 @@ CREATE TABLE JOB_DETAIL
(
JOB_ID VARCHAR(255),
TASK_ID VARCHAR(255),
- JOB_DESCRIPTION VARCHAR(255),
+ JOB_DESCRIPTION CLOB,
CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
COMPUTE_RESOURCE_CONSUMED VARCHAR(255),
PRIMARY KEY (TASK_ID, JOB_ID),
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java
index 859caa0..1e0736b 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/ResourceType.java
@@ -24,6 +24,7 @@ public enum ResourceType {
GATEWAY,
PROJECT,
USER,
+ PROJECT_USER,
SERVICE_DESCRIPTOR,
PUBLISHED_WORKFLOW,
USER_WORKFLOW,
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
index 26de4c0..28b8dbe 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
@@ -21,6 +21,7 @@
package org.apache.airavata.persistance.registry.jpa.impl;
+import org.apache.airavata.common.utils.AiravataUtils;
import org.apache.airavata.model.workspace.experiment.*;
import org.apache.airavata.persistance.registry.jpa.Resource;
import org.apache.airavata.persistance.registry.jpa.ResourceType;
@@ -73,7 +74,7 @@ public class ExperimentRegistry {
project = workerResource.getProject(experiment.getProjectID());
experimentResource.setProject(project);
}
- experimentResource.setCreationTime(getTime(experiment.getCreationTime()));
+ experimentResource.setCreationTime(AiravataUtils.getTime(experiment.getCreationTime()));
experimentResource.setDescription(experiment.getDescription());
experimentResource.setApplicationId(experiment.getApplicationId());
experimentResource.setApplicationVersion(experiment.getApplicationVersion());
@@ -243,7 +244,7 @@ public class ExperimentRegistry {
cmsr.setNumberOfThreads(resourceScheduling.getNumberOfThreads());
cmsr.setQueueName(resourceScheduling.getQueueName());
cmsr.setWalltimeLimit(resourceScheduling.getWallTimeLimit());
- cmsr.setJobStartTime(getTime(resourceScheduling.getJobStartTime()));
+ cmsr.setJobStartTime(AiravataUtils.getTime(resourceScheduling.getJobStartTime()));
cmsr.setPhysicalMemory(resourceScheduling.getTotalPhysicalMemory());
cmsr.setProjectName(resourceScheduling.getComputationalProjectAccount());
cmsr.save();
@@ -402,7 +403,7 @@ public class ExperimentRegistry {
status = (StatusResource) experiment.create(ResourceType.STATUS);
}
status.setExperimentResource(experiment);
- status.setStatusUpdateTime(getTime(experimentStatus.getTimeOfStateChange()));
+ status.setStatusUpdateTime(AiravataUtils.getTime(experimentStatus.getTimeOfStateChange()));
status.setState(experimentStatus.getExperimentState().toString());
status.setStatusType(StatusType.EXPERIMENT.toString());
status.save();
@@ -421,7 +422,7 @@ public class ExperimentRegistry {
statusResource.setExperimentResource(experiment);
statusResource.setWorkflowNodeDetail(workflowNode);
statusResource.setStatusType(StatusType.WORKFLOW_NODE.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getWorkflowNodeState().toString());
statusResource.save();
return String.valueOf(statusResource.getStatusId());
@@ -439,7 +440,7 @@ public class ExperimentRegistry {
statusResource.setExperimentResource(workflowNode.getExperimentResource());
statusResource.setWorkflowNodeDetail(workflowNode);
statusResource.setStatusType(StatusType.WORKFLOW_NODE.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getWorkflowNodeState().toString());
statusResource.save();
return String.valueOf(statusResource.getStatusId());
@@ -459,7 +460,7 @@ public class ExperimentRegistry {
statusResource.setWorkflowNodeDetail(workflowNode);
statusResource.setTaskDetailResource(taskDetail);
statusResource.setStatusType(StatusType.TASK.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getExecutionState().toString());
statusResource.save();
return String.valueOf(statusResource.getStatusId());
@@ -479,7 +480,7 @@ public class ExperimentRegistry {
statusResource.setWorkflowNodeDetail(taskDetail.getWorkflowNodeDetailResource());
statusResource.setTaskDetailResource(taskDetail);
statusResource.setStatusType(StatusType.TASK.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getExecutionState().toString());
statusResource.save();
} catch (Exception e) {
@@ -504,7 +505,7 @@ public class ExperimentRegistry {
statusResource.setWorkflowNodeDetail(taskDetail.getWorkflowNodeDetailResource());
statusResource.setTaskDetailResource(taskDetail);
statusResource.setStatusType(StatusType.JOB.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getJobState().toString());
statusResource.save();
return String.valueOf(statusResource.getStatusId());
@@ -528,7 +529,7 @@ public class ExperimentRegistry {
statusResource.setWorkflowNodeDetail(workflowNode);
statusResource.setTaskDetailResource(taskDetail);
statusResource.setStatusType(StatusType.JOB.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getJobState().toString());
statusResource.save();
return String.valueOf(statusResource.getStatusId());
@@ -554,7 +555,7 @@ public class ExperimentRegistry {
statusResource.setWorkflowNodeDetail(taskDetail.getWorkflowNodeDetailResource());
statusResource.setTaskDetailResource(taskDetail);
statusResource.setStatusType(StatusType.APPLICATION.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getApplicationState());
statusResource.save();
return String.valueOf(statusResource.getStatusId());
@@ -575,7 +576,7 @@ public class ExperimentRegistry {
statusResource.setWorkflowNodeDetail(jobDetail.getTaskDetailResource().getWorkflowNodeDetailResource());
statusResource.setTaskDetailResource(jobDetail.getTaskDetailResource());
statusResource.setStatusType(StatusType.APPLICATION.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getApplicationState());
statusResource.save();
} catch (Exception e) {
@@ -602,7 +603,7 @@ public class ExperimentRegistry {
statusResource.setTaskDetailResource(taskDetail);
statusResource.setDataTransferDetail(dataTransferDetail);
statusResource.setStatusType(StatusType.DATA_TRANSFER.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getTransferState().toString());
statusResource.save();
return String.valueOf(statusResource.getStatusId());
@@ -624,7 +625,7 @@ public class ExperimentRegistry {
statusResource.setTaskDetailResource(dataTransferDetail.getTaskDetailResource());
statusResource.setDataTransferDetail(dataTransferDetail);
statusResource.setStatusType(StatusType.DATA_TRANSFER.toString());
- statusResource.setStatusUpdateTime(getTime(status.getTimeOfStateChange()));
+ statusResource.setStatusUpdateTime(AiravataUtils.getTime(status.getTimeOfStateChange()));
statusResource.setState(status.getTransferState().toString());
statusResource.save();
} catch (Exception e) {
@@ -639,7 +640,7 @@ public class ExperimentRegistry {
WorkflowNodeDetailResource resource = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
resource.setExperimentResource(experiment);
resource.setNodeName(nodeDetails.getNodeName());
- resource.setCreationTime(getTime(nodeDetails.getCreationTime()));
+ resource.setCreationTime(AiravataUtils.getTime(nodeDetails.getCreationTime()));
resource.setNodeInstanceId(getNodeInstanceID(nodeDetails.getNodeName()));
resource.save();
String nodeId = resource.getNodeInstanceId();
@@ -686,7 +687,7 @@ public class ExperimentRegistry {
ExperimentResource experiment = (ExperimentResource) gatewayResource.create(ResourceType.EXPERIMENT);
WorkflowNodeDetailResource workflowNode = experiment.getWorkflowNode(nodeId);
workflowNode.setNodeName(nodeDetails.getNodeName());
- workflowNode.setCreationTime(getTime(nodeDetails.getCreationTime()));
+ workflowNode.setCreationTime(AiravataUtils.getTime(nodeDetails.getCreationTime()));
workflowNode.setNodeInstanceId(getNodeInstanceID(nodeDetails.getNodeName()));
workflowNode.save();
String expID = workflowNode.getExperimentResource().getExpID();
@@ -778,7 +779,7 @@ public class ExperimentRegistry {
taskDetail.setTaskId(getTaskID(workflowNode.getNodeName()));
taskDetail.setApplicationId(taskDetails.getApplicationId());
taskDetail.setApplicationVersion(taskDetails.getApplicationVersion());
- taskDetail.setCreationTime(getTime(taskDetails.getCreationTime()));
+ taskDetail.setCreationTime(AiravataUtils.getTime(taskDetails.getCreationTime()));
taskDetail.save();
List<DataObjectType> applicationInputs = taskDetails.getApplicationInputs();
if (applicationInputs != null) {
@@ -844,7 +845,7 @@ public class ExperimentRegistry {
taskDetail.setTaskId(getTaskID(workflowNode.getNodeName()));
taskDetail.setApplicationId(taskDetails.getApplicationId());
taskDetail.setApplicationVersion(taskDetails.getApplicationVersion());
- taskDetail.setCreationTime(getTime(taskDetails.getCreationTime()));
+ taskDetail.setCreationTime(AiravataUtils.getTime(taskDetails.getCreationTime()));
taskDetail.save();
List<DataObjectType> applicationInputs = taskDetails.getApplicationInputs();
if (applicationInputs != null) {
@@ -981,7 +982,7 @@ public class ExperimentRegistry {
JobDetailResource jobDetail = taskDetail.createJobDetail((String) ids.getSecondLevelIdentifier());
jobDetail.setTaskDetailResource(taskDetail);
jobDetail.setJobDescription(jobDetails.getJobDescription());
- jobDetail.setCreationTime(getTime(jobDetails.getCreationTime()));
+ jobDetail.setCreationTime(AiravataUtils.getTime(jobDetails.getCreationTime()));
jobDetail.setComputeResourceConsumed(jobDetails.getComputeResourceConsumed());
jobDetail.save();
JobStatus jobStatus = jobDetails.getJobStatus();
@@ -1024,7 +1025,7 @@ public class ExperimentRegistry {
TaskDetailResource taskDetailResource = jobDetail.getTaskDetailResource();
jobDetail.setTaskDetailResource(taskDetailResource);
jobDetail.setJobDescription(jobDetails.getJobDescription());
- jobDetail.setCreationTime(getTime(jobDetails.getCreationTime()));
+ jobDetail.setCreationTime(AiravataUtils.getTime(jobDetails.getCreationTime()));
jobDetail.setComputeResourceConsumed(jobDetails.getComputeResourceConsumed());
jobDetail.save();
String taskId = taskDetailResource.getTaskId();
@@ -1068,7 +1069,7 @@ public class ExperimentRegistry {
resource.setTaskDetailResource(taskDetail);
resource.setTransferId(getDataTransferID(taskId));
resource.setTransferDescription(transferDetails.getTransferDescription());
- resource.setCreationTime(getTime(transferDetails.getCreationTime()));
+ resource.setCreationTime(AiravataUtils.getTime(transferDetails.getCreationTime()));
resource.save();
String transferId = resource.getTransferId();
TransferStatus transferStatus = transferDetails.getTransferStatus();
@@ -1096,7 +1097,7 @@ public class ExperimentRegistry {
DataTransferDetailResource resource = taskDetail.getDataTransferDetail(transferId);
resource.setTaskDetailResource(taskDetail);
resource.setTransferDescription(transferDetails.getTransferDescription());
- resource.setCreationTime(getTime(transferDetails.getCreationTime()));
+ resource.setCreationTime(AiravataUtils.getTime(transferDetails.getCreationTime()));
resource.save();
String taskId = resource.getTaskDetailResource().getTaskId();
TransferStatus transferStatus = transferDetails.getTransferStatus();
@@ -1137,7 +1138,7 @@ public class ExperimentRegistry {
schedulingResource.setNumberOfThreads(scheduling.getNumberOfThreads());
schedulingResource.setQueueName(scheduling.getQueueName());
schedulingResource.setWalltimeLimit(scheduling.getWallTimeLimit());
- schedulingResource.setJobStartTime(getTime(scheduling.getJobStartTime()));
+ schedulingResource.setJobStartTime(AiravataUtils.getTime(scheduling.getJobStartTime()));
schedulingResource.setPhysicalMemory(scheduling.getTotalPhysicalMemory());
schedulingResource.setProjectName(scheduling.getComputationalProjectAccount());
schedulingResource.save();
@@ -1269,7 +1270,7 @@ public class ExperimentRegistry {
"identifier for job..");
}
if (errorResource != null) {
- errorResource.setCreationTime(getTime(error.getCreationTime()));
+ errorResource.setCreationTime(AiravataUtils.getTime(error.getCreationTime()));
errorResource.setActualErrorMsg(error.getActualErrorMessage());
errorResource.setUserFriendlyErrorMsg(error.getUserFriendlyMessage());
errorResource.setErrorCategory(error.getErrorCategory().toString());
@@ -1377,7 +1378,7 @@ public class ExperimentRegistry {
ProjectResource project = workerResource.createProject(experiment.getProjectID());
existingExperiment.setProject(project);
}
- existingExperiment.setCreationTime(getTime(experiment.getCreationTime()));
+ existingExperiment.setCreationTime(AiravataUtils.getTime(experiment.getCreationTime()));
existingExperiment.setDescription(experiment.getDescription());
existingExperiment.setApplicationId(experiment.getApplicationId());
existingExperiment.setApplicationVersion(experiment.getApplicationVersion());
@@ -1541,7 +1542,7 @@ public class ExperimentRegistry {
cmsr.setNumberOfThreads(resourceScheduling.getNumberOfThreads());
cmsr.setQueueName(resourceScheduling.getQueueName());
cmsr.setWalltimeLimit(resourceScheduling.getWallTimeLimit());
- cmsr.setJobStartTime(getTime(resourceScheduling.getJobStartTime()));
+ cmsr.setJobStartTime(AiravataUtils.getTime(resourceScheduling.getJobStartTime()));
cmsr.setPhysicalMemory(resourceScheduling.getTotalPhysicalMemory());
cmsr.setProjectName(resourceScheduling.getComputationalProjectAccount());
cmsr.save();
@@ -2261,8 +2262,7 @@ public class ExperimentRegistry {
public boolean isExperimentExist(String expID) throws Exception {
try {
- gatewayResource.isExists(ResourceType.EXPERIMENT, expID);
- return true;
+ return gatewayResource.isExists(ResourceType.EXPERIMENT, expID);
} catch (Exception e) {
logger.error("Error while retrieving experiment...", e.getMessage());
throw new Exception(e);
@@ -2477,17 +2477,4 @@ public class ExperimentRegistry {
throw new Exception(e);
}
}
-
- public Timestamp getCurrentTimestamp() {
- Calendar calender = Calendar.getInstance();
- java.util.Date d = calender.getTime();
- return new Timestamp(d.getTime());
- }
-
- public Timestamp getTime(long time) {
- if (time == 0 || time < 0){
- return getCurrentTimestamp();
- }
- return new Timestamp(time);
- }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java
new file mode 100644
index 0000000..63e1ada
--- /dev/null
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java
@@ -0,0 +1,211 @@
+/*
+ *
+ * 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.persistance.registry.jpa.impl;
+
+import org.apache.airavata.common.utils.AiravataUtils;
+import org.apache.airavata.model.workspace.Project;
+import org.apache.airavata.persistance.registry.jpa.Resource;
+import org.apache.airavata.persistance.registry.jpa.ResourceType;
+import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
+import org.apache.airavata.persistance.registry.jpa.resources.*;
+import org.apache.airavata.persistance.registry.jpa.utils.ThriftDataModelConversion;
+import org.apache.airavata.registry.cpi.utils.Constants;
+import org.apache.axis2.i18n.ProjectResourceBundle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProjectRegistry {
+ private GatewayResource gatewayResource;
+ private WorkerResource workerResource;
+ private final static Logger logger = LoggerFactory.getLogger(ProjectRegistry.class);
+
+ public ProjectRegistry(GatewayResource gatewayResource, UserResource user) {
+ if (!ResourceUtils.isGatewayExist(gatewayResource.getGatewayName())){
+ this.gatewayResource = gatewayResource;
+ }else {
+ gatewayResource = (GatewayResource)ResourceUtils.getGateway(gatewayResource.getGatewayName());
+ }
+ if (!ResourceUtils.isUserExist(user.getUserName())){
+ workerResource = new WorkerResource(user.getUserName(), gatewayResource);
+ workerResource.save();
+ }else {
+ workerResource = (WorkerResource)ResourceUtils.getWorker(gatewayResource.getGatewayName(), user.getUserName());
+ }
+ }
+
+ public String addProject (Project project) throws Exception{
+ String projectId;
+ try {
+ if (!ResourceUtils.isUserExist(project.getOwner())){
+ logger.error("User does not exist in the system..");
+ throw new Exception("User does not exist in the system..");
+ }
+ ProjectResource projectResource = new ProjectResource();
+ projectResource.setName(project.getName());
+ projectResource.setDescription(project.getDescription());
+ projectResource.setCreationTime(AiravataUtils.getTime(project.getCreationTime()));
+ projectResource.setGateway(gatewayResource);
+ UserResource user = (UserResource)ResourceUtils.getUser(project.getOwner());
+ ResourceUtils.addGatewayWorker(gatewayResource, user);
+ WorkerResource worker = new WorkerResource(project.getOwner(), gatewayResource);
+ projectResource.setWorker(worker);
+ projectResource.save();
+ ProjectUserResource resource = (ProjectUserResource)projectResource.create(ResourceType.PROJECT_USER);
+ resource.setProjectName(project.getName());
+ resource.setUserName(project.getOwner());
+ resource.save();
+ projectId = projectResource.getName();
+ List<String> sharedGroups = project.getSharedGroups();
+ if (sharedGroups != null && !sharedGroups.isEmpty()){
+ for (String group : sharedGroups){
+ //TODO - add shared groups
+ logger.info("Groups are not supported at the moment...");
+ }
+ }
+
+ List<String> sharedUsers = project.getSharedUsers();
+ if (sharedUsers != null && !sharedUsers.isEmpty()){
+ for (String username : sharedUsers){
+ ProjectUserResource pr = (ProjectUserResource)projectResource.create(ResourceType.PROJECT_USER);
+ pr.setUserName(username);
+ pr.save();
+ }
+ }
+ }catch (Exception e){
+ logger.error("Error while saving project to registry", e.getMessage());
+ throw new Exception(e);
+ }
+ return projectId;
+ }
+
+ public void updateProject (Project project, String projectName) throws Exception{
+ try {
+ ProjectResource existingProject = workerResource.getProject(projectName);
+ existingProject.setDescription(project.getDescription());
+ existingProject.setCreationTime(AiravataUtils.getTime(project.getCreationTime()));
+ existingProject.setGateway(gatewayResource);
+ UserResource user = (UserResource)ResourceUtils.getUser(project.getOwner());
+ ResourceUtils.addGatewayWorker(gatewayResource, user);
+ WorkerResource worker = new WorkerResource(project.getOwner(), gatewayResource);
+ existingProject.setWorker(worker);
+ existingProject.save();
+ ProjectUserResource resource = (ProjectUserResource)existingProject.create(ResourceType.PROJECT_USER);
+ resource.setProjectName(project.getName());
+ resource.setUserName(project.getOwner());
+ resource.save();
+ List<String> sharedGroups = project.getSharedGroups();
+ if (sharedGroups != null && !sharedGroups.isEmpty()){
+ for (String group : sharedGroups){
+ //TODO - add shared groups
+ logger.info("Groups are not supported at the moment...");
+ }
+ }
+
+ List<String> sharedUsers = project.getSharedUsers();
+ if (sharedUsers != null && !sharedUsers.isEmpty()){
+ for (String username : sharedUsers){
+ ProjectUserResource pr = (ProjectUserResource)existingProject.create(ResourceType.PROJECT_USER);
+ pr.setUserName(username);
+ pr.save();
+ }
+ }
+ }catch (Exception e){
+ logger.error("Error while saving project to registry", e.getMessage());
+ throw new Exception(e);
+ }
+ }
+
+ public Project getProject (String projectName) throws Exception{
+ try {
+ ProjectResource project = workerResource.getProject(projectName);
+ if (project != null){
+ return ThriftDataModelConversion.getProject(project);
+ }
+ }catch (Exception e){
+ logger.error("Error while retrieving project from registry", e.getMessage());
+ throw new Exception(e);
+ }
+ return null;
+ }
+
+ public List<Project> getProjectList (String fieldName, Object value) throws Exception{
+ List<Project> projects = new ArrayList<Project>();
+ try {
+ if (fieldName.equals(Constants.FieldConstants.ProjectConstants.OWNER)){
+ workerResource.setUser((String)value);
+ List<ProjectResource> projectList = workerResource.getProjects();
+ if (projectList != null && !projectList.isEmpty()){
+ for (ProjectResource pr : projectList){
+ projects.add(ThriftDataModelConversion.getProject(pr));
+ }
+ }
+ return projects;
+ }
+ }catch (Exception e){
+ logger.error("Error while retrieving project from registry", e.getMessage());
+ throw new Exception(e);
+ }
+ return projects;
+ }
+
+ public List<String> getProjectIDs (String fieldName, Object value) throws Exception{
+ List<String> projectIds = new ArrayList<String>();
+ try {
+ if (fieldName.equals(Constants.FieldConstants.ProjectConstants.OWNER)){
+ workerResource.setUser((String)value);
+ List<ProjectResource> projectList = workerResource.getProjects();
+ if (projectList != null && !projectList.isEmpty()){
+ for (ProjectResource pr : projectList){
+ projectIds.add(pr.getName());
+ }
+ }
+ return projectIds;
+ }
+ }catch (Exception e){
+ logger.error("Error while retrieving projects from registry", e.getMessage());
+ throw new Exception(e);
+ }
+ return projectIds;
+ }
+
+ public void removeProject (String projectName) throws Exception {
+ try {
+ workerResource.removeProject(projectName);
+ } catch (Exception e) {
+ logger.error("Error while removing the project..", e.getMessage());
+ throw new Exception(e);
+ }
+ }
+
+ public boolean isProjectExist(String projectName) throws Exception {
+ try {
+ return workerResource.isProjectExists(projectName);
+ } catch (Exception e) {
+ logger.error("Error while retrieving project...", e.getMessage());
+ throw new Exception(e);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java
index d5df069..549e7c1 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java
@@ -23,6 +23,7 @@ package org.apache.airavata.persistance.registry.jpa.impl;
import org.apache.airavata.common.exception.ApplicationSettingsException;
import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.model.workspace.Project;
import org.apache.airavata.model.workspace.experiment.*;
import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
import org.apache.airavata.persistance.registry.jpa.resources.GatewayResource;
@@ -38,7 +39,8 @@ public class RegistryImpl implements Registry {
private GatewayResource gatewayResource;
private UserResource user;
private final static Logger logger = LoggerFactory.getLogger(RegistryImpl.class);
- ExperimentRegistry experimentRegistry = null;
+ private ExperimentRegistry experimentRegistry = null;
+ private ProjectRegistry projectRegistry = null;
public RegistryImpl() {
try {
@@ -47,6 +49,7 @@ public class RegistryImpl implements Registry {
user = ResourceUtils.createUser(ServerSettings.getSystemUser(), ServerSettings.getSystemUserPassword());
user.save();
experimentRegistry = new ExperimentRegistry(gatewayResource, user);
+ projectRegistry = new ProjectRegistry(gatewayResource, user);
} catch (ApplicationSettingsException e) {
logger.error("Unable to read airavata server properties..", e.getMessage());
}
@@ -58,6 +61,7 @@ public class RegistryImpl implements Registry {
user = ResourceUtils.createUser(username, password);
user.save();
experimentRegistry = new ExperimentRegistry(gatewayResource, user);
+ projectRegistry = new ProjectRegistry(gatewayResource, user);
}
/**
@@ -74,6 +78,8 @@ public class RegistryImpl implements Registry {
public Object add(ParentDataType dataType, Object newObjectToAdd) throws RegistryException {
try {
switch (dataType) {
+ case PROJECT:
+ return projectRegistry.addProject((Project)newObjectToAdd);
case EXPERIMENT:
return experimentRegistry.addExperiment((Experiment) newObjectToAdd);
default:
@@ -166,6 +172,9 @@ public class RegistryImpl implements Registry {
public void update(DataType dataType, Object newObjectToUpdate, Object identifier) throws RegistryException {
try {
switch (dataType) {
+ case PROJECT:
+ projectRegistry.updateProject((Project)newObjectToUpdate, (String)identifier);
+ break;
case EXPERIMENT:
experimentRegistry.updateExperiment((Experiment) newObjectToUpdate, (String) identifier);
break;
@@ -282,6 +291,8 @@ public class RegistryImpl implements Registry {
public Object get(DataType dataType, Object identifier) throws RegistryException {
try {
switch (dataType) {
+ case PROJECT:
+ return projectRegistry.getProject((String)identifier);
case EXPERIMENT:
return experimentRegistry.getExperiment((String) identifier, null);
case EXPERIMENT_CONFIGURATION_DATA:
@@ -345,9 +356,15 @@ public class RegistryImpl implements Registry {
try {
List<Object> result = new ArrayList<Object>();
switch (dataType) {
+ case PROJECT:
+ List<Project> projectList = projectRegistry.getProjectList(fieldName, value);
+ for (Project project : projectList ){
+ result.add(project);
+ }
+ return result;
case EXPERIMENT:
- List<Experiment> experimentMetaDataList = experimentRegistry.getExperimentList(fieldName, value);
- for (Experiment experiment : experimentMetaDataList) {
+ List<Experiment> experimentList = experimentRegistry.getExperimentList(fieldName, value);
+ for (Experiment experiment : experimentList) {
result.add(experiment);
}
return result;
@@ -445,6 +462,8 @@ public class RegistryImpl implements Registry {
public List<String> getIds(DataType dataType, String fieldName, Object value) throws RegistryException {
try {
switch (dataType) {
+ case PROJECT:
+ return projectRegistry.getProjectIDs(fieldName, value);
case EXPERIMENT:
return experimentRegistry.getExperimentIDs(fieldName, value);
case EXPERIMENT_CONFIGURATION_DATA:
@@ -480,6 +499,9 @@ public class RegistryImpl implements Registry {
public void remove(DataType dataType, Object identifier) throws RegistryException {
try {
switch (dataType) {
+ case PROJECT:
+ projectRegistry.removeProject((String)identifier);
+ break;
case EXPERIMENT:
experimentRegistry.removeExperiment((String) identifier);
break;
@@ -534,6 +556,8 @@ public class RegistryImpl implements Registry {
public boolean isExist(DataType dataType, Object identifier) throws RegistryException {
try {
switch (dataType) {
+ case PROJECT:
+ return projectRegistry.isProjectExist((String)identifier);
case EXPERIMENT:
return experimentRegistry.isExperimentExist((String) identifier);
case EXPERIMENT_CONFIGURATION_DATA:
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Project.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Project.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Project.java
index a7c8a69..fded5f0 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Project.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Project.java
@@ -21,6 +21,7 @@
package org.apache.airavata.persistance.registry.jpa.model;
import javax.persistence.*;
+import java.sql.Timestamp;
@Entity
@Table(name ="PROJECT")
@@ -29,6 +30,11 @@ public class Project {
@Column(name = "PROJECT_NAME")
private String project_name;
+ @Column(name = "DESCRIPTION")
+ private String description;
+ @Column(name = "CREATION_TIME")
+ private Timestamp creationTime;
+
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name = "GATEWAY_NAME")
private Gateway gateway;
@@ -37,6 +43,7 @@ public class Project {
@JoinColumn(name = "USER_NAME")
private Users users;
+
public String getProject_name() {
return project_name;
}
@@ -60,5 +67,21 @@ public class Project {
public void setUsers(Users users) {
this.users = users;
}
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Timestamp getCreationTime() {
+ return creationTime;
+ }
+
+ public void setCreationTime(Timestamp creationTime) {
+ this.creationTime = creationTime;
+ }
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ProjectUser.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ProjectUser.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ProjectUser.java
new file mode 100644
index 0000000..be5a475
--- /dev/null
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ProjectUser.java
@@ -0,0 +1,77 @@
+/*
+ *
+ * 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.persistance.registry.jpa.model;
+
+
+import javax.persistence.*;
+
+@Entity
+@IdClass(ProjectUser_PK.class)
+@Table(name = "PROJECT_USER")
+public class ProjectUser {
+ @Id
+ @Column(name = "PROJECT_NAME")
+ private String projectName;
+ @Id
+ @Column(name = "USER_NAME")
+ private String userName;
+
+ @ManyToOne(cascade=CascadeType.MERGE)
+ @JoinColumn(name = "PROJECT_NAME")
+ private Project project;
+
+ @ManyToOne(cascade=CascadeType.MERGE)
+ @JoinColumn(name = "USER_NAME")
+ private Users user;
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public Project getProject() {
+ return project;
+ }
+
+ public void setProject(Project project) {
+ this.project = project;
+ }
+
+ public Users getUser() {
+ return user;
+ }
+
+ public void setUser(Users user) {
+ this.user = user;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ProjectUser_PK.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ProjectUser_PK.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ProjectUser_PK.java
new file mode 100644
index 0000000..d626624
--- /dev/null
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/ProjectUser_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.persistance.registry.jpa.model;
+
+public class ProjectUser_PK {
+ private String projectName;
+ private String userName;
+
+ public ProjectUser_PK(String projectName, String userName) {
+ this.projectName = projectName;
+ this.userName = userName;
+ }
+
+ public ProjectUser_PK() {
+ ;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return 1;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AbstractResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AbstractResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AbstractResource.java
index 8b41831..51bda89 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AbstractResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/AbstractResource.java
@@ -33,6 +33,7 @@ public abstract class AbstractResource implements Resource {
public static final String USERS = "Users";
public static final String GATEWAY_WORKER = "Gateway_Worker";
public static final String PROJECT = "Project";
+ public static final String PROJECT_USER = "ProjectUser";
public static final String PUBLISHED_WORKFLOW = "Published_Workflow";
public static final String USER_WORKFLOW = "User_Workflow";
public static final String HOST_DESCRIPTOR = "Host_Descriptor";
@@ -94,6 +95,12 @@ public abstract class AbstractResource implements Resource {
public static final String PROJECT_NAME = "project_name";
}
+ // Project table
+ public final class ProjectUserConstants {
+ public static final String USERNAME = "userName";
+ public static final String PROJECT_NAME = "projectName";
+ }
+
// Published_Workflow table
public final class PublishedWorkflowConstants {
public static final String GATEWAY_NAME = "gateway_name";
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
index 63b92fe..db72a11 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectResource.java
@@ -20,6 +20,7 @@
*/
package org.apache.airavata.persistance.registry.jpa.resources;
+import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@@ -39,6 +40,8 @@ public class ProjectResource extends AbstractResource {
private String name;
private GatewayResource gateway;
private WorkerResource worker;
+ private String description;
+ private Timestamp creationTime;
/**
*
@@ -70,7 +73,13 @@ public class ProjectResource extends AbstractResource {
experimentResource.setExecutionUser(worker.getUser());
experimentResource.setProject(this);
return experimentResource;
- } else {
+ } else if (type == ResourceType.PROJECT_USER){
+ ProjectUserResource pr = new ProjectUserResource();
+ pr.setProjectName(name);
+ pr.setUserName(worker.getUser());
+ return pr;
+ }
+ else {
logger.error("Unsupported resource type for project resource.", new IllegalArgumentException());
throw new IllegalArgumentException("Unsupported resource type for project resource.");
}
@@ -89,6 +98,12 @@ public class ProjectResource extends AbstractResource {
generator.setParameter(ExperimentConstants.EXPERIMENT_ID, name);
Query q = generator.deleteQuery(em);
q.executeUpdate();
+ }else if (type == ResourceType.PROJECT_USER){
+ QueryGenerator generator = new QueryGenerator(PROJECT_USER);
+ generator.setParameter(ProjectUserConstants.USERNAME, name);
+ generator.setParameter(ProjectUserConstants.PROJECT_NAME, this.name);
+ Query q = generator.deleteQuery(em);
+ q.executeUpdate();
}else {
logger.error("Unsupported resource type for project resource.", new IllegalArgumentException());
throw new IllegalArgumentException("Unsupported resource type for project resource.");
@@ -116,11 +131,23 @@ public class ProjectResource extends AbstractResource {
em.getTransaction().commit();
em.close();
return experimentResource;
+ } else if (type == ResourceType.PROJECT_USER){
+ EntityManager em = ResourceUtils.getEntityManager();
+ em.getTransaction().begin();
+ QueryGenerator generator = new QueryGenerator(PROJECT_USER);
+ generator.setParameter(ProjectUserConstants.USERNAME, name);
+ generator.setParameter(ProjectUserConstants.PROJECT_NAME, this.name);
+ Query q = generator.selectQuery(em);
+ ProjectUser prUser = (ProjectUser) q.getSingleResult();
+ ExperimentResource experimentResource = (ExperimentResource)
+ Utils.getResource(ResourceType.PROJECT_USER, prUser);
+ em.getTransaction().commit();
+ em.close();
+ return experimentResource;
}else{
logger.error("Unsupported resource type for project resource.", new IllegalArgumentException());
throw new IllegalArgumentException("Unsupported resource type for project resource.");
}
-
}
/**
@@ -130,7 +157,6 @@ public class ProjectResource extends AbstractResource {
*/
public List<Resource> get(ResourceType type) {
List<Resource> resourceList = new ArrayList<Resource>();
-
if (type == ResourceType.EXPERIMENT) {
EntityManager em = ResourceUtils.getEntityManager();
em.getTransaction().begin();
@@ -148,7 +174,24 @@ public class ProjectResource extends AbstractResource {
}
em.getTransaction().commit();
em.close();
- } else {
+ }else if (type == ResourceType.PROJECT_USER) {
+ EntityManager em = ResourceUtils.getEntityManager();
+ em.getTransaction().begin();
+ QueryGenerator generator = new QueryGenerator(PROJECT_USER);
+ generator.setParameter(ProjectUserConstants.PROJECT_NAME, name);
+ Query q = generator.selectQuery(em);
+ List<?> results = q.getResultList();
+ if (results.size() != 0) {
+ for (Object result : results) {
+ ProjectUser projectUser = (ProjectUser) result;
+ ProjectUserResource pr = (ProjectUserResource)
+ Utils.getResource(ResourceType.PROJECT_USER, projectUser);
+ resourceList.add(pr);
+ }
+ }
+ em.getTransaction().commit();
+ em.close();
+ }else {
logger.error("Unsupported resource type for project resource.", new IllegalArgumentException());
throw new IllegalArgumentException("Unsupported resource type for project resource.");
}
@@ -171,18 +214,21 @@ public class ProjectResource extends AbstractResource {
project.setGateway(modelGateway);
Users user = em.find(Users.class, worker.getUser());
project.setUsers(user);
+ project.setDescription(description);
+ project.setCreationTime(creationTime);
if(existingprojectResource != null){
existingprojectResource.setGateway(modelGateway);
- existingprojectResource.setUsers(user);
- project = em.merge(existingprojectResource);
+ existingprojectResource.setUsers(user);
+ existingprojectResource.setDescription(description);
+ existingprojectResource.setCreationTime(creationTime);
+ project = em.merge(existingprojectResource);
}else {
em.persist(project);
}
em.getTransaction().commit();
em.close();
-
}
/**
@@ -233,6 +279,22 @@ public class ProjectResource extends AbstractResource {
this.gateway = gateway;
}
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Timestamp getCreationTime() {
+ return creationTime;
+ }
+
+ public void setCreationTime(Timestamp creationTime) {
+ this.creationTime = creationTime;
+ }
+
/**
*
* @param experimentId experiment ID
@@ -283,4 +345,15 @@ public class ProjectResource extends AbstractResource {
remove(ResourceType.EXPERIMENT, experimentId);
}
+ public List<ProjectUserResource> getProjectUserList (){
+ List<Resource> resources = get(ResourceType.PROJECT_USER);
+ List<ProjectUserResource> projectUserResources = new ArrayList<ProjectUserResource>();
+ if (resources != null && !resources.isEmpty()){
+ for (Resource r : resources){
+ projectUserResources.add((ProjectUserResource)r);
+ }
+ }
+ return projectUserResources;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectUserResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectUserResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectUserResource.java
new file mode 100644
index 0000000..cdfde80
--- /dev/null
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ProjectUserResource.java
@@ -0,0 +1,109 @@
+/*
+ *
+ * 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.persistance.registry.jpa.resources;
+
+import org.apache.airavata.persistance.registry.jpa.Resource;
+import org.apache.airavata.persistance.registry.jpa.ResourceType;
+import org.apache.airavata.persistance.registry.jpa.ResourceUtils;
+import org.apache.airavata.persistance.registry.jpa.model.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import java.util.List;
+
+public class ProjectUserResource extends AbstractResource {
+ private String projectName;
+ private String userName;
+
+ private static final Logger logger = LoggerFactory.getLogger(ProjectUserResource.class);
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ @Override
+ public Resource create(ResourceType type) {
+ logger.error("Unsupported resource type for project resource data resource.", new UnsupportedOperationException());
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void remove(ResourceType type, Object name) {
+ logger.error("Unsupported resource type for project resource data resource.", new UnsupportedOperationException());
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Resource get(ResourceType type, Object name) {
+ logger.error("Unsupported resource type for project resource data resource.", new UnsupportedOperationException());
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<Resource> get(ResourceType type) {
+ logger.error("Unsupported resource type for project resource data resource.", new UnsupportedOperationException());
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void save() {
+ EntityManager em = ResourceUtils.getEntityManager();
+ ProjectUser existingPrUser = em.find(ProjectUser.class, new ProjectUser_PK(projectName, userName));
+ em.close();
+
+ em = ResourceUtils.getEntityManager();
+ em.getTransaction().begin();
+ ProjectUser prUser = new ProjectUser();
+ prUser.setProjectName(projectName);
+ prUser.setUserName(userName);
+ Users user = em.find(Users.class, userName);
+ prUser.setUser(user);
+ Project project = em.find(Project.class, projectName);
+ prUser.setProject(project);
+
+ if(existingPrUser != null){
+ existingPrUser.setProjectName(projectName);
+ existingPrUser.setUserName(userName);
+ existingPrUser.setUser(user);
+ existingPrUser.setProject(project);
+ prUser = em.merge(existingPrUser);
+ }else {
+ em.persist(prUser);
+ }
+
+ em.getTransaction().commit();
+ em.close();
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
index ec1c4dd..b9144be 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
@@ -212,6 +212,13 @@ public class Utils {
logger.error("Object should be a Project.", new IllegalArgumentException());
throw new IllegalArgumentException("Object should be a Project.");
}
+ case PROJECT_USER:
+ if (o instanceof ProjectUser){
+ return createProjectUser((ProjectUser)o);
+ }else {
+ logger.error("Object should be a ProjectUser.", new IllegalArgumentException());
+ throw new IllegalArgumentException("Object should be a ProjectUser.");
+ }
case CONFIGURATION:
if(o instanceof Configuration){
return createConfiguration((Configuration) o);
@@ -427,11 +434,22 @@ public class Utils {
gateway_worker.setUser(o.getUsers());
WorkerResource workerResource = (WorkerResource) createGatewayWorker(gateway_worker);
projectResource.setWorker(workerResource);
+ projectResource.setDescription(o.getDescription());
+ projectResource.setCreationTime(o.getCreationTime());
}
return projectResource;
}
+ private static Resource createProjectUser(ProjectUser o) {
+ ProjectUserResource projectUserResource = new ProjectUserResource();
+ if (o != null){
+ projectUserResource.setUserName(o.getUser().getUser_name());
+ projectUserResource.setProjectName(o.getProjectName());
+ }
+ return projectUserResource;
+ }
+
/**
*
* @param o configuration model object
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
index 2f1a97a..0b7d923 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/utils/ThriftDataModelConversion.java
@@ -21,6 +21,7 @@
package org.apache.airavata.persistance.registry.jpa.utils;
+import org.apache.airavata.model.workspace.Project;
import org.apache.airavata.model.workspace.experiment.*;
import org.apache.airavata.persistance.registry.jpa.ResourceType;
import org.apache.airavata.persistance.registry.jpa.resources.*;
@@ -33,6 +34,27 @@ import java.util.List;
public class ThriftDataModelConversion {
private final static Logger logger = LoggerFactory.getLogger(ThriftDataModelConversion.class);
+ public static Project getProject (ProjectResource pr){
+ Project project = new Project();
+ if (pr != null) {
+ project.setProjectID(pr.getName());
+ project.setName(pr.getName());
+ project.setCreationTime(pr.getCreationTime().getTime());
+ project.setDescription(pr.getDescription());
+ project.setOwner(pr.getWorker().getUser());
+ List<ProjectUserResource> projectUserList = pr.getProjectUserList();
+ List<String> sharedUsers = new ArrayList<String>();
+ if (projectUserList != null && !projectUserList.isEmpty()){
+ for (ProjectUserResource resource : projectUserList){
+ sharedUsers.add(resource.getUserName());
+ }
+ }
+ project.setSharedGroups(sharedUsers);
+ }
+ return project;
+ }
+
+
public static Experiment getExperiment(ExperimentResource experimentResource){
Experiment experiment = new Experiment();
if (experimentResource != null){
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/resources/META-INF/persistence.xml b/modules/registry/airavata-jpa-registry/src/main/resources/META-INF/persistence.xml
index b51300b..39eea77 100644
--- a/modules/registry/airavata-jpa-registry/src/main/resources/META-INF/persistence.xml
+++ b/modules/registry/airavata-jpa-registry/src/main/resources/META-INF/persistence.xml
@@ -28,6 +28,7 @@
<class>org.apache.airavata.persistance.registry.jpa.model.Users</class>
<class>org.apache.airavata.persistance.registry.jpa.model.Gateway_Worker</class>
<class>org.apache.airavata.persistance.registry.jpa.model.Project</class>
+ <class>org.apache.airavata.persistance.registry.jpa.model.ProjectUser</class>
<class>org.apache.airavata.persistance.registry.jpa.model.Published_Workflow</class>
<class>org.apache.airavata.persistance.registry.jpa.model.User_Workflow</class>
<class>org.apache.airavata.persistance.registry.jpa.model.Host_Descriptor</class>
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql b/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql
index b794ba0..245ae19 100644
--- a/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql
+++ b/modules/registry/airavata-jpa-registry/src/main/resources/registry-derby.sql
@@ -57,11 +57,22 @@ CREATE TABLE PROJECT
GATEWAY_NAME VARCHAR(255),
USER_NAME VARCHAR(255),
PROJECT_NAME VARCHAR(255),
+ DESCRIPTION VARCHAR(255),
+ CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (PROJECT_NAME),
FOREIGN KEY (GATEWAY_NAME) REFERENCES GATEWAY(GATEWAY_NAME) ON DELETE CASCADE,
FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
);
+CREATE TABLE PROJECT_USER
+(
+ PROJECT_NAME VARCHAR(255),
+ USER_NAME VARCHAR(255),
+ PRIMARY KEY (PROJECT_NAME,USER_NAME),
+ FOREIGN KEY (PROJECT_NAME) REFERENCES PROJECT(PROJECT_NAME) ON DELETE CASCADE,
+ FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
+);
+
CREATE TABLE PUBLISHED_WORKFLOW
(
GATEWAY_NAME VARCHAR(255),
@@ -131,7 +142,7 @@ CREATE TABLE EXPERIMENT
EXECUTION_USER VARCHAR(255),
PROJECT_NAME VARCHAR(255),
CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- EXPERIMENT_NAME VARCHAR(255),
+ EXPERIMENT_NAME VARCHAR(255) NOT NULL,
EXPERIMENT_DESCRIPTION VARCHAR(255),
APPLICATION_ID VARCHAR(255),
APPLICATION_VERSION VARCHAR(255),
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql b/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql
index 21fb8ec..020dfd5 100644
--- a/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql
+++ b/modules/registry/airavata-jpa-registry/src/main/resources/registry-mysql.sql
@@ -57,11 +57,22 @@ CREATE TABLE PROJECT
GATEWAY_NAME VARCHAR(255),
USER_NAME VARCHAR(255),
PROJECT_NAME VARCHAR(255),
+ DESCRIPTION VARCHAR(255),
+ CREATION_TIME TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (PROJECT_NAME),
FOREIGN KEY (GATEWAY_NAME) REFERENCES GATEWAY(GATEWAY_NAME) ON DELETE CASCADE,
FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
);
+CREATE TABLE PROJECT_USER
+(
+ PROJECT_NAME VARCHAR(255),
+ USER_NAME VARCHAR(255),
+ PRIMARY KEY (PROJECT_NAME,USER_NAME),
+ FOREIGN KEY (PROJECT_NAME) REFERENCES PROJECT(PROJECT_NAME) ON DELETE CASCADE,
+ FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
+);
+
CREATE TABLE PUBLISHED_WORKFLOW
(
GATEWAY_NAME VARCHAR(255),
@@ -131,7 +142,7 @@ CREATE TABLE EXPERIMENT
EXECUTION_USER VARCHAR(255),
PROJECT_NAME VARCHAR(255),
CREATION_TIME TIMESTAMP DEFAULT NOW(),
- EXPERIMENT_NAME VARCHAR(255),
+ EXPERIMENT_NAME VARCHAR(255) NOT NULL,
EXPERIMENT_DESCRIPTION VARCHAR(255),
APPLICATION_ID VARCHAR(255),
APPLICATION_VERSION VARCHAR(255),
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql b/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql
index b794ba0..245ae19 100644
--- a/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql
+++ b/modules/registry/airavata-jpa-registry/src/test/resources/registry-derby.sql
@@ -57,11 +57,22 @@ CREATE TABLE PROJECT
GATEWAY_NAME VARCHAR(255),
USER_NAME VARCHAR(255),
PROJECT_NAME VARCHAR(255),
+ DESCRIPTION VARCHAR(255),
+ CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (PROJECT_NAME),
FOREIGN KEY (GATEWAY_NAME) REFERENCES GATEWAY(GATEWAY_NAME) ON DELETE CASCADE,
FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
);
+CREATE TABLE PROJECT_USER
+(
+ PROJECT_NAME VARCHAR(255),
+ USER_NAME VARCHAR(255),
+ PRIMARY KEY (PROJECT_NAME,USER_NAME),
+ FOREIGN KEY (PROJECT_NAME) REFERENCES PROJECT(PROJECT_NAME) ON DELETE CASCADE,
+ FOREIGN KEY (USER_NAME) REFERENCES USERS(USER_NAME) ON DELETE CASCADE
+);
+
CREATE TABLE PUBLISHED_WORKFLOW
(
GATEWAY_NAME VARCHAR(255),
@@ -131,7 +142,7 @@ CREATE TABLE EXPERIMENT
EXECUTION_USER VARCHAR(255),
PROJECT_NAME VARCHAR(255),
CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- EXPERIMENT_NAME VARCHAR(255),
+ EXPERIMENT_NAME VARCHAR(255) NOT NULL,
EXPERIMENT_DESCRIPTION VARCHAR(255),
APPLICATION_ID VARCHAR(255),
APPLICATION_VERSION VARCHAR(255),
http://git-wip-us.apache.org/repos/asf/airavata/blob/44ec4d31/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/utils/Constants.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/utils/Constants.java b/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/utils/Constants.java
index f2579b2..6aa38a9 100644
--- a/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/utils/Constants.java
+++ b/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/utils/Constants.java
@@ -23,6 +23,11 @@ package org.apache.airavata.registry.cpi.utils;
public class Constants {
public final class FieldConstants {
+ public final class ProjectConstants {
+ public static final String PROJECT_ID = "projectID";
+ public static final String OWNER = "owner";
+ }
+
public final class ExperimentConstants {
public static final String EXPERIMENT_NAME = "experimentName";
public static final String USER_NAME = "userName";