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);