/*
* 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.codehaus.jackson.map.ObjectMapper;
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.options.VariableCommandOptions;
import org.opencb.opencga.catalog.db.api.SampleDBAdaptor;
import org.opencb.opencga.catalog.db.api.StudyDBAdaptor.VariableSetParams;
import org.opencb.opencga.catalog.exceptions.CatalogException;
import org.opencb.opencga.catalog.models.VariableSet;
import java.io.File;
import java.io.IOException;
/**
* Created by by sgallego on 6/15/16.
*/
public class VariableCommandExecutor extends OpencgaCommandExecutor {
private VariableCommandOptions variableCommandOptions;
public VariableCommandExecutor(VariableCommandOptions variableCommandOptions) {
super(variableCommandOptions.commonCommandOptions);
this.variableCommandOptions = variableCommandOptions;
}
@Override
public void execute() throws Exception {
logger.debug("Executing variables command line");
String subCommandString = getParsedSubCommand(variableCommandOptions.jCommander);
QueryResponse queryResponse = null;
switch (subCommandString) {
case "create":
queryResponse = create();
break;
case "info":
queryResponse = info();
break;
case "search":
queryResponse = search();
break;
case "update":
queryResponse = update();
break;
case "delete":
queryResponse = delete();
break;
case "field-add":
queryResponse = fieldAdd();
break;
case "field-delete":
queryResponse = fieldDelete();
break;
case "field-rename":
queryResponse = fieldRename();
break;
default:
logger.error("Subcommand not valid");
break;
}
createOutput(queryResponse);
}
private QueryResponse<VariableSet> create() throws CatalogException, IOException {
logger.debug("Creating variable");
ObjectMap params = new ObjectMap();
params.putIfNotNull(VariableSetParams.UNIQUE.key(), variableCommandOptions.createCommandOptions.unique);
params.putIfNotEmpty(VariableSetParams.DESCRIPTION.key(), variableCommandOptions.createCommandOptions.description);
params.putIfNotEmpty(VariableSetParams.NAME.key(), variableCommandOptions.createCommandOptions.name);
ObjectMapper mapper = new ObjectMapper();
ObjectMap variables = mapper.readValue(new File(variableCommandOptions.createCommandOptions.jsonFile), ObjectMap.class);
params.putIfNotNull(VariableSetParams.VARIABLE.key(), variables.get("variables"));
return openCGAClient.getVariableClient().create(resolveStudy(variableCommandOptions.createCommandOptions.study), params);
}
private QueryResponse info() throws CatalogException, IOException {
logger.debug("Getting variable information");
QueryOptions queryOptions = new QueryOptions();
queryOptions.putIfNotEmpty(VariableSetParams.STUDY_ID.key(), resolveStudy(variableCommandOptions.infoCommandOptions.studyId));
queryOptions.putIfNotEmpty(QueryOptions.INCLUDE, variableCommandOptions.infoCommandOptions.include);
queryOptions.putIfNotEmpty(QueryOptions.EXCLUDE, variableCommandOptions.infoCommandOptions.exclude);
return openCGAClient.getVariableClient().get(variableCommandOptions.infoCommandOptions.id, queryOptions);
}
private QueryResponse<VariableSet> search() throws CatalogException, IOException {
logger.debug("Searching variable");
Query query = new Query();
query.put(SampleDBAdaptor.QueryParams.STUDY.key(), resolveStudy(variableCommandOptions.searchCommandOptions.study));
QueryOptions queryOptions = new QueryOptions();
queryOptions.putIfNotEmpty(VariableSetParams.NAME.key(), variableCommandOptions.searchCommandOptions.name);
queryOptions.putIfNotEmpty(VariableSetParams.DESCRIPTION.key(), variableCommandOptions.searchCommandOptions.description);
queryOptions.putIfNotEmpty(VariableSetParams.ATTRIBUTES.key(), variableCommandOptions.searchCommandOptions.attributes);
queryOptions.putIfNotEmpty(QueryOptions.INCLUDE, variableCommandOptions.searchCommandOptions.include);
queryOptions.putIfNotEmpty(QueryOptions.EXCLUDE, variableCommandOptions.searchCommandOptions.exclude);
queryOptions.putIfNotEmpty(QueryOptions.LIMIT, variableCommandOptions.searchCommandOptions.limit);
queryOptions.putIfNotNull(QueryOptions.SKIP, variableCommandOptions.searchCommandOptions.skip);
//TODO add when fixed the ws
//queryOptions.putIfNotNull("count", variableCommandOptions.searchCommandOptions.count);
return openCGAClient.getVariableClient().search(query, queryOptions);
}
private QueryResponse<VariableSet> update() throws CatalogException, IOException {
logger.debug("Updating variable");
ObjectMap params = new ObjectMap();
params.putIfNotNull(VariableSetParams.NAME.key(), variableCommandOptions.updateCommandOptions.name);
params.putIfNotNull(VariableSetParams.DESCRIPTION.key(), variableCommandOptions.updateCommandOptions.description);
// Object variables = null;
// if (variableCommandOptions.updateCommandOptions.jsonFile != null
// && !variableCommandOptions.updateCommandOptions.jsonFile.isEmpty()) {
// ObjectMapper mapper = new ObjectMapper();
// variables = mapper.readValue(new File(variableCommandOptions.updateCommandOptions.jsonFile),
// ObjectMap.class).get("variables");
// }
return openCGAClient.getVariableClient().update(variableCommandOptions.updateCommandOptions.id,
resolveStudy(variableCommandOptions.updateCommandOptions.studyId), params);
}
private QueryResponse<VariableSet> delete() throws CatalogException, IOException {
logger.debug("Deleting variable");
return openCGAClient.getVariableClient().delete(variableCommandOptions.deleteCommandOptions.id, new ObjectMap());
}
private QueryResponse<VariableSet> fieldAdd() throws CatalogException, IOException {
logger.debug("Adding variables to variable set");
ObjectMapper mapper = new ObjectMapper();
Object variables = mapper.readValue(new File(variableCommandOptions.fieldAddCommandOptions.jsonFile), ObjectMap.class)
.get("variables");
return openCGAClient.getVariableClient().addVariable(variableCommandOptions.fieldAddCommandOptions.id, variables);
}
private QueryResponse<VariableSet> fieldDelete() throws CatalogException, IOException {
logger.debug("Deleting the variable field");
ObjectMap objectMap = new ObjectMap();
return openCGAClient.getVariableClient().fieldDelete(variableCommandOptions.fieldDeleteCommandOptions.id,
variableCommandOptions.fieldDeleteCommandOptions.name, objectMap);
}
private QueryResponse<VariableSet> fieldRename() throws CatalogException, IOException {
logger.debug("Rename the variable field");
return openCGAClient.getVariableClient().fieldRename(
variableCommandOptions.fieldRenameCommandOptions.id, variableCommandOptions.fieldRenameCommandOptions.oldName,
variableCommandOptions.fieldRenameCommandOptions.newName, new ObjectMap());
}
}