updating getting started guide and fixing some sharing issues
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/273d074a Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/273d074a Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/273d074a Branch: refs/heads/develop Commit: 273d074ace42f554ca727dd044ee342c917cac29 Parents: b85d3db Author: scnakandala <supun.nakand...@gmail.com> Authored: Mon Oct 17 18:41:41 2016 -0400 Committer: scnakandala <supun.nakand...@gmail.com> Committed: Mon Oct 17 18:41:41 2016 -0400 ---------------------------------------------------------------------- .../server/handler/AiravataServerHandler.java | 234 +++++------ .../migrator/airavata/AiravataDataMigrator.java | 6 +- .../registry/db/entities/EntityEntity.java | 14 + .../db/repositories/AbstractRepository.java | 4 +- .../db/repositories/EntityRepository.java | 21 +- .../repositories/GroupMembershipRepository.java | 4 +- .../db/repositories/SharingRepository.java | 2 +- .../db/repositories/UserGroupRepository.java | 2 +- .../db/repositories/UserRepository.java | 2 +- .../sharing/registry/db/utils/DBConstants.java | 1 + .../registry/db/utils/DatabaseCreator.java | 4 +- .../sharing/registry/server/ServerMain.java | 12 +- .../server/SharingRegistryServerHandler.java | 27 +- .../main/resources/sharing-registry-derby.sql | 1 + .../main/resources/sharing-registry-mysql.sql | 1 + .../SharingRegistryServerHandlerTest.java | 14 +- .../registry/SharingRegistryServiceTest.java | 233 ++++++++++- .../sharing/registry/models/Entity.java | 138 ++++++- .../registry/models/EntitySearchField.java | 13 +- .../service/cpi/SharingRegistryService.java | 392 +++++++++---------- .../sharing-service-docs/api-docs/index.html | 4 +- .../api-docs/sharing_cpi.html | 24 +- .../api-docs/sharing_models.html | 19 +- .../sharing-service-docs/index.html | 270 ++++++++++++- .../thrift_models/sharing_cpi.thrift | 16 +- .../thrift_models/sharing_models.thrift | 14 +- 26 files changed, 1029 insertions(+), 443 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/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 36770ea..5570157 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 @@ -123,7 +123,7 @@ public class AiravataServerHandler implements Airavata.Iface { user.setDomainId(domain.domainId); user.setUserId(ServerSettings.getDefaultUser()+"@"+ServerSettings.getDefaultUserGateway()); user.setUserName(ServerSettings.getDefaultUser()); - sharingRegistryServerHandler.registerUser(user); + sharingRegistryServerHandler.createUser(user); //Creating Entity Types for each domain EntityType entityType = new EntityType(); @@ -671,7 +671,7 @@ public class AiravataServerHandler implements Airavata.Iface { entity.setName(project.getName()); entity.setDescription(project.getDescription()); - sharingRegistryServerHandler.registerEntity(entity); + sharingRegistryServerHandler.createEntity(entity); } logger.debug("Airavata created project with project Id : " + projectId + " for gateway Id : " + gatewayId); @@ -808,7 +808,7 @@ public class AiravataServerHandler implements Airavata.Iface { @Override @SecurityCheck public List<Project> getUserProjects(AuthzToken authzToken, String gatewayId, String userName, - int limit, int offset) + int limit, int offset) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { try { if (ServerSettings.isEnableSharing()){ @@ -998,7 +998,7 @@ public class AiravataServerHandler implements Airavata.Iface { @Override @SecurityCheck public List<ExperimentModel> getUserExperiments(AuthzToken authzToken, String gatewayId, String userName, int limit, - int offset) throws InvalidRequestException, + int offset) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { try { return getRegistryServiceClient().getUserExperiments(gatewayId, userName, limit, offset); @@ -1049,7 +1049,7 @@ public class AiravataServerHandler implements Airavata.Iface { entity.setName(experiment.getExperimentName()); entity.setDescription(experiment.getDescription()); - sharingRegistryServerHandler.registerEntity(entity); + sharingRegistryServerHandler.createEntity(entity); } ExperimentStatusChangeEvent event = new ExperimentStatusChangeEvent(ExperimentState.CREATED, @@ -1245,7 +1245,7 @@ public class AiravataServerHandler implements Airavata.Iface { RegistryService.Client regClient = getRegistryServiceClient(); ExperimentModel experimentModel = regClient.getExperiment(airavataExperimentId); if(ServerSettings.isEnableSharing() && !authzToken.getClaimsMap().get(org.apache.airavata.common.utils.Constants.USER_NAME).equals(experimentModel.getUserName()) - || !authzToken.getClaimsMap().get(org.apache.airavata.common.utils.Constants.GATEWAY_ID).equals(experimentModel.getGatewayId())){ + || !authzToken.getClaimsMap().get(org.apache.airavata.common.utils.Constants.GATEWAY_ID).equals(experimentModel.getGatewayId())){ try { String gatewayId = authzToken.getClaimsMap().get(Constants.GATEWAY_ID); String userId = authzToken.getClaimsMap().get(Constants.USER_NAME); @@ -1567,9 +1567,9 @@ public class AiravataServerHandler implements Airavata.Iface { existingExperiment.getErrors().clear(); } if(existingExperiment.getUserConfigurationData() != null && existingExperiment.getUserConfigurationData() - .getComputationalResourceScheduling() != null){ + .getComputationalResourceScheduling() != null){ String compResourceId = existingExperiment.getUserConfigurationData() - .getComputationalResourceScheduling().getResourceHostId(); + .getComputationalResourceScheduling().getResourceHostId(); ComputeResourceDescription computeResourceDescription = regClient.getComputeResource(compResourceId); if(!computeResourceDescription.isEnabled()){ @@ -1589,7 +1589,7 @@ public class AiravataServerHandler implements Airavata.Iface { entity.setName(existingExperiment.getExperimentName()); entity.setDescription(existingExperiment.getDescription()); - sharingRegistryServerHandler.registerEntity(entity); + sharingRegistryServerHandler.createEntity(entity); } return expId; @@ -2127,7 +2127,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public String registerComputeResource(AuthzToken authzToken, ComputeResourceDescription computeResourceDescription) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().registerComputeResource(computeResourceDescription); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error("Error while saving compute resource...", e); @@ -2149,7 +2149,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public ComputeResourceDescription getComputeResource(AuthzToken authzToken, String computeResourceId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().getComputeResource(computeResourceId); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(computeResourceId, "Error while retrieving compute resource...", e); @@ -2193,7 +2193,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public boolean updateComputeResource(AuthzToken authzToken, String computeResourceId, ComputeResourceDescription computeResourceDescription) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().updateComputeResource(computeResourceId, computeResourceDescription); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(computeResourceId, "Error while updating compute resource...", e); @@ -2215,7 +2215,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public boolean deleteComputeResource(AuthzToken authzToken, String computeResourceId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().deleteComputeResource(computeResourceId); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(computeResourceId, "Error while deleting compute resource...", e); @@ -2351,7 +2351,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public String addLocalSubmissionDetails(AuthzToken authzToken, String computeResourceId, int priorityOrder, LOCALSubmission localSubmission) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().addLocalSubmissionDetails(computeResourceId, priorityOrder, localSubmission); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(computeResourceId, "Error while adding job submission interface to resource compute resource...", e); @@ -2374,7 +2374,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public boolean updateLocalSubmissionDetails(AuthzToken authzToken, String jobSubmissionInterfaceId, LOCALSubmission localSubmission) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().updateLocalSubmissionDetails(jobSubmissionInterfaceId, localSubmission); } catch (Exception e) { logger.error(jobSubmissionInterfaceId, "Error while adding job submission interface to resource compute resource...", e); @@ -2415,7 +2415,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public String addSSHJobSubmissionDetails(AuthzToken authzToken, String computeResourceId, int priorityOrder, SSHJobSubmission sshJobSubmission) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().addSSHJobSubmissionDetails(computeResourceId, priorityOrder, sshJobSubmission); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(computeResourceId, "Error while adding job submission interface to resource compute resource...", e); @@ -2511,19 +2511,19 @@ public class AiravataServerHandler implements Airavata.Iface { @Override @SecurityCheck - public String addUNICOREJobSubmissionDetails(AuthzToken authzToken, String computeResourceId, int priorityOrder, + public String addUNICOREJobSubmissionDetails(AuthzToken authzToken, String computeResourceId, int priorityOrder, UnicoreJobSubmission unicoreJobSubmission) - throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { - return getRegistryServiceClient().addUNICOREJobSubmissionDetails(computeResourceId, priorityOrder, unicoreJobSubmission); - } catch (ApplicationSettingsException | RegistryServiceException e) { - logger.error("Error while adding job submission interface to resource compute resource...", e); - AiravataSystemException exception = new AiravataSystemException(); - exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR); - exception.setMessage("Error while adding job submission interface to resource compute resource. More info : " + e.getMessage()); - throw exception; - } - } + throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { + try { + return getRegistryServiceClient().addUNICOREJobSubmissionDetails(computeResourceId, priorityOrder, unicoreJobSubmission); + } catch (ApplicationSettingsException | RegistryServiceException e) { + logger.error("Error while adding job submission interface to resource compute resource...", e); + AiravataSystemException exception = new AiravataSystemException(); + exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR); + exception.setMessage("Error while adding job submission interface to resource compute resource. More info : " + e.getMessage()); + throw exception; + } + } @Override @SecurityCheck @@ -2553,7 +2553,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public boolean updateSSHJobSubmissionDetails(AuthzToken authzToken, String jobSubmissionInterfaceId, SSHJobSubmission sshJobSubmission) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().updateSSHJobSubmissionDetails(jobSubmissionInterfaceId, sshJobSubmission); } catch (Exception e) { logger.error(jobSubmissionInterfaceId, "Error while adding job submission interface to resource compute resource...", e); @@ -2617,7 +2617,7 @@ public class AiravataServerHandler implements Airavata.Iface { public String addLocalDataMovementDetails(AuthzToken authzToken, String resourceId, DMType dmType, int priorityOrder, LOCALDataMovement localDataMovement) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().addLocalDataMovementDetails(resourceId, dmType, priorityOrder, localDataMovement); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(resourceId, "Error while adding data movement interface to resource resource...", e); @@ -2640,7 +2640,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public boolean updateLocalDataMovementDetails(AuthzToken authzToken, String dataMovementInterfaceId, LOCALDataMovement localDataMovement) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().updateLocalDataMovementDetails(dataMovementInterfaceId, localDataMovement); } catch (Exception e) { logger.error(dataMovementInterfaceId, "Error while updating local data movement interface..", e); @@ -2682,7 +2682,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public String addSCPDataMovementDetails(AuthzToken authzToken, String resourceId, DMType dmType, int priorityOrder, SCPDataMovement scpDataMovement) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().addSCPDataMovementDetails(resourceId, dmType, priorityOrder, scpDataMovement); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(resourceId, "Error while adding data movement interface to resource compute resource...", e); @@ -2706,7 +2706,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public boolean updateSCPDataMovementDetails(AuthzToken authzToken, String dataMovementInterfaceId, SCPDataMovement scpDataMovement) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().updateSCPDataMovementDetails(dataMovementInterfaceId, scpDataMovement); } catch (Exception e) { logger.error(dataMovementInterfaceId, "Error while adding job submission interface to resource compute resource...", e); @@ -2794,7 +2794,7 @@ public class AiravataServerHandler implements Airavata.Iface { public String addGridFTPDataMovementDetails(AuthzToken authzToken, String computeResourceId, DMType dmType, int priorityOrder, GridFTPDataMovement gridFTPDataMovement) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().addGridFTPDataMovementDetails(computeResourceId, dmType, priorityOrder, gridFTPDataMovement); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(computeResourceId, "Error while adding data movement interface to resource compute resource...", e); @@ -2818,7 +2818,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public boolean updateGridFTPDataMovementDetails(AuthzToken authzToken, String dataMovementInterfaceId, GridFTPDataMovement gridFTPDataMovement) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().updateGridFTPDataMovementDetails(dataMovementInterfaceId, gridFTPDataMovement); } catch (Exception e) { logger.error(dataMovementInterfaceId, "Error while adding job submission interface to resource compute resource...", e); @@ -3035,7 +3035,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public String registerGatewayResourceProfile(AuthzToken authzToken, GatewayResourceProfile gatewayResourceProfile) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().registerGatewayResourceProfile(gatewayResourceProfile); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error("Error while registering gateway resource profile...", e); @@ -3128,7 +3128,7 @@ public class AiravataServerHandler implements Airavata.Iface { public boolean addGatewayComputeResourcePreference(AuthzToken authzToken, String gatewayID, String computeResourceId, ComputeResourcePreference computeResourcePreference) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().addGatewayComputeResourcePreference(gatewayID, computeResourceId, computeResourcePreference); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(gatewayID, "Error while registering gateway resource profile preference...", e); @@ -3166,7 +3166,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public ComputeResourcePreference getGatewayComputeResourcePreference(AuthzToken authzToken, String gatewayID, String computeResourceId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().getGatewayComputeResourcePreference(gatewayID, computeResourceId); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(gatewayID, "Error while reading gateway compute resource preference...", e); @@ -3202,7 +3202,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public List<ComputeResourcePreference> getAllGatewayComputeResourcePreferences(AuthzToken authzToken, String gatewayID) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().getAllGatewayComputeResourcePreferences(gatewayID); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(gatewayID, "Error while reading gateway compute resource preferences...", e); @@ -3255,7 +3255,7 @@ public class AiravataServerHandler implements Airavata.Iface { public boolean updateGatewayComputeResourcePreference(AuthzToken authzToken, String gatewayID, String computeResourceId, ComputeResourcePreference computeResourcePreference) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().updateGatewayComputeResourcePreference(gatewayID, computeResourceId, computeResourcePreference); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(gatewayID, "Error while reading gateway compute resource preference...", e); @@ -3292,7 +3292,7 @@ public class AiravataServerHandler implements Airavata.Iface { @SecurityCheck public boolean deleteGatewayComputeResourcePreference(AuthzToken authzToken, String gatewayID, String computeResourceId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { + try { return getRegistryServiceClient().deleteGatewayComputeResourcePreference(gatewayID, computeResourceId); } catch (ApplicationSettingsException | RegistryServiceException e) { logger.error(gatewayID, "Error while reading gateway compute resource preference...", e); @@ -3627,109 +3627,109 @@ public class AiravataServerHandler implements Airavata.Iface { @Override @SecurityCheck - public List<String> getAllWorkflows(AuthzToken authzToken, String gatewayId) throws InvalidRequestException, - AiravataClientException, AiravataSystemException, AuthorizationException, TException { + public List<String> getAllWorkflows(AuthzToken authzToken, String gatewayId) throws InvalidRequestException, + AiravataClientException, AiravataSystemException, AuthorizationException, TException { try { - return getRegistryServiceClient().getAllWorkflows(gatewayId); - } catch (ApplicationSettingsException | RegistryServiceException e) { - String msg = "Error in retrieving all workflow template Ids."; - logger.error(msg, e); - AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); + return getRegistryServiceClient().getAllWorkflows(gatewayId); + } catch (ApplicationSettingsException | RegistryServiceException e) { + String msg = "Error in retrieving all workflow template Ids."; + logger.error(msg, e); + AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); exception.setMessage(msg+" More info : " + e.getMessage()); throw exception; - } - } + } + } - @Override + @Override @SecurityCheck - public WorkflowModel getWorkflow(AuthzToken authzToken, String workflowTemplateId) - throws InvalidRequestException, AiravataClientException, AuthorizationException, AiravataSystemException, TException { - try { - return getRegistryServiceClient().getWorkflow(workflowTemplateId); - } catch (ApplicationSettingsException | RegistryServiceException e) { - String msg = "Error in retrieving the workflow "+workflowTemplateId+"."; - logger.error(msg, e); - AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); + public WorkflowModel getWorkflow(AuthzToken authzToken, String workflowTemplateId) + throws InvalidRequestException, AiravataClientException, AuthorizationException, AiravataSystemException, TException { + try { + return getRegistryServiceClient().getWorkflow(workflowTemplateId); + } catch (ApplicationSettingsException | RegistryServiceException e) { + String msg = "Error in retrieving the workflow "+workflowTemplateId+"."; + logger.error(msg, e); + AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); exception.setMessage(msg+" More info : " + e.getMessage()); throw exception; - } - } + } + } - @Override + @Override @SecurityCheck - public void deleteWorkflow(AuthzToken authzToken, String workflowTemplateId) - throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { - getRegistryServiceClient().deleteWorkflow(workflowTemplateId); - } catch (ApplicationSettingsException | RegistryServiceException e) { - String msg = "Error in deleting the workflow "+workflowTemplateId+"."; - logger.error(msg, e); - AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); + public void deleteWorkflow(AuthzToken authzToken, String workflowTemplateId) + throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { + try { + getRegistryServiceClient().deleteWorkflow(workflowTemplateId); + } catch (ApplicationSettingsException | RegistryServiceException e) { + String msg = "Error in deleting the workflow "+workflowTemplateId+"."; + logger.error(msg, e); + AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); exception.setMessage(msg+" More info : " + e.getMessage()); throw exception; - } - } + } + } - @Override + @Override @SecurityCheck - public String registerWorkflow(AuthzToken authzToken, String gatewayId, WorkflowModel workflow) - throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { + public String registerWorkflow(AuthzToken authzToken, String gatewayId, WorkflowModel workflow) + throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { try { - return getRegistryServiceClient().registerWorkflow(gatewayId, workflow); - } catch (ApplicationSettingsException | RegistryServiceException e) { - String msg = "Error in registering the workflow "+workflow.getName()+"."; - logger.error(msg, e); - AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); + return getRegistryServiceClient().registerWorkflow(gatewayId, workflow); + } catch (ApplicationSettingsException | RegistryServiceException e) { + String msg = "Error in registering the workflow "+workflow.getName()+"."; + logger.error(msg, e); + AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); exception.setMessage(msg+" More info : " + e.getMessage()); throw exception; - } - } + } + } - @Override + @Override @SecurityCheck - public void updateWorkflow(AuthzToken authzToken, String workflowTemplateId, WorkflowModel workflow) - throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { - getRegistryServiceClient().updateWorkflow(workflowTemplateId, workflow); - } catch (ApplicationSettingsException | RegistryServiceException e) { - String msg = "Error in updating the workflow "+workflow.getName()+"."; - logger.error(msg, e); - AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); + public void updateWorkflow(AuthzToken authzToken, String workflowTemplateId, WorkflowModel workflow) + throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { + try { + getRegistryServiceClient().updateWorkflow(workflowTemplateId, workflow); + } catch (ApplicationSettingsException | RegistryServiceException e) { + String msg = "Error in updating the workflow "+workflow.getName()+"."; + logger.error(msg, e); + AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); exception.setMessage(msg+" More info : " + e.getMessage()); throw exception; - } - } + } + } - @Override + @Override @SecurityCheck - public String getWorkflowTemplateId(AuthzToken authzToken, String workflowName) - throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { - return getRegistryServiceClient().getWorkflowTemplateId(workflowName); - } catch (ApplicationSettingsException | RegistryServiceException e) { - String msg = "Error in retrieving the workflow template id for "+workflowName+"."; - logger.error(msg, e); - AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); + public String getWorkflowTemplateId(AuthzToken authzToken, String workflowName) + throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { + try { + return getRegistryServiceClient().getWorkflowTemplateId(workflowName); + } catch (ApplicationSettingsException | RegistryServiceException e) { + String msg = "Error in retrieving the workflow template id for "+workflowName+"."; + logger.error(msg, e); + AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); exception.setMessage(msg+" More info : " + e.getMessage()); throw exception; - } - } + } + } - @Override + @Override @SecurityCheck - public boolean isWorkflowExistWithName(AuthzToken authzToken, String workflowName) - throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { - try { - return getRegistryServiceClient().isWorkflowExistWithName(workflowName); - } catch (ApplicationSettingsException | RegistryServiceException e) { - String msg = "Error in veriying the workflow for workflow name "+workflowName+"."; - logger.error(msg, e); - AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); + public boolean isWorkflowExistWithName(AuthzToken authzToken, String workflowName) + throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException { + try { + return getRegistryServiceClient().isWorkflowExistWithName(workflowName); + } catch (ApplicationSettingsException | RegistryServiceException e) { + String msg = "Error in veriying the workflow for workflow name "+workflowName+"."; + logger.error(msg, e); + AiravataSystemException exception = new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR); exception.setMessage(msg+" More info : " + e.getMessage()); throw exception; - } - } + } + } /** @@ -3878,11 +3878,11 @@ public class AiravataServerHandler implements Airavata.Iface { if(permissionType.equals(ResourcePermissionType.WRITE)) sharingRegistryServerHandler.getListOfSharedUsers(authzToken.getClaimsMap().get(Constants.GATEWAY_ID), resourceId, authzToken.getClaimsMap().get(Constants.GATEWAY_ID) - + ":WRITE").stream().forEach(u->accessibleUsers.add(u.userId)); + + ":WRITE").stream().forEach(u->accessibleUsers.add(u.userId)); else if(permissionType.equals(ResourcePermissionType.READ)) sharingRegistryServerHandler.getListOfSharedUsers(authzToken.getClaimsMap().get(Constants.GATEWAY_ID), resourceId, authzToken.getClaimsMap().get(Constants.GATEWAY_ID) - + ":READ").stream().forEach(u->accessibleUsers.add(u.userId)); + + ":READ").stream().forEach(u->accessibleUsers.add(u.userId)); return accessibleUsers; } catch (Exception e) { String msg = "Error in getting all accessible users for resource. Resource ID : " + resourceId + " Resource Type : " + resourceType.toString() ; http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java b/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java index e38a760..a8ec19f 100644 --- a/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java +++ b/modules/sharing-registry/sharing-data-migrator/src/main/java/org/apache/airavata/sharing/registry/migrator/airavata/AiravataDataMigrator.java @@ -106,7 +106,7 @@ public class AiravataDataMigrator { user.setDomainId(rs.getString("GATEWAY_ID")); user.setUserName(rs.getString("USER_NAME")); - govRegistryServerHandler.registerUser(user); + govRegistryServerHandler.createUser(user); } //Creating project entries @@ -128,7 +128,7 @@ public class AiravataDataMigrator { Map<String, String> metadata = new HashMap<>(); metadata.put("CREATION_TIME", rs.getDate("CREATION_TIME").toString()); - govRegistryServerHandler.registerEntity(entity); + govRegistryServerHandler.createEntity(entity); } //Creating experiment entries @@ -158,7 +158,7 @@ public class AiravataDataMigrator { metadata.put("GATEWAY_INSTANCE_ID", rs.getString("GATEWAY_INSTANCE_ID")); metadata.put("ARCHIVE", rs.getString("ARCHIVE")); - govRegistryServerHandler.registerEntity(entity); + govRegistryServerHandler.createEntity(entity); } expCatConnection.close(); http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java index 7ee8225..1fbf4f4 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/entities/EntityEntity.java @@ -40,6 +40,7 @@ public class EntityEntity { private String description; private ByteBuffer binaryData; private String fullText; + private Long originalEntityCreationTime; private Long createdTime; private Long updatedTime; @@ -134,6 +135,16 @@ public class EntityEntity { } @Basic + @Column(name = "ORIGINAL_ENTITY_CREATION_TIME") + public Long getOriginalEntityCreationTime() { + return originalEntityCreationTime; + } + + public void setOriginalEntityCreationTime(Long originalEntityCreationTime) { + this.originalEntityCreationTime = originalEntityCreationTime; + } + + @Basic @Column(name = "CREATED_TIME") public Long getCreatedTime() { return createdTime; @@ -167,6 +178,8 @@ public class EntityEntity { if (description != null ? !description.equals(that.description) : that.description != null) return false; if (binaryData.equals(that.binaryData)) return false; if (fullText != null ? !fullText.equals(that.fullText) : that.fullText != null) return false; + if (originalEntityCreationTime != null ? !originalEntityCreationTime.equals(that.originalEntityCreationTime) + : that.originalEntityCreationTime != null) return false; if (createdTime != null ? !createdTime.equals(that.createdTime) : that.createdTime != null) return false; if (updatedTime != null ? !updatedTime.equals(that.updatedTime) : that.updatedTime != null) return false; if (ownerId != null ? !ownerId.equals(that.ownerId) : that.ownerId != null) return false; @@ -181,6 +194,7 @@ public class EntityEntity { result = 31 * result + (description != null ? description.hashCode() : 0); result = 31 * result + (binaryData != null ? binaryData.hashCode() : 0); result = 31 * result + (fullText != null ? fullText.hashCode() : 0); + result = 31 * result + (originalEntityCreationTime != null ? originalEntityCreationTime.hashCode() : 0); result = 31 * result + (createdTime != null ? createdTime.hashCode() : 0); result = 31 * result + (updatedTime != null ? updatedTime.hashCode() : 0); return result; http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/AbstractRepository.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/AbstractRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/AbstractRepository.java index a53a6a2..9f5a706 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/AbstractRepository.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/AbstractRepository.java @@ -121,8 +121,8 @@ public abstract class AbstractRepository<T, E, Id> { return gatewayList; } - private String getSelectQuery(Map<String, String> filters){ - String query = "SELECT p from " + dbEntityGenericClass.getSimpleName() + " as p"; + public String getSelectQuery(Map<String, String> filters){ + String query = "SELECT DISTINCT p from " + dbEntityGenericClass.getSimpleName() + " as p"; if(filters != null && filters.size() != 0){ query += " WHERE "; for(String k : filters.keySet()){ http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java index a762f00..6d60aa9 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/EntityRepository.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.List; +import java.util.Map; public class EntityRepository extends AbstractRepository<Entity, EntityEntity, EntityPK> { private final static Logger logger = LoggerFactory.getLogger(EntityRepository.class); @@ -51,7 +52,7 @@ public class EntityRepository extends AbstractRepository<Entity, EntityEntity, E groupIdString += groupId + "','"; groupIdString = groupIdString.substring(0, groupIdString.length()-2); - String query = "SELECT E FROM " + EntityEntity.class.getSimpleName() + " E, " + SharingEntity.class.getSimpleName() + " S WHERE " + + String query = "SELECT DISTINCT E FROM " + EntityEntity.class.getSimpleName() + " E, " + SharingEntity.class.getSimpleName() + " S WHERE " + "E." + DBConstants.EntityTable.ENTITY_ID + " = S." + DBConstants.SharingTable.ENTITY_ID + " AND " + "E." + DBConstants.EntityTable.DOMAIN_ID + " = S." + DBConstants.SharingTable.DOMAIN_ID + " AND " + "E." + DBConstants.EntityTable.DOMAIN_ID + " = '" + domainId + "' AND " + @@ -63,9 +64,11 @@ public class EntityRepository extends AbstractRepository<Entity, EntityEntity, E query += "E." + DBConstants.EntityTable.NAME + " LIKE '%" + searchCriteria.getValue() + "%' AND "; }else if(searchCriteria.getSearchField().equals(EntitySearchField.DESCRIPTION)){ query += "E." + DBConstants.EntityTable.DESCRIPTION + " LIKE '%" + searchCriteria.getValue() + "%' AND "; + }else if(searchCriteria.getSearchField().equals(EntitySearchField.PERMISSION_TYPE_ID)){ + query += "S." + DBConstants.SharingTable.PERMISSION_TYPE_ID + " = '" + searchCriteria.getValue() + "' AND "; }else if(searchCriteria.getSearchField().equals(EntitySearchField.FULL_TEXT)){ query += "E." + DBConstants.EntityTable.FULL_TEXT + " LIKE '%" + searchCriteria.getValue() + "%' AND "; - }else if(searchCriteria.getSearchField().equals(EntitySearchField.PRRENT_ENTITY_ID)){ + }else if(searchCriteria.getSearchField().equals(EntitySearchField.PARRENT_ENTITY_ID)){ query += "E." + DBConstants.EntityTable.PARENT_ENTITY_ID + " = '" + searchCriteria.getValue() + "' AND "; }else if(searchCriteria.getSearchField().equals(EntitySearchField.CREATED_TIME)){ if(searchCriteria.getSearchCondition().equals(SearchCondition.GTE)){ @@ -84,6 +87,20 @@ public class EntityRepository extends AbstractRepository<Entity, EntityEntity, E query = query.substring(0, query.length() - 5); return select(query, offset, limit); + } + + public String getSelectQuery(Map<String, String> filters){ + String query = "SELECT p from " + EntityEntity.class.getSimpleName() + " as p"; + if(filters != null && filters.size() != 0){ + query += " WHERE "; + for(String k : filters.keySet()){ + query += "p." + k + " = '" + filters.get(k) + "' AND "; + } + query = query.substring(0, query.length()-5); + } + + query += " ORDER BY p."+DBConstants.EntityTable.ORIGINAL_ENTITY_CREATION_TIME+" DESC"; + return query; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java index ccf27cb..087cc72 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/GroupMembershipRepository.java @@ -36,7 +36,7 @@ public class GroupMembershipRepository extends AbstractRepository<GroupMembershi } public List<User> getAllChildUsers(String domainId, String groupId) throws SharingRegistryException { - String queryString = "SELECT U FROM " + UserEntity.class.getSimpleName() + " U, " + GroupMembershipEntity.class.getSimpleName() + String queryString = "SELECT DISTINCT U FROM " + UserEntity.class.getSimpleName() + " U, " + GroupMembershipEntity.class.getSimpleName() + " GM WHERE GM." + DBConstants.GroupMembershipTable.CHILD_ID + " = U." + DBConstants.UserTable.USER_ID + " AND " + "GM." + DBConstants.GroupMembershipTable.DOMAIN_ID + " = U." + DBConstants.UserTable.DOMAIN_ID + " AND " + "GM." + DBConstants.GroupMembershipTable.DOMAIN_ID + "='" + domainId + "' AND "+ @@ -48,7 +48,7 @@ public class GroupMembershipRepository extends AbstractRepository<GroupMembershi } public List<UserGroup> getAllChildGroups(String domainId, String groupId) throws SharingRegistryException { - String queryString = "SELECT G FROM " + UserGroupEntity.class.getSimpleName() + " G, " + GroupMembershipEntity.class.getSimpleName() + String queryString = "SELECT DISTINCT G FROM " + UserGroupEntity.class.getSimpleName() + " G, " + GroupMembershipEntity.class.getSimpleName() + " GM WHERE GM." + DBConstants.GroupMembershipTable.CHILD_ID + " = G." + DBConstants.UserGroupTable.GROUP_ID + " AND " + "GM." + DBConstants.GroupMembershipTable.DOMAIN_ID + " = G." + DBConstants.UserGroupTable.DOMAIN_ID + " AND " + "GM." + DBConstants.GroupMembershipTable.DOMAIN_ID+"='"+domainId + "' AND "+ http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java index 1237808..a9a6b5d 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/SharingRepository.java @@ -50,7 +50,7 @@ public class SharingRepository extends AbstractRepository<Sharing, SharingEntity } public List<Sharing> getCascadingPermissionsForEntity(String domainId, String entityId) throws SharingRegistryException { - String query = "SELECT p from " + SharingEntity.class.getSimpleName() + " as p"; + String query = "SELECT DISTINCT p from " + SharingEntity.class.getSimpleName() + " as p"; query += " WHERE "; query += "p." + DBConstants.SharingTable.DOMAIN_ID + " = '" + domainId + "' AND "; query += "p." + DBConstants.SharingTable.ENTITY_ID + " = '" + entityId + "' AND "; http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java index c86bb22..778ecde 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserGroupRepository.java @@ -40,7 +40,7 @@ public class UserGroupRepository extends AbstractRepository<UserGroup, UserGroup } public List<UserGroup> getAccessibleGroups(String domainId, String entityId, String permissionTypeId) throws SharingRegistryException { - String query = "SELECT g from " + UserGroupEntity.class.getSimpleName() + " g, " + SharingEntity.class.getSimpleName() + " s"; + String query = "SELECT DISTINCT g from " + UserGroupEntity.class.getSimpleName() + " g, " + SharingEntity.class.getSimpleName() + " s"; query += " WHERE "; query += "g." + DBConstants.UserGroupTable.GROUP_ID + " = s." + DBConstants.SharingTable.GROUP_ID + " AND "; query += "g." + DBConstants.UserGroupTable.DOMAIN_ID + " = s." + DBConstants.SharingTable.DOMAIN_ID + " AND "; http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java index 6df5d70..8501d94 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java @@ -41,7 +41,7 @@ public class UserRepository extends AbstractRepository<User, UserEntity, UserPK> public List<User> getAccessibleUsers(String domainId, String entityId, String permissionTypeId) throws SharingRegistryException { - String query = "SELECT u from " + UserEntity.class.getSimpleName() + " u, " + SharingEntity.class.getSimpleName() + " s"; + String query = "SELECT DISTINCT u from " + UserEntity.class.getSimpleName() + " u, " + SharingEntity.class.getSimpleName() + " s"; query += " WHERE "; query += "u." + DBConstants.UserTable.USER_ID + " = s." + DBConstants.SharingTable.GROUP_ID + " AND "; query += "u." + DBConstants.UserTable.DOMAIN_ID + " = s." + DBConstants.SharingTable.DOMAIN_ID + " AND "; http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java index 00dd367..b269ce1 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DBConstants.java @@ -90,6 +90,7 @@ public class DBConstants { public static final String CREATED_TIME = "createdTime"; public static final String UPDATED_TIME = "updatedTime"; public static final String DOMAIN_ID = "domainId"; + public static final String ORIGINAL_ENTITY_CREATION_TIME = "originalEntityCreationTime"; } public static class SharingTable { http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DatabaseCreator.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DatabaseCreator.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DatabaseCreator.java index 5aa423c..5fe5e47 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DatabaseCreator.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/utils/DatabaseCreator.java @@ -265,9 +265,9 @@ public class DatabaseCreator { logger.info("Script file not found at " + dbscriptName + ". Uses default database script file"); DatabaseType databaseType = DatabaseCreator.getDatabaseType(conn); if(databaseType.equals(DatabaseType.derby)){ - is = DatabaseCreator.class.getClassLoader().getResourceAsStream("experiment-derby.sql"); + is = DatabaseCreator.class.getClassLoader().getResourceAsStream("sharing-registry-derby.sql"); }else if(databaseType.equals(DatabaseType.mysql)){ - is = DatabaseCreator.class.getClassLoader().getResourceAsStream("experiment-mysql.sql"); + is = DatabaseCreator.class.getClassLoader().getResourceAsStream("sharing-registry-mysql.sql"); } } reader = new BufferedReader(new InputStreamReader(is)); http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/ServerMain.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/ServerMain.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/ServerMain.java index 54e1722..a34f8c8 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/ServerMain.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/ServerMain.java @@ -55,15 +55,19 @@ public class ServerMain { serverStartedFile.deleteOnExit(); new RandomAccessFile(serverStartedFile, "rw").getChannel().lock(); } catch (FileNotFoundException e) { - logger.error(e.getMessage(), e); + logger.warn(e.getMessage(), e); } catch (IOException e) { - logger.error(e.getMessage(), e); + logger.warn(e.getMessage(), e); } } private static String getServerStartedFileName() { - return new File(new File(System.getenv("" + - "SHARING_REGISTRY_HOME"), "bin"), serverStartedFileNamePrefix + "_" + Integer.toString(serverPID)).toString(); + String SHARING_REGISTRY_HOME = System.getenv("" +"SHARING_REGISTRY_HOME"); + if(SHARING_REGISTRY_HOME==null) + SHARING_REGISTRY_HOME = "/tmp"; + else + SHARING_REGISTRY_HOME = SHARING_REGISTRY_HOME + "bin"; + return new File(SHARING_REGISTRY_HOME, serverStartedFileNamePrefix + "_" + Integer.toString(serverPID)).toString(); } private static int getPID() { http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java index 5dc3dbc..4f88e16 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java +++ b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/server/SharingRegistryServerHandler.java @@ -67,6 +67,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac */ @Override public String createDomain(Domain domain) throws SharingRegistryException, TException { + domain.setDomainId(domain.name); if(domainRepository.get(domain.domainId) != null) throw new SharingRegistryException("There exist domain with given domain id"); @@ -76,7 +77,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac //create the global permission for the domain PermissionType permissionType = new PermissionType(); - permissionType.setPermissionTypeId(domain.domainId+":"+ OWNER_PERMISSION_NAME); + permissionType.setPermissionTypeId(OWNER_PERMISSION_NAME); permissionType.setDomainId(domain.domainId); permissionType.setName(OWNER_PERMISSION_NAME); permissionType.setDescription("GLOBAL permission to " + domain.domainId); @@ -118,7 +119,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac * * */ @Override - public String registerUser(User user) throws SharingRegistryException, TException { + public String createUser(User user) throws SharingRegistryException, TException { UserPK userPK = new UserPK(); userPK.setUserId(user.getUserId()); userPK.setDomainId(user.domainId); @@ -137,7 +138,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac userGroup.setOwnerId(user.userId); userGroup.setGroupType(GroupType.USER_LEVEL_GROUP); userGroup.setGroupCardinality(GroupCardinality.SINGLE_USER); - createGroup(userGroup); + userGroupRepository.create(userGroup); return user.userId; } @@ -203,10 +204,13 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac userGroupPK.setDomainId(group.domainId); if(userGroupRepository.get(userGroupPK) != null) throw new SharingRegistryException("There exist group with given group id"); - + //Client created groups are always of type MULTI_USER + group.setGroupCardinality(GroupCardinality.MULTI_USER); group.setCreatedTime(System.currentTimeMillis()); group.setUpdatedTime(System.currentTimeMillis()); userGroupRepository.create(group); + + addUsersToGroup(group.domainId, Arrays.asList(group.ownerId), group.groupId); return group.groupId; } @@ -217,8 +221,14 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac userGroupPK.setGroupId(group.groupId); userGroupPK.setDomainId(group.domainId); UserGroup oldGroup = userGroupRepository.get(userGroupPK); + //Client created groups are always of type MULTI_USER + group.setGroupCardinality(GroupCardinality.MULTI_USER); group.setCreatedTime(oldGroup.createdTime); group = getUpdatedObject(oldGroup, group); + + if(!group.ownerId.equals(oldGroup.ownerId)) + throw new SharingRegistryException("Group owner cannot be changed"); + userGroupRepository.update(group); return true; } @@ -427,7 +437,7 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac * * */ @Override - public String registerEntity(Entity entity) throws SharingRegistryException, TException { + public String createEntity(Entity entity) throws SharingRegistryException, TException { EntityPK entityPK = new EntityPK(); entityPK.setDomainId(entity.domainId); entityPK.setEntityId(entity.entityId); @@ -444,11 +454,14 @@ public class SharingRegistryServerHandler implements SharingRegistryService.Ifac user.setDomainId(entity.domainId); user.setUserName(user.userId.split("@")[0]); - registerUser(user); + createUser(user); } - entity.setCreatedTime(System.currentTimeMillis()); entity.setUpdatedTime(System.currentTimeMillis()); + + if(entity.originalEntityCreationTime==0){ + entity.originalEntityCreationTime = entity.createdTime; + } entityRepository.create(entity); //Assigning global permission for the owner http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql index 0b5167a..923894e 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql +++ b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-derby.sql @@ -101,6 +101,7 @@ CREATE TABLE ENTITY ( DESCRIPTION VARCHAR(255), BINARY_DATA BLOB, FULL_TEXT CLOB, + ORIGINAL_ENTITY_CREATION_TIME BIGINT NOT NULL, CREATED_TIME BIGINT NOT NULL, UPDATED_TIME BIGINT NOT NULL, PRIMARY KEY (ENTITY_ID, DOMAIN_ID), http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql index ce7a9bf..9bfe64a 100644 --- a/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql +++ b/modules/sharing-registry/sharing-registry-server/src/main/resources/sharing-registry-mysql.sql @@ -101,6 +101,7 @@ CREATE TABLE ENTITY ( DESCRIPTION VARCHAR(255), BINARY_DATA BLOB, FULL_TEXT TEXT, + ORIGINAL_ENTITY_CREATION_TIME BIGINT NOT NULL, CREATED_TIME BIGINT NOT NULL, UPDATED_TIME BIGINT NOT NULL, PRIMARY KEY (ENTITY_ID, DOMAIN_ID), http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java b/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java index 499fc88..d11e744 100644 --- a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java +++ b/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java @@ -71,7 +71,7 @@ public class SharingRegistryServerHandlerTest { user1.setCreatedTime(System.currentTimeMillis()); user1.setUpdatedTime(System.currentTimeMillis()); - Assert.assertNotNull(sharingRegistryServerHandler.registerUser(user1)); + Assert.assertNotNull(sharingRegistryServerHandler.createUser(user1)); User user2 = new User(); String userName2 = "test-user-2." + System.currentTimeMillis(); @@ -82,7 +82,7 @@ public class SharingRegistryServerHandlerTest { user2.setCreatedTime(System.currentTimeMillis()); user2.setUpdatedTime(System.currentTimeMillis()); - Assert.assertNotNull(sharingRegistryServerHandler.registerUser(user2)); + Assert.assertNotNull(sharingRegistryServerHandler.createUser(user2)); User user3 = new User(); String userName3 = "test-user-3." + System.currentTimeMillis(); @@ -93,7 +93,7 @@ public class SharingRegistryServerHandlerTest { user3.setCreatedTime(System.currentTimeMillis()); user3.setUpdatedTime(System.currentTimeMillis()); - Assert.assertNotNull(sharingRegistryServerHandler.registerUser(user3)); + Assert.assertNotNull(sharingRegistryServerHandler.createUser(user3)); Assert.assertTrue(sharingRegistryServerHandler.getUsers(domainId, 0, 10).size() > 0); @@ -205,7 +205,7 @@ public class SharingRegistryServerHandlerTest { entity1.setCreatedTime(System.currentTimeMillis()); entity1.setUpdatedTime(System.currentTimeMillis()); - String entityId1 = sharingRegistryServerHandler.registerEntity(entity1); + String entityId1 = sharingRegistryServerHandler.createEntity(entity1); Assert.assertNotNull(entityId1); Entity entity2 = new Entity(); @@ -220,7 +220,7 @@ public class SharingRegistryServerHandlerTest { entity2.setCreatedTime(System.currentTimeMillis()); entity2.setUpdatedTime(System.currentTimeMillis()); - String entityId2 = sharingRegistryServerHandler.registerEntity(entity2); + String entityId2 = sharingRegistryServerHandler.createEntity(entity2); Assert.assertNotNull(entityId2); Entity entity3 = new Entity(); @@ -235,7 +235,7 @@ public class SharingRegistryServerHandlerTest { entity3.setCreatedTime(System.currentTimeMillis()); entity3.setUpdatedTime(System.currentTimeMillis()); - String entityId3 = sharingRegistryServerHandler.registerEntity(entity3); + String entityId3 = sharingRegistryServerHandler.createEntity(entity3); Assert.assertNotNull(entityId3); sharingRegistryServerHandler.shareEntityWithUsers(domainId, entityId1, Arrays.asList(userId2), permissionTypeId1, true); @@ -253,7 +253,7 @@ public class SharingRegistryServerHandlerTest { entity4.setCreatedTime(System.currentTimeMillis()); entity4.setUpdatedTime(System.currentTimeMillis()); - String entityId4 = sharingRegistryServerHandler.registerEntity(entity4); + String entityId4 = sharingRegistryServerHandler.createEntity(entity4); Assert.assertNotNull(entityId4); Assert.assertTrue(sharingRegistryServerHandler.userHasAccess(domainId, userId3, entityId4, permissionTypeId1)); http://git-wip-us.apache.org/repos/asf/airavata/blob/273d074a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServiceTest.java ---------------------------------------------------------------------- diff --git a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServiceTest.java b/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServiceTest.java index 3357eb5..c05924a 100644 --- a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServiceTest.java +++ b/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServiceTest.java @@ -20,27 +20,36 @@ */ package org.apache.airavata.sharing.registry; -import org.apache.airavata.sharing.registry.models.Domain; -import org.apache.airavata.sharing.registry.models.User; +import org.apache.airavata.sharing.registry.models.*; +import org.apache.airavata.sharing.registry.server.ServerMain; import org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; -import org.junit.Ignore; +import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.Arrays; + public class SharingRegistryServiceTest { private final static Logger logger = LoggerFactory.getLogger(SharingRegistryServiceTest.class); + @BeforeClass + public static void setUp() throws InterruptedException { + ServerMain serverMain = new ServerMain(); + serverMain.main(new String[]{}); + Thread.sleep(1000*2); + } + @Test - @Ignore("Test is only for demonstration purposes") public void test() throws TException { - String serverHost = "gw56.iu.xsede.org"; + String serverHost = "localhost"; int serverPort = 7878; TTransport transport = new TSocket(serverHost, serverPort); @@ -56,29 +65,213 @@ public class SharingRegistryServiceTest { String domainId = sharingServiceClient.createDomain(domain); - User user = new User(); - String userName = "test-user"; - String userId1 = userName + "@" + domainId; + User user1 = new User(); + //required + user1.setUserId("test-user-1"); + //required + user1.setUserName("test-user-1"); + //required + user1.setDomainId(domainId); + //required + user1.setFirstName("John"); + //required + user1.setLastName("Doe"); + //required + user1.setEmail("john....@abc.com"); + //optional - this should be bytes of the users image icon + //byte[] icon1 = new byte[10]; + //user1.setIcon(icon1); + + sharingServiceClient.createUser(user1); + + User user2 = new User(); + //required + user2.setUserId("test-user-2"); + //required + user2.setUserName("test-user-2"); + //required + user2.setDomainId(domainId); + //required + user2.setFirstName("John"); + //required + user2.setLastName("Doe"); + //required + user2.setEmail("john....@abc.com"); + //optional - this should be bytes of the users image icon + //byte[] icon2 = new byte[10]; + //user2.setIcon(icon2); + + sharingServiceClient.createUser(user2); + + User user3 = new User(); //required - user.setUserId(userId1); + user3.setUserId("test-user-3"); //required - user.setUserName(userName); + user3.setUserName("test-user-3"); //required - user.setDomainId(domainId); + user3.setDomainId(domainId); //required - user.setFirstName("John"); + user3.setFirstName("John"); //required - user.setLastName("Doe"); + user3.setLastName("Doe"); //required - user.setEmail("john....@abc.com"); + user3.setEmail("john....@abc.com"); //optional - this should be bytes of the users image icon - byte[] icon = new byte[10]; - user.setIcon(icon); + //byte[] icon3 = new byte[10]; + //user3.setIcon(icon3); + + sharingServiceClient.createUser(user3); + + UserGroup userGroup1 = new UserGroup(); + //required + userGroup1.setGroupId("test-group-1"); + //required + userGroup1.setDomainId(domainId); + //required + userGroup1.setName("test-group-1"); + //optional + userGroup1.setDescription("test group description"); + //required + userGroup1.setOwnerId("test-user-1"); + //required + userGroup1.setGroupType(GroupType.USER_LEVEL_GROUP); + + sharingServiceClient.createGroup(userGroup1); + + UserGroup userGroup2 = new UserGroup(); + //required + userGroup2.setGroupId("test-group-2"); + //required + userGroup2.setDomainId(domainId); + //required + userGroup2.setName("test-group-2"); + //optional + userGroup2.setDescription("test group description"); + //required + userGroup2.setOwnerId("test-user-2"); + //required + userGroup2.setGroupType(GroupType.USER_LEVEL_GROUP); + + sharingServiceClient.createGroup(userGroup2); + + sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("test-user-3"), "test-group-2"); + + sharingServiceClient.addChildGroupsToParentGroup(domainId, Arrays.asList("test-group-2"), "test-group-1"); + + PermissionType permissionType1 = new PermissionType(); + //required + permissionType1.setPermissionTypeId("READ"); + //required + permissionType1.setDomainId(domainId); + //required + permissionType1.setName("READ"); + //optional + permissionType1.setDescription("READ description"); + sharingServiceClient.createPermissionType(permissionType1); + + PermissionType permissionType2 = new PermissionType(); + permissionType2.setPermissionTypeId("WRITE"); + permissionType2.setDomainId(domainId); + permissionType2.setName("WRITE"); + permissionType2.setDescription("WRITE description"); + sharingServiceClient.createPermissionType(permissionType2); + + EntityType entityType1 = new EntityType(); + //required + entityType1.setEntityTypeId("PROJECT"); + //required + entityType1.setDomainId(domainId); + //required + entityType1.setName("PROJECT"); + //optional + entityType1.setDescription("PROJECT entity type description"); + sharingServiceClient.createEntityType(entityType1); + + EntityType entityType2 = new EntityType(); + entityType2.setEntityTypeId("EXPERIMENT"); + entityType2.setDomainId(domainId); + entityType2.setName("EXPERIMENT"); + entityType2.setDescription("EXPERIMENT entity type"); + sharingServiceClient.createEntityType(entityType2); + + + //Creating entities + Entity entity1 = new Entity(); + //required + entity1.setEntityId("test-project-1"); + //required + entity1.setDomainId(domainId); + //required + entity1.setEntityTypeId("PROJECT"); + //required + entity1.setOwnerId("test-user-1"); + //required + entity1.setName("test-project-1"); + //optional + entity1.setDescription("test project 1 description"); + //optional + entity1.setFullText("test project 1 stampede gaussian seagrid"); + //optional - If not set this will be default to current system time + entity1.setOriginalEntityCreationTime(System.currentTimeMillis()); + sharingServiceClient.createEntity(entity1); + + Entity entity2 = new Entity(); + entity2.setEntityId("test-experiment-1"); + entity2.setDomainId(domainId); + entity2.setEntityTypeId("EXPERIMENT"); + entity2.setOwnerId("test-user-1"); + entity2.setName("test-experiment-1"); + entity2.setDescription("test experiment 1 description"); + entity2.setParentEntityId("test-project-1"); + entity2.setFullText("test experiment 1 benzene"); + sharingServiceClient.createEntity(entity2); + + Entity entity3 = new Entity(); + entity3.setEntityId("test-experiment-2"); + entity3.setDomainId(domainId); + entity3.setEntityTypeId("EXPERIMENT"); + entity3.setOwnerId("test-user-1"); + entity3.setName("test-experiment-2"); + entity3.setDescription("test experiment 2 description"); + entity3.setParentEntityId("test-project-1"); + entity3.setFullText("test experiment 1 3-methyl 1-butanol"); + sharingServiceClient.createEntity(entity3); + + sharingServiceClient.shareEntityWithUsers(domainId, "test-project-1", Arrays.asList("test-user-2"), "WRITE", true); + sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "READ", true); + + //true + System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-project-1", "WRITE")); + //true + System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "WRITE")); + //true + System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "WRITE")); + + //false + System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "READ")); + //true + System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "READ")); + + //false + System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-project-1", "READ")); + //true + System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "READ")); + //false + System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "WRITE")); + + ArrayList<SearchCriteria> filters = new ArrayList<>(); + SearchCriteria searchCriteria = new SearchCriteria(); + searchCriteria.setSearchCondition(SearchCondition.LIKE); + searchCriteria.setValue("experiment"); + searchCriteria.setSearchField(EntitySearchField.NAME); + filters.add(searchCriteria); - //can be manually set. otherwise will be set to the current time by the system - user.setCreatedTime(System.currentTimeMillis()); - user.setUpdatedTime(System.currentTimeMillis()); + searchCriteria = new SearchCriteria(); + searchCriteria.setSearchCondition(SearchCondition.EQUAL); + searchCriteria.setValue("READ"); + searchCriteria.setSearchField(EntitySearchField.PERMISSION_TYPE_ID); + filters.add(searchCriteria); - sharingServiceClient.registerUser(user); + System.out.println(sharingServiceClient.searchEntities(domainId, "test-user-2", "EXPERIMENT", filters, 0, -1).size()); } } \ No newline at end of file