/* * Copyright 2015-2016 OpenCB * * Licensed 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.opencb.opencga.app.cli.main.executors.catalog; import org.apache.commons.lang3.StringUtils; import org.opencb.commons.datastore.core.ObjectMap; import org.opencb.commons.datastore.core.Query; import org.opencb.commons.datastore.core.QueryOptions; import org.opencb.commons.datastore.core.QueryResponse; import org.opencb.opencga.app.cli.main.executors.OpencgaCommandExecutor; import org.opencb.opencga.app.cli.main.executors.catalog.commons.AclCommandExecutor; import org.opencb.opencga.app.cli.main.options.JobCommandOptions; import org.opencb.opencga.catalog.db.api.JobDBAdaptor; import org.opencb.opencga.catalog.exceptions.CatalogException; import org.opencb.opencga.catalog.models.Job; import org.opencb.opencga.catalog.models.acls.permissions.JobAclEntry; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by imedina on 03/06/16. */ public class JobCommandExecutor extends OpencgaCommandExecutor { private JobCommandOptions jobsCommandOptions; private AclCommandExecutor<Job, JobAclEntry> aclCommandExecutor; public JobCommandExecutor(JobCommandOptions jobsCommandOptions) { super(jobsCommandOptions.commonCommandOptions); this.jobsCommandOptions = jobsCommandOptions; this.aclCommandExecutor = new AclCommandExecutor<>(); } @Override public void execute() throws Exception { logger.debug("Executing jobs command line"); String subCommandString = getParsedSubCommand(jobsCommandOptions.jCommander); QueryResponse queryResponse = null; switch (subCommandString) { case "create": queryResponse = create(); break; case "info": queryResponse = info(); break; case "search": queryResponse = search(); break; case "visit": queryResponse = visit(); break; case "delete": queryResponse = delete(); break; case "group-by": queryResponse = groupBy(); break; case "acl": queryResponse = aclCommandExecutor.acls(jobsCommandOptions.aclsCommandOptions, openCGAClient.getJobClient()); break; case "acl-create": queryResponse = aclCommandExecutor.aclsCreate(jobsCommandOptions.aclsCreateCommandOptions, openCGAClient.getJobClient()); break; case "acl-member-delete": queryResponse = aclCommandExecutor.aclMemberDelete(jobsCommandOptions.aclsMemberDeleteCommandOptions, openCGAClient.getJobClient()); break; case "acl-member-info": queryResponse = aclCommandExecutor.aclMemberInfo(jobsCommandOptions.aclsMemberInfoCommandOptions, openCGAClient.getJobClient()); break; case "acl-member-update": queryResponse = aclCommandExecutor.aclMemberUpdate(jobsCommandOptions.aclsMemberUpdateCommandOptions, openCGAClient.getJobClient()); break; default: logger.error("Subcommand not valid"); break; } createOutput(queryResponse); } private QueryResponse<Job> create() throws CatalogException, IOException { logger.debug("Creating a new job"); String studyId = resolveStudy(jobsCommandOptions.createCommandOptions.study); ObjectMap params = new ObjectMap(); params.putIfNotEmpty(JobDBAdaptor.QueryParams.NAME.key(), jobsCommandOptions.createCommandOptions.name); params.putIfNotEmpty(JobDBAdaptor.QueryParams.TOOL_NAME.key(), jobsCommandOptions.createCommandOptions.toolName); params.putIfNotEmpty(JobDBAdaptor.QueryParams.DESCRIPTION.key(), jobsCommandOptions.createCommandOptions.description); params.putIfNotEmpty(JobDBAdaptor.QueryParams.EXECUTION.key(), jobsCommandOptions.createCommandOptions.execution); if (jobsCommandOptions.createCommandOptions.startTime > 0) { params.put(JobDBAdaptor.QueryParams.START_TIME.key(), jobsCommandOptions.createCommandOptions.startTime); } if (jobsCommandOptions.createCommandOptions.endTime > 0) { params.put(JobDBAdaptor.QueryParams.END_TIME.key(), jobsCommandOptions.createCommandOptions.endTime); } params.putIfNotEmpty(JobDBAdaptor.QueryParams.COMMAND_LINE.key(), jobsCommandOptions.createCommandOptions.commandLine); params.putIfNotEmpty(JobDBAdaptor.QueryParams.OUT_DIR_ID.key(), jobsCommandOptions.createCommandOptions.outDir); if (StringUtils.isNotEmpty(jobsCommandOptions.createCommandOptions.input)) { List<Long> list = new ArrayList<>(); for (String aux : jobsCommandOptions.createCommandOptions.input.split(",")) { list.add(Long.parseLong(aux)); } params.put(JobDBAdaptor.QueryParams.INPUT.key(), list); } if (StringUtils.isNotEmpty(jobsCommandOptions.createCommandOptions.output)) { List<Long> list = new ArrayList<>(); for (String aux : jobsCommandOptions.createCommandOptions.output.split(",")) { list.add(Long.parseLong(aux)); } params.put(JobDBAdaptor.QueryParams.OUTPUT.key(), list); } return openCGAClient.getJobClient().create(studyId, params); } private QueryResponse<Job> info() throws CatalogException, IOException { logger.debug("Getting job information"); ObjectMap params = new ObjectMap(); params.putIfNotEmpty(JobDBAdaptor.QueryParams.STUDY.key(), resolveStudy(jobsCommandOptions.infoCommandOptions.study)); params.putIfNotEmpty(QueryOptions.INCLUDE, jobsCommandOptions.infoCommandOptions.dataModelOptions.include); params.putIfNotEmpty(QueryOptions.EXCLUDE, jobsCommandOptions.infoCommandOptions.dataModelOptions.exclude); return openCGAClient.getJobClient().get(jobsCommandOptions.infoCommandOptions.job, params); } private QueryResponse<Job> search() throws CatalogException, IOException { logger.debug("Searching job"); Query query = new Query(); query.putIfNotEmpty(JobDBAdaptor.QueryParams.STUDY.key(), resolveStudy(jobsCommandOptions.searchCommandOptions.study)); query.putIfNotEmpty(JobDBAdaptor.QueryParams.NAME.key(), jobsCommandOptions.searchCommandOptions.name); query.putIfNotEmpty(JobDBAdaptor.QueryParams.TOOL_NAME.key(), jobsCommandOptions.searchCommandOptions.toolName); query.putIfNotEmpty(JobDBAdaptor.QueryParams.STATUS_NAME.key(), jobsCommandOptions.searchCommandOptions.status); query.putIfNotEmpty(JobDBAdaptor.QueryParams.USER_ID.key(), jobsCommandOptions.searchCommandOptions.ownerId); query.putIfNotEmpty(JobDBAdaptor.QueryParams.CREATION_DATE.key(), jobsCommandOptions.searchCommandOptions.date); query.putIfNotEmpty(JobDBAdaptor.QueryParams.INPUT.key(), jobsCommandOptions.searchCommandOptions.inputFiles); query.putIfNotEmpty(JobDBAdaptor.QueryParams.OUTPUT.key(), jobsCommandOptions.searchCommandOptions.outputFiles); QueryOptions queryOptions = new QueryOptions(); queryOptions.putIfNotEmpty(QueryOptions.INCLUDE, jobsCommandOptions.searchCommandOptions.dataModelOptions.include); queryOptions.putIfNotEmpty(QueryOptions.EXCLUDE, jobsCommandOptions.searchCommandOptions.dataModelOptions.exclude); queryOptions.put(QueryOptions.LIMIT, jobsCommandOptions.searchCommandOptions.numericOptions.limit); queryOptions.put(QueryOptions.SKIP, jobsCommandOptions.searchCommandOptions.numericOptions.skip); queryOptions.put("count", jobsCommandOptions.searchCommandOptions.numericOptions.count); return openCGAClient.getJobClient().search(query, queryOptions); } private QueryResponse<Job> visit() throws CatalogException, IOException { logger.debug("Visiting a job"); Query query = new Query(); query.putIfNotEmpty(JobDBAdaptor.QueryParams.STUDY.key(), resolveStudy(jobsCommandOptions.visitCommandOptions.study)); return openCGAClient.getJobClient().visit(jobsCommandOptions.visitCommandOptions.job, query); } private QueryResponse<Job> delete() throws CatalogException, IOException { logger.debug("Deleting job"); ObjectMap params = new ObjectMap(); params.putIfNotEmpty(JobDBAdaptor.QueryParams.STUDY.key(), resolveStudy(jobsCommandOptions.deleteCommandOptions.study)); params.put("deleteFiles", jobsCommandOptions.deleteCommandOptions.deleteFiles); return openCGAClient.getJobClient().delete(jobsCommandOptions.deleteCommandOptions.job, params); } private QueryResponse<Job> groupBy() throws CatalogException, IOException { logger.debug("Group by job"); ObjectMap params = new ObjectMap(); params.putIfNotEmpty(JobDBAdaptor.QueryParams.STUDY.key(), resolveStudy(jobsCommandOptions.groupByCommandOptions.study)); params.putIfNotEmpty(JobDBAdaptor.QueryParams.ID.key(), jobsCommandOptions.groupByCommandOptions.id); params.putIfNotEmpty(JobDBAdaptor.QueryParams.NAME.key(), jobsCommandOptions.groupByCommandOptions.name); params.putIfNotEmpty(JobDBAdaptor.QueryParams.OUT_DIR_ID.key(), jobsCommandOptions.groupByCommandOptions.path); params.putIfNotEmpty(JobDBAdaptor.QueryParams.STATUS_NAME.key(), jobsCommandOptions.groupByCommandOptions.status); params.putIfNotEmpty(JobDBAdaptor.QueryParams.USER_ID.key(), jobsCommandOptions.groupByCommandOptions.ownerId); params.putIfNotEmpty(JobDBAdaptor.QueryParams.CREATION_DATE.key(), jobsCommandOptions.groupByCommandOptions.creationDate); params.putIfNotEmpty(JobDBAdaptor.QueryParams.DESCRIPTION.key(), jobsCommandOptions.groupByCommandOptions.description); params.putIfNotEmpty(JobDBAdaptor.QueryParams.ATTRIBUTES.key(), jobsCommandOptions.groupByCommandOptions.attributes); return openCGAClient.getJobClient().groupBy(jobsCommandOptions.groupByCommandOptions.study, jobsCommandOptions.groupByCommandOptions.fields,params); } }