diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/WorkflowDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/WorkflowDBAdaptor.java index b235843f74..b2ff9946d4 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/WorkflowDBAdaptor.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/api/WorkflowDBAdaptor.java @@ -28,6 +28,7 @@ enum QueryParams implements QueryParam { TYPE("type", TEXT, ""), TAGS("tags", TEXT_ARRAY, ""), COMMAND_LINE("commandLine", TEXT, ""), + MANAGER("manager", OBJECT, ""), SCRIPTS("scripts", OBJECT, ""), VARIABLES("variables", OBJECT, ""), INTERNAL_REGISTRATION_USER_ID("internal.registrationUserId", TEXT, ""), diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/WorkflowMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/WorkflowMongoDBAdaptor.java index 5194f488d1..d84291f6f0 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/WorkflowMongoDBAdaptor.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/WorkflowMongoDBAdaptor.java @@ -330,7 +330,7 @@ private UpdateDocument parseAndValidateUpdateParams(ObjectMap parameters, QueryO final String[] acceptedMapParams = {QueryParams.ATTRIBUTES.key()}; filterMapParams(parameters, document.getSet(), acceptedMapParams); - final String[] acceptedListParams = {QueryParams.SCRIPTS.key(), QueryParams.VARIABLES.key()}; + final String[] acceptedListParams = {QueryParams.MANAGER.key(), QueryParams.SCRIPTS.key(), QueryParams.VARIABLES.key()}; filterObjectParams(parameters, document.getSet(), acceptedListParams); // // Check if the scripts exist. diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/WorkflowManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/WorkflowManager.java index 4e3fb0ed75..1dba9ec36e 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/WorkflowManager.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/WorkflowManager.java @@ -173,18 +173,10 @@ public OpenCGAResult update(String studyStr, String workflowId, Workfl JwtPayload tokenPayload = catalogManager.getUserManager().validateToken(token); CatalogFqn studyFqn = CatalogFqn.extractFqnFromStudy(studyStr, tokenPayload); - ObjectMap updateMap = null; - try { - if (updateParams != null) { - updateMap = new ObjectMap(getUpdateObjectMapper().writeValueAsString(updateParams)); - } - } catch (JsonProcessingException e) { - throw new CatalogException("Could not parse WorkflowUpdateParams object: " + e.getMessage(), e); - } ObjectMap auditParams = new ObjectMap() .append("workflowId", workflowId) - .append("updateParams", updateMap) + .append("updateParams", updateParams) .append("options", options) .append("token", token); @@ -208,6 +200,26 @@ public OpenCGAResult update(String studyStr, String workflowId, Workfl id = workflow.getId(); uuid = workflow.getUuid(); + if (updateParams == null) { + throw new CatalogException("Missing parameters to update the workflow."); + } + + if (updateParams.getManager() != null) { + if (updateParams.getManager().getId() == null) { + throw new CatalogException("Manager id cannot be left empty."); + } + if (StringUtils.isEmpty(updateParams.getManager().getVersion())) { + throw new CatalogException("Manager version cannot be left empty."); + } + } + + ObjectMap updateMap; + try { + updateMap = new ObjectMap(getUpdateObjectMapper().writeValueAsString(updateParams)); + } catch (JsonProcessingException e) { + throw new CatalogException("Could not parse WorkflowUpdateParams object: " + e.getMessage(), e); + } + // 2. Update workflow object OpenCGAResult insert = getWorkflowDBAdaptor(organizationId).update(workflow.getUid(), updateMap, options); if (options.getBoolean(ParamConstants.INCLUDE_RESULT_PARAM)) {