diff --git a/portal/src/main/java/edu/isi/wings/portal/classes/config/Config.java b/portal/src/main/java/edu/isi/wings/portal/classes/config/Config.java index 67576005..dd6daa3f 100644 --- a/portal/src/main/java/edu/isi/wings/portal/classes/config/Config.java +++ b/portal/src/main/java/edu/isi/wings/portal/classes/config/Config.java @@ -52,19 +52,35 @@ import edu.isi.wings.portal.controllers.DomainController; public class Config { + public static final String MAIN_SERVER_URL_KEY = "server"; + public static final String MAIN_GRAPHVIZ_KEY = "graphviz"; + public static final String MAIN_CLIENTS_KEY = "clients"; + public static final String EXECUTION_ENGINE_PROPERTIES = "execution.engine.properties."; + public static final String EXECUTION_ENGINE_TYPE = "execution.engine.type"; + public static final String EXECUTION_ENGINE_IMPLEMENTATION = "execution.engine.implementation"; + public static final String EXECUTION_ENGINE_1_NAME = "execution.engine(-1).name"; + public static final String ONTOLOGY_RESOURCE_KEY = "ontology.resource"; + public static final String ONTOLOGY_EXECUTION_KEY = "ontology.execution"; + public static final String ONTOLOGY_WORKFLOW_KEY = "ontology.workflow"; + public static final String ONTOLOGY_COMPONENT_KEY = "ontology.component"; + public static final String ONTOLOGY_DATA_KEY = "ontology.data"; + public static final String STORAGE_TDB_KEY = "storage.tdb"; + public static final String STORAGE_LOCAL_KEY = "storage.local"; + // The Portal configuration properties file. Order of checking: // 1. Check "config.file" servlet context parameter // 2. Check ${user.home}/.wings/portal.properties if ${user.home} is present // 3. Check /etc/wings/portal.properties private String configFile; + // Configuration objects + private MainConfig mainConfig; + private OntologyConfig ontologyConfig; + // The following are loaded from the config file private String storageDirectory; private String tdbDirectory; private String logsDirectory; - private String dotFile; - private String serverUrl; - private OntologyConfig ontologyConfig; private boolean deleteRunOutputs; @@ -79,9 +95,6 @@ public class Config { private PlannerConfig plannerConfig = new PlannerConfig(); - // Comma separated list of spellbook client hosts - private String clients; - // The following are set from the "request" variable private String viewerId; private String userId; @@ -244,7 +257,8 @@ private void initializeUserConfig(HttpServletRequest request, String userid, Str if (!this.checkUser(null)) return; - this.exportUserUrl = serverUrl + contextRootPath + exportServletPath + "/" + usersRelativeDir + this.exportUserUrl = this.mainConfig.getServerUrl() + contextRootPath + exportServletPath + "/" + + usersRelativeDir + "/" + userId; this.userDir = storageDirectory + File.separator + usersRelativeDir + File.separator + userId; @@ -320,13 +334,11 @@ private void initializePortalConfig(HttpServletRequest request) { this.contextRootPath = request.getContextPath(); PropertyListConfiguration serverConfig = getPortalConfiguration(request); - this.storageDirectory = serverConfig.getString("storage.local"); - this.tdbDirectory = serverConfig.getString("storage.tdb"); - this.serverUrl = serverConfig.getString("server"); - this.dotFile = serverConfig.getString("graphviz"); - this.clients = serverConfig.getString("clients"); - this.ontologyConfig = new OntologyConfig(serverConfig); + this.storageDirectory = serverConfig.getString(STORAGE_LOCAL_KEY); + this.tdbDirectory = serverConfig.getString(STORAGE_TDB_KEY); + this.mainConfig = new MainConfig(serverConfig); + this.ontologyConfig = new OntologyConfig(serverConfig); if (serverConfig.containsKey("metaworkflows")) this.hasMetaWorkflows = serverConfig.getBoolean("metaworkflows"); @@ -365,7 +377,7 @@ private void initializePortalConfig(HttpServletRequest request) { if (!logdir.exists() && !logdir.mkdirs()) System.err.println("Cannot create logs directory : " + logdir.getAbsolutePath()); - this.exportCommunityUrl = serverUrl + contextRootPath + exportServletPath + "/" + this.exportCommunityUrl = this.mainConfig.getServerUrl() + contextRootPath + exportServletPath + "/" + communityRelativeDir; this.communityPath = contextRootPath + "/" + usersRelativeDir + "/" + communityRelativeDir; @@ -527,20 +539,20 @@ private void createDefaultPortalConfig(HttpServletRequest request) { System.err.println("Cannot create storage directory: " + storageDir); PropertyListConfiguration config = new PropertyListConfiguration(); - config.addProperty("storage.local", storageDir); - config.addProperty("storage.tdb", storageDir + File.separator + "TDB"); - config.addProperty("server", server); + config.addProperty(STORAGE_LOCAL_KEY, storageDir); + config.addProperty(STORAGE_TDB_KEY, storageDir + File.separator + "TDB"); + config.addProperty(MAIN_SERVER_URL_KEY, server); File loc1 = new File("/usr/bin/dot"); File loc2 = new File("/usr/local/bin/dot"); - config.addProperty("graphviz", loc2.exists() ? loc2.getAbsolutePath() : loc1.getAbsolutePath()); + config.addProperty(MAIN_GRAPHVIZ_KEY, loc2.exists() ? loc2.getAbsolutePath() : loc1.getAbsolutePath()); OntologyConfig ontConfig = new OntologyConfig(); - config.addProperty("ontology.data", ontConfig.getDataOntologyUrl()); - config.addProperty("ontology.component", ontConfig.getComponentOntologyUrl()); - config.addProperty("ontology.workflow", ontConfig.getWorkflowOntologyUrl()); - config.addProperty("ontology.execution", ontConfig.getExecutionOntologyUrl()); - config.addProperty("ontology.resource", ontConfig.getResourceOntologyUrl()); + config.addProperty(ONTOLOGY_DATA_KEY, ontConfig.getDataOntologyUrl()); + config.addProperty(ONTOLOGY_COMPONENT_KEY, ontConfig.getComponentOntologyUrl()); + config.addProperty(ONTOLOGY_WORKFLOW_KEY, ontConfig.getWorkflowOntologyUrl()); + config.addProperty(ONTOLOGY_EXECUTION_KEY, ontConfig.getExecutionOntologyUrl()); + config.addProperty(ONTOLOGY_RESOURCE_KEY, ontConfig.getResourceOntologyUrl()); this.addEngineConfig(config, new ExeEngine("Local", LocalExecutionEngine.class.getCanonicalName(), ExeEngine.Type.BOTH)); @@ -555,11 +567,11 @@ private void createDefaultPortalConfig(HttpServletRequest request) { } private void addEngineConfig(PropertyListConfiguration config, ExeEngine engine) { - config.addProperty("execution.engine(-1).name", engine.getName()); - config.addProperty("execution.engine.implementation", engine.getImplementation()); - config.addProperty("execution.engine.type", engine.getType()); + config.addProperty(EXECUTION_ENGINE_1_NAME, engine.getName()); + config.addProperty(EXECUTION_ENGINE_IMPLEMENTATION, engine.getImplementation()); + config.addProperty(EXECUTION_ENGINE_TYPE, engine.getType()); for (Entry entry : engine.getProperties().entrySet()) - config.addProperty("execution.engine.properties." + entry.getKey(), entry.getValue()); + config.addProperty(EXECUTION_ENGINE_PROPERTIES + entry.getKey(), entry.getValue()); } public Properties getProperties() { @@ -594,7 +606,7 @@ public Properties getProperties(Domain domain) { props.setProperty("tdb.repository.dir", this.getTripleStoreDir()); } props.setProperty("logs.dir", this.getLogsDirectory()); - props.setProperty("dot.path", this.getDotFile()); + props.setProperty("dot.path", this.getMainConfig().getDotFile()); props.setProperty("lib.resource.url", this.getExportCommunityUrl() + "/resource/library.owl"); @@ -720,14 +732,6 @@ public void setExportUserUrl(String exportUserUrl) { this.exportUserUrl = exportUserUrl; } - public String getServerUrl() { - return serverUrl; - } - - public void setServerUrl(String serverUrl) { - this.serverUrl = serverUrl; - } - public String getCommunityPath() { return communityPath; } @@ -820,14 +824,6 @@ public void setSandboxed(boolean isSandboxed) { this.isSandboxed = isSandboxed; } - public String getDotFile() { - return dotFile; - } - - public void setDotFile(String dotFile) { - this.dotFile = dotFile; - } - public boolean isDeleteRunOutputs() { return deleteRunOutputs; } @@ -836,14 +832,6 @@ public void setDeleteRunOutputs(boolean deleteRunOutputs) { this.deleteRunOutputs = deleteRunOutputs; } - public String getClients() { - return clients; - } - - public void setClients(String clients) { - this.clients = clients; - } - public String getStorageDirectory() { return storageDirectory; } @@ -872,4 +860,7 @@ public void setOntologyConfig(OntologyConfig ontologyConfig) { this.ontologyConfig = ontologyConfig; } + public MainConfig getMainConfig() { + return mainConfig; + } } diff --git a/portal/src/main/java/edu/isi/wings/portal/classes/config/MainConfig.java b/portal/src/main/java/edu/isi/wings/portal/classes/config/MainConfig.java new file mode 100644 index 00000000..dac7d49d --- /dev/null +++ b/portal/src/main/java/edu/isi/wings/portal/classes/config/MainConfig.java @@ -0,0 +1,44 @@ +package edu.isi.wings.portal.classes.config; + +import org.apache.commons.configuration.plist.PropertyListConfiguration; + +public class MainConfig { + + // Comma separated list of spellbook client hosts + private String clients; + private String dotFile; + private String serverUrl; + + public MainConfig() { + } + + public MainConfig(PropertyListConfiguration serverConfig) { + this.clients = serverConfig.getString(Config.MAIN_CLIENTS_KEY); + this.dotFile = serverConfig.getString(Config.MAIN_GRAPHVIZ_KEY); + this.serverUrl = serverConfig.getString(Config.MAIN_SERVER_URL_KEY); + } + + public String getClients() { + return clients; + } + + public void setClients(String clients) { + this.clients = clients; + } + + public String getDotFile() { + return dotFile; + } + + public void setDotFile(String dotFile) { + this.dotFile = dotFile; + } + + public String getServerUrl() { + return serverUrl; + } + + public void setServerUrl(String serverUrl) { + this.serverUrl = serverUrl; + } +} diff --git a/portal/src/main/java/edu/isi/wings/portal/controllers/DataController.java b/portal/src/main/java/edu/isi/wings/portal/controllers/DataController.java index f054286e..e9069b8d 100644 --- a/portal/src/main/java/edu/isi/wings/portal/controllers/DataController.java +++ b/portal/src/main/java/edu/isi/wings/portal/controllers/DataController.java @@ -83,8 +83,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.asynchttpclient.Dsl.basicAuthRealm; - -public class DataController { +public class DataController { public String dcns; public String domns; public String libns; @@ -94,7 +93,7 @@ public class DataController { public ComponentCreationAPI cc; public ProvenanceAPI prov; public RunController rc; - + public boolean loadExternal; public Config config; public Properties props; @@ -109,21 +108,21 @@ public DataController(Config config, boolean load_external) { this.props = config.getProperties(); dc = DataFactory.getCreationAPI(props); - if(this.loadExternal) - dc = dc.getExternalCatalog(); - + if (this.loadExternal) + dc = dc.getExternalCatalog(); + cc = ComponentFactory.getCreationAPI(props); tc = TemplateFactory.getCreationAPI(props); - + prov = ProvenanceFactory.getAPI(props); - + this.rc = new RunController(config); - this.dcns = (String) props.get("ont.data.url") + "#"; - this.domns = (String) props.get("ont.domain.data.url") + "#"; - this.libns = (String) props.get("lib.domain.data.url") + "#"; - - this.trustAllCertificates(); + this.dcns = (String) props.get("ont.data.url") + "#"; + this.domns = (String) props.get("ont.domain.data.url") + "#"; + this.libns = (String) props.get("lib.domain.data.url") + "#"; + + this.trustAllCertificates(); } /* @@ -132,19 +131,19 @@ public DataController(Config config, boolean load_external) { public String getDataJSON(String dataid) { if (this.dc == null) return "{}"; - + String location = this.dc.getDataLocation(dataid); DataItem dtype = this.dc.getDatatypeForData(dataid); - if(dtype == null) - return null; - + if (dtype == null) + return null; + ArrayList props = this.dc.getMetadataProperties(dtype.getID(), false); ArrayList propids = new ArrayList(); for (MetadataProperty prop : props) propids.add(prop.getID()); ArrayList vals = this.dc.getMetadataValues(dataid, propids); String sensor = this.dc.getTypeSensor(dtype.getID()); - + HashMap details = new HashMap(); details.put("dtype", dtype.getID()); details.put("location", location); @@ -172,106 +171,103 @@ public String getDatatypeJSON(String dtype) { public String getDataHierarchyJSON() { DataTree tree = dc.getDataHierarchy(); String dtree = null; - if(tree != null) + if (tree != null) dtree = json.toJson(tree.getRoot()); return dtree; } - - public String getSensorWorkflowsListJSON() { - ArrayList list = new ArrayList(); - for(String tid : this.tc.getTemplateList()) { - if(tid.contains("#Extractor_")) { - list.add(tid); - } - } - return json.toJson(list); - } - - public String getSensorComponentsListJSON() { - ArrayList list = new ArrayList(); - ComponentTree tree = this.cc.getComponentHierarchy(false); - ComponentTreeNode root = tree.getRoot(); - ComponentTreeNode extractorRoot = null; - for (ComponentTreeNode child : root.getChildren()) { - if (child.getCls().getID().contains("#MetadataExtraction")) { - extractorRoot = child; - break; - } - } - if(extractorRoot != null) { - for(ComponentTreeNode extractorNode : tree.flatten(extractorRoot)) { - Component c = extractorNode.getCls().getComponent(); - if(c != null && c.getType() == Component.CONCRETE) { - list.add(c.getID()); - } - } - } - return json.toJson(list); - } - + + public String getSensorWorkflowsListJSON() { + ArrayList list = new ArrayList(); + for (String tid : this.tc.getTemplateList()) { + if (tid.contains("#Extractor_")) { + list.add(tid); + } + } + return json.toJson(list); + } + + public String getSensorComponentsListJSON() { + ArrayList list = new ArrayList(); + ComponentTree tree = this.cc.getComponentHierarchy(false); + ComponentTreeNode root = tree.getRoot(); + ComponentTreeNode extractorRoot = null; + for (ComponentTreeNode child : root.getChildren()) { + if (child.getCls().getID().contains("#MetadataExtraction")) { + extractorRoot = child; + break; + } + } + if (extractorRoot != null) { + for (ComponentTreeNode extractorNode : tree.flatten(extractorRoot)) { + Component c = extractorNode.getCls().getComponent(); + if (c != null && c.getType() == Component.CONCRETE) { + list.add(c.getID()); + } + } + } + return json.toJson(list); + } + private HashMap convertNodeToUINode(DataTreeNode node) { - if(node == null) - return null; - - DataItem item = node.getItem(); - HashMap treeNode = new HashMap(); - - treeNode.put("text", item.getName()); - treeNode.put("id", item.getID()); - treeNode.put("isClass", (item.getType() == 1 ? true : false)); - treeNode.put("iconCls", (item.getType() == 1 ? "icon-folder fa fa-yellow": - "icon-file-alt fa fa-blue")); - treeNode.put("expIconCls", (item.getType() == 1 ? "icon-folder-open fa fa-yellow": - "icon-file-alt fa fa-blue")); - treeNode.put("expanded", false); - treeNode.put("leaf", (item.getType() == 1 ? false : true)); - treeNode.put("draggable", (item.getType() == 1)); - return treeNode; - } - + if (node == null) + return null; + + DataItem item = node.getItem(); + HashMap treeNode = new HashMap(); + + treeNode.put("text", item.getName()); + treeNode.put("id", item.getID()); + treeNode.put("isClass", (item.getType() == 1 ? true : false)); + treeNode.put("iconCls", (item.getType() == 1 ? "icon-folder fa fa-yellow" : "icon-file-alt fa fa-blue")); + treeNode.put("expIconCls", (item.getType() == 1 ? "icon-folder-open fa fa-yellow" : "icon-file-alt fa fa-blue")); + treeNode.put("expanded", false); + treeNode.put("leaf", (item.getType() == 1 ? false : true)); + treeNode.put("draggable", (item.getType() == 1)); + return treeNode; + } + public String getNodeDataHierarchyJSON(String nodeid) { - DataTree tree = dc.getNodeDataHierarchy(nodeid); - String dtree = null; - if(tree != null) { - HashMap treeNode = new HashMap(); - ArrayList children = tree.getRoot().getChildren(); - if (children != null && children.size() > 0) { - ArrayList> uichildren = new ArrayList>(); - for(DataTreeNode childnode : children) { - uichildren.add(this.convertNodeToUINode(childnode)); - } - treeNode.put("children", uichildren); - } - dtree = json.toJson(treeNode); - } - return dtree; + DataTree tree = dc.getNodeDataHierarchy(nodeid); + String dtree = null; + if (tree != null) { + HashMap treeNode = new HashMap(); + ArrayList children = tree.getRoot().getChildren(); + if (children != null && children.size() > 0) { + ArrayList> uichildren = new ArrayList>(); + for (DataTreeNode childnode : children) { + uichildren.add(this.convertNodeToUINode(childnode)); + } + treeNode.put("children", uichildren); + } + dtree = json.toJson(treeNode); + } + return dtree; } public String getDataListJSON() { - HashMap> typeInstances = dc.getAllDatatypeDatasets(); - return json.toJson(typeInstances); + HashMap> typeInstances = dc.getAllDatatypeDatasets(); + return json.toJson(typeInstances); } - + public String getMetricsHierarchyJSON() { DataTree tree = dc.getMetricsHierarchy(); String mtree = null; - if(tree != null) + if (tree != null) mtree = json.toJson(tree.getRoot()); return mtree; } public String publishData(String dataid) { String location = dc.getDataLocation(dataid); - if(location != null) { + if (location != null) { File datafile = new File(location); - if(config.getPublisher() != null) { + if (config.getPublisher() != null) { return this.uploadFile(config.getPublisher().getUploadServer(), datafile); - } - else { + } else { return null; } } - return null; + return null; } private String uploadFile(ServerDetails server, File datafile) { @@ -279,10 +275,10 @@ private String uploadFile(ServerDetails server, File datafile) { String username = server.getUsername(); String password = server.getPassword(); - if (username == null || password == null){ + if (username == null || password == null) { return "missing username or password " + upUrl + " " + username + " " + password; } - if(datafile.exists()) { + if (datafile.exists()) { AsyncHttpClient client = Dsl.asyncHttpClient(); InputStream inputStream; @@ -291,11 +287,10 @@ private String uploadFile(ServerDetails server, File datafile) { try { org.asynchttpclient.Response response = client.preparePost(upUrl) .setRealm(basicAuthRealm(username, password).setUsePreemptiveAuth(true)) - .addBodyPart(new - InputStreamPart( - datafile.getName(), inputStream, datafile.getName(), -1, - "application/octet-stream", UTF_8) - ).execute().get(); + .addBodyPart(new InputStreamPart( + datafile.getName(), inputStream, datafile.getName(), -1, + "application/octet-stream", UTF_8)) + .execute().get(); return response.getResponseBody(); } catch (InterruptedException e) { return null; @@ -304,16 +299,16 @@ private String uploadFile(ServerDetails server, File datafile) { } } catch (FileNotFoundException e) { - return null; + return null; } } return null; } - + public Response streamData(String dataid, ServletContext context) { String location = dc.getDataLocation(dataid); - - if(location != null) { + + if (location != null) { // Check if this is a file url File f = null; try { @@ -323,10 +318,10 @@ public Response streamData(String dataid, ServletContext context) { // Do nothing } // Else assume it's a file path - if(f == null) + if (f == null) f = new File(location); - return StorageHandler.streamFile(f.getAbsolutePath(), context); + return StorageHandler.streamFile(f.getAbsolutePath(), context); } return null; } @@ -339,141 +334,138 @@ public synchronized boolean saveDataJSON(String dataid, String propvals_json) { return false; try { - JsonParser parser = new JsonParser(); - JsonElement propvals = parser.parse(propvals_json); - - DataItem dtype = dc.getDatatypeForData(dataid); - ArrayList props = dc.getMetadataProperties(dtype.getID(), false); - - ArrayList propids = new ArrayList(); - HashMap pinfos = new HashMap(); - for (MetadataProperty prop : props) { - propids.add(prop.getID()); - pinfos.put(prop.getID(), prop); - } - - dc.start_write(); - dc.start_batch_operation(); - - dc.removeAllPropertyValues(dataid, propids); - for (JsonElement propval : propvals.getAsJsonArray()) { - JsonObject pval = propval.getAsJsonObject(); - String propid = pval.get("name").getAsString(); - String value = pval.get("value").getAsString(); - MetadataProperty pinfo = pinfos.get(propid); - if(pinfo != null) { - if (pinfo.isDatatypeProperty()) { - if (value.equals("") && !pinfo.getRange().contains("string")) - continue; - dc.addDatatypePropertyValue(dataid, propid, value, pinfo.getRange()); - } else { - dc.addObjectPropertyValue(dataid, propid, this.domns + value.toString()); - } - } - } - dc.stop_batch_operation(); - - String provlog = "Updating metadata"; - Provenance p = new Provenance(dataid); - p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); - return - dc.save() && dc.end() && - prov.addProvenance(p); - } - catch (Exception e) { - e.printStackTrace(); - dc.stop_batch_operation(); - dc.end(); - return false; + JsonParser parser = new JsonParser(); + JsonElement propvals = parser.parse(propvals_json); + + DataItem dtype = dc.getDatatypeForData(dataid); + ArrayList props = dc.getMetadataProperties(dtype.getID(), false); + + ArrayList propids = new ArrayList(); + HashMap pinfos = new HashMap(); + for (MetadataProperty prop : props) { + propids.add(prop.getID()); + pinfos.put(prop.getID(), prop); + } + + dc.start_write(); + dc.start_batch_operation(); + + dc.removeAllPropertyValues(dataid, propids); + for (JsonElement propval : propvals.getAsJsonArray()) { + JsonObject pval = propval.getAsJsonObject(); + String propid = pval.get("name").getAsString(); + String value = pval.get("value").getAsString(); + MetadataProperty pinfo = pinfos.get(propid); + if (pinfo != null) { + if (pinfo.isDatatypeProperty()) { + if (value.equals("") && !pinfo.getRange().contains("string")) + continue; + dc.addDatatypePropertyValue(dataid, propid, value, pinfo.getRange()); + } else { + dc.addObjectPropertyValue(dataid, propid, this.domns + value.toString()); + } + } + } + dc.stop_batch_operation(); + + String provlog = "Updating metadata"; + Provenance p = new Provenance(dataid); + p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); + return dc.save() && dc.end() && + prov.addProvenance(p); + } catch (Exception e) { + e.printStackTrace(); + dc.stop_batch_operation(); + dc.end(); + return false; } } - + public synchronized String registerData(String dataid, String newname, String metadata_json) { - try { - JsonParser parser = new JsonParser(); - JsonElement propvals = parser.parse(metadata_json); - JsonObject pvals = propvals.getAsJsonObject(); - if(pvals.get("type") == null) - return "Datatype not known"; - - // Choose the most specific type - DataTree tree = dc.getDatatypeHierarchy(); - String dtypeid = null; - for(JsonElement el : pvals.get("type").getAsJsonArray()) { - String tmpid = el.getAsString(); - if(dtypeid == null) - dtypeid = tmpid; - else { - DataTreeNode dnode = tree.findNode(dtypeid); - if(dnode.hasChild(tree.findNode(tmpid), false)) - dtypeid = tmpid; - } - } - - String dloc = dc.getDataLocation(dataid); - if(dloc == null) - return "Existing data not found on server"; - - String newid = this.libns + newname; - String newloc = dc.getDataLocation(newid); - if(!dc.addData(newid, dtypeid)) - return "Could not add data"; - - if(!dataid.equals(newid)) { - File origf = new File(dloc); - File newf = new File(origf.getParentFile().getAbsolutePath()+File.separator+newname); - newloc = newf.getAbsolutePath(); - if(origf.exists() && !newf.exists()) - FileUtils.copyFile(origf, newf); - } - if(newloc == null) - return "Cannot find location for new data"; - - if(!dc.setDataLocation(newid, newloc)) - return "Could not set data location"; - - ArrayList props = dc.getMetadataProperties(dtypeid, false); - HashMap pinfos = new HashMap(); - for (MetadataProperty prop : props) { - pinfos.put(prop.getName(), prop); - } - - for(Entry entry : pvals.entrySet()) { - String pname = entry.getKey(); - for(JsonElement el : entry.getValue().getAsJsonArray()) { - String value = el.getAsString(); - MetadataProperty pinfo = pinfos.get(pname); - if(pinfo != null) { - if (pinfo.isDatatypeProperty()) { - if (value.equals("") && !pinfo.getRange().contains("string")) - continue; - dc.addDatatypePropertyValue(newid, pinfo.getID(), value, pinfo.getRange()); - } else { - dc.addObjectPropertyValue(newid, pinfo.getID(), this.domns + value.toString()); - } - } - } - } - - Provenance p = new Provenance(newid); - p.addActivity(new ProvActivity(ProvActivity.CREATE, "Saving data from a run")); - - if(prov.addProvenance(p)) { - return "OK"; - } - return ""; - } - catch(Exception e) { - e.printStackTrace(); - return e.getMessage(); - } + try { + JsonParser parser = new JsonParser(); + JsonElement propvals = parser.parse(metadata_json); + JsonObject pvals = propvals.getAsJsonObject(); + if (pvals.get("type") == null) + return "Datatype not known"; + + // Choose the most specific type + DataTree tree = dc.getDatatypeHierarchy(); + String dtypeid = null; + for (JsonElement el : pvals.get("type").getAsJsonArray()) { + String tmpid = el.getAsString(); + if (dtypeid == null) + dtypeid = tmpid; + else { + DataTreeNode dnode = tree.findNode(dtypeid); + if (dnode.hasChild(tree.findNode(tmpid), false)) + dtypeid = tmpid; + } + } + + String dloc = dc.getDataLocation(dataid); + if (dloc == null) + return "Existing data not found on server"; + + String newid = this.libns + newname; + String newloc = dc.getDataLocation(newid); + if (!dc.addData(newid, dtypeid)) + return "Could not add data"; + + if (!dataid.equals(newid)) { + File origf = new File(dloc); + File newf = new File(origf.getParentFile().getAbsolutePath() + File.separator + newname); + newloc = newf.getAbsolutePath(); + if (origf.exists() && !newf.exists()) + FileUtils.copyFile(origf, newf); + } + if (newloc == null) + return "Cannot find location for new data"; + + if (!dc.setDataLocation(newid, newloc)) + return "Could not set data location"; + + ArrayList props = dc.getMetadataProperties(dtypeid, false); + HashMap pinfos = new HashMap(); + for (MetadataProperty prop : props) { + pinfos.put(prop.getName(), prop); + } + + for (Entry entry : pvals.entrySet()) { + String pname = entry.getKey(); + for (JsonElement el : entry.getValue().getAsJsonArray()) { + String value = el.getAsString(); + MetadataProperty pinfo = pinfos.get(pname); + if (pinfo != null) { + if (pinfo.isDatatypeProperty()) { + if (value.equals("") && !pinfo.getRange().contains("string")) + continue; + dc.addDatatypePropertyValue(newid, pinfo.getID(), value, pinfo.getRange()); + } else { + dc.addObjectPropertyValue(newid, pinfo.getID(), this.domns + value.toString()); + } + } + } + } + + Provenance p = new Provenance(newid); + p.addActivity(new ProvActivity(ProvActivity.CREATE, "Saving data from a run")); + + if (prov.addProvenance(p)) { + return "OK"; + } + return ""; + } catch (Exception e) { + e.printStackTrace(); + return e.getMessage(); + } } public synchronized String saveDatatypeJSON(String dtypeid, String props_json) { ArrayList errors = new ArrayList(); ArrayList warnings = new ArrayList(); - - if(dtypeid == null || props_json == null) + + if (dtypeid == null || props_json == null) return "[\"Null inputs\"]"; try { @@ -483,19 +475,19 @@ public synchronized String saveDatatypeJSON(String dtypeid, String props_json) { dc.start_write(); dc.start_batch_operation(); - + // Save datatype's name format String fmt = null; String sensor = null; if (ops.get("format") != null && !ops.get("format").isJsonNull()) { fmt = ops.get("format").getAsString(); } - // Same datatype's sensing component - if (ops.get("sensor") != null && !ops.get("sensor").isJsonNull()) { - sensor = ops.get("sensor").getAsString(); - } - this.dc.setTypeAnnotations(dtypeid, fmt, sensor); - + // Same datatype's sensing component + if (ops.get("sensor") != null && !ops.get("sensor").isJsonNull()) { + sensor = ops.get("sensor").getAsString(); + } + this.dc.setTypeAnnotations(dtypeid, fmt, sensor); + // Check all properties being added JsonObject addops = ops.get("add").getAsJsonObject(); for (Map.Entry entry : addops.entrySet()) { @@ -508,35 +500,33 @@ public synchronized String saveDatatypeJSON(String dtypeid, String props_json) { String range = prop.get("range").getAsString(); MetadataProperty eprop = dc.getMetadataProperty(propid); if (eprop != null) { - // A property with this id already exists. + // A property with this id already exists. // Add dtypeid as a domain of the property this.dc.addMetadataPropertyDomain(propid, dtypeid); - } - else { + } else { this.dc.addMetadataProperty(propid, dtypeid, range); } } - /* - dc.removeMetadataPropertyInLibrary(String propid); - dc.renameMetadataPropertyInLibrary(String oldid, String newid); - */ - + /* + * dc.removeMetadataPropertyInLibrary(String propid); + * dc.renameMetadataPropertyInLibrary(String oldid, String newid); + */ + // Check all properties being deleted JsonObject delops = ops.get("del").getAsJsonObject(); for (Map.Entry entry : delops.entrySet()) { String propid = entry.getKey(); MetadataProperty eprop = dc.getMetadataProperty(propid); - if(eprop.getDomains().size() > 1) { + if (eprop.getDomains().size() > 1) { // There are more than one datatypes using this property // just remove the property from this datatype this.dc.removeMetadataPropertyDomain(propid, dtypeid); eprop.getDomains().remove(dtypeid); warnings.add("Note that the property you deleted currently also " - + "exists for other datatypes: " + + "exists for other datatypes: " + eprop.getDomains()); - } - else { + } else { this.dc.removeMetadataProperty(propid); this.dc.removeMetadataPropertyInLibrary(propid); } @@ -555,55 +545,53 @@ public synchronized String saveDatatypeJSON(String dtypeid, String props_json) { String npropid = prop.get("pid").getAsString(); MetadataProperty eprop = this.dc.getMetadataProperty(propid); MetadataProperty enprop = this.dc.getMetadataProperty(npropid); - if(enprop != null && !propid.equals(npropid) && - !range.equals(enprop.getRange())) { - errors.add("Property "+enprop.getName() - + " already exists with a different range: " - + enprop.getRange()); - continue; + if (enprop != null && !propid.equals(npropid) && + !range.equals(enprop.getRange())) { + errors.add("Property " + enprop.getName() + + " already exists with a different range: " + + enprop.getRange()); + continue; } if (!eprop.getRange().equals(range)) { this.dc.removeMetadataProperty(propid); this.dc.addMetadataProperty(npropid, dtypeid, range); // Re-add any other domains that the property might have had - for(String domid : eprop.getDomains()) { - if(!domid.equals(dtypeid)) + for (String domid : eprop.getDomains()) { + if (!domid.equals(dtypeid)) this.dc.addMetadataPropertyDomain(npropid, domid); } } else if (!propid.equals(npropid)) { this.dc.renameMetadataProperty(propid, npropid); this.dc.renamePropertyInLibrary(propid, npropid); } - if(eprop.getDomains().size() > 1) { + if (eprop.getDomains().size() > 1) { eprop.getDomains().remove(dtypeid); warnings.add("Note that the property you modified also " - + "exists for other datatypes, and would have been modified for them as well : " + + "exists for other datatypes, and would have been modified for them as well : " + eprop.getDomains()); } } this.dc.stop_batch_operation(); - - if(errors.size() == 0) { - if(!dc.save() || !dc.end()) { - errors.add("Could not save Data catalog"); - } - } - else { - dc.end(); - } - - if(errors.size() == 0) { - String provlog = "Updating datatype properties"; - Provenance p = new Provenance(dtypeid); - p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); - if(!prov.addProvenance(p)) { - errors.add("Could not add provenance"); - } + + if (errors.size() == 0) { + if (!dc.save() || !dc.end()) { + errors.add("Could not save Data catalog"); + } + } else { + dc.end(); } - } - catch(Exception e) { - this.dc.stop_batch_operation(); - this.dc.end(); + + if (errors.size() == 0) { + String provlog = "Updating datatype properties"; + Provenance p = new Provenance(dtypeid); + p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); + if (!prov.addProvenance(p)) { + errors.add("Could not add provenance"); + } + } + } catch (Exception e) { + this.dc.stop_batch_operation(); + this.dc.end(); e.printStackTrace(); errors.add(e.getMessage()); } @@ -615,51 +603,48 @@ public synchronized String saveDatatypeJSON(String dtypeid, String props_json) { } public synchronized boolean addDatatype(String ptype, String dtype) { - if(ptype == null || dtype == null) + if (ptype == null || dtype == null) return false; - String provlog = "Creating datatype with parent "+KBUtils.getLocalName(ptype); - Provenance p = new Provenance(dtype); - p.addActivity(new ProvActivity(ProvActivity.CREATE, provlog)); - - return - dc.addDatatype(dtype, ptype) && - prov.addProvenance(p); + String provlog = "Creating datatype with parent " + KBUtils.getLocalName(ptype); + Provenance p = new Provenance(dtype); + p.addActivity(new ProvActivity(ProvActivity.CREATE, provlog)); + + return dc.addDatatype(dtype, ptype) && + prov.addProvenance(p); } public synchronized boolean moveDatatypeTo(String dtypeid, String fromtype, String totype) { - if(dtypeid == null || fromtype == null || totype == null) + if (dtypeid == null || fromtype == null || totype == null) return false; - String provlog = "Moving Datatype from " + KBUtils.getLocalName(fromtype) + - " to " + KBUtils.getLocalName(totype); - Provenance p = new Provenance(dtypeid); - p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); - - return - dc.moveDatatypeParent(dtypeid, fromtype, totype) && - dc.moveDatatypeParentInLibrary(dtypeid, fromtype, totype) && - prov.addProvenance(p); - } - - public synchronized boolean moveDataTo(String dataid, String fromtype, String totype) { - if(dataid == null || fromtype == null || totype == null) - return false; - - String provlog = "Moving Data from " + KBUtils.getLocalName(fromtype) + - " to " + KBUtils.getLocalName(totype); - Provenance p = new Provenance(dataid); - p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); - - return - dc.moveDataParent(dataid, fromtype, totype) && - prov.addProvenance(p); - } - + String provlog = "Moving Datatype from " + KBUtils.getLocalName(fromtype) + + " to " + KBUtils.getLocalName(totype); + Provenance p = new Provenance(dtypeid); + p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); + + return dc.moveDatatypeParent(dtypeid, fromtype, totype) && + dc.moveDatatypeParentInLibrary(dtypeid, fromtype, totype) && + prov.addProvenance(p); + } + + public synchronized boolean moveDataTo(String dataid, String fromtype, String totype) { + if (dataid == null || fromtype == null || totype == null) + return false; + + String provlog = "Moving Data from " + KBUtils.getLocalName(fromtype) + + " to " + KBUtils.getLocalName(totype); + Provenance p = new Provenance(dataid); + p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); + + return dc.moveDataParent(dataid, fromtype, totype) && + prov.addProvenance(p); + } + public synchronized boolean delDatatypes(String[] dtypes) { for (String dtypeid : dtypes) { - if(!dc.removeDatatype(dtypeid) || - !prov.removeAllProvenance(dtypeid)) { + if (!dc.removeDatatype(dtypeid) || + !prov.removeAllProvenance(dtypeid)) { return false; } } @@ -667,230 +652,222 @@ public synchronized boolean delDatatypes(String[] dtypes) { } public synchronized boolean addDataForDatatype(String dataid, String dtypeid) { - String provlog = "Creating data of type "+KBUtils.getLocalName(dtypeid); - Provenance p = new Provenance(dataid); - p.addActivity(new ProvActivity(ProvActivity.CREATE, provlog)); - - return - dc.addData(dataid, dtypeid) && - prov.addProvenance(p); - } - - public synchronized String addRemoteDataForType(String dataLocationUrl, String dtypeid) { - try { - String provlog = "Downloading from " + dataLocationUrl + " and creating data of type "+KBUtils.getLocalName(dtypeid); - - // Check if it doesn't already exist - URL url = new URL(dataLocationUrl); - String filename = KBUtils.sanitizeID(new File(url.getFile()).getName()); - String dataid = this.libns + filename; - //System.out.println("Check if data exists"); - if(dc.getDataLocation(dataid) != null) { - // Dataset already exists, so do not overwrite (FIXME : Make it configurable) - return dataid; - } - - Provenance p = new Provenance(dataid); - p.addActivity(new ProvActivity(ProvActivity.CREATE, provlog)); - //System.out.println("Adding new data"); - - String location = dc.getDefaultDataLocation(dataid); - //System.out.println("Copying "+ url + " to " + location); - FileUtils.copyURLToFile(url, new File(location)); - //System.out.println("Add data id: " + dataid); - dc.addData(dataid, dtypeid); - //System.out.println("Set data location of " + dataid); - if(dc.setDataLocation(dataid, location) && prov.addProvenance(p)) { - return dataid; - } - } - catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - public synchronized boolean addBatchData(String dtypeid, String[] dids, String[] locations, - HttpServletRequest request, ServletContext context) { - for(int i=0; i i && locations[i] != null) - if(!dc.setDataLocation(dids[i], locations[i])) + if (locations.length > i && locations[i] != null) + if (!dc.setDataLocation(dids[i], locations[i])) return false; this.runSensorWorkflow(dids[i], request, context); } return true; } - - - public String runSensorWorkflow(String dataid, HttpServletRequest request, ServletContext context) { - try { - DataItem dtype = this.dc.getDatatypeForData(dataid); - if(dtype == null) { - System.err.println("No datatype for data id: " + dataid); - return null; - } - - String tplid = this.dc.getTypeSensor(dtype.getID()); - if(tplid == null) { - return null; - } - - Variable[] invars = this.tc.getTemplate(tplid).getInputVariables(); - if(invars.length != 1) { - System.err.println("Template should have exactly 1 input variable. Has " + invars.length); - return null; - } - HashMap> dataBindings = new HashMap>(); - ArrayList inputfiles = new ArrayList(); - inputfiles.add(dataid); - dataBindings.put(invars[0].getID(), inputfiles); - - TemplateBindings tbindings = new TemplateBindings(); - tbindings.setCallbackUrl(this.config.getServerUrl() + - this.config.getUserDomainUrl() +"/data/setMetadataFromSensorOutput?data_id=" + - URLEncoder.encode(dataid, "UTF-8")); - tbindings.setCallbackCookies(CookieHandler.httpCookiesFromServlet(request)); - tbindings.setDataBindings(dataBindings); - tbindings.setParameterBindings(new HashMap>()); - tbindings.setParameterTypes(new HashMap()); - tbindings.setComponentBindings(new HashMap()); - tbindings.setTemplateId(tplid); - - ArrayList runids = this.rc.expandAndRunTemplate(tbindings, context); - if(runids != null && runids.size() > 0) { - return runids.get(0); - } - } - catch (Exception e) { - e.printStackTrace(); - this.cc.end(); - this.rc.end(); - this.dc.end(); - } - return null; - } - - public String runSensorComponent(String dataid, HttpServletRequest request, ServletContext context) { - try { - DataItem dtype = this.dc.getDatatypeForData(dataid); - if(dtype == null) { - System.err.println("No datatype for data id: " + dataid); - return null; - } - - String cid = this.dc.getTypeSensor(dtype.getID()); - if(cid == null) { - return null; - } - Component c = this.cc.getComponent(cid, true); - ArrayList inroles = c.getInputs(); - ArrayList outroles = c.getOutputs(); - if(inroles.size() != 1) { - System.err.println("Sensor component should have exactly 1 input. Has " + inroles.size()); - return null; - } - if(outroles.size() != 1) { - System.err.println("Sensor component should have exactly 1 output. Has " + outroles.size()); - return null; - } - - HashMap role_bindings = new HashMap(); - Binding b = new Binding(dataid); - b.setLocation(this.dc.getDataLocation(dataid)); - - Binding bout = new Binding(dataid + ExecutionFile.metaExtension); - bout.setLocation(b.getLocation() + ExecutionFile.metaExtension); - - role_bindings.put(inroles.get(0).getRoleName(), b); - role_bindings.put(outroles.get(0).getRoleName(), bout); - - String callbackUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + - this.config.getUserDomainUrl() +"/data/setMetadataFromSensorOutput?data_id=" + - URLEncoder.encode(dataid, "UTF-8"); - - this.rc.runComponent(cid, role_bindings, callbackUrl, CookieHandler.httpCookiesFromServlet(request), context); - } - catch (Exception e) { - e.printStackTrace(); - this.rc.end(); - this.dc.end(); - this.cc.end(); - } - return null; - } - - public String setMetadataFromSensorOutput(String data_id, ExecutionPlan plan) { - //System.out.println(plan); - for(ExecutionStep step : plan.getAllExecutionSteps()) { - for(ExecutionFile file : step.getOutputFiles()) { - file.loadMetadataFromFileContents(); - this.dc.setMetadataForDataObject(data_id, file.getMetadata()); - } - } - return plan.getID(); - } + + public String runSensorWorkflow(String dataid, HttpServletRequest request, ServletContext context) { + try { + DataItem dtype = this.dc.getDatatypeForData(dataid); + if (dtype == null) { + System.err.println("No datatype for data id: " + dataid); + return null; + } + + String tplid = this.dc.getTypeSensor(dtype.getID()); + if (tplid == null) { + return null; + } + + Variable[] invars = this.tc.getTemplate(tplid).getInputVariables(); + if (invars.length != 1) { + System.err.println("Template should have exactly 1 input variable. Has " + invars.length); + return null; + } + HashMap> dataBindings = new HashMap>(); + ArrayList inputfiles = new ArrayList(); + inputfiles.add(dataid); + dataBindings.put(invars[0].getID(), inputfiles); + + TemplateBindings tbindings = new TemplateBindings(); + tbindings.setCallbackUrl(this.config.getMainConfig().getServerUrl() + + this.config.getUserDomainUrl() + "/data/setMetadataFromSensorOutput?data_id=" + + URLEncoder.encode(dataid, "UTF-8")); + tbindings.setCallbackCookies(CookieHandler.httpCookiesFromServlet(request)); + tbindings.setDataBindings(dataBindings); + tbindings.setParameterBindings(new HashMap>()); + tbindings.setParameterTypes(new HashMap()); + tbindings.setComponentBindings(new HashMap()); + tbindings.setTemplateId(tplid); + + ArrayList runids = this.rc.expandAndRunTemplate(tbindings, context); + if (runids != null && runids.size() > 0) { + return runids.get(0); + } + } catch (Exception e) { + e.printStackTrace(); + this.cc.end(); + this.rc.end(); + this.dc.end(); + } + return null; + } + + public String runSensorComponent(String dataid, HttpServletRequest request, ServletContext context) { + try { + DataItem dtype = this.dc.getDatatypeForData(dataid); + if (dtype == null) { + System.err.println("No datatype for data id: " + dataid); + return null; + } + + String cid = this.dc.getTypeSensor(dtype.getID()); + if (cid == null) { + return null; + } + Component c = this.cc.getComponent(cid, true); + ArrayList inroles = c.getInputs(); + ArrayList outroles = c.getOutputs(); + if (inroles.size() != 1) { + System.err.println("Sensor component should have exactly 1 input. Has " + inroles.size()); + return null; + } + if (outroles.size() != 1) { + System.err.println("Sensor component should have exactly 1 output. Has " + outroles.size()); + return null; + } + + HashMap role_bindings = new HashMap(); + Binding b = new Binding(dataid); + b.setLocation(this.dc.getDataLocation(dataid)); + + Binding bout = new Binding(dataid + ExecutionFile.metaExtension); + bout.setLocation(b.getLocation() + ExecutionFile.metaExtension); + + role_bindings.put(inroles.get(0).getRoleName(), b); + role_bindings.put(outroles.get(0).getRoleName(), bout); + + String callbackUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + + this.config.getUserDomainUrl() + "/data/setMetadataFromSensorOutput?data_id=" + + URLEncoder.encode(dataid, "UTF-8"); + + this.rc.runComponent(cid, role_bindings, callbackUrl, CookieHandler.httpCookiesFromServlet(request), context); + } catch (Exception e) { + e.printStackTrace(); + this.rc.end(); + this.dc.end(); + this.cc.end(); + } + return null; + } + + public String setMetadataFromSensorOutput(String data_id, ExecutionPlan plan) { + // System.out.println(plan); + for (ExecutionStep step : plan.getAllExecutionSteps()) { + for (ExecutionFile file : step.getOutputFiles()) { + file.loadMetadataFromFileContents(); + this.dc.setMetadataForDataObject(data_id, file.getMetadata()); + } + } + return plan.getID(); + } public synchronized boolean delData(String dataid) { - return - dc.removeData(dataid) && - prov.removeAllProvenance(dataid); + return dc.removeData(dataid) && + prov.removeAllProvenance(dataid); } - + public synchronized boolean renameData(String dataid, String newid) { - String provlog = "Renaming " + KBUtils.getLocalName(dataid) - + " to " + KBUtils.getLocalName(newid); - Provenance p = new Provenance(dataid); - p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); - - return - dc.renameData(newid, dataid) && - prov.addProvenance(p); - } - + String provlog = "Renaming " + KBUtils.getLocalName(dataid) + + " to " + KBUtils.getLocalName(newid); + Provenance p = new Provenance(dataid); + p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); + + return dc.renameData(newid, dataid) && + prov.addProvenance(p); + } + public synchronized boolean setDataLocation(String dataid, String location) { - String provlog = "Setting location"; - Provenance p = new Provenance(dataid); - p.addActivity(new ProvActivity(ProvActivity.UPLOAD, provlog)); - - return - dc.setDataLocation(dataid, location) && - prov.addProvenance(p); - } - + String provlog = "Setting location"; + Provenance p = new Provenance(dataid); + p.addActivity(new ProvActivity(ProvActivity.UPLOAD, provlog)); + + return dc.setDataLocation(dataid, location) && + prov.addProvenance(p); + } + public synchronized boolean renameDataType(String dtypeid, String newid) { - String provlog = "Renaming " + KBUtils.getLocalName(dtypeid) - + " to " + KBUtils.getLocalName(newid); - Provenance p = new Provenance(dtypeid); - p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); - - return - dc.renameDatatype(newid, dtypeid) && - dc.renameDatatypeInLibrary(newid, dtypeid) && - prov.addProvenance(p); - } - + String provlog = "Renaming " + KBUtils.getLocalName(dtypeid) + + " to " + KBUtils.getLocalName(newid); + Provenance p = new Provenance(dtypeid); + p.addActivity(new ProvActivity(ProvActivity.UPDATE, provlog)); + + return dc.renameDatatype(newid, dtypeid) && + dc.renameDatatypeInLibrary(newid, dtypeid) && + prov.addProvenance(p); + } + public void end() { - if(dc != null) { - dc.end(); - } - if(prov != null) { - prov.end(); - } - } - - public synchronized boolean importFromExternalCatalog(String dataid, String dtypeid, + if (dc != null) { + dc.end(); + } + if (prov != null) { + prov.end(); + } + } + + public synchronized boolean importFromExternalCatalog(String dataid, String dtypeid, String propvals_json, String location) { if (dc == null) return false; - + try { JsonParser parser = new JsonParser(); JsonElement propvals = parser.parse(propvals_json); DataItem dtype = dc.getDatatypeForData(dataid); - if(dtype == null) { + if (dtype == null) { dc.addData(dataid, dtypeid); } for (Map.Entry entry : propvals.getAsJsonObject().entrySet()) { @@ -903,49 +880,49 @@ public synchronized boolean importFromExternalCatalog(String dataid, String dtyp if (eprop == null) { // Property doesn't exist this.dc.addMetadataProperty(propid, dtypeid, range); + } else { + if (!eprop.getDomains().contains(dtypeid)) { + // Property exists for another class. Add this class as domain + this.dc.addMetadataPropertyDomain(propid, dtypeid); + } + range = eprop.getRange(); } - else { - if(!eprop.getDomains().contains(dtypeid)) { - // Property exists for another class. Add this class as domain - this.dc.addMetadataPropertyDomain(propid, dtypeid); - } - range = eprop.getRange(); - } - + this.dc.addDatatypePropertyValue(dataid, propid, value, range); } dc.setDataLocation(dataid, location); return true; - } - catch(Exception e) { + } catch (Exception e) { e.printStackTrace(); return false; } } - + private void trustAllCertificates() { - // Create a new trust manager that trust all certificates - TrustManager[] trustAllCerts = new TrustManager[]{ - new X509TrustManager() { - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return null; - } - public void checkClientTrusted( - java.security.cert.X509Certificate[] certs, String authType) { - } - public void checkServerTrusted( - java.security.cert.X509Certificate[] certs, String authType) { - } - } - }; - - // Activate the new trust manager - try { - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, new java.security.SecureRandom()); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - } catch (Exception e) { - } + // Create a new trust manager that trust all certificates + TrustManager[] trustAllCerts = new TrustManager[] { + new X509TrustManager() { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + + public void checkClientTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + + public void checkServerTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + } + }; + + // Activate the new trust manager + try { + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, new java.security.SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + } catch (Exception e) { + } } } diff --git a/portal/src/main/java/edu/isi/wings/portal/resources/TemplateResource.java b/portal/src/main/java/edu/isi/wings/portal/resources/TemplateResource.java index ebfa90b9..36ebf332 100644 --- a/portal/src/main/java/edu/isi/wings/portal/resources/TemplateResource.java +++ b/portal/src/main/java/edu/isi/wings/portal/resources/TemplateResource.java @@ -24,58 +24,59 @@ public class TemplateResource extends WingsResource { TemplateController tc; - @PathParam("edit") String edit; - @PathParam("tell") String tell; + @PathParam("edit") + String edit; + @PathParam("tell") + String tell; - HashMap options; + HashMap options; boolean editor; boolean tellme; - + @PostConstruct public void init() { super.init(); - + this.editor = ("/edit".equals(edit)); this.tellme = ("/tellme".equals(tell)); - - if(this.hasPermissions() && !this.isPage("intro")) + + if (this.hasPermissions() && !this.isPage("intro")) this.tc = new TemplateController(config); this.options = new HashMap(); @SuppressWarnings("unchecked") Enumeration pnames = request.getParameterNames(); - while(pnames.hasMoreElements()) { + while (pnames.hasMoreElements()) { String pname = pnames.nextElement(); - if(pname.matches("^hide_.*")) + if (pname.matches("^hide_.*")) this.options.put(pname, Boolean.parseBoolean(request.getParameter(pname))); } } - + @PreDestroy public void destroy() { System.out.println("Template Resource Destroyed"); - if(this.tc != null) { + if (this.tc != null) { this.tc.end(); } - } - + } + @GET @Path("intro") public void getIntroduction() { String intropage = "Template"; - if(!editor) + if (!editor) intropage += "Browser"; - else + else intropage += "Editor" + (tellme ? "Tellme" : ""); this.loadIntroduction(intropage); } - - + @GET @Produces(MediaType.TEXT_HTML) public String getHTML( @QueryParam("template_id") final String template_id) { - if(this.tc != null) { + if (this.tc != null) { request.setAttribute("controller", this.tc); request.setAttribute("options", this.options); request.setAttribute("editor", this.editor); @@ -84,17 +85,16 @@ public String getHTML( } return null; } - @GET @Path("{template_name}.owl") @Produces(MediaType.TEXT_HTML) public String getTemplateHTML( @PathParam("template_name") String template_name) { - if(this.tc != null) { - config.setScriptPath(config.getScriptPath().replaceAll("/"+template_name+".owl", "")); + if (this.tc != null) { + config.setScriptPath(config.getScriptPath().replaceAll("/" + template_name + ".owl", "")); this.options.put("hide_selector", true); - + request.setAttribute("controller", this.tc); request.setAttribute("options", this.options); request.setAttribute("editor", this.editor); @@ -104,42 +104,42 @@ public String getTemplateHTML( } return null; } - + @GET @Path("getTemplatesListJSON") @Produces(MediaType.APPLICATION_JSON) public String getTemplatesListJSON() { - if(this.tc != null) + if (this.tc != null) return this.tc.getTemplatesListJSON(); return null; } - + @GET @Path("getViewerJSON") @Produces(MediaType.APPLICATION_JSON) public String getViewerJSON( @QueryParam("template_id") String template_id) { - if(this.tc != null) + if (this.tc != null) return this.tc.getViewerJSON(template_id); return null; } - + @GET @Path("getInputsJSON") @Produces(MediaType.APPLICATION_JSON) public String getInputsJSON( @QueryParam("template_id") String template_id) { - if(this.tc != null) + if (this.tc != null) return this.tc.getInputsJSON(template_id); return null; } - + @GET @Path("getEditorJSON") @Produces(MediaType.APPLICATION_JSON) public String getEditorJSON( @QueryParam("template_id") String template_id) { - if(this.tc != null) + if (this.tc != null) return this.tc.getEditorJSON(template_id); return null; } @@ -148,8 +148,8 @@ public String getEditorJSON( @Path("layoutTemplate") @Produces(MediaType.APPLICATION_JSON) public String layoutTemplate(@JsonProperty("json") String json) { - String dotexe = config.getDotFile(); - if(this.tc != null) + String dotexe = config.getMainConfig().getDotFile(); + if (this.tc != null) try { return this.tc.layoutTemplate(json, dotexe); } catch (IOException e) { @@ -165,29 +165,29 @@ public String saveTemplateJSON( @FormParam("template_id") String template_id, @FormParam("json") String json, @FormParam("constraints_json") String constraints_json) { - if(this.tc != null) + if (this.tc != null) return this.tc.saveTemplateJSON(template_id, json, constraints_json); return null; } - + @POST @Path("newTemplate") @Produces(MediaType.TEXT_PLAIN) public String newTemplate( @FormParam("template_id") String template_id) { - if(this.tc != null) { + if (this.tc != null) { RunController.invalidateCachedAPIs(); return this.tc.newTemplate(template_id); } return null; } - + @POST @Path("deleteTemplate") @Produces(MediaType.TEXT_PLAIN) public String deleteTemplate( @FormParam("template_id") String template_id) { - if(this.tc != null && this.isOwner() && !config.isSandboxed()) { + if (this.tc != null && this.isOwner() && !config.isSandboxed()) { RunController.invalidateCachedAPIs(); return this.tc.deleteTemplate(template_id); } diff --git a/portal/src/main/java/edu/isi/wings/portal/servlets/ExportGraph.java b/portal/src/main/java/edu/isi/wings/portal/servlets/ExportGraph.java index 76700b20..80992de4 100644 --- a/portal/src/main/java/edu/isi/wings/portal/servlets/ExportGraph.java +++ b/portal/src/main/java/edu/isi/wings/portal/servlets/ExportGraph.java @@ -37,7 +37,7 @@ */ public class ExportGraph extends HttpServlet { private static final long serialVersionUID = 1L; - + /** * @see HttpServlet#HttpServlet() */ @@ -53,49 +53,47 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); Config config = new Config(request, null, null); - //if(!config.checkDomain(request, response)) - // return; - - response.addHeader("Access-Control-Allow-Origin", config.getClients()); + // if(!config.checkDomain(request, response)) + // return; + + response.addHeader("Access-Control-Allow-Origin", config.getMainConfig().getClients()); response.addHeader("Access-Control-Allow-Credentials", "true"); response.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); response.addHeader("Access-Control-Allow-Headers", - "X-Requested-With, Content-Type, X-HTTP-Method-Override"); - - String format = request.getParameter("format"); - String uri = config.getServerUrl() + request.getRequestURI(); + "X-Requested-With, Content-Type, X-HTTP-Method-Override"); + + String format = request.getParameter("format"); + String uri = config.getMainConfig().getServerUrl() + request.getRequestURI(); OntFactory tdbfac = new OntFactory(OntFactory.JENA, config.getTripleStoreDir()); try { - Pattern complibpat = Pattern.compile(".+\\/components\\/(.+)\\.owl"); + Pattern complibpat = Pattern.compile(".+\\/components\\/(.+)\\.owl"); KBAPI kb = tdbfac.getKB(uri, OntSpec.PLAIN); - + Matcher mat = complibpat.matcher(uri); - if(mat.find()) { - String abslib = "abstract"; - String complib = mat.group(1); - if(!complib.equals(abslib)) { - String absuri = uri.replace(complib, abslib); - tdbfac.start_write_transaction(); - kb.copyFrom(tdbfac.getKB(absuri, OntSpec.PLAIN)); - tdbfac.end_transaction(); - } + if (mat.find()) { + String abslib = "abstract"; + String complib = mat.group(1); + if (!complib.equals(abslib)) { + String absuri = uri.replace(complib, abslib); + tdbfac.start_write_transaction(); + kb.copyFrom(tdbfac.getKB(absuri, OntSpec.PLAIN)); + tdbfac.end_transaction(); + } } - - tdbfac.start_read_transaction(); - if(kb.getAllTriples().size() > 0) { + + tdbfac.start_read_transaction(); + if (kb.getAllTriples().size() > 0) { response.setContentType("application/rdf+xml"); - if(format != null) { - if(format.equals("json")) - out.println(kb.toJson()); - else if(format.equals("n3")) - out.println(kb.toN3()); - } - else - out.println(kb.toAbbrevRdf(true)); + if (format != null) { + if (format.equals("json")) + out.println(kb.toJson()); + else if (format.equals("n3")) + out.println(kb.toN3()); + } else + out.println(kb.toAbbrevRdf(true)); } tdbfac.end_transaction(); - } - catch (Exception e) { + } catch (Exception e) { e.printStackTrace(); } } diff --git a/portal/src/main/java/edu/isi/wings/portal/servlets/SparqlEndpoint.java b/portal/src/main/java/edu/isi/wings/portal/servlets/SparqlEndpoint.java index ac5acebb..fae78b80 100644 --- a/portal/src/main/java/edu/isi/wings/portal/servlets/SparqlEndpoint.java +++ b/portal/src/main/java/edu/isi/wings/portal/servlets/SparqlEndpoint.java @@ -35,23 +35,24 @@ */ public class SparqlEndpoint extends HttpServlet { private static final long serialVersionUID = 1L; - + private PrintStream out; private SparqlAPI api; - - /** - * @see HttpServlet#HttpServlet() - */ - public SparqlEndpoint() { - super(); - } /** - * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + * @see HttpServlet#HttpServlet() + */ + public SparqlEndpoint() { + super(); + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse + * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.out = new PrintStream(response.getOutputStream()); - + Config config = new Config(request, null, null); String queryString = request.getParameter("query"); String updateString = request.getParameter("update"); @@ -69,78 +70,76 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t + ""); return; } - + try { - if(queryString != null && !queryString.equals("")) + if (queryString != null && !queryString.equals("")) this.showQueryResults(queryString, request, response); - else if(updateString != null && !updateString.equals("")) + else if (updateString != null && !updateString.equals("")) this.updateDataset(updateString, request, response); - } - catch (Exception e) { + } catch (Exception e) { response.getOutputStream().print(e.getMessage()); } response.getOutputStream().flush(); } - private void showQueryResults(String queryString, HttpServletRequest request, HttpServletResponse response) + private void showQueryResults(String queryString, HttpServletRequest request, HttpServletResponse response) throws IOException { - Config config = new Config(request, null, null); - String tdbdir = config.getTripleStoreDir(); - String format = request.getParameter("format"); - - this.api = new SparqlAPI(tdbdir); - this.api.showQueryResults(queryString, format, out); + Config config = new Config(request, null, null); + String tdbdir = config.getTripleStoreDir(); + String format = request.getParameter("format"); + + this.api = new SparqlAPI(tdbdir); + this.api.showQueryResults(queryString, format, out); } - - private void updateDataset(String updateString, HttpServletRequest request, HttpServletResponse response) + + private void updateDataset(String updateString, HttpServletRequest request, HttpServletResponse response) throws IOException { Config config = new Config(request, null, null); - if(!config.checkDomain(request, response)) + if (!config.checkDomain(request, response)) return; - String tdbdir = config.getTripleStoreDir(); + String tdbdir = config.getTripleStoreDir(); this.api = new SparqlAPI(tdbdir); - - if(updateString.startsWith("__SERVER_RENAME:")) { - String newurl = updateString.substring(updateString.indexOf(":")+1); - this.updateServerURL(newurl, config); - } - else { - this.api.executeUpdateQuery(updateString, out); + + if (updateString.startsWith("__SERVER_RENAME:")) { + String newurl = updateString.substring(updateString.indexOf(":") + 1); + this.updateServerURL(newurl, config); + } else { + this.api.executeUpdateQuery(updateString, out); } } - + private void updateServerURL(String newurl, Config config) { - String cururl = config.getServerUrl(); - - // Update all graphs in the triple store - this.api.updateGraphURLs(cururl, newurl, out); - - // Update all User domains - for(String userid : config.getUsersList()) { - config.setUserId(userid); - config.setViewerId(userid); - DomainController dc = new DomainController(config); - for(String domname : dc.getDomainsList()) { - DomainInfo dominfo = dc.getDomainInfo(domname); - String url = dominfo.getUrl(); - if(url.startsWith(cururl)) { - try { - out.println("* changing "+userid+"'s domain url for "+domname); - } - catch(Exception e) { - System.out.println("* changing "+userid+"'s domain url for "+domname); - } - url = url.replace(cururl, newurl); - dc.setDomainURL(domname, url); - } - } - } + String cururl = config.getMainConfig().getServerUrl(); + + // Update all graphs in the triple store + this.api.updateGraphURLs(cururl, newurl, out); + + // Update all User domains + for (String userid : config.getUsersList()) { + config.setUserId(userid); + config.setViewerId(userid); + DomainController dc = new DomainController(config); + for (String domname : dc.getDomainsList()) { + DomainInfo dominfo = dc.getDomainInfo(domname); + String url = dominfo.getUrl(); + if (url.startsWith(cururl)) { + try { + out.println("* changing " + userid + "'s domain url for " + domname); + } catch (Exception e) { + System.out.println("* changing " + userid + "'s domain url for " + domname); + } + url = url.replace(cururl, newurl); + dc.setDomainURL(domname, url); + } + } + } } /** - * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse + * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub diff --git a/portal/src/main/java/edu/isi/wings/portal/servlets/ViewConfig.java b/portal/src/main/java/edu/isi/wings/portal/servlets/ViewConfig.java index 90e63725..2c14eba3 100644 --- a/portal/src/main/java/edu/isi/wings/portal/servlets/ViewConfig.java +++ b/portal/src/main/java/edu/isi/wings/portal/servlets/ViewConfig.java @@ -54,9 +54,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) Config config = new Config(request, null, null); Gson json = JsonHandler.createPrettyGson(); HashMap props = new HashMap(); - props.put("internal_server", config.getServerUrl()); + props.put("internal_server", config.getMainConfig().getServerUrl()); props.put("storage", config.getStorageDirectory()); - props.put("dotpath", config.getDotFile()); + props.put("dotpath", config.getMainConfig().getDotFile()); props.put("ontology", config.getOntologyConfig().getWorkflowOntologyUrl()); props.put("planner", config.getPlannerConfig()); out.println(json.toJson(props));