Mongo Registry WIP
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/945161ea Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/945161ea Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/945161ea Branch: refs/heads/mongo-registry Commit: 945161ea138dc9576f8f2bc6ce7452cc386821b0 Parents: 847f2d9 Author: Supun Nakandala <[email protected]> Authored: Wed May 27 23:15:35 2015 +0530 Committer: Supun Nakandala <[email protected]> Committed: Wed May 27 23:15:35 2015 +0530 ---------------------------------------------------------------------- .../registry/jpa/impl/ExperimentRegistry.java | 230 ++++--------------- .../registry/jpa/impl/ProjectRegistry.java | 148 +++--------- .../persistance/registry/jpa/mongo/Test.java | 2 - .../registry/jpa/mongo/dao/ExperimentDao.java | 76 ++++-- .../registry/jpa/mongo/dao/ProjectDao.java | 189 +++++++++++++++ .../registry/mongo/ExperimentDaoTest.java | 30 ++- 6 files changed, 338 insertions(+), 337 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/945161ea/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java index e7791fa..e6f7c4c 100644 --- a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java @@ -23,7 +23,6 @@ package org.apache.airavata.persistance.registry.jpa.impl; import org.apache.airavata.common.logger.AiravataLogger; import org.apache.airavata.common.logger.AiravataLoggerFactory; -import org.apache.airavata.common.utils.AiravataUtils; import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType; import org.apache.airavata.model.workspace.experiment.*; import org.apache.airavata.persistance.registry.jpa.ResourceType; @@ -37,7 +36,6 @@ import org.apache.airavata.registry.cpi.RegistryModelType; import org.apache.airavata.registry.cpi.ResultOrderType; import org.apache.airavata.registry.cpi.utils.Constants; -import java.sql.Timestamp; import java.util.*; import java.util.stream.Collectors; @@ -253,7 +251,7 @@ public class ExperimentRegistry { try { TaskDetails taskDetails = experimentDao.getTaskDetail((String) ids.getTopLevelIdentifier()); for (JobDetails jobDetails : taskDetails.getJobDetailsList()) { - if (jobDetails.getJobId().equals((String) ids.getSecondLevelIdentifier())) { + if (jobDetails.getJobId().equals(ids.getSecondLevelIdentifier())) { jobDetails.setApplicationStatus(status); experimentDao.updateTaskDetail(taskDetails); return; @@ -512,94 +510,26 @@ public class ExperimentRegistry { } } - //Todo public String addErrorDetails(ErrorDetails error, Object id) throws RegistryException { try { - ErrorDetailResource errorResource = null; - ExperimentResource experiment; - TaskDetailResource taskDetail; - WorkflowNodeDetailResource workflowNode; - // figure out the id is an experiment, node task or job - if (id instanceof String) { - // FIXME : for .12 we only saveExperiment task related errors -// if (isExperimentExist((String) id)) { -// experiment = gatewayResource.getExperiment((String) id); -// errorResource = (ErrorDetailResource) experiment.create(ResourceType.ERROR_DETAIL); -// } else if (isWFNodeExist((String) id)) { -// experiment = (ExperimentResource) gatewayResource.create(ResourceType.EXPERIMENT); -// workflowNode = experiment.getWorkflowNode((String) id); -// errorResource = (ErrorDetailResource) workflowNode.create(ResourceType.ERROR_DETAIL); -// errorResource.setExperimentResource(workflowNode.getExperimentResource()); -// } else - if (isTaskDetailExist((String) id)) { - experiment = (ExperimentResource) gatewayResource.create(ResourceType.EXPERIMENT); - workflowNode = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL); - taskDetail = workflowNode.getTaskDetail((String) id); - errorResource = (ErrorDetailResource) taskDetail.create(ResourceType.ERROR_DETAIL); - if (error.getErrorId() != null && !error.getErrorId().equals(experimentModelConstants.DEFAULT_ID)) { - List<ErrorDetailResource> errorDetailList = taskDetail.getErrorDetailList(); - if (errorDetailList != null && !errorDetailList.isEmpty()) { - for (ErrorDetailResource errorDetailResource : errorDetailList) { - if (errorDetailResource.getErrorId() == Integer.parseInt(error.getErrorId())) { - errorResource = errorDetailResource; - } - } - } - } - errorResource.setTaskDetailResource(taskDetail); - errorResource.setNodeDetail(taskDetail.getWorkflowNodeDetailResource()); - errorResource.setExperimentResource(taskDetail.getWorkflowNodeDetailResource().getExperimentResource()); - } else { -// logger.error("The id provided is not an experiment id or a workflow id or a task id.."); - } + // FIXME : for .12 we only saveExperiment task related errors + if(id instanceof String){ + TaskDetails taskDetails = experimentDao.getTaskDetail((String) id); + taskDetails.getErrors().add(error); + experimentDao.updateTaskDetail(taskDetails); + return (String) id; } else if (id instanceof CompositeIdentifier) { CompositeIdentifier cid = (CompositeIdentifier) id; - if (isJobDetailExist(cid)) { - experiment = (ExperimentResource) gatewayResource.create(ResourceType.EXPERIMENT); - workflowNode = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL); - taskDetail = workflowNode.getTaskDetail((String) cid.getTopLevelIdentifier()); - JobDetailResource jobDetail = taskDetail.getJobDetail((String) cid.getSecondLevelIdentifier()); - errorResource = (ErrorDetailResource) jobDetail.create(ResourceType.ERROR_DETAIL); - if (error.getErrorId() != null && !error.getErrorId().equals(experimentModelConstants.DEFAULT_ID)) { - List<ErrorDetailResource> errorDetailList = taskDetail.getErrorDetailList(); - if (errorDetailList != null && !errorDetailList.isEmpty()) { - for (ErrorDetailResource errorDetailResource : errorDetailList) { - if (errorDetailResource.getErrorId() == Integer.parseInt(error.getErrorId())) { - errorResource = errorDetailResource; - } - } - } + TaskDetails taskDetails = experimentDao.getTaskDetail((String) cid.getTopLevelIdentifier()); + for(JobDetails jobDetails: taskDetails.getJobDetailsList()){ + if(jobDetails.getJobId().equals(cid.getSecondLevelIdentifier())){ + jobDetails.getErrors().add(error); + experimentDao.updateTaskDetail(taskDetails); + return (String) cid.getSecondLevelIdentifier(); } - errorResource.setTaskDetailResource(taskDetail); - errorResource.setNodeDetail(taskDetail.getWorkflowNodeDetailResource()); - errorResource.setExperimentResource(taskDetail.getWorkflowNodeDetailResource().getExperimentResource()); - } else { - logger.error("The id provided is not a job in the system.."); } } else { -// logger.error("The id provided is not an experiment id or a workflow id or a task id or a composite " + -// "identifier for job.."); - } - if (errorResource != null) { - errorResource.setCreationTime(AiravataUtils.getTime(error.getCreationTime())); - errorResource.setActualErrorMsg(error.getActualErrorMessage()); - errorResource.setUserFriendlyErrorMsg(error.getUserFriendlyMessage()); - if (error.getErrorCategory() != null) { - errorResource.setErrorCategory(error.getErrorCategory().toString()); - } - errorResource.setTransientPersistent(error.isTransientOrPersistent()); - if (error.getCorrectiveAction() != null) { - errorResource.setCorrectiveAction(error.getCorrectiveAction().toString()); - } else { - errorResource.setCorrectiveAction(CorrectiveAction.CONTACT_SUPPORT.toString()); - } - if (error.getActionableGroup() != null) { - errorResource.setActionableGroup(error.getActionableGroup().toString()); - } else { - errorResource.setActionableGroup(ActionableGroup.GATEWAYS_ADMINS.toString()); - } - errorResource.save(); - return String.valueOf(errorResource.getErrorId()); + logger.error("Unsupported data type..."); } } catch (Exception e) { logger.error("Unable to add error details...", e); @@ -729,7 +659,6 @@ public class ExperimentRegistry { } } - //Todo /** * Method to getExperiment matching experiment list * @@ -739,58 +668,9 @@ public class ExperimentRegistry { * @throws RegistryException */ public List<Experiment> getExperimentList(String fieldName, Object value) throws RegistryException { - List<Experiment> experiments = new ArrayList(); - try { - if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.USER_NAME)) { - WorkerResource resource = (WorkerResource) gatewayResource.create(ResourceType.GATEWAY_WORKER); - resource.setUser((String) value); - List<ExperimentResource> resources = resource.getExperiments(); - for (ExperimentResource experimentResource : resources) { - Experiment experiment = ThriftDataModelConversion.getExperiment(experimentResource); - experiments.add(experiment); - } - return experiments; - } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.PROJECT_ID)) { - ProjectResource project = workerResource.getProject((String) value); - List<ExperimentResource> resources = project.getExperiments(); - for (ExperimentResource resource : resources) { - Experiment experiment = ThriftDataModelConversion.getExperiment(resource); - experiments.add(experiment); - } - return experiments; - } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.GATEWAY)) { - List<ExperimentResource> resources = gatewayResource.getExperiments(); - for (ExperimentResource resource : resources) { - Experiment experiment = ThriftDataModelConversion.getExperiment(resource); - experiments.add(experiment); - } - return experiments; - } - if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.WORKFLOW_NODE_LIST)) { - if (value instanceof List<?>) { - return getExperimentList(fieldName, ((List<?>) value).get(0)); - } else if (value instanceof WorkflowNodeDetails) { - //WorkflowNodeDetailResource nodeDetailResource = getWorkflowNodeDetailResource(((WorkflowNodeDetails) value).getNodeInstanceId()); -// if (nodeDetailResource != null) { -// return Arrays.asList(new Experiment[]{ThriftDataModelConversion -// .getExperiment(nodeDetailResource -// .getExperimentResource())}); -// } - } else { - logger.error("Unsupported field value to retrieve workflow node detail list..."); - } - - } else { - logger.error("Unsupported field name to retrieve experiment list..."); - } - } catch (Exception e) { - logger.error("Error while getting experiment list...", e); - throw new RegistryException(e); - } - return experiments; + return getExperimentList(fieldName, value, -1, -1, null, null); } - //Todo /** * Method to getExperiment matching experiment list with pagination and ordering * @@ -806,28 +686,32 @@ public class ExperimentRegistry { public List<Experiment> getExperimentList(String fieldName, Object value, int limit, int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException { List<Experiment> experiments = new ArrayList(); + Map<String, String> filters = new HashMap(); try { if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.USER_NAME)) { - WorkerResource resource = (WorkerResource) gatewayResource.create(ResourceType.GATEWAY_WORKER); - resource.setUser((String) value); - List<ExperimentResource> resources = resource.getExperiments(limit, offset, - orderByIdentifier, resultOrderType); - for (ExperimentResource experimentResource : resources) { - Experiment experiment = ThriftDataModelConversion.getExperiment(experimentResource); - experiments.add(experiment); - } - return experiments; + filters.put(fieldName, (String)value); + return experimentDao.searchExperiments(filters, limit, offset, orderByIdentifier, resultOrderType); } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.PROJECT_ID)) { - ProjectResource project = workerResource.getProject((String) value); - List<ExperimentResource> resources = project.getExperiments(limit, offset, - Constants.FieldConstants.ExperimentConstants.CREATION_TIME, ResultOrderType.DESC); - for (ExperimentResource resource : resources) { - Experiment experiment = ThriftDataModelConversion.getExperiment(resource); - experiments.add(experiment); + filters.put(fieldName, (String)value); + return experimentDao.searchExperiments(filters, limit, offset, orderByIdentifier, resultOrderType); + } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.GATEWAY)) { + filters.put(fieldName, (String)value); + return experimentDao.searchExperiments(filters, limit, offset, orderByIdentifier, resultOrderType); + } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.WORKFLOW_NODE_LIST)) { + if (value instanceof List<?>) { + return getExperimentList(fieldName, ((List<?>) value).get(0)); + } else if (value instanceof WorkflowNodeDetails) { + List<Experiment> experimentList = new ArrayList(); + experimentList.add(experimentDao.getParentExperimentOfWFNode( + ((WorkflowNodeDetails)value).getNodeInstanceId()) + ); + } else { + logger.error("Unsupported field value to retrieve workflow node detail list..."); } - return experiments; + + } else { + logger.error("Unsupported field name to retrieve experiment list..."); } - logger.error("Unsupported field name to retrieve experiment list..."); } catch (Exception e) { logger.error("Error while getting experiment list...", e); throw new RegistryException(e); @@ -846,13 +730,9 @@ public class ExperimentRegistry { if (value instanceof List<?>) { return getWFNodeDetails(fieldName, ((List<?>) value).get(0)); } else if (value instanceof TaskDetails) { - //Fixme -// TaskDetailResource taskDetailResource = getTaskDetailResource(((TaskDetails) value).getTaskId()); -// if (taskDetailResource != null) { -// return Arrays.asList(new WorkflowNodeDetails[]{ThriftDataModelConversion -// .getWorkflowNodeDetails(taskDetailResource -// .getWorkflowNodeDetailResource())}); -// } + List<WorkflowNodeDetails> workflowNodeDetailsList = new ArrayList(); + workflowNodeDetailsList.add(experimentDao.getParentWFNodeOfTask(((TaskDetails)value).getTaskId())); + return workflowNodeDetailsList; } else { logger.error("Unsupported field value to retrieve workflow node detail list..."); } @@ -1269,27 +1149,14 @@ public class ExperimentRegistry { } } - //Todo public List<String> getExperimentIds(String fieldName, Object value) throws RegistryException { List<String> expIDs = new ArrayList(); try { - if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.GATEWAY)) { - if (gatewayResource == null) { - logger.error("You should use an existing gateway in order to retrieve experiments.."); - return null; - } else { - List<ExperimentResource> resources = gatewayResource.getExperiments(); - for (ExperimentResource resource : resources) { - String expID = resource.getExpID(); - expIDs.add(expID); - } - } - } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.USER_NAME)) { - List<ExperimentResource> resources = workerResource.getExperiments(); - expIDs.addAll(resources.stream().map(ExperimentResource::getExpID).collect(Collectors.toList())); - } else if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.PROJECT_ID)) { - List<ExperimentResource> resources = workerResource.getExperiments(); - expIDs.addAll(resources.stream().map(ExperimentResource::getExpID).collect(Collectors.toList())); + if (fieldName.equals(Constants.FieldConstants.ExperimentConstants.GATEWAY) + || fieldName.equals(Constants.FieldConstants.ExperimentConstants.USER_NAME) + || fieldName.equals(Constants.FieldConstants.ExperimentConstants.PROJECT_ID)) { + getExperimentList(fieldName, value).stream().forEach(ex->expIDs.add(ex.getExperimentId())); + return expIDs; } } catch (Exception e) { logger.error("Error while retrieving experiment ids..", e); @@ -1326,7 +1193,6 @@ public class ExperimentRegistry { return transferIds; } - public void removeExperiment(String experimentId) throws RegistryException { try { Experiment experiment = new Experiment(); @@ -1721,10 +1587,14 @@ public class ExperimentRegistry { experimentList.stream().forEach(experiment->{ ExperimentSummary expSummary = new ExperimentSummary(); expSummary.setExperimentId(experiment.getExperimentId()); + expSummary.setProjectId(experiment.getProjectId()); expSummary.setName(experiment.getName()); expSummary.setDescription(experiment.getDescription()); + expSummary.setUserName(experiment.getUserName()); expSummary.setCreationTime(experiment.getCreationTime()); - //Todo + expSummary.setApplicationId(experiment.getApplicationId()); + expSummary.setExperimentStatus(experiment.getExperimentStatus()); + expSummary.setErrors(experiment.getErrors()); experimentSummaries.add(expSummary); }); return experimentSummaries; @@ -1770,4 +1640,4 @@ public class ExperimentRegistry { return false; } } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/945161ea/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java index 928fe64..620c535 100644 --- a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ProjectRegistry.java @@ -21,12 +21,13 @@ 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.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.persistance.registry.jpa.mongo.dao.ProjectDao; +import org.apache.airavata.persistance.registry.jpa.resources.GatewayResource; +import org.apache.airavata.persistance.registry.jpa.resources.UserResource; +import org.apache.airavata.persistance.registry.jpa.resources.WorkerResource; import org.apache.airavata.registry.cpi.RegistryException; import org.apache.airavata.registry.cpi.ResultOrderType; import org.apache.airavata.registry.cpi.utils.Constants; @@ -40,7 +41,11 @@ public class ProjectRegistry { private WorkerResource workerResource; private final static Logger logger = LoggerFactory.getLogger(ProjectRegistry.class); + private ProjectDao projectDao; + public ProjectRegistry(GatewayResource gatewayResource, UserResource user) throws RegistryException { + this.projectDao = new ProjectDao(); + if (!ResourceUtils.isGatewayExist(gatewayResource.getGatewayId())){ this.gatewayResource = gatewayResource; }else { @@ -55,50 +60,17 @@ public class ProjectRegistry { } public String addProject (Project project, String gatewayId) throws RegistryException{ - String projectId; try { if (!ResourceUtils.isUserExist(project.getOwner())){ ResourceUtils.addUser(project.getOwner(), null); } - ProjectResource projectResource = new ProjectResource(); - projectId = getProjectId(project.getName()); - projectResource.setId(projectId); - project.setProjectId(projectId); - projectResource.setName(project.getName()); - projectResource.setDescription(project.getDescription()); - projectResource.setCreationTime(AiravataUtils.getTime(project.getCreationTime())); - GatewayResource gateway = (GatewayResource)ResourceUtils.getGateway(gatewayId); - projectResource.setGateway(gateway); - WorkerResource worker = new WorkerResource(project.getOwner(), workerResource.getGateway()); - projectResource.setWorker(worker); - projectResource.save(); - ProjectUserResource resource = (ProjectUserResource)projectResource.create( - ResourceType.PROJECT_USER); - resource.setProjectId(project.getProjectId()); - 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)projectResource. - create(ResourceType.PROJECT_USER); - pr.setUserName(username); - pr.save(); - } - } + project.setProjectId(getProjectId(project.getName())); + projectDao.createProject(project); + return project.getProjectId(); }catch (Exception e){ logger.error("Error while saving project to registry", e); throw new RegistryException(e); } - return projectId; } private String getProjectId (String projectName){ @@ -108,11 +80,6 @@ public class ProjectRegistry { public void updateProject (Project project, String projectId) throws RegistryException{ try { - ProjectResource existingProject = workerResource.getProject(projectId); - existingProject.setDescription(project.getDescription()); - existingProject.setName(project.getName()); - existingProject.setCreationTime(AiravataUtils.getTime(project.getCreationTime())); -// existingProject.setGateway(gatewayResource); UserResource user = (UserResource)ResourceUtils.getUser(project.getOwner()); if (!gatewayResource.isExists(ResourceType.GATEWAY_WORKER, user.getUserName())){ workerResource = ResourceUtils.addGatewayWorker(gatewayResource, user); @@ -120,31 +87,7 @@ public class ProjectRegistry { workerResource = (WorkerResource)ResourceUtils.getWorker( gatewayResource.getGatewayName(), user.getUserName()); } - WorkerResource worker = new WorkerResource(project.getOwner(), gatewayResource); - existingProject.setWorker(worker); - existingProject.save(); - ProjectUserResource resource = (ProjectUserResource)existingProject.create( - ResourceType.PROJECT_USER); - resource.setProjectId(projectId); - 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(); - } - } + projectDao.updateProject(project); }catch (Exception e){ logger.error("Error while saving project to registry", e); throw new RegistryException(e); @@ -153,15 +96,11 @@ public class ProjectRegistry { public Project getProject (String projectId) throws RegistryException{ try { - ProjectResource project = workerResource.getProject(projectId); - if (project != null){ - return ThriftDataModelConversion.getProject(project); - } + return projectDao.getProject(projectId); }catch (Exception e){ logger.error("Error while retrieving project from registry", e); throw new RegistryException(e); } - return null; } /** @@ -188,23 +127,14 @@ public class ProjectRegistry { */ public List<Project> getProjectList (String fieldName, Object value, int limit, int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException{ - 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; - } + Map<String, String> filters = new HashMap(); + filters.put(fieldName, (String)value); + return projectDao.searchProjects(filters, limit, offset, orderByIdentifier, resultOrderType); }catch (Exception e){ logger.error("Error while retrieving project from registry", e); throw new RegistryException(e); } - return projects; } /** @@ -233,48 +163,23 @@ public class ProjectRegistry { */ public List<Project> searchProjects(Map<String, String> filters, int limit, int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException { - Map<String, String> fil = new HashMap<String, String>(); - if (filters != null && filters.size() != 0){ - List<Project> projects = new ArrayList<Project>(); - try { - for (String field : filters.keySet()){ - if (field.equals(Constants.FieldConstants.ProjectConstants.PROJECT_NAME)){ - fil.put(AbstractResource.ProjectConstants.PROJECT_NAME, filters.get(field)); - }else if (field.equals(Constants.FieldConstants.ProjectConstants.OWNER)){ - fil.put(AbstractResource.ProjectConstants.USERNAME, filters.get(field)); - }else if (field.equals(Constants.FieldConstants.ProjectConstants.DESCRIPTION)){ - fil.put(AbstractResource.ProjectConstants.DESCRIPTION, filters.get(field)); - }else if (field.equals(Constants.FieldConstants.ProjectConstants.GATEWAY_ID)){ - fil.put(AbstractResource.ProjectConstants.GATEWAY_ID, filters.get(field)); - } - } - List<ProjectResource> projectResources = workerResource - .searchProjects(fil, limit, offset, orderByIdentifier, resultOrderType); - if (projectResources != null && !projectResources.isEmpty()){ - for (ProjectResource pr : projectResources){ - projects.add(ThriftDataModelConversion.getProject(pr)); - } - } - return projects; + try { + return projectDao.searchProjects(filters, limit, offset, orderByIdentifier, resultOrderType); }catch (Exception e){ logger.error("Error while retrieving project from registry", e); throw new RegistryException(e); } - } - return null; + } public List<String> getProjectIds (String fieldName, Object value) throws RegistryException{ 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()); - } - } + Map<String, String> filters = new HashMap(); + filters.put(fieldName, (String)value); + projectDao.searchProjects(filters, -1, -1, null, null).stream() + .forEach(pr->projectIds.add(pr.getProjectId())); return projectIds; } }catch (Exception e){ @@ -286,7 +191,9 @@ public class ProjectRegistry { public void removeProject (String projectId) throws RegistryException { try { - workerResource.removeProject(projectId); + Project project = new Project(); + project.setProjectId(projectId); + projectDao.deleteProject(project); } catch (Exception e) { logger.error("Error while removing the project..", e); throw new RegistryException(e); @@ -295,11 +202,10 @@ public class ProjectRegistry { public boolean isProjectExist(String projectId) throws RegistryException { try { - return workerResource.isProjectExists(projectId); + return projectDao.getProject(projectId) != null; } catch (Exception e) { logger.error("Error while retrieving project...", e); throw new RegistryException(e); } } - } http://git-wip-us.apache.org/repos/asf/airavata/blob/945161ea/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/Test.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/Test.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/Test.java index 4f0dcca..4e04940 100644 --- a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/Test.java +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/Test.java @@ -20,7 +20,6 @@ */ package org.apache.airavata.persistance.registry.jpa.mongo; -import org.apache.airavata.common.utils.AiravataUtils; import org.apache.airavata.model.workspace.experiment.Experiment; import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory; import org.apache.airavata.persistance.registry.jpa.mongo.dao.ExperimentDao; @@ -40,7 +39,6 @@ public class Test { private final static Logger logger = LoggerFactory.getLogger(Test.class); public static void main(String[] args) throws RegistryException, IOException { - AiravataUtils.setExecutionAsServer(); Registry registry = RegistryFactory.getDefaultRegistry(); // String experiemtnId = "SLM-Espresso-Stampede_45667ea8-aae3-4a8e-807d-a16312035c35"; // long time1 = System.currentTimeMillis(); http://git-wip-us.apache.org/repos/asf/airavata/blob/945161ea/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ExperimentDao.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ExperimentDao.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ExperimentDao.java index 85375ed..af15716 100644 --- a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ExperimentDao.java +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ExperimentDao.java @@ -47,14 +47,15 @@ public class ExperimentDao{ private ModelConversionHelper modelConversionHelper; private static final String EXPERIMENT_ID = "experiment_id"; - private static final String EXPERIMENT_NAME= "experiment_name"; - private static final String EXPERIMENT_DESCRIPTION = "experiment_description"; + private static final String EXPERIMENT_NAME= "name"; + private static final String EXPERIMENT_DESCRIPTION = "description"; private static final String USER_NAME = "user_name"; private static final String GATEWAY = "gateway_execution_id"; private static final String APPLICATION_ID = "application_id"; private static final String EXPERIMENT_STATUS_STATE = "experiment_status.experiment_state"; private static final String CREATION_TIME = "creation_time"; + //Todo Nested Indexes - Its good if we can get rid of them private static final String WORKFLOW_NODE_ID = "workflow_node_details_list.node_instance_id"; private static final String TASK_ID = "workflow_node_details_list.task_details_list.task_id"; @@ -62,7 +63,7 @@ public class ExperimentDao{ public ExperimentDao(){ collection = MongoUtil.getAiravataRegistry().getCollection(EXPERIMENTS_COLLECTION_NAME); modelConversionHelper = new ModelConversionHelper(); - //collection.dropIndexes(); + collection.dropIndexes(); initIndexes(); } @@ -74,11 +75,11 @@ public class ExperimentDao{ collection.createIndex(new BasicDBObject(WORKFLOW_NODE_ID, 1)); collection.createIndex(new BasicDBObject(TASK_ID, 1)); - //Defining a full-text index on experiment name and experiment description - BasicDBObject object = new BasicDBObject(); - object.put(EXPERIMENT_NAME, "text"); - object.put(EXPERIMENT_DESCRIPTION, "text"); - collection.createIndex (object); +// //Defining a full-text index on experiment name and experiment description +// BasicDBObject object = new BasicDBObject(); +// object.put(EXPERIMENT_NAME, "text"); +// object.put(EXPERIMENT_DESCRIPTION, "text"); +// collection.createIndex (object); } public List<Experiment> getAllExperiments() throws RegistryException{ @@ -153,15 +154,15 @@ public class ExperimentDao{ BasicDBObjectBuilder queryBuilder = BasicDBObjectBuilder.start(); for (String field : filters.keySet()) { if (field.equals(Constants.FieldConstants.ExperimentConstants.EXPERIMENT_NAME)) { - //Fixme This is expensive operation - queryBuilder.add(EXPERIMENT_NAME, "/.*" + filters.get(field) + "/.*"); + queryBuilder.add(EXPERIMENT_NAME, new BasicDBObject( + "$regex", ".*" + filters.get(field) + ".*")); } else if (field.equals(Constants.FieldConstants.ExperimentConstants.USER_NAME)) { queryBuilder.add(USER_NAME, filters.get(field)); } else if (field.equals(Constants.FieldConstants.ExperimentConstants.GATEWAY)) { queryBuilder.add(GATEWAY, filters.get(field)); } else if (field.equals(Constants.FieldConstants.ExperimentConstants.EXPERIMENT_DESC)) { - //Fixme This is expensive operation - queryBuilder.add(EXPERIMENT_DESCRIPTION, "/.*" + filters.get(field) + "/.*"); + queryBuilder.add(EXPERIMENT_DESCRIPTION, new BasicDBObject( + "$regex", ".*" + filters.get(field) + ".*")); } else if (field.equals(Constants.FieldConstants.ExperimentConstants.APPLICATION_ID)) { queryBuilder.add(APPLICATION_ID, filters.get(field)); } else if (field.equals(Constants.FieldConstants.ExperimentConstants.EXPERIMENT_STATUS)) { @@ -218,7 +219,7 @@ public class ExperimentDao{ } public void updateWFNode(WorkflowNodeDetails workflowNodeDetail) throws RegistryException{ - Experiment experiment = getExperimentOfWFNode(workflowNodeDetail.getNodeInstanceId()); + Experiment experiment = getParentExperimentOfWFNode(workflowNodeDetail.getNodeInstanceId()); for(WorkflowNodeDetails wfnd: experiment.getWorkflowNodeDetailsList()){ if(wfnd.getNodeInstanceId().equals(workflowNodeDetail.getNodeInstanceId())){ experiment.getWorkflowNodeDetailsList().remove(wfnd); @@ -230,7 +231,7 @@ public class ExperimentDao{ } public void deleteWFNode(WorkflowNodeDetails workflowNodeDetail) throws RegistryException{ - Experiment experiment = getExperimentOfWFNode(workflowNodeDetail.getNodeInstanceId()); + Experiment experiment = getParentExperimentOfWFNode(workflowNodeDetail.getNodeInstanceId()); for(WorkflowNodeDetails wfnd: experiment.getWorkflowNodeDetailsList()){ if(wfnd.getNodeInstanceId().equals(workflowNodeDetail.getNodeInstanceId())){ experiment.getWorkflowNodeDetailsList().remove(wfnd); @@ -241,7 +242,7 @@ public class ExperimentDao{ } public WorkflowNodeDetails getWFNode(String nodeId) throws RegistryException{ - Experiment experiment = getExperimentOfWFNode(nodeId); + Experiment experiment = getParentExperimentOfWFNode(nodeId); for(WorkflowNodeDetails wfnd: experiment.getWorkflowNodeDetailsList()){ if(wfnd.getNodeInstanceId().equals(nodeId)){ return wfnd; @@ -250,9 +251,8 @@ public class ExperimentDao{ return null; } - public void createTaskDetail(String nodeId, TaskDetails taskDetail) throws RegistryException{ - Experiment experiment = getExperimentOfWFNode(nodeId); + Experiment experiment = getParentExperimentOfWFNode(nodeId); for(WorkflowNodeDetails wfnd: experiment.getWorkflowNodeDetailsList()){ if(wfnd.getNodeInstanceId().equals(nodeId)){ wfnd.getTaskDetailsList().add(taskDetail); @@ -263,7 +263,7 @@ public class ExperimentDao{ } public void updateTaskDetail(TaskDetails taskDetail) throws RegistryException{ - Experiment experiment = getExperimentOfTask(taskDetail.getTaskId()); + Experiment experiment = getParentExperimentOfTask(taskDetail.getTaskId()); for(WorkflowNodeDetails wfnd: experiment.getWorkflowNodeDetailsList()){ for(TaskDetails taskDetails: wfnd.getTaskDetailsList()){ if(taskDetails.getTaskId().equals(taskDetail)){ @@ -277,7 +277,7 @@ public class ExperimentDao{ } public void deleteTaskDetail(TaskDetails taskDetail) throws RegistryException{ - Experiment experiment = getExperimentOfTask(taskDetail.getTaskId()); + Experiment experiment = getParentExperimentOfTask(taskDetail.getTaskId()); for(WorkflowNodeDetails wfnd: experiment.getWorkflowNodeDetailsList()){ for(TaskDetails taskDetails: wfnd.getTaskDetailsList()){ if(taskDetails.getTaskId().equals(taskDetail)){ @@ -290,7 +290,7 @@ public class ExperimentDao{ } public TaskDetails getTaskDetail(String taskId) throws RegistryException{ - Experiment experiment = getExperimentOfTask(taskId); + Experiment experiment = getParentExperimentOfTask(taskId); for(WorkflowNodeDetails wfnd: experiment.getWorkflowNodeDetailsList()){ for(TaskDetails taskDetails: wfnd.getTaskDetailsList()){ if(taskDetails.getTaskId().equals(taskId)){ @@ -303,12 +303,12 @@ public class ExperimentDao{ /** - * Method to getExperiment the parent Experiment of a given workflow node instance id + * Method to get parent Experiment of the given workflow node instance id * @param nodeInstanceId * @return * @throws RegistryException */ - public Experiment getExperimentOfWFNode(String nodeInstanceId) throws RegistryException{ + public Experiment getParentExperimentOfWFNode(String nodeInstanceId) throws RegistryException{ try { DBObject criteria = new BasicDBObject(WORKFLOW_NODE_ID, nodeInstanceId); DBObject doc = collection.findOne(criteria); @@ -324,12 +324,12 @@ public class ExperimentDao{ } /** - * Method to getExperiment the parent experiment of a given task id + * Method to get the parent experiment of the given task id * @param taskId * @return * @throws RegistryException */ - public Experiment getExperimentOfTask(String taskId) throws RegistryException{ + public Experiment getParentExperimentOfTask(String taskId) throws RegistryException{ try { DBObject criteria = new BasicDBObject(TASK_ID, taskId); DBObject doc = collection.findOne(criteria); @@ -343,4 +343,32 @@ public class ExperimentDao{ } return null; } + + /** + * Method to get the parent workflow node of the given task id + * @param taskId + * @return + * @throws RegistryException + */ + public WorkflowNodeDetails getParentWFNodeOfTask(String taskId) throws RegistryException{ + try { + DBObject criteria = new BasicDBObject(TASK_ID, taskId); + DBObject doc = collection.findOne(criteria); + if(doc != null){ + String json = doc.toString(); + Experiment experiment = (Experiment)modelConversionHelper.deserializeObject( + Experiment.class, json); + for(WorkflowNodeDetails wfnd: experiment.getWorkflowNodeDetailsList()){ + for(TaskDetails taskDetails: wfnd.getTaskDetailsList()){ + if(taskDetails.getTaskId().equals(taskId)){ + return wfnd; + } + } + } + } + } catch (IOException e) { + throw new RegistryException(e); + } + return null; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/945161ea/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ProjectDao.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ProjectDao.java b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ProjectDao.java new file mode 100644 index 0000000..e3ea7eb --- /dev/null +++ b/modules/registry/airavata-mongo-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/mongo/dao/ProjectDao.java @@ -0,0 +1,189 @@ +/* + * + * 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.mongo.dao; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.mongodb.*; +import com.mongodb.util.JSON; +import org.apache.airavata.model.workspace.Project; +import org.apache.airavata.persistance.registry.jpa.mongo.conversion.ModelConversionHelper; +import org.apache.airavata.persistance.registry.jpa.mongo.utils.MongoUtil; +import org.apache.airavata.registry.cpi.RegistryException; +import org.apache.airavata.registry.cpi.ResultOrderType; +import org.apache.airavata.registry.cpi.utils.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class ProjectDao { + private final static Logger logger = LoggerFactory.getLogger(ProjectDao.class); + + private static final String PROJECTS_COLLECTION_NAME = "projects"; + private DBCollection collection; + private ModelConversionHelper modelConversionHelper; + + private static final String PROJECT_ID = "project_id"; + private static final String PROJECT_NAME = "name"; + private static final String PROJECT_DESCRIPTION = "description"; + private static final String PROJECT_OWNER = "owner"; + private static final String PROJECT_CREATION_TIME = "creation_time"; + + public ProjectDao(){ + collection = MongoUtil.getAiravataRegistry().getCollection(PROJECTS_COLLECTION_NAME); + modelConversionHelper = new ModelConversionHelper(); + collection.dropIndexes(); + initIndexes(); + } + + /** + * If indexes are already defined this will simply ignore them + */ + private void initIndexes(){ + collection.createIndex(new BasicDBObject(PROJECT_ID, 1), new BasicDBObject("unique", true)); + collection.createIndex(new BasicDBObject(PROJECT_NAME, 1)); + collection.createIndex(new BasicDBObject(PROJECT_OWNER, 1)); + collection.createIndex(new BasicDBObject(PROJECT_DESCRIPTION, 1)); + collection.createIndex(new BasicDBObject(PROJECT_CREATION_TIME, 1)); + } + + public List<Project> getAllProjects() throws RegistryException{ + List<Project> projectList = new ArrayList(); + DBCursor cursor = collection.find(); + for(DBObject document: cursor){ + try { + projectList.add((Project) modelConversionHelper.deserializeObject( + Project.class, document.toString())); + } catch (IOException e) { + throw new RegistryException(e); + } + } + return projectList; + } + + public void createProject(Project project) throws RegistryException{ + try { + WriteResult result = collection.insert((DBObject) JSON.parse( + modelConversionHelper.serializeObject(project))); + logger.debug("No of inserted results "+ result.getN()); + } catch (JsonProcessingException e) { + throw new RegistryException(e); + } + } + + /** + * The following operation replaces the document with item equal to + * the given project id. The newly replaced document will only + * contain the the _id field and the fields in the replacement document. + * @param project + * @throws org.apache.airavata.registry.cpi.RegistryException + */ + public void updateProject(Project project) throws RegistryException{ + try { + DBObject query = BasicDBObjectBuilder.start().add( + PROJECT_ID, project.getProjectId()).get(); + WriteResult result = collection.update(query, (DBObject) JSON.parse( + modelConversionHelper.serializeObject(project))); + logger.debug("No of updated results "+ result.getN()); + } catch (JsonProcessingException e) { + throw new RegistryException(e); + } + } + + public void deleteProject(Project project) throws RegistryException{ + DBObject query = BasicDBObjectBuilder.start().add( + PROJECT_ID, project.getProjectId()).get(); + WriteResult result = collection.remove(query); + logger.debug("No of removed experiments " + result.getN()); + } + + public Project getProject(String projectId) throws RegistryException{ + try { + DBObject criteria = new BasicDBObject(PROJECT_ID, projectId); + DBObject doc = collection.findOne(criteria); + if(doc != null){ + String json = doc.toString(); + return (Project)modelConversionHelper.deserializeObject( + Project.class, json); + } + } catch (IOException e) { + throw new RegistryException(e); + } + return null; + } + + public List<Project> searchProjects(Map<String, String> filters, int limit, + int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException{ + List<Project> projectList = new ArrayList(); + BasicDBObjectBuilder queryBuilder = BasicDBObjectBuilder.start(); + for (String field : filters.keySet()) { +// if (field.equals(Constants.FieldConstants.ProjectConstants.PROJECT_NAME)){ +// fil.put(AbstractResource.ProjectConstants.PROJECT_NAME, filters.get(field)); +// }else if (field.equals(Constants.FieldConstants.ProjectConstants.OWNER)){ +// fil.put(AbstractResource.ProjectConstants.USERNAME, filters.get(field)); +// }else if (field.equals(Constants.FieldConstants.ProjectConstants.DESCRIPTION)){ +// fil.put(AbstractResource.ProjectConstants.DESCRIPTION, filters.get(field)); +// }else if (field.equals(Constants.FieldConstants.ProjectConstants.GATEWAY_ID)){ +// fil.put(AbstractResource.ProjectConstants.GATEWAY_ID, filters.get(field)); +// } + } + + //handling pagination and ordering. ordering is allowed only on PROJECT_CREATION_TIME + DBCursor cursor; + if(limit > 0 && offset >= 0) { + if(orderByIdentifier != null && orderByIdentifier.equals( + Constants.FieldConstants.ProjectConstants.CREATION_TIME)){ + if(resultOrderType.equals(ResultOrderType.ASC)) { + cursor = collection.find(queryBuilder.get()).sort(new BasicDBObject(PROJECT_CREATION_TIME, 1)) + .skip(offset).limit(limit); + }else{ + cursor = collection.find(queryBuilder.get()).sort(new BasicDBObject(PROJECT_CREATION_TIME, -1)) + .skip(offset).limit(limit); + } + }else { + cursor = collection.find(queryBuilder.get()).skip(offset).limit(limit); + } + }else{ + if(resultOrderType != null && resultOrderType.equals( + Constants.FieldConstants.ProjectConstants.CREATION_TIME)){ + if(resultOrderType.equals(ResultOrderType.ASC)) { + cursor = collection.find(queryBuilder.get()).sort(new BasicDBObject(PROJECT_CREATION_TIME, 1)); + }else{ + cursor = collection.find(queryBuilder.get()).sort(new BasicDBObject(PROJECT_CREATION_TIME, -1)); + } + }else { + cursor = collection.find(queryBuilder.get()); + } + } + for(DBObject document: cursor){ + try { + projectList.add((Project) modelConversionHelper.deserializeObject( + Project.class, document.toString())); + } catch (IOException e) { + throw new RegistryException(e); + } + } + return projectList; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/945161ea/modules/registry/airavata-mongo-registry/src/test/java/org/apache/airavata/persistence/registry/mongo/ExperimentDaoTest.java ---------------------------------------------------------------------- diff --git a/modules/registry/airavata-mongo-registry/src/test/java/org/apache/airavata/persistence/registry/mongo/ExperimentDaoTest.java b/modules/registry/airavata-mongo-registry/src/test/java/org/apache/airavata/persistence/registry/mongo/ExperimentDaoTest.java index 6b4d5cf..1def159 100644 --- a/modules/registry/airavata-mongo-registry/src/test/java/org/apache/airavata/persistence/registry/mongo/ExperimentDaoTest.java +++ b/modules/registry/airavata-mongo-registry/src/test/java/org/apache/airavata/persistence/registry/mongo/ExperimentDaoTest.java @@ -22,7 +22,6 @@ package org.apache.airavata.persistence.registry.mongo; import com.mongodb.MongoClient; import junit.framework.Assert; -import org.apache.airavata.common.utils.AiravataUtils; import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType; import org.apache.airavata.model.workspace.experiment.*; import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory; @@ -31,6 +30,8 @@ import org.apache.airavata.persistance.registry.jpa.mongo.utils.MongoUtil; import org.apache.airavata.registry.cpi.Registry; import org.apache.airavata.registry.cpi.RegistryException; import org.apache.airavata.registry.cpi.RegistryModelType; +import org.apache.airavata.registry.cpi.ResultOrderType; +import org.apache.airavata.registry.cpi.utils.Constants; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -40,7 +41,9 @@ import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; public class ExperimentDaoTest { @@ -112,7 +115,6 @@ public class ExperimentDaoTest { @Test public void test() throws RegistryException, IOException { - AiravataUtils.setExecutionAsServer(); Registry registry = RegistryFactory.getDefaultRegistry(); MongoUtil.dropAiravataRegistry(); @@ -149,7 +151,6 @@ public class ExperimentDaoTest { // long time2 = System.currentTimeMillis(); // System.out.println(time2-time1); // Assert.assertNotNull(experiment); - AiravataUtils.setExecutionAsServer(); ExperimentDao experimentDao = new ExperimentDao(); BufferedReader reader = new BufferedReader(new FileReader("/home/supun/Downloads/WORKFLOW_NODE_DETAIL.csv")); @@ -159,7 +160,7 @@ public class ExperimentDaoTest { long time1 = System.currentTimeMillis(); while(temp != null && !temp.isEmpty()){ try{ - Experiment experiment = experimentDao.getExperimentOfWFNode(temp.trim()); + Experiment experiment = experimentDao.getParentExperimentOfWFNode(temp.trim()); if(experiment != null) { System.out.println(i + " :" + experiment.getExperimentId()); count++; @@ -190,7 +191,6 @@ public class ExperimentDaoTest { // AiravataUtils.setExecutionAsServer(); // Registry registry = RegistryFactory.getDefaultRegistry(); // MongoUtil.dropAiravataRegistry(); - AiravataUtils.setExecutionAsServer(); ExperimentDao experimentDao = new ExperimentDao(); BufferedReader reader = new BufferedReader(new FileReader("/home/supun/Downloads/TASK_DETAIL.csv")); @@ -200,7 +200,7 @@ public class ExperimentDaoTest { long time1 = System.currentTimeMillis(); while(temp != null && !temp.isEmpty()){ try{ - Experiment experiment = experimentDao.getExperimentOfTask(temp.trim()); + Experiment experiment = experimentDao.getParentExperimentOfTask(temp.trim()); if(experiment != null) { //System.out.println(i + " :" + experiment.getExperimentId()); count++; @@ -224,7 +224,6 @@ public class ExperimentDaoTest { String nodeId = "tempNode_758b52ba-091b-43a5-a7b7-4c3a239c5d1e"; String newNodeId = "newNode_758b52ba-091b-43a5-a7b7-4c3a2325d1e"; String expId = "AlamoTest3_3965f4e2-0213-4434-9c3f-fe898b018666"; - AiravataUtils.setExecutionAsServer(); ExperimentDao experimentDao = new ExperimentDao(); WorkflowNodeDetails wfNode = experimentDao.getWFNode("newNode_758b52ba-091b-43a5-a7b7-4c3a239c5d1e"); Assert.assertTrue(wfNode.getNodeInstanceId().equals("newNode_758b52ba-091b-43a5-a7b7-4c3a239c5d1e")); @@ -250,8 +249,7 @@ public class ExperimentDaoTest { @Test public void testTask() throws RegistryException { - String taskId = "tempNode_f43e1a37-5aec-4061-ae15-111a050b98e0"; - AiravataUtils.setExecutionAsServer(); + String taskId = "tempNode_58e1b2e4-f7d6-4543-9281-43dcb58e2c1a"; ExperimentDao experimentDao = new ExperimentDao(); TaskDetails taskDetails = experimentDao.getTaskDetail(taskId); Assert.assertTrue(taskDetails.getTaskId().equals(taskId)); @@ -261,8 +259,20 @@ public class ExperimentDaoTest { taskDetails = experimentDao.getTaskDetail(taskId); Assert.assertTrue(taskDetails.getTaskId().equals(taskId)); - String expid = "AlamoTest1_6107d1f0-d64e-4690-8686-71ce87c4ad24"; + String expid = "alamotest2_5420547e-877a-4a9c-8752-377c2806906c"; Experiment experiment = experimentDao.getExperiment(expid); System.out.println(); } + + @Test + public void testSearch() throws RegistryException{ + Map<String, String> filters = new HashMap(); + filters.put(Constants.FieldConstants.ExperimentConstants.USER_NAME, "Eroma123"); + filters.put(Constants.FieldConstants.ExperimentConstants.EXPERIMENT_DESC, "Test"); + List<Experiment> result = experimentDao.searchExperiments( + filters, 10, 2, Constants.FieldConstants.ExperimentConstants.CREATION_TIME, ResultOrderType.DESC); + Assert.assertNotNull(result); + Assert.assertTrue(result.size()==10); + Assert.assertTrue(result.get(0).getCreationTime() > result.get(9).getCreationTime()); + } } \ No newline at end of file
