diff --git a/pom.xml b/pom.xml index d0ffa5f..5cb67db 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 edu.harvard.hms.dbmi.bd2k.irct IRCT-RI - 1.0 + 1.1 INTER-RESOURCE COMMUNICATION TOOL : Resource Interface @@ -47,7 +47,7 @@ edu.harvard.hms.dbmi.bd2k.irct IRCT-API - 1.0 + 1.1 diff --git a/src/main/.gitignore b/src/main/.gitignore deleted file mode 100644 index cb6eb2c..0000000 --- a/src/main/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/resources/ diff --git a/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/elasticsearch/ElasticSearchDataType.java b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/elasticsearch/ElasticSearchDataType.java new file mode 100644 index 0000000..9b1a043 --- /dev/null +++ b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/elasticsearch/ElasticSearchDataType.java @@ -0,0 +1,81 @@ +package edu.harvard.hms.dbmi.bd2k.irct.ri.elasticsearch; + +import java.nio.charset.StandardCharsets; +import java.util.regex.Pattern; + +import javax.json.Json; +import javax.json.JsonObject; +import javax.json.JsonObjectBuilder; + +import edu.harvard.hms.dbmi.bd2k.irct.model.ontology.DataType; +import edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType; + +public enum ElasticSearchDataType implements DataType { + FILE { + @Override + public byte[] toBytes(Object value) { + if(value == null) { + return new byte[] {(byte) Character.MIN_VALUE}; + } + + String data = ((String) value).trim(); + return (data).getBytes(StandardCharsets.UTF_16); + } + + @Override + public Object fromBytes(byte[] bytes) { + if((bytes.length == 1) && (bytes[0] == Character.reverseBytes(Character.MIN_VALUE))) { + return null; + } + return new String(bytes, StandardCharsets.UTF_16).trim(); + } + + @Override + public String getName() { + return "file"; + } + + @Override + public Pattern getPattern() { + return Pattern.compile("^.*$", Pattern.CASE_INSENSITIVE); + } + + @Override + public String getDescription() { + return "File"; + } + }; + + @Override + public DataType typeOf() { + return PrimitiveDataType.STRING; + } + + @Override + public byte[] fromString(String value) { + return value.getBytes(); + } + + @Override + public String toString(byte[] bytes) { + return new String(bytes); + } + + @Override + public boolean validate(String value) { + return getPattern().matcher(value).matches(); + } + + + @Override + public JsonObject toJson() { + JsonObjectBuilder build = Json.createObjectBuilder(); + build.add("name", getName()); + build.add("pattern", getPattern().toString()); + build.add("description", getDescription()); + if (typeOf() != null) { + build.add("typeof", typeOf().getName()); + } + return build.build(); + } +} diff --git a/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/elasticsearch/ElasticSearchResourceImplementation.java b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/elasticsearch/ElasticSearchResourceImplementation.java new file mode 100644 index 0000000..99f7b0c --- /dev/null +++ b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/elasticsearch/ElasticSearchResourceImplementation.java @@ -0,0 +1,339 @@ +package edu.harvard.hms.dbmi.bd2k.irct.ri.elasticsearch; + +import java.io.StringReader; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import javax.json.Json; +import javax.json.JsonObject; + +import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequest; +import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsResponse; +import org.elasticsearch.action.search.SearchAction; +import org.elasticsearch.action.search.SearchRequestBuilder; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.search.SearchType; +import org.elasticsearch.client.Client; +import org.elasticsearch.client.transport.TransportClient; +import org.elasticsearch.cluster.metadata.MappingMetaData; +import org.elasticsearch.common.collect.ImmutableOpenMap; +import org.elasticsearch.common.transport.InetSocketTransportAddress; +import org.elasticsearch.common.unit.TimeValue; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.elasticsearch.index.query.QueryBuilder; + +import static org.elasticsearch.index.query.QueryBuilders.*; + +import com.carrotsearch.hppc.cursors.ObjectObjectCursor; + +import edu.harvard.hms.dbmi.bd2k.irct.exception.ResourceInterfaceException; +import edu.harvard.hms.dbmi.bd2k.irct.model.ontology.Entity; +import edu.harvard.hms.dbmi.bd2k.irct.model.ontology.OntologyRelationship; +import edu.harvard.hms.dbmi.bd2k.irct.model.query.ClauseAbstract; +import edu.harvard.hms.dbmi.bd2k.irct.model.query.Query; +import edu.harvard.hms.dbmi.bd2k.irct.model.query.SelectClause; +import edu.harvard.hms.dbmi.bd2k.irct.model.query.WhereClause; +import edu.harvard.hms.dbmi.bd2k.irct.model.resource.ResourceState; +import edu.harvard.hms.dbmi.bd2k.irct.model.resource.implementation.PathResourceImplementationInterface; +import edu.harvard.hms.dbmi.bd2k.irct.model.resource.implementation.QueryResourceImplementationInterface; +import edu.harvard.hms.dbmi.bd2k.irct.model.result.Result; +import edu.harvard.hms.dbmi.bd2k.irct.model.result.ResultDataType; +import edu.harvard.hms.dbmi.bd2k.irct.model.security.SecureSession; + +public class ElasticSearchResourceImplementation implements + QueryResourceImplementationInterface, + PathResourceImplementationInterface { + private String resourceName; + private String resourceURL; + private ResourceState resourceState; + private String index; + + private Client client; + + @Override + public void setup(Map parameters) + throws ResourceInterfaceException { + String[] strArray = { "resourceName", "resourceURL" }; + if (!parameters.keySet().containsAll(Arrays.asList(strArray))) { + throw new ResourceInterfaceException("Missing parameters"); + } + this.resourceName = parameters.get("resourceName"); + this.resourceURL = parameters.get("resourceURL"); + this.index = parameters.get("index"); + + String url = resourceURL.split(":")[0]; + String port = resourceURL.split(":")[1]; + + try { + client = TransportClient + .builder() + .build() + .addTransportAddress( + new InetSocketTransportAddress(InetAddress + .getByName(url), Integer.parseInt(port))); + } catch (UnknownHostException e) { + throw new ResourceInterfaceException("Unknown host"); + } + + resourceState = ResourceState.READY; + } + + @Override + public List getPathRelationship(Entity path, + OntologyRelationship relationship, SecureSession session) + throws ResourceInterfaceException { + List returns = new ArrayList(); + + String basePath = path.getPui(); + String[] pathComponents = basePath.split("/"); + + if (pathComponents.length >= 5) { + return returns; + } + + // Get a list of all the indexes if the index is not set + if ((this.index == null) && (pathComponents.length == 2)) { + String[] response = client.admin().cluster().prepareState() + .execute().actionGet().getState().getMetaData() + .concreteAllIndices(); + for (String index : response) { + Entity entity = new Entity(); + entity.setName(index); + entity.setDisplayName(index); + entity.setPui(basePath + "/" + index); + returns.add(entity); + } + return returns; + } else if (((this.index != null) && (pathComponents.length == 2)) + || ((this.index == null) && (pathComponents.length == 3))) { + String searchIndex = ""; + if (this.index == null) { + searchIndex = pathComponents[2]; + } else { + searchIndex = this.index; + } + ImmutableOpenMap> f = client + .admin().indices() + .getMappings(new GetMappingsRequest().indices(searchIndex)) + .actionGet().getMappings(); + + ImmutableOpenMap mapping = f + .get(searchIndex); + for (ObjectObjectCursor c : mapping) { + Entity entity = new Entity(); + entity.setName(c.key); + entity.setDisplayName(c.key); + entity.setPui(basePath + "/" + c.key); + returns.add(entity); + } + return returns; + } else if (((this.index != null) && (pathComponents.length == 3)) + || ((this.index == null) && (pathComponents.length == 4))) { + String searchIndex = ""; + String searchObject = ""; + if (this.index == null) { + searchIndex = pathComponents[2]; + searchObject = pathComponents[3]; + } else { + searchIndex = this.index; + searchObject = pathComponents[2]; + } + + GetMappingsResponse res = client.admin().indices() + .getMappings(new GetMappingsRequest().indices(searchIndex)) + .actionGet(); + MappingMetaData rawMap = res.mappings().get(searchIndex) + .get(searchObject); + + JsonObject jsonObject = Json + .createReader(new StringReader(rawMap.source().toString())) + .readObject().getJsonObject(searchObject) + .getJsonObject("properties"); + + for (String key : jsonObject.keySet()) { + Entity entity = new Entity(); + entity.setName(key); + entity.setDisplayName(key); + entity.setPui(basePath + "/" + key); + returns.add(entity); + } + + } + + return returns; + } + + @Override + public Result runQuery(SecureSession session, Query qep, Result result) + throws ResourceInterfaceException { + SearchRequestBuilder sb = new SearchRequestBuilder(client, + SearchAction.INSTANCE); + BoolQueryBuilder qb = boolQuery(); + + ArrayList indices = new ArrayList(); + ArrayList types = new ArrayList(); + + for (ClauseAbstract clause : qep.getClauses().values()) { + if (clause instanceof SelectClause) { + SelectClause sc = (SelectClause) clause; + indices.add(getIndexNameFrom(sc.getParameter().getPui())); + types.add(getTypeNameFrom(sc.getParameter().getPui())); + + if (sc.getParameter().getDataType() == ElasticSearchDataType.FILE) { + sb.addHighlightedField(getFieldNameFrom(sc.getParameter() + .getPui()) + ".content"); + } else { + sb.addField(getFieldNameFrom(sc.getParameter().getPui())); + } + + } else if (clause instanceof WhereClause) { + WhereClause wc = (WhereClause) clause; + + indices.add(getIndexNameFrom(wc.getField().getPui())); + types.add(getTypeNameFrom(wc.getField().getPui())); + + QueryBuilder predicate = createPredicateFromClause(wc); + + if (wc.getLogicalOperator().name().equalsIgnoreCase("MUST")) { + qb.must(predicate); + } else if (wc.getLogicalOperator().name() + .equalsIgnoreCase("MUSTNOT")) { + qb.mustNot(predicate); + } else if (wc.getLogicalOperator().name() + .equalsIgnoreCase("SHOULD")) { + qb.should(predicate); + } + } + + } + + sb.setIndices(indices.toArray(new String[] {})); + sb.setTypes(types.toArray(new String[] {})); + + sb.setQuery(qb); + sb.setScroll(new TimeValue(60000)); + sb.setSearchType(SearchType.DEFAULT); + SearchResponse response = sb.execute().actionGet(); + + // GET FIELDS + // GET HIGHLIGHTED FIELDS + + // TODO Auto-generated method stub + + return result; + } + + + + private QueryBuilder createPredicateFromClause(WhereClause wc) { + String predicateName = wc.getPredicateType().getName(); + + if (predicateName.equals("MATCH")) { + return matchQuery(getFieldNameFrom(wc.getStringValues() + .get("FIELD")), wc.getStringValues().get("VALUE")); + } else if (predicateName.equals("COMMONTERM")) { + return commonTermsQuery( + getFieldNameFrom(wc.getStringValues().get("FIELD")), wc + .getStringValues().get("VALUE")); + } else if (predicateName.equals("QUERYSTRING")) { + return queryStringQuery(wc.getStringValues().get("QUERYSTRING")); + } else if (predicateName.equals("SIMPLEQUERYSTRING")) { + return simpleQueryStringQuery(wc.getStringValues().get( + "QUERYSTRING")); + } else if (predicateName.equals("TERMQUERY")) { + return termQuery( + getFieldNameFrom(wc.getStringValues().get("FIELD")), wc + .getStringValues().get("VALUE")); + } else if (predicateName.equals("TERMSQUERY")) { + return termQuery( + getFieldNameFrom(wc.getStringValues().get("FIELD")), wc + .getStringValues().get("VALUE")); + } else if (predicateName.equals("RANGEQUERY")) { + + boolean includeLower = wc.getStringValues().get("LOWER_INCLUSIVE") + .equalsIgnoreCase("TRUE"); + boolean includeUpper = wc.getStringValues().get("UPPER_INCLUSIVE") + .equalsIgnoreCase("TRUE"); + + return rangeQuery( + getFieldNameFrom(wc.getStringValues().get("FIELD"))) + .from(wc.getStringValues().get("FROM")) + .to(wc.getStringValues().get("TO")) + .includeLower(includeLower).includeUpper(includeUpper); + } + + // GEO QUERIES + + return null; + } + + private String getTypeNameFrom(String pui) { + String[] pathComponents = pui.split("/"); + if ((this.index != null) && (pathComponents.length == 4)) { + return pathComponents[3]; + } else if ((this.index == null) && (pathComponents.length == 5)) { + return pathComponents[4]; + } + + return null; + } + + private String getIndexNameFrom(String pui) { + if (this.index != null) { + return this.index; + } + String pathComponents[] = pui.split("/"); + return pathComponents[3]; + } + + private String getFieldNameFrom(String pui) { + String[] pathComponents = pui.split("/"); + if ((this.index != null) && (pathComponents.length == 4)) { + return pathComponents[4]; + } else if ((this.index == null) && (pathComponents.length == 5)) { + return pathComponents[5]; + } + + return null; + } + + @Override + public List searchPaths(Entity path, String searchTerm, + SecureSession session) throws ResourceInterfaceException { + return new ArrayList(); + } + + @Override + public List searchOntology(Entity path, String ontologyType, + String ontologyTerm, SecureSession session) + throws ResourceInterfaceException { + return new ArrayList(); + } + + @Override + public Result getResults(SecureSession session, Result result) + throws ResourceInterfaceException { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getType() { + return "elasticSearch"; + } + + @Override + public ResourceState getState() { + return resourceState; + } + + @Override + public ResultDataType getQueryDataType(Query query) { + return ResultDataType.TABULAR; + } + +} diff --git a/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/geoserver/GeoServerResourceInterface.java b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/geoserver/GeoServerResourceInterface.java new file mode 100644 index 0000000..0ff48ab --- /dev/null +++ b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/geoserver/GeoServerResourceInterface.java @@ -0,0 +1,102 @@ +package edu.harvard.hms.dbmi.bd2k.irct.ri.geoserver; + +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.persistence.FlushModeType; +import javax.persistence.LockModeType; +import javax.persistence.Parameter; +import javax.persistence.Query; +import javax.persistence.TemporalType; + +import edu.harvard.hms.dbmi.bd2k.irct.exception.ResourceInterfaceException; +import edu.harvard.hms.dbmi.bd2k.irct.model.ontology.Entity; +import edu.harvard.hms.dbmi.bd2k.irct.model.ontology.OntologyRelationship; +import edu.harvard.hms.dbmi.bd2k.irct.model.resource.ResourceState; +import edu.harvard.hms.dbmi.bd2k.irct.model.resource.implementation.PathResourceImplementationInterface; +import edu.harvard.hms.dbmi.bd2k.irct.model.resource.implementation.QueryResourceImplementationInterface; +import edu.harvard.hms.dbmi.bd2k.irct.model.result.Result; +import edu.harvard.hms.dbmi.bd2k.irct.model.result.ResultDataType; +import edu.harvard.hms.dbmi.bd2k.irct.model.security.SecureSession; + +public class GeoServerResourceInterface implements + QueryResourceImplementationInterface, PathResourceImplementationInterface { + + private String resourceName; + private String resourceURL; + private ResourceState resourceState; + + @Override + public void setup(Map parameters) + throws ResourceInterfaceException { + String[] strArray = { "resourceName", "resourceURL" }; + if (!parameters.keySet().containsAll(Arrays.asList(strArray))) { + throw new ResourceInterfaceException("Missing parameters"); + } + + this.resourceName = parameters.get("resourceName"); + this.resourceURL = parameters.get("resourceURL"); + + this.resourceState = ResourceState.READY; + } + + @Override + public List getPathRelationship(Entity path, + OntologyRelationship relationship, SecureSession session) + throws ResourceInterfaceException { + // TODO Auto-generated method stub + + + return null; + } + + @Override + public List searchPaths(Entity path, String searchTerm, + SecureSession session) throws ResourceInterfaceException { + // TODO Auto-generated method stub + return null; + } + + @Override + public List searchOntology(Entity path, String ontologyType, + String ontologyTerm, SecureSession session) + throws ResourceInterfaceException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Result runQuery(SecureSession session, + edu.harvard.hms.dbmi.bd2k.irct.model.query.Query qep, Result result) + throws ResourceInterfaceException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Result getResults(SecureSession session, Result result) + throws ResourceInterfaceException { + // TODO Auto-generated method stub + return null; + } + + @Override + public ResultDataType getQueryDataType( + edu.harvard.hms.dbmi.bd2k.irct.model.query.Query query) { + return ResultDataType.TABULAR; + } + + @Override + public String getType() { + return "GeoServer"; + } + + @Override + public ResourceState getState() { + return this.resourceState; + } +} diff --git a/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/i2b2/I2B2XMLResourceImplementation.java b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/i2b2/I2B2XMLResourceImplementation.java index bdb11da..2590f74 100644 --- a/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/i2b2/I2B2XMLResourceImplementation.java +++ b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/i2b2/I2B2XMLResourceImplementation.java @@ -444,6 +444,7 @@ public Result runQuery(SecureSession session, Query query, Result result) result.setResultStatus(ResultStatus.RUNNING); } catch (JAXBException | IOException | I2B2InterfaceException e) { result.setResultStatus(ResultStatus.ERROR); + result.setMessage(e.getMessage()); } return result; } diff --git a/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/i2b2transmart/I2B2TranSMARTResourceImplementation.java b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/i2b2transmart/I2B2TranSMARTResourceImplementation.java index b3fbb73..b987020 100644 --- a/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/i2b2transmart/I2B2TranSMARTResourceImplementation.java +++ b/src/main/java/edu/harvard/hms/dbmi/bd2k/irct/ri/i2b2transmart/I2B2TranSMARTResourceImplementation.java @@ -13,6 +13,7 @@ import javax.json.Json; import javax.json.JsonArray; +import javax.json.JsonException; import javax.json.JsonObject; import javax.json.JsonReader; import javax.json.JsonValue; @@ -155,7 +156,7 @@ public Result runQuery(SecureSession session, Query query, Result result) } else if (clause instanceof WhereClause) { WhereClause whereClause = (WhereClause) clause; - String encounter = whereClause.getStringValues().get("encounter"); + String encounter = whereClause.getStringValues().get("ENCOUNTER"); if((encounter != null) && (encounter.equalsIgnoreCase("yes"))) { gatherAllEncounterFacts = "true"; } @@ -165,6 +166,13 @@ public Result runQuery(SecureSession session, Query query, Result result) if (!aliasMap.isEmpty()) { + + ResultSet rs = (ResultSet) result.getData(); + if(rs.getSize() == 0) { + rs = createInitialDataset(result, aliasMap, gatherAllEncounterFacts); + result.setData(rs); + } + //Loop through the columns submitting and appending to the rows every 10 List parameterList = new ArrayList(); int counter = 0; @@ -192,13 +200,15 @@ public Result runQuery(SecureSession session, Query query, Result result) + URLEncoder.encode(parameter, "UTF-8") + "&gatherAllEncounterFacts=" + gatherAllEncounterFacts; HttpClient client = createClient(session); - HttpGet get = new HttpGet(url); - HttpResponse response = client.execute(get); - JsonReader reader = Json.createReader(response.getEntity().getContent()); - JsonArray arrayResults = reader.readArray(); - //Convert the dataset to Tabular format - result = convertJsonToResultSet(result, arrayResults, aliasMap, gatherAllEncounterFacts); + try { + HttpResponse response = client.execute(get); + JsonReader reader = Json.createReader(response.getEntity().getContent()); + JsonArray arrayResults = reader.readArray(); + //Convert the dataset to Tabular format + result = convertJsonToResultSet(result, arrayResults, aliasMap, gatherAllEncounterFacts); + } catch(JsonException e) { + } } } @@ -248,9 +258,7 @@ private Result convertJsonToResultSet(Result result, String gatherAllEncounterFacts) throws ResultSetException, PersistableException { // If the resultset is empty create the initial result set ResultSet rs = (ResultSet) result.getData(); - if(rs.getSize() == 0) { - rs = createInitialDataset(result, aliasMap, gatherAllEncounterFacts); - } + //Create the initial Matrix Map> dataMatrix = new HashMap>(); diff --git a/src/main/resources/.gitignore b/src/main/resources/.gitignore new file mode 100644 index 0000000..b7243b1 --- /dev/null +++ b/src/main/resources/.gitignore @@ -0,0 +1,2 @@ +/archive/ +/implementation/ diff --git a/src/main/resources/ExAC setup.sql b/src/main/resources/ExAC setup.sql new file mode 100644 index 0000000..df0a2e9 --- /dev/null +++ b/src/main/resources/ExAC setup.sql @@ -0,0 +1,159 @@ +-- Set the resource parameters +set @resourceName = '{{exacresourcename.msg}}'; +set @resourceURL = '{{exacresourceurl.msg}}'; +set @resourceImplementingInterface = 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACResourceImplementation'; +set @resourceOntology = 'TREE'; + +-- Set the resource variables +set @resourceId = (select IF(id is NULL,0,max(id)) from Resource) + 1; + +-- Set the resource predicates +set @BYENSEMBLID = (select IF(id is NULL,0,max(id)) from PredicateType) + 1; +set @BYQUERYID = @BYENSEMBLID + 1; +set @BYREGIONID = @BYENSEMBLID + 2; +set @BYVARIANTID = @BYENSEMBLID + 3; + +-- Set the Fields +set @ENSEMBLID_FIELD_ID = (select IF(id is NULL,0,max(id)) from Field) + 1; +set @QUERY_FIELD_ID = @ENSEMBLID_FIELD_ID + 1; +set @CHROMOSOME_FIELD_ID = @ENSEMBLID_FIELD_ID + 2; +set @START_FIELD_ID = @ENSEMBLID_FIELD_ID + 3; +set @STOP_FIELD_ID = @ENSEMBLID_FIELD_ID + 4; +set @VARIANT_CHROMOSONE_FIELD_ID = @ENSEMBLID_FIELD_ID + 5; +set @VARIANT_POSITION_FIELD_ID = @ENSEMBLID_FIELD_ID + 6; +set @VARIANT_REFERENCE_FIELD_ID = @ENSEMBLID_FIELD_ID + 7; +set @VARIANT_VARIANT_FIELD_ID = @ENSEMBLID_FIELD_ID + 8; + + +-- set the process id +set @calculateRarityId = (select IF(id is NULL,0,max(id)) from ProcessType) + 1; + +-- Set the Process Parameter Ids +set @calculateRarityId_ResultSet = @VARIANT_VARIANT_FIELD_ID + 1; +set @calculateRarityId_Chromosome = @calculateRarityId_ResultSet + 1; +set @calculateRarityId_Position = @calculateRarityId_Chromosome + 1; +set @calculateRarityId_Reference = @calculateRarityId_Position + 1; +set @calculateRarityId_Variant = @calculateRarityId_Reference + 1; + + +-- INSERT THE RESOURCE +insert into Resource(id, implementingInterface, name, ontologyType) values(@resourceId, @resourceImplementingInterface, @resourceName, @resourceOntology); + +-- INSERT THE RESOURCE PARAMERTERS +insert into resource_parameters(id, name, value) values(@resourceId, 'resourceName', @resourceName); +insert into resource_parameters(id, name, value) values(@resourceId, 'resourceURL', @resourceURL); + +-- INSERT RESOURCE DATATYEPS +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:VARIANT'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:GENE'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:TRANSCRIPT'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:REGION'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); + +-- INSERT RESOURCE RELATIONSHIPS +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACOntologyRelationship:PARENT'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACOntologyRelationship:CHILD'); + + +-- BY ENSEMBL PREDICATE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@BYENSEMBLID, 0, 'Look up by Ensembl Id', 'Ensembl ID', 'ENSEMBL'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYENSEMBLID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:GENE'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYENSEMBLID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:TRANSCRIPT'); + +insert into Field(id, description, name, path, relationship, required) values(@ENSEMBLID_FIELD_ID, 'Ensembl Id', 'Ensembl Id', 'ENSEMBLID', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@ENSEMBLID_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYENSEMBLID, @ENSEMBLID_FIELD_ID); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @BYENSEMBLID); + + +-- BY QUERY PREDICATE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@BYQUERYID, 1, 'Look up by a query string', 'Query', 'QUERY'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYQUERYID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:TRANSCRIPT'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYQUERYID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:VARIANT'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYQUERYID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:GENE'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYQUERYID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:TRANSCRIPT'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYQUERYID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:REGION'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYQUERYID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); + +insert into Field(id, description, name, path, relationship, required) values(@QUERY_FIELD_ID, 'Query String', 'Query String', 'QUERY', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@QUERY_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYQUERYID, @QUERY_FIELD_ID); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @BYQUERYID); + + +-- BY REGION PREDICATE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@BYREGIONID, 0, 'Look up by region', 'Region', 'REGION'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYREGIONID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:REGION'); + +insert into Field(id, description, name, path, relationship, required) values(@CHROMOSOME_FIELD_ID, 'Chromosome', 'Chromosome', 'CHROMOSOME', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@CHROMOSOME_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYREGIONID, @CHROMOSOME_FIELD_ID); + +insert into Field(id, description, name, path, relationship, required) values(@START_FIELD_ID, 'Start Position', 'Start', 'START', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@START_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYREGIONID, @START_FIELD_ID); + +insert into Field(id, description, name, path, relationship, required) values(@STOP_FIELD_ID, 'Stop Position', 'Stop', 'STOP', null, 0); +insert into Field_dataTypes(Field_id, dataTypes) values(@STOP_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYREGIONID, @STOP_FIELD_ID); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @BYREGIONID); + +-- BY VARIANT PREDICATE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@BYVARIANTID, 0, 'Look up by variant', 'Variant', 'VARIANT'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@BYVARIANTID, 'edu.harvard.hms.dbmi.bd2k.irct.ri.exac.EXACDataType:VARIANT'); + + +insert into Field(id, description, name, path, relationship, required) values(@VARIANT_CHROMOSONE_FIELD_ID, 'Chromosome', 'Chromosome', 'CHROMOSOME', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@VARIANT_CHROMOSONE_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYVARIANTID, @VARIANT_CHROMOSONE_FIELD_ID); + +insert into Field(id, description, name, path, relationship, required) values(@VARIANT_POSITION_FIELD_ID, 'Variant Position', 'Position', 'POSITION', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@VARIANT_POSITION_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYVARIANTID, @VARIANT_POSITION_FIELD_ID); + +insert into Field(id, description, name, path, relationship, required) values(@VARIANT_REFERENCE_FIELD_ID, 'Varaint Reference', 'Reference', 'REFERENCE', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@VARIANT_REFERENCE_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYVARIANTID, @VARIANT_REFERENCE_FIELD_ID); + +insert into Field(id, description, name, path, relationship, required) values(@VARIANT_VARIANT_FIELD_ID, 'Variant', 'Variant', 'VARIANT', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@VARIANT_VARIANT_FIELD_ID, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@BYVARIANTID, @VARIANT_VARIANT_FIELD_ID); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @BYVARIANTID); + + + +-- Process +-- Rarity +insert into ProcessType(id, name, displayName, description) values(@calculateRarityId, 'RARITY', 'Calculate Rarity', 'Calculate the rarity of a variant against the ExAC database'); + +-- ResultSet +insert into Field(id, path, name, description, relationship, required) values(@calculateRarityId_ResultSet, 'RESULTSET', 'Result', 'Result Set', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@calculateRarityId_ResultSet, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:RESULTSET'); +insert into ProcessType_Fields(ProcessType_id, fields_id) values(@calculateRarityId, @calculateRarityId_ResultSet); + +-- Chromosome Column +insert into Field(id, path, name, description, relationship, required) values(@calculateRarityId_Chromosome, 'CHROMOSOME', 'Chromosome', 'Chromosome Column', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@calculateRarityId_Chromosome, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:COLUMN'); +insert into ProcessType_Fields(ProcessType_id, fields_id) values(@calculateRarityId, @calculateRarityId_Chromosome); + +-- Position Column +insert into Field(id, path, name, description, relationship, required) values(@calculateRarityId_Position, 'POSITION', 'Position', 'Position Column', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@calculateRarityId_Position, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:COLUMN'); +insert into ProcessType_Fields(ProcessType_id, fields_id) values(@calculateRarityId, @calculateRarityId_Position); + +-- Reference Column +insert into Field(id, path, name, description, relationship, required) values(@calculateRarityId_Reference, 'REFERENCE', 'Reference', 'Reference Column', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@calculateRarityId_Reference, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:COLUMN'); +insert into ProcessType_Fields(ProcessType_id, fields_id) values(@calculateRarityId, @calculateRarityId_Reference); + +-- Variant Column +insert into Field(id, path, name, description, relationship, required) values(@calculateRarityId_Variant, 'VARIANT', 'Variant', 'Variant Column', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@calculateRarityId_Variant, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:COLUMN'); +insert into ProcessType_Fields(ProcessType_id, fields_id) values(@calculateRarityId, @calculateRarityId_Variant); + +insert into Resource_ProcessType(Resource_id, supportedProcesses_id) values(@resourceId, @calculateRarityId); \ No newline at end of file diff --git a/src/main/resources/i2b2 setup.sql b/src/main/resources/i2b2 setup.sql new file mode 100644 index 0000000..4aebf6e --- /dev/null +++ b/src/main/resources/i2b2 setup.sql @@ -0,0 +1,146 @@ +-- Set the resource parameters +set @resourceName = '{{i2b2resourcename.msg}}'; +set @resourceURL = '{{i2b2resourceurl.msg}}'; +set @domain = '{{i2b2domain.msg}}'; +set @resourceImplementingInterface = 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2XMLResourceImplementation'; +set @resourceOntology = 'TREE'; +set @proxyURL = '{{i2b2proxyURL.msg}}'; + +-- Set the resource variables +set @resourceId = (select IF(id is NULL,0,max(id)) from Resource) + 1; + +-- Set the resource predicates +set @containsId = (select IF(id is NULL,0,max(id)) from PredicateType) + 1; +set @constrainModifierId = @containsId + 1; +set @constrainValueId = @containsId + 2; +set @constrainDateId = @containsId + 3; + +-- Set the Fields +set @modifier_FieldId = (select IF(id is NULL,0,max(id)) from Field) + 1; +set @operator_ConstrainValueId = @modifier_FieldId + 1; +set @constraint_ConstrainValueId = @modifier_FieldId + 2; +set @unitOfMeasure_ConstrainValueId = @modifier_FieldId + 3; +set @fromInclusive_ConstrainDateId = @modifier_FieldId + 4; +set @fromTime_ConstrainDateId = @modifier_FieldId + 5; +set @fromDate_ConstrainDateId = @modifier_FieldId + 6; +set @toInclusive_ConstrainDateId = @modifier_FieldId + 7; +set @toTime_ConstrainDateId = @modifier_FieldId + 8; +set @toDate_ConstrainDateId = @modifier_FieldId + 9; + +-- INSERT THE RESOURCE +insert into Resource(id, implementingInterface, name, ontologyType) values(@resourceId, @resourceImplementingInterface, @resourceName, @resourceOntology); + +-- INSERT THE RESOURCE PARAMERTERS +insert into resource_parameters(id, value, name) values(@resourceId, 'resourceName', @resourceName); +insert into resource_parameters(id, value, name) values(@resourceId, 'resourceURL', @resourceURL); +insert into resource_parameters(id, value, name) values(@resourceId, 'domain', @domain); +insert into resource_parameters(id, value, name) values(@resourceId, 'proxyURL', @proxyURL); + +-- INSERT RESOURCE DATATYEPS +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:DATETIME'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:DATE'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +-- INSERT RESOURCE RELATIONSHIPS +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:PARENT'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:CHILD'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:SIBLING'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:MODIFIER'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:TERM'); + +-- INSERT RESOURCE LogicalOperators +insert into Resource_logicalOperator(id, logicalOperator) values(@resourceId, 'AND'); +insert into Resource_logicalOperator(id, logicalOperator) values(@resourceId, 'OR'); +insert into Resource_logicalOperator(id, logicalOperator) values(@resourceId, 'NOT'); + +-- CONTAINS PREDICATE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@containsId, 1, 'Contains value', 'Contains', 'CONTAINS'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@contains_FieldId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@contains_FieldId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@contains_FieldId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @containsId); + +-- CONSTRAIN BY MODIFER +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@constrainModifierId, 0, 'Constrain by Modifier', 'Constrain by Modifier', 'CONSTRAIN_MODIFIER'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainModifierId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainModifierId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainModifierId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +insert into Field(id, description, name, path, relationship, required) values(@modifier_FieldId, 'Constrain by a modifier of this entity', 'Modifier', 'MODIFIER_KEY', 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:MODIFIER', 1); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainModifierId, @modifier_FieldId); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @constrainModifierId); + +-- CONSTRAIN BY VALUE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@constrainValueId, 0, 'Constrains by Value', 'Constrain by Value', 'CONSTRAIN_VALUE'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +insert into Field(id, description, name, path, relationship, required) values(@operator_ConstrainValueId, 'Operator', 'Operator', 'OPERATOR', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'EQ'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'NE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'GT'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'GE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LT'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'BETWEEN'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LIKE[exact]'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LIKE[begin]'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LIKE[end]'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LIKE[contains]'); + +insert into Field(id, description, name, path, relationship, required) values(@constraint_ConstrainValueId, 'Constraint', 'Constraint', 'CONSTRAINT', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@constraint_ConstrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into Field_dataTypes(Field_id, dataTypes) values(@constraint_ConstrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into Field_dataTypes(Field_id, dataTypes) values(@constraint_ConstrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +insert into Field(id, description, name, path, relationship, required) values(@unitOfMeasure_ConstrainValueId, 'Unit of Measure', 'Unit of Measure', 'UNIT_OF_MEASURE', null, 0); +insert into Field_dataTypes(Field_id, dataTypes) values(@unitOfMeasure_ConstrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); + +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainValueId, @operator_ConstrainValueId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainValueId, @constraint_ConstrainValueId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainValueId, @unitOfMeasure_ConstrainValueId); + + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @constrainValueId); +-- CONSTRAIN BY DATE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@constrainDateId, 0, 'Constrains by Date', 'Constrain by Date', 'CONSTRAIN_DATE'); + + +insert into Field(id, description, name, path, relationship, required) values(@fromInclusive_ConstrainDateId, 'Inclusive From Date', 'From Inclusive', 'FROM_INCLUSIVE', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@fromInclusive_ConstrainDateId, 'YES'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@fromInclusive_ConstrainDateId, 'NO'); + + +insert into Field(id, description, name, path, relationship, required) values(@fromTime_ConstrainDateId, 'From Date Start or End', 'From Time', 'FROM_TIME', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@fromTime_ConstrainDateId, 'START_DATE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@fromTime_ConstrainDateId, 'END_DATE'); + + +insert into Field(id, description, name, path, relationship, required) values(@fromDate_ConstrainDateId, 'From Date', 'From Date', 'FROM_DATE', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@fromDate_ConstrainDateId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:DATE'); + +insert into Field(id, description, name, path, relationship, required) values(@toInclusive_ConstrainDateId, 'Inclusive To Date', 'To Inclusive', 'TO_INCLUSIVE', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@toInclusive_ConstrainDateId, 'YES'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@toInclusive_ConstrainDateId, 'NO'); + +insert into Field(id, description, name, path, relationship, required) values(@toTime_ConstrainDateId, 'To Date Start or End', 'To Time', 'TO_TIME', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@toTime_ConstrainDateId, 'START_DATE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@toTime_ConstrainDateId, 'END_DATE'); + +insert into Field(id, description, name, path, relationship, required) values(@toDate_ConstrainDateId, 'To Date', 'To Date', 'TO_DATE', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@toDate_ConstrainDateId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:DATE'); + + +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @fromInclusive_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @fromTime_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @fromDate_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @toInclusive_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @toTime_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @toDate_ConstrainDateId); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @constrainDateId); diff --git a/src/main/resources/i2b2 tranSMART setup.sql b/src/main/resources/i2b2 tranSMART setup.sql new file mode 100644 index 0000000..81927c1 --- /dev/null +++ b/src/main/resources/i2b2 tranSMART setup.sql @@ -0,0 +1,188 @@ +-- Set the resource parameters +set @resourceName = '{{transmartresourcename}}'; +set @transmartURL = '{{transmartresourceurl}}'; +set @resourceURL = '{{i2b2resourceurl}}'; +set @domain = '{{i2b2domain}}'; +set @userName = '{{i2b2username}}'; +set @password = '{{i2b2password}}'; +--set @ignoreCertificate = 'true'; +set @auth0ClientId = '{{auth0clientid.msg}}'; +set @auth0Domain = '{{auth0domain.msg}}'; + +set @resourceImplementingInterface = 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2transmart.I2B2TranSMARTResourceImplementation'; +set @resourceOntology = 'TREE'; + + +-- Set the resource variables +set @resourceId = (select IF(id is NULL,0,max(id)) from Resource) + 1; + +-- Set the resource predicates +set @containsId = (select IF(id is NULL,0,max(id)) from PredicateType) + 1; +set @constrainModifierId = @containsId + 1; +set @constrainValueId = @containsId + 2; +set @constrainDateId = @containsId + 3; + +-- Set the Fields +set @encounter_ContainsId = (select IF(id is NULL,0,max(id)) from Field) + 1; + +set @modifier_FieldId = @encounter_ContainsId + 1; +set @encounter_ModifierId = @modifier_FieldId + 1; + +set @operator_ConstrainValueId = @encounter_ModifierId + 1; +set @constraint_ConstrainValueId = @operator_ConstrainValueId + 1; +set @unitOfMeasure_ConstrainValueId = @constraint_ConstrainValueId + 1; +set @encounter_ConstrainValueId = @unitOfMeasure_ConstrainValueId + 1; + +set @fromInclusive_ConstrainDateId = @encounter_ConstrainValueId + 1; +set @fromTime_ConstrainDateId = @fromInclusive_ConstrainDateId + 1; +set @fromDate_ConstrainDateId = @fromTime_ConstrainDateId + 1; +set @toInclusive_ConstrainDateId = @fromDate_ConstrainDateId + 1; +set @toTime_ConstrainDateId = @toInclusive_ConstrainDateId + 1; +set @toDate_ConstrainDateId = @toTime_ConstrainDateId + 1; +set @encounter_ConstrainDateId = @toDate_ConstrainDateId + 1; + +-- INSERT THE RESOURCE +insert into Resource(id, implementingInterface, name, ontologyType) values(@resourceId, @resourceImplementingInterface, @resourceName, @resourceOntology); + +-- INSERT THE RESOURCE PARAMERTERS +insert into resource_parameters(id, name, value) values(@resourceId, 'resourceName', @resourceName); +insert into resource_parameters(id, name, value) values(@resourceId, 'resourceURL', @resourceURL); +insert into resource_parameters(id, name, value) values(@resourceId, 'transmartURL', @transmartURL); +insert into resource_parameters(id, name, value) values(@resourceId, 'domain', @domain); +insert into resource_parameters(id, name, value) values(@resourceId, 'username', @userName); +insert into resource_parameters(id, name, value) values(@resourceId, 'password', @password); +insert into resource_parameters(id, name, value) values(@resourceId, 'ignoreCertificate', @ignoreCertificate); +insert into resource_parameters(id, name, value) values(@resourceId, 'clientId', @auth0ClientId); +insert into resource_parameters(id, name, value) values(@resourceId, 'namespace', @auth0Domain); + +-- INSERT RESOURCE DATATYEPS +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:DATETIME'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:DATE'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into Resource_dataTypes(Resource_id, datatypes) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +-- INSERT RESOURCE RELATIONSHIPS +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:PARENT'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:CHILD'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:SIBLING'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:MODIFIER'); +insert into Resource_relationships(Resource_id, relationships) values(@resourceId, 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:TERM'); + +-- INSERT RESOURCE LogicalOperators +insert into Resource_LogicalOperator(id, logicalOperator) values(@resourceId, 'AND'); +insert into Resource_LogicalOperator(id, logicalOperator) values(@resourceId, 'OR'); +insert into Resource_LogicalOperator(id, logicalOperator) values(@resourceId, 'NOT'); + +-- CONTAINS PREDICATE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@containsId, 1, 'Contains value', 'Contains', 'CONTAINS'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@containsId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@containsId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@containsId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +insert into Field(id, description, name, path, relationship, required) values(@encounter_ContainsId, 'By Encounter', 'By Encounter', 'ENCOUNTER', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@encounter_ContainsId, 'YES'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@encounter_ContainsId, 'NO'); + +insert into PredicateType_Field(PredicateType_id, fields_id) values(@containsId, @encounter_ContainsId); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @containsId); + +-- CONSTRAIN BY MODIFER +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@constrainModifierId, 0, 'Constrain by Modifier', 'Constrain by Modifier', 'CONSTRAIN_MODIFIER'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainModifierId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainModifierId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainModifierId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +insert into Field(id, description, name, path, relationship, required) values(@modifier_FieldId, 'Constrain by a modifier of this entity', 'Modifier', 'MODIFIER_KEY', 'edu.harvard.hms.dbmi.bd2k.irct.ri.i2b2.I2B2OntologyRelationship:MODIFIER', 1); + +insert into Field(id, description, name, path, relationship, required) values(@encounter_ModifierId, 'By Encounter', 'By Encounter', 'ENCOUNTER', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@encounter_ModifierId, 'YES'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@encounter_ModifierId, 'NO'); + +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainModifierId, @modifier_FieldId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainModifierId, @encounter_ModifierId); + + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @constrainModifierId); + +-- CONSTRAIN BY VALUE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@constrainValueId, 0, 'Constrains by Value', 'Constrain by Value', 'CONSTRAIN_VALUE'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into PredicateType_dataTypes(PredicateType_id, dataTypes) values(@constrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +insert into Field(id, description, name, path, relationship, required) values(@operator_ConstrainValueId, 'Operator', 'Operator', 'OPERATOR', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'EQ'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'NE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'GT'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'GE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LT'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'BETWEEN'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LIKE[exact]'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LIKE[begin]'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LIKE[end]'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@operator_ConstrainValueId, 'LIKE[contains]'); + +insert into Field(id, description, name, path, relationship, required) values(@constraint_ConstrainValueId, 'Constraint', 'Constraint', 'CONSTRAINT', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@constraint_ConstrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); +insert into Field_dataTypes(Field_id, dataTypes) values(@constraint_ConstrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:INTEGER'); +insert into Field_dataTypes(Field_id, dataTypes) values(@constraint_ConstrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:FLOAT'); + +insert into Field(id, description, name, path, relationship, required) values(@unitOfMeasure_ConstrainValueId, 'Unit of Measure', 'Unit of Measure', 'UNIT_OF_MEASURE', null, 0); +insert into Field_dataTypes(Field_id, dataTypes) values(@unitOfMeasure_ConstrainValueId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:STRING'); + +insert into Field(id, description, name, path, relationship, required) values(@encounter_ConstrainValueId, 'By Encounter', 'By Encounter', 'ENCOUNTER', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@encounter_ConstrainValueId, 'YES'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@encounter_ConstrainValueId, 'NO'); + + +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainValueId, @operator_ConstrainValueId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainValueId, @constraint_ConstrainValueId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainValueId, @unitOfMeasure_ConstrainValueId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainValueId, @encounter_ConstrainValueId); + + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @constrainValueId); +-- CONSTRAIN BY DATE +insert into PredicateType(id, defaultPredicate, description, displayName, name) values(@constrainDateId, 0, 'Constrains by Date', 'Constrain by Date', 'CONSTRAIN_DATE'); + + +insert into Field(id, description, name, path, relationship, required) values(@fromInclusive_ConstrainDateId, 'Inclusive From Date', 'From Inclusive', 'FROM_INCLUSIVE', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@fromInclusive_ConstrainDateId, 'YES'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@fromInclusive_ConstrainDateId, 'NO'); + + +insert into Field(id, description, name, path, relationship, required) values(@fromTime_ConstrainDateId, 'From Date Start or End', 'From Time', 'FROM_TIME', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@fromTime_ConstrainDateId, 'START_DATE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@fromTime_ConstrainDateId, 'END_DATE'); + + +insert into Field(id, description, name, path, relationship, required) values(@fromDate_ConstrainDateId, 'From Date', 'From Date', 'FROM_DATE', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@fromDate_ConstrainDateId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:DATE'); + +insert into Field(id, description, name, path, relationship, required) values(@toInclusive_ConstrainDateId, 'Inclusive To Date', 'To Inclusive', 'TO_INCLUSIVE', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@toInclusive_ConstrainDateId, 'YES'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@toInclusive_ConstrainDateId, 'NO'); + +insert into Field(id, description, name, path, relationship, required) values(@toTime_ConstrainDateId, 'To Date Start or End', 'To Time', 'TO_TIME', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@toTime_ConstrainDateId, 'START_DATE'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@toTime_ConstrainDateId, 'END_DATE'); + +insert into Field(id, description, name, path, relationship, required) values(@toDate_ConstrainDateId, 'To Date', 'To Date', 'TO_DATE', null, 1); +insert into Field_dataTypes(Field_id, dataTypes) values(@toDate_ConstrainDateId, 'edu.harvard.hms.dbmi.bd2k.irct.model.resource.PrimitiveDataType:DATE'); + +insert into Field(id, description, name, path, relationship, required) values(@encounter_ConstrainDateId, 'By Encounter', 'By Encounter', 'ENCOUNTER', null, 1); +insert into Field_permittedValues(Field_Id, permittedValues) values(@encounter_ConstrainDateId, 'YES'); +insert into Field_permittedValues(Field_Id, permittedValues) values(@encounter_ConstrainDateId, 'NO'); + +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @fromInclusive_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @fromTime_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @fromDate_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @toInclusive_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @toTime_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @toDate_ConstrainDateId); +insert into PredicateType_Field(PredicateType_id, fields_id) values(@constrainDateId, @encounter_ConstrainDateId); + +insert into Resource_PredicateType(Resource_Id, supportedPredicates_id) values(@resourceId, @constrainDateId);