/**
* Copyright (c) 2009 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions, and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* 3. Redistributions must acknowledge that this software was
* originally developed by the UCSF Computer Graphics Laboratory
* under support by the NIH National Center for Research Resources,
* grant P41-RR01081.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package org.bridgedb.cytoscape.internal.task;
import org.bridgedb.cytoscape.internal.BridgeDbApp;
import org.bridgedb.cytoscape.internal.IDMapperClient;
import org.bridgedb.cytoscape.internal.IDMapperClientImpl;
import org.bridgedb.cytoscape.internal.IDMapperClientManager;
import org.bridgedb.cytoscape.internal.ui.IDMappingSourceConfigDialog;
import org.bridgedb.cytoscape.internal.ui.BridgeDbDialog;
import org.bridgedb.cytoscape.internal.AttributeBasedIDMappingImpl;
import org.bridgedb.cytoscape.internal.util.DataSourceUtil;
import org.bridgedb.cytoscape.internal.util.DataSourceWrapper;
import org.bridgedb.cytoscape.internal.util.IDMapperWrapper;
import org.bridgedb.cytoscape.internal.util.XrefWrapper;
import org.cytoscape.model.CyNetwork;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.bridgedb.DataSource;
import org.bridgedb.DataSourcePatterns;
import org.bridgedb.IDMapperCapabilities;
/**
*
*/
public class BridgeDbNamespace {
public static final String NAME = "idmapping";
// Commands
private static final String VERSION = "version";
private static final String MAIN_DIALOG = "main dialog";
private static final String RESOURCE_DIALOG = "resource config dialog";
private static final String LIST_RESOURCE = "list resources";
private static final String LIST_SELECTED_RESOURCE = "list selected resources";
private static final String ADD_RESOURCE = "register resource";
private static final String REMOVE_RESOURCE = "unregister resource";
private static final String SELECT_RESOURCE = "select resource";
private static final String DESELECT_RESOURCE = "deselect resource";
private static final String GET_SRC_ID_TYPES = "get source id types";
private static final String GET_TGT_ID_TYPES = "get target id types";
private static final String CHECK_MAPPING_SUPPORT = "check mapping supported";
private static final String ATTRIBUTE_BASED_MAPPING = "attribute based mapping";
private static final String GENERAL_MAPPING = "general mapping";
private static final String CHECK_ID_EXIST = "check id exist";
private static final String GUESS_TYPE = "guess id type";
// Arguments
private static final String CLASS_PATH = "classpath";
private static final String CONN_STRING = "connstring"; // connection string
private static final String DISPLAY_NAME = "displayname";
private static final String SOURCE_TYPE = "sourcetype";
private static final String TARGET_TYPE = "targettype";
private static final String NETWORK_LIST = "networklist";
private static final String SOURCE_ATTR = "sourceattr";
private static final String TARGET_ATTR = "targetattr";
private static final String SOURCE_ID = "sourceid";
private static final String REPORT = "report";
private static final String FIRST_ONLY = "firstonly";
// protected BridgeDbNamespace(CyCommandNamespace ns) {
// super(ns);
// // Define our subcommands
// addArgument(VERSION);
// addDescription(VERSION, "Get the version of ID mapping service from CyThesaurus");
//
// addArgument(MAIN_DIALOG);
// addDescription(MAIN_DIALOG, "Display the main dialog of CyThesaurus");
//
// addArgument(RESOURCE_DIALOG);
// addDescription(RESOURCE_DIALOG, "Display the dialog for configure ID mapping sources");
//
// addArgument(LIST_RESOURCE);
// addDescription(LIST_RESOURCE, "List all registered ID mapping sources");
//
// addArgument(LIST_SELECTED_RESOURCE);
// addDescription(LIST_SELECTED_RESOURCE, "List all selected ID mapping sources");
//
// addArgument(ADD_RESOURCE, CLASS_PATH);
// addArgument(ADD_RESOURCE, CONN_STRING);
// addArgument(ADD_RESOURCE, DISPLAY_NAME);
// addDescription(ADD_RESOURCE, "Add/register an ID mapping resource");
//
// addArgument(REMOVE_RESOURCE, CONN_STRING);
// addDescription(REMOVE_RESOURCE, "Remove/unregister an ID mapping resource");
//
// addArgument(SELECT_RESOURCE, CONN_STRING);
// addDescription(SELECT_RESOURCE, "Select an ID mapping resource for use");
//
// addArgument(DESELECT_RESOURCE, CONN_STRING);
// addDescription(DESELECT_RESOURCE, "Deselect an ID mapping resource for use");
//
// addArgument(GET_SRC_ID_TYPES);
// addDescription(GET_SRC_ID_TYPES, "Get supported source ID types");
//
// addArgument(GET_TGT_ID_TYPES);
// addDescription(GET_TGT_ID_TYPES, "Get supported target ID types");
//
//// addArgument(IS_MAPPING_SUPPORT);
// addArgument(CHECK_MAPPING_SUPPORT, SOURCE_TYPE);
// addArgument(CHECK_MAPPING_SUPPORT, TARGET_TYPE);
// addDescription(CHECK_MAPPING_SUPPORT, "Check if ID mapping between two ID types is supported");
//
// addArgument(ATTRIBUTE_BASED_MAPPING, NETWORK_LIST); //optional
// addArgument(ATTRIBUTE_BASED_MAPPING, SOURCE_ATTR); // required
// addArgument(ATTRIBUTE_BASED_MAPPING, TARGET_ATTR); // optional
// addArgument(ATTRIBUTE_BASED_MAPPING, SOURCE_TYPE); // optional
// addArgument(ATTRIBUTE_BASED_MAPPING, TARGET_TYPE); // required
// addArgument(ATTRIBUTE_BASED_MAPPING, FIRST_ONLY); // optional
// addDescription(ATTRIBUTE_BASED_MAPPING, "Mapping IDs of the sourceidtype(s) in "
// + "sourceattribute to IDs of the targetidtype and save them to targetattribute.");
//
// addArgument(GENERAL_MAPPING, SOURCE_ID);
// addArgument(GENERAL_MAPPING, SOURCE_TYPE);
// addArgument(GENERAL_MAPPING, TARGET_TYPE);
// addArgument(GENERAL_MAPPING, FIRST_ONLY);
// addDescription(GENERAL_MAPPING, "Mapping sourceid(s) of sourcetype to targettype.");
//
// addArgument(CHECK_ID_EXIST, SOURCE_ID);
// addArgument(CHECK_ID_EXIST, SOURCE_TYPE);
// addDescription(CHECK_ID_EXIST, "Check if ID exists.");
//
// addArgument(GUESS_TYPE, SOURCE_ID);
// addDescription(GUESS_TYPE, "Guess ID types from a set of IDs (only ID types in the selected resources will be included).");
//
// }
//
//
// /**
// * commandName returns the command name. This is used to build the
// * hash table of commands to hand to the command parser
// *
// * @return name of the command
// */
// public String getHandlerName() { return namespace.getNamespaceName(); }
//
// public CyCommandResult execute(String command, Collection<Tunable>args) throws CyCommandException {
// return execute(command, createKVMap(args));
// }
//
// public CyCommandResult execute(String command, Map<String, Object>args) throws CyCommandException {
// if (command.equals(VERSION))
// return version(command, args);
// if (command.equals(MAIN_DIALOG))
// return mainDialog(command, args);
// if (command.equals(RESOURCE_DIALOG))
// return resourcesDialog(command, args);
// if (command.equals(LIST_RESOURCE))
// return listResources(command, args);
// if (command.equals(LIST_SELECTED_RESOURCE))
// return listSelectedResources(command, args);
// if (command.equals(ADD_RESOURCE))
// return addResource(command, args);
// if (command.equals(REMOVE_RESOURCE))
// return removeResource(command, args);
// if (command.equals(SELECT_RESOURCE))
// return selectResource(command, args);
// if (command.equals(DESELECT_RESOURCE))
// return deselectResource(command, args);
// if (command.equals(GET_SRC_ID_TYPES))
// return getSrcIdTypes(command, args);
// if (command.equals(GET_TGT_ID_TYPES))
// return getTgtIdTypes(command, args);
// if (command.equals(CHECK_MAPPING_SUPPORT))
// return isMappingSupported(command, args);
// if (command.equals(ATTRIBUTE_BASED_MAPPING))
// return attributeBasedMapping(command, args);
// if (command.equals(GENERAL_MAPPING))
// return generalMapping(command, args);
// if (command.equals(CHECK_ID_EXIST))
// return idExists(command, args);
// if (command.equals(GUESS_TYPE))
// return guessIDTypes(command, args);
// throw new CyCommandException(getHandlerName()+": unknown command "+command);
// }
//
// private CyCommandResult version(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// result.addResult(BridgeDbApp.VERSION);
// result.addMessage("Current version: "+BridgeDbApp.VERSION);
// return result;
// }
//
// private CyCommandResult mainDialog(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// final BridgeDbDialog dialog = new BridgeDbDialog(Cytoscape.getDesktop(), true);
// dialog.setLocationRelativeTo(Cytoscape.getDesktop());
// dialog.setMapSrcAttrIDTypes(BridgeDbApp.mapSrcAttrIDTypes);
// dialog.setVisible(true);
// result.addResult(!dialog.isCancelled());
// return result;
// }
//
// private CyCommandResult resourcesDialog(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// IDMappingSourceConfigDialog srcConfDialog
// = new IDMappingSourceConfigDialog(Cytoscape.getDesktop(), true);
// srcConfDialog.setVisible(true);
// result.addResult(srcConfDialog.isModified());
// return result;
// }
//
// private CyCommandResult listResources(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// Set<String> mappers = new HashSet();
// Set<IDMapperClient> clients = IDMapperClientManager.allClients();
// String message = "There are "+clients.size()+" ID mapping resources:\n";
//
// for (IDMapperClient client : clients) {
// String connStr = client.getConnectionString();
// mappers.add(connStr);
// message += "\t"+connStr+"[class: "+client.getClassString()+"]"+"\n";
// }
//
// result.addMessage(message);
// result.addResult(mappers);
// return result;
// }
//
// private CyCommandResult listSelectedResources(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// Set<String> mappers = new HashSet();
// Set<IDMapperClient> clients = IDMapperClientManager.selectedClients();
// String message = "There are selected "+clients.size()+" ID mapping resources:\n";
//
// for (IDMapperClient client : clients) {
// String connStr = client.getConnectionString();
// mappers.add(connStr);
// message += "\t"+connStr+"[class: "+client.getClassString()+"]"+"\n";
// }
//
// result.addMessage(message);
// result.addResult(mappers);
// return result;
// }
//
// private CyCommandResult addResource(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// String classPath = getArg(command, CLASS_PATH, args);
// String connString = getArg(command, CONN_STRING, args);
// String displayName = getArg(command, DISPLAY_NAME, args);
// if (connString == null || classPath==null)
// throw new CyCommandException(CLASS_PATH + " and " + CONN_STRING + " cannot be null.");
//
// if (displayName==null)
// displayName = connString;
//
// try {
// IDMapperClient client = new IDMapperClientImpl
// .Builder(connString, classPath)
// .displayName(displayName)
// .build();
// boolean succ = IDMapperClientManager.registerClient(client, true, true);
// if (succ)
// result.addMessage("Successfully registered");
// else
// result.addError("Failed to register the resource\n");
// } catch (Exception e) {
// throw new CyCommandException(e);
//// result.addError("Failed to register the resource\n"+e.getMessage());
// }
// return result;
// }
//
// private CyCommandResult removeResource(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// String connString = getArg(command, CONN_STRING, args);
// if (connString == null)
// throw new CyCommandException(CONN_STRING + " cannot be null.");
//
// try {
// if (IDMapperClientManager.removeClient(connString)) {
// result.addResult(Boolean.TRUE);
// result.addMessage("Successfully unregistered");
// } else {
// result.addResult(Boolean.FALSE);
// result.addMessage("Could not unregister. The specific ID mapping resource might not exist.");
// }
//
// } catch (Exception e) {
// throw new CyCommandException(e);
//// result.addError("Failed to remove the resource\n"+e.getMessage());
// }
// return result;
// }
//
// private CyCommandResult selectResource(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// String connString = getArg(command, CONN_STRING, args);
// if (connString == null)
// throw new CyCommandException(CONN_STRING + " cannot be null.");
//
// try {
// IDMapperClient client = IDMapperClientManager.getClient(connString);
// if (client == null) {
// result.addResult(Boolean.FALSE);
// result.addMessage("Could not select the specific ID mapping resource since it did not exist.");
// } else {
// IDMapperClientManager.setClientSelection(client, true);
// result.addResult(Boolean.TRUE);
// result.addMessage("Selected.");
// }
// } catch (Exception e) {
// throw new CyCommandException(e);
//// result.addError("Failed to remove the resource\n"+e.getMessage());
// }
// return result;
// }
//
// private CyCommandResult deselectResource(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// String connString = getArg(command, CONN_STRING, args);
// if (connString == null)
// throw new CyCommandException(CONN_STRING + "cannot be null.");
//
// try {
// IDMapperClient client = IDMapperClientManager.getClient(connString);
// if (client == null) {
// result.addResult(Boolean.FALSE);
// result.addMessage("Could not deselect the specific ID mapping resource since it did not exist.");
// } else {
// IDMapperClientManager.setClientSelection(client, false);
// result.addResult(Boolean.TRUE);
// result.addMessage("Deselected.");
// }
// } catch (Exception e) {
// // throw new CyCommandException(e);
// result.addError("Failed to remove the resource\n"+e.getMessage());
// }
// return result;
// }
//
// private CyCommandResult getSrcIdTypes(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// Set<String> types = new HashSet();
// Set<DataSourceWrapper> dss = IDMapperClientManager.getSupportedSrcTypes();
// StringBuilder message = new StringBuilder();
// message.append("There are ");
// message.append(dss.size());
// message.append(" supported source ID types:\n");
// for (DataSourceWrapper ds : dss) {
// types.add(ds.value());
// message.append("\t");
// message.append(ds.value());
// message.append("\n");
// }
//
// result.addMessage(message.toString());
// result.addResult(types);
// return result;
// }
//
// private CyCommandResult getTgtIdTypes(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// Set<String> types = new HashSet();
// Set<DataSourceWrapper> dss = IDMapperClientManager.getSupportedTgtTypes();
// StringBuilder message = new StringBuilder();
// message.append("There are ");
// message.append(dss.size());
// message.append(" supported target ID types:\n");
// for (DataSourceWrapper ds : dss) {
// types.add(ds.value());
// message.append("\t");
// message.append(ds.value());
// message.append("\n");
// }
//
// result.addMessage(message.toString());
// result.addResult(types);
// return result;
// }
//
// private CyCommandResult isMappingSupported(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// String srctype = getArg(command, SOURCE_TYPE, args);
// String tgttype = getArg(command, TARGET_TYPE, args);
// if (srctype == null || tgttype==null)
// throw new CyCommandException(SOURCE_TYPE + " and " + TARGET_TYPE + " cannot be null.");
//
// Set<DataSourceWrapper> srcTypes = IDMapperClientManager.getSupportedSrcTypes();
// DataSourceWrapper srcds = DataSourceWrapper.getInstance(srctype);
// if (!srcTypes.contains(srcds)){
// result.addResult(Boolean.FALSE);
// result.addMessage(srctype + " is not supported.");
// }
// Set<DataSourceWrapper> tgtTypes = IDMapperClientManager.getSupportedTgtTypes();
// DataSourceWrapper tgtds = DataSourceWrapper.getInstance(tgttype);
// if (!tgtTypes.contains(tgtds)){
// result.addResult(Boolean.FALSE);
// result.addMessage(tgttype + " is not supported.");
// }
// try {
// if (IDMapperClientManager.isMappingSupported(srcds, tgtds)) {
// result.addResult(Boolean.TRUE);
// result.addMessage("Yes, mapping from "+srctype+" to "+tgttype+" is supported.");
// } else {
// result.addResult(Boolean.FALSE);
// result.addMessage("No, mapping from "+srctype+" to "+tgttype+" is not supported.");
// }
// } catch (Exception e) {
// throw new CyCommandException(e);
// }
// return result;
// }
//
// private CyCommandResult attributeBasedMapping(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
//
// Set<CyNetwork> networks = new HashSet();
//
// // parse networks
// Object obj = args.get(NETWORK_LIST);
// if (obj==null) {
// //succ = false;
// //error.append("Message content does not contain field \"" + NETWORK_ID +"\"\n");
// // maping id for all networks
// networks.addAll(Cytoscape.getNetworkSet());
// }else{
// if (obj instanceof CyNetwork) {
// networks.add((CyNetwork)obj);
// } else if (obj instanceof String) {
// String netId = (String)obj;
// CyNetwork network = Cytoscape.getNetwork(netId);
// if (network!=null && network!=Cytoscape.getNullNetwork()) {
// networks.add(network);
// } else {
// throw new CyCommandException("Network "+netId+" does not exist.");
// }
// } else if (obj instanceof Collection) {
// Collection nets = (Collection)obj;
// for (Object net : nets) {
// if (net instanceof CyNetwork) {
// networks.add((CyNetwork)net);
// } else if (net instanceof String) {
// String netId = (String)obj;
// CyNetwork network = Cytoscape.getNetwork(netId);
// if (network!=null && network!=Cytoscape.getNullNetwork()) {
// networks.add(network);
// } else {
// throw new CyCommandException("Network "+netId+" does not exist.");
// }
// }
// }
// } else {
// throw new CyCommandException(NETWORK_LIST+" must be String or Collection<String> "
// + "or CyNetwork or Collection<CyNetwork>.\n");
// }
// }
//
// if (networks.isEmpty()) {
// throw new CyCommandException("No network to work on.");
// }
//
// Set<String> attributes = new HashSet();
// attributes.addAll(java.util.Arrays.asList(Cytoscape.getNodeAttributes().getAttributeNames()));
//
// // parse source attributes
// Set<String> srcAttrs = new HashSet();
// obj = args.get(SOURCE_ATTR);
// if (obj==null) {
// throw new CyCommandException("Message content does not contain field \"" + SOURCE_ATTR +"\"");
// }else{
// if (obj instanceof String) {
// String attr = (String)obj;
// if (!attributes.contains(attr)) {
// throw new CyCommandException("Node attribute "+attr+" does not exist.");
// }
// srcAttrs.add(attr);
// } else if (obj instanceof Collection) {
// Collection<String> attrs = (Collection)obj;
// for (String attr : attrs) {
// if (!attributes.contains(attr)) {
// throw new CyCommandException("Node attribute "+attr+" does not exist.");
// }
// srcAttrs.add(attr);
// }
// } else {
// throw new CyCommandException(SOURCE_ATTR+" must be String or Collection<String>.\n");
// }
//
// if (srcAttrs.isEmpty()) {
// throw new CyCommandException("No source attribute to work on.");
// }
// }
//
// Set<DataSourceWrapper> srcDataSources = IDMapperClientManager.getSupportedSrcTypes();
// Set<DataSourceWrapper> tgtDataSources = IDMapperClientManager.getSupportedTgtTypes();
//
// if (srcDataSources==null || srcDataSources.isEmpty()
// || tgtDataSources==null || tgtDataSources.isEmpty()) {
// throw new CyCommandException("No supported source or target id type. Please select mapping resources first.");
// }
//
// // parse source type
// Set<DataSourceWrapper> srcTypes;
// obj = args.get(SOURCE_TYPE);
// if (obj==null) {
// srcTypes = srcDataSources;
// }else{
// srcTypes = new HashSet<DataSourceWrapper>();
// if (obj instanceof String) {
// String type = (String)obj;
// DataSourceWrapper dsw = DataSourceWrapper.getInstance(type);
// if (srcDataSources.contains(dsw)) {
// srcTypes.add(dsw);
// } else {
// throw new CyCommandException("Source ID type "+type+" does not exist.");
// }
// } else if (obj instanceof Set) {
// for (String type : (Set<String>)obj) {
// DataSourceWrapper dsw = DataSourceWrapper.getInstance(type);
// if (srcDataSources.contains(dsw)) {
// srcTypes.add(dsw);
// } else {
// throw new CyCommandException("Source ID type "+type+" does not exist.");
// }
// }
//
// if (srcTypes.isEmpty()) {
// throw new CyCommandException("No source ID type to work on.");
// }
// } else {
// throw new CyCommandException(SOURCE_TYPE+" must be String or Collection<String>.");
// }
// }
//
// //parse target id type
// String type = getArg(command, TARGET_TYPE, args);
// DataSourceWrapper tgtType = DataSourceWrapper.getInstance(type);
// if (!tgtDataSources.contains(tgtType)) {
// throw new CyCommandException("Please specified a supported target ID type.");
// }
//
// String tgtAttr = getArg(command, TARGET_ATTR, args);
// if (tgtAttr==null) {
// if (attributes.contains(type)) {
// int num = 1;
// while (attributes.contains(type+"."+num)) {
// num ++;
// }
// tgtAttr = type+"."+num;
// } else {
// tgtAttr = type;
// }
// } else {
// if (attributes.contains(tgtAttr)) {
//// throw new CyCommandException(tgtAttr+" is an existing attribute "
//// + "and hence cannot be used as target attribute name.");
// }
// }
//
// obj = args.get(FIRST_ONLY);
// boolean firstOnly = false;
// if (obj instanceof Boolean) {
// firstOnly = (Boolean)obj;
// } else if (obj instanceof String) {
// firstOnly = ((String)obj).equalsIgnoreCase("yes")
// || ((String)obj).equalsIgnoreCase("true");
// }
//
// // mapping ids
// AttributeBasedIDMappingImpl service
// = new AttributeBasedIDMappingImpl();
// Map<String,Set<DataSourceWrapper>> mapAttrTypes = new HashMap();
// for (String attr : srcAttrs) {
// mapAttrTypes.put(attr, srcTypes);
// }
//
// Map<String,DataSourceWrapper> mapTgtTypeAttr = Collections.singletonMap(tgtAttr, tgtType);
//
// Map<String,Byte> attrNameType = Collections.singletonMap(tgtAttr,
// firstOnly?CyAttributes.TYPE_STRING:CyAttributes.TYPE_SIMPLE_LIST);
// service.suggestTgtAttrType(attrNameType);
//
// try {
// service.map(networks, mapAttrTypes, mapTgtTypeAttr);
// } catch (Exception e) {
// throw new CyCommandException(e);
// }
//
// result.addMessage(service.getReport());
// result.addMessage("Target IDs were save to attribute: " + tgtAttr);
// result.addResult(TARGET_ATTR, tgtAttr);
// result.addResult(REPORT, service.getReport());
//
// return result;
// }
//
// private CyCommandResult generalMapping(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
// Set<String> srcIDs = null;
// Object obj = args.get(SOURCE_ID);
// if (obj instanceof String) {
// srcIDs = Collections.singleton((String)obj);
// } else if (obj instanceof Collection) {
// srcIDs = new HashSet((Collection<String>)obj);
// }
//
// String srcType = getArg(command, SOURCE_TYPE, args);
// String tgtType = getArg(command, TARGET_TYPE, args);
//
// if (srcIDs==null || srcType==null || tgtType==null) {
// throw new CyCommandException("Message content must contain " +
// "Source_ID, SOURCE_ID_TYPE and TARGET_ID_TYPE.");
// }
//
// if (!DataSource.getFullNames().contains(srcType)) {
// throw new CyCommandException("Source type \""+srcType+"\" does not exist.");
// }
//
// if (!DataSource.getFullNames().contains(tgtType)) {
// throw new CyCommandException("Target type \""+tgtType+"\" does not exist.");
// }
//
// Set<DataSourceWrapper> srcTypes = IDMapperClientManager.getSupportedSrcTypes();
// DataSourceWrapper srcDs = DataSourceWrapper.getInstance(srcType);
// if (!srcTypes.contains(srcDs))
// throw new CyCommandException(srcType + " is not supported.");
//
// Set<DataSourceWrapper> tgtTypes = IDMapperClientManager.getSupportedTgtTypes();
// DataSourceWrapper tgtDs = DataSourceWrapper.getInstance(tgtType);
// if (!tgtTypes.contains(tgtDs))
// throw new CyCommandException(tgtType + " is not supported.");
//
// if (!IDMapperClientManager.isMappingSupported(srcDs, tgtDs))
// throw new CyCommandException("Mapping from \""+srcDs+"\" to \""+tgtDs+"\" is not supported.");
//
// Set<XrefWrapper> srcXrefs = new HashSet(srcIDs.size());
// for (String id : srcIDs) {
// srcXrefs.add(new XrefWrapper(id, srcDs));
// }
//
// Set<DataSourceWrapper> tgtDataSources = Collections.singleton(tgtDs);
//
//
// Map<XrefWrapper,Set<XrefWrapper>> mapping = IDMapperWrapper.mapID(srcXrefs, tgtDataSources);
//
// if (mapping==null) {
// result.addError("No mapping was performed.");
// } else {
// Map<String, Set<String>> mapSrcIdTargetIDs = new HashMap(mapping.size());
// StringBuilder mappedId = new StringBuilder();
// for (XrefWrapper srcXref : mapping.keySet()) {
// Set<XrefWrapper> tgtXrefs = mapping.get(srcXref);
// if (tgtXrefs!=null) {
// String srcId = srcXref.getValue();
// Set<String> tgtIds = new HashSet();
// for (XrefWrapper tgtXref : tgtXrefs) {
// tgtIds.add(tgtXref.getValue());
// }
// mapSrcIdTargetIDs.put(srcId, tgtIds);
//
// mappedId.append(srcId);
// mappedId.append("<=>");
// mappedId.append(tgtIds.toString());
// mappedId.append("\n");
// }
// }
//
// result.addResult(mapSrcIdTargetIDs);
// result.addMessage(""+mapSrcIdTargetIDs.size()+"out of "+srcIDs.size()
// +" source IDs was mapping from type: "+srcType+" to type:"+tgtType
// +"\n"+mappedId.toString());
// }
//
// return result;
// }
//
// private CyCommandResult idExists(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
//
// String id = getArg(command, SOURCE_ID, args);
// String type = getArg(command, SOURCE_TYPE, args);
//
// if (id==null || type==null) {
// throw new CyCommandException("Null argument of "+SOURCE_ID+" or "+SOURCE_TYPE);
// }
//
// if (!DataSource.getFullNames().contains(type)) {
// throw new CyCommandException("Type \""+type+"\" does not exist.");
// }
//
// Set<DataSourceWrapper> srcTypes = IDMapperClientManager.getSupportedSrcTypes();
// DataSourceWrapper srcds = DataSourceWrapper.getInstance(type);
// if (!srcTypes.contains(srcds))
// throw new CyCommandException(type + " is not supported.");
//
// if (IDMapperWrapper.xrefExists(new XrefWrapper(id, srcds))) {
// result.addResult(Boolean.TRUE);
// result.addMessage(type+":"+id+" exists.");
// } else {
// result.addResult(Boolean.FALSE);
// result.addMessage(type+":"+id+" does not exist.");
// }
//
// return result;
// }
//
// private CyCommandResult guessIDTypes(String command, Map<String, Object>args) throws CyCommandException {
// CyCommandResult result = new CyCommandResult();
//
// Set<String> srcIDs = null;
// Object obj = args.get(SOURCE_ID);
// if (obj instanceof String) {
// srcIDs = Collections.singleton((String)obj);
// } else if (obj instanceof Collection) {
// srcIDs = new HashSet((Collection<String>)obj);
// }
//
// if (srcIDs==null || srcIDs.isEmpty()) {
// throw new CyCommandException("Parameter "+SOURCE_ID+" must contains one or more source IDs.");
// }
//
// Set<DataSource> selectedDss = new HashSet<DataSource>();
// try {
// IDMapperCapabilities cap = IDMapperClientManager.selectedIDMapperStack().getCapabilities();
// selectedDss.addAll(cap.getSupportedSrcDataSources());
// selectedDss.addAll(cap.getSupportedTgtDataSources());
// } catch (Exception e) {
// throw new CyCommandException(e);
// }
//
// Set<String> types = new HashSet<String>();
// for (String id : srcIDs) {
// Set<DataSource> dss = DataSourcePatterns.getDataSourceMatches(id);
// dss.retainAll(selectedDss);
// for (DataSource ds : dss)
// types.add(DataSourceUtil.getName(ds));
// }
//
// result.addResult(types);
//
// StringBuilder sb = new StringBuilder();
// sb.append(types.size());
// sb.append(" ID types matchs:\n");
// for (String type : types) {
// sb.append("\t");
// sb.append(type);
// sb.append("\n");
// }
// result.addMessage(sb.toString());
//
// return result;
// }
//
// public static CyCommandHandler register(String namespace) throws RuntimeException {
// // Get the namespace
// CyCommandNamespace ns = CyCommandManager.reserveNamespace(namespace);
//
// // Handle the simple commands ourselves
// CyCommandHandler ch = new BridgeDbNamespace(ns);
//
// return ch;
// }
}