package org.hadatac.entity.pojo; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryExecutionFactory; import org.apache.jena.query.QueryFactory; import org.apache.jena.query.QuerySolution; import org.apache.jena.query.ResultSet; import org.apache.jena.query.ResultSetFactory; import org.apache.jena.query.ResultSetRewindable; import org.apache.jena.rdf.model.Model; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.beans.Field; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.hadatac.console.controllers.AuthApplication; import org.hadatac.metadata.loader.LabkeyDataHandler; import org.hadatac.metadata.loader.ValueCellProcessing; import org.hadatac.utils.Collections; import org.hadatac.utils.ConfigProp; import org.hadatac.utils.NameSpaces; import org.hadatac.utils.State; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.ISODateTimeFormat; import org.labkey.remoteapi.CommandException; import be.objectify.deadbolt.java.actions.Group; import be.objectify.deadbolt.java.actions.Restrict; import play.Play; public class DataAcquisition { @Field("uri") private String uri; @Field("label") private String label; @Field("comment") private String comment; @Field("used_uri") private String used_uri; private DateTime startedAt; private DateTime endedAt; @Field("owner_uri") private String ownerUri; @Field("permission_uri") private String permissionUri; @Field("parameter") private String parameter; @Field("triggering_event") private int triggeringEvent; @Field("nr_data_points") private long numberDataPoints; @Field("unit") private List<String> unit; @Field("unit_uri") private List<String> unitUri; @Field("entity") private List<String> entity; @Field("entity_uri") private List<String> entityUri; @Field("type") private List<String> types; @Field("type_uri") private List<String> typeURIs; @Field("associated_uri") private List<String> associatedURIs; @Field("characteristic") private List<String> characteristic; @Field("characteristic_uri") private List<String> characteristicUri; @Field("study_uri") private String studyUri; @Field("method_uri") private String methodUri; @Field("schema_uri") private String schemaUri; @Field("deployment_uri") private String deploymentUri; @Field("instrument_model") private String instrumentModel; @Field("instrument_uri") private String instrumentUri; @Field("platform_name") private String platformName; @Field("platform_uri") private String platformUri; @Field("location") private String location; @Field("elevation") private String elevation; @Field("dataset_uri") private List<String> datasetURIs; private String ccsvUri; private String localName; private int status; /* * 0 - DataAcquisition is a new one, its details on the preamble * It should not exist inside the KB * Preamble must contain deployment link and deployment must exists on the KB * 1 - DataAcquisition already exists, only a reference present on the preamble * It should exist inside the KB as not finished yet * 2 - DataAcquisition already exists, the preamble states its termination with endedAtTime information * It should exist inside the KB as not finished yet */ public DataAcquisition() { startedAt = null; endedAt = null; numberDataPoints = 0; datasetURIs = new ArrayList<String>(); unit = new ArrayList<String>(); unitUri = new ArrayList<String>(); characteristic = new ArrayList<String>(); characteristicUri = new ArrayList<String>(); entity = new ArrayList<String>(); entityUri = new ArrayList<String>(); types = new ArrayList<String>(); typeURIs = new ArrayList<String>(); associatedURIs = new ArrayList<String>(); } public String getElevation() { return elevation; } public void setElevation(String elevation) { this.elevation = elevation; } public String getCcsvUri() { return ccsvUri; } public void setCcsvUri(String ccsvUri) { this.ccsvUri = ccsvUri; } public long getNumberDataPoints() { return numberDataPoints; } public void setNumberDataPoints(long numberDataPoints) { this.numberDataPoints = numberDataPoints; } public String getLocalName() { return localName; } public void setLocalName(String localName) { this.localName = localName; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getUri() { return uri; } public void setUri(String uri) { this.uri = uri; } public String getParameter() { return parameter; } public void setParameter(String parameter) { this.parameter = parameter; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; } public String getUsedUri() { return used_uri; } public void setUsedUri(String used_uri) { this.used_uri = used_uri; } public String getStudyUri() { return studyUri; } public void setStudyUri(String study_uri) { this.studyUri = study_uri; } public String getOwnerUri() { return ownerUri; } public void setOwnerUri(String ownerUri) { this.ownerUri = ownerUri; } public String getPermissionUri() { return permissionUri; } public void setPermissionUri(String permissionUri) { this.permissionUri = permissionUri; } public int getTriggeringEvent() { return triggeringEvent; } public void setTriggeringEvent(int triggeringEvent) { this.triggeringEvent = triggeringEvent; } public String getTriggeringEventName() { switch (triggeringEvent) { case TriggeringEvent.INITIAL_DEPLOYMENT: return TriggeringEvent.INITIAL_DEPLOYMENT_NAME; case TriggeringEvent.LEGACY_DEPLOYMENT: return TriggeringEvent.LEGACY_DEPLOYMENT_NAME; case TriggeringEvent.CHANGED_CONFIGURATION: return TriggeringEvent.CHANGED_CONFIGURATION_NAME; case TriggeringEvent.CHANGED_OWNERSHIP: return TriggeringEvent.CHANGED_OWNERSHIP_NAME; case TriggeringEvent.AUTO_CALIBRATION: return TriggeringEvent.AUTO_CALIBRATION_NAME; case TriggeringEvent.SUSPEND_DATA_ACQUISITION: return TriggeringEvent.SUSPEND_DATA_ACQUISITION_NAME; case TriggeringEvent.RESUME_DATA_ACQUISITION: return TriggeringEvent.RESUME_DATA_ACQUISITION_NAME; } return ""; } public int getTriggeringEventByName(String name) { switch (name) { case TriggeringEvent.INITIAL_DEPLOYMENT_NAME: return TriggeringEvent.INITIAL_DEPLOYMENT; case TriggeringEvent.LEGACY_DEPLOYMENT_NAME: return TriggeringEvent.LEGACY_DEPLOYMENT; case TriggeringEvent.CHANGED_CONFIGURATION_NAME: return TriggeringEvent.CHANGED_CONFIGURATION; case TriggeringEvent.CHANGED_OWNERSHIP_NAME: return TriggeringEvent.CHANGED_OWNERSHIP; case TriggeringEvent.AUTO_CALIBRATION_NAME: return TriggeringEvent.AUTO_CALIBRATION; case TriggeringEvent.SUSPEND_DATA_ACQUISITION_NAME: return TriggeringEvent.SUSPEND_DATA_ACQUISITION; case TriggeringEvent.RESUME_DATA_ACQUISITION_NAME: return TriggeringEvent.RESUME_DATA_ACQUISITION; } return -1; } public String getStartedAt() { DateTimeFormatter formatter = ISODateTimeFormat.dateTime(); return formatter.withZone(DateTimeZone.UTC).print(startedAt); } public String getStartedAtXsd() { DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis(); return formatter.withZone(DateTimeZone.UTC).print(startedAt); } @Field("started_at") public void setStartedAt(String startedAt) { DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss zzz yyyy"); this.startedAt = formatter.parseDateTime(startedAt); } public void setStartedAtXsd(String startedAt) { DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis(); this.startedAt = formatter.parseDateTime(startedAt); } public void setStartedAtXsdWithMillis(String startedAt) { DateTimeFormatter formatter = ISODateTimeFormat.dateTime(); this.startedAt = formatter.parseDateTime(startedAt); } public String getEndedAt() { DateTimeFormatter formatter = ISODateTimeFormat.dateTime(); return formatter.withZone(DateTimeZone.UTC).print(endedAt); } public String getEndedAtXsd() { DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis(); return formatter.withZone(DateTimeZone.UTC).print(endedAt); } @Field("ended_at") public void setEndedAt(String endedAt) { DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss zzz yyyy"); this.endedAt = formatter.parseDateTime(endedAt); } public void setEndedAtXsd(String endedAt) { DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis(); this.endedAt = formatter.parseDateTime(endedAt); } public void setEndedAtXsdWithMillis(String endedAt) { DateTimeFormatter formatter = ISODateTimeFormat.dateTime(); this.endedAt = formatter.parseDateTime(endedAt); } public List<String> getUnit() { return unit; } public void setUnit(List<String> unit) { this.unit = unit; } public void addUnit(String unit) { if (this.unit.contains(unit) == false) { this.unit.add(unit); } } public List<String> getUnitUri() { return unitUri; } public void setUnitUri(List<String> unitUri) { this.unitUri = unitUri; } public void addUnitUri(String unitUri) { if (this.unitUri.contains(unitUri) == false) { this.unitUri.add(unitUri); } } public List<String> getEntity() { return entity; } public void setEntity(List<String> entity) { this.entity = entity; } public void addEntity(String entity) { if (this.entity.contains(entity) == false) { this.entity.add(entity); } } public List<String> getEntityUri() { return entityUri; } public void setEntityUri(List<String> entityUri) { this.entityUri = entityUri; } public void addEntityUri(String entityUri) { if (this.entityUri.contains(entityUri) == false) { this.entityUri.add(entityUri); } } public List<String> getCharacteristic() { return characteristic; } public void setCharacteristic(List<String> characteristic) { this.characteristic = characteristic; } public void addCharacteristic(String characteristic) { if (this.characteristic.contains(characteristic) == false) { this.characteristic.add(characteristic); } } public List<String> getCharacteristicUri() { return characteristicUri; } public void setCharacteristicUri(List<String> characteristicUri) { this.characteristicUri = characteristicUri; } public void addCharacteristicUri(String characteristicUri) { if (this.characteristicUri.contains(characteristicUri) == false) { this.characteristicUri.add(characteristicUri); } } public String getMethodUri() { return methodUri; } public void setMethodUri(String methodUri) { this.methodUri = methodUri; } public String getSchemaUri() { return schemaUri; } public void setSchemaUri(String schemaUri) { this.schemaUri = schemaUri; } public String getDeploymentUri() { return deploymentUri; } public void setDeploymentUri(String deploymentUri) { this.deploymentUri = deploymentUri; } public String getInstrumentModel() { return instrumentModel; } public void setInstrumentModel(String instrumentModel) { this.instrumentModel = instrumentModel; } public String getInstrumentUri() { return instrumentUri; } public void setInstrumentUri(String instrumentUri) { this.instrumentUri = instrumentUri; } public String getPlatformName() { return platformName; } public void setPlatformName(String platformName) { this.platformName = platformName; } public String getPlatformUri() { return platformUri; } public void setPlatformUri(String platformUri) { this.platformUri = platformUri; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public List<String> getDatasetUri() { return datasetURIs; } public void setDatasetUri(List<String> datasetURIs) { this.datasetURIs = datasetURIs; } public void addDatasetUri(String dataset_uri) { if (!datasetURIs.contains(dataset_uri)) { datasetURIs.add(dataset_uri); } } public void deleteDatasetUri(String dataset_uri) { Iterator<String> iter = datasetURIs.iterator(); while (iter.hasNext()){ if (iter.next().equals(dataset_uri)) { iter.remove(); } } } public void deleteAllDatasetURIs() { datasetURIs.clear(); } public boolean containsDataset(String uri) { return datasetURIs.contains(uri); } public List<String> getTypeURIs() { return typeURIs; } public void setTypeURIs(List<String> typeURIs) { this.typeURIs = typeURIs; } public void addTypeUri(String type_uri) { if (!typeURIs.contains(type_uri)) { typeURIs.add(type_uri); } } public List<String> getAssociatedURIs() { return associatedURIs; } public void setAssociatedURIs(List<String> associatedURIs) { this.associatedURIs = associatedURIs; } public void addAssociatedUri(String associated_uri) { if (!associatedURIs.contains(associated_uri)) { associatedURIs.add(associated_uri); } } public void addNumberDataPoints(long number) { numberDataPoints += number; } public boolean isFinished() { if (endedAt == null) { return false; } else { return endedAt.isBeforeNow(); } } public int save() { try { SolrClient client = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.DATA_COLLECTION); if (null == endedAt) { endedAt = DateTime.parse("9999-12-31T23:59:59.999Z"); } else if (endedAt.toString().startsWith("9999")) { endedAt = DateTime.parse("9999-12-31T23:59:59.999Z"); } int status = client.addBean(this).getStatus(); client.commit(); client.close(); return status; } catch (IOException | SolrServerException e) { System.out.println("[ERROR] DataAcquisition.save() - e.Message: " + e.getMessage()); return -1; } } public static DataAcquisition convertFromSolr(SolrDocument doc) { Iterator<Object> i; DateTime date; DataAcquisition dataAcquisition = new DataAcquisition(); try { if (doc.getFieldValue("uri") != null) { dataAcquisition.setUri(doc.getFieldValue("uri").toString()); } if (doc.getFieldValue("owner_uri") != null) { dataAcquisition.setOwnerUri(doc.getFieldValue("owner_uri").toString()); } if (doc.getFieldValue("permission_uri") != null) { dataAcquisition.setPermissionUri(doc.getFieldValue("permission_uri").toString()); } if (doc.getFieldValue("parameter") != null) { dataAcquisition.setParameter(doc.getFieldValue("parameter").toString()); } if (doc.getFieldValue("study_uri") != null) { dataAcquisition.setStudyUri(doc.getFieldValue("study_uri").toString()); } if (doc.getFieldValue("triggering_event") != null) { dataAcquisition.setTriggeringEvent(Integer.parseInt(doc.getFieldValue("triggering_event").toString())); } if (doc.getFieldValue("nr_data_points") != null) { dataAcquisition.setNumberDataPoints(Long.parseLong(doc.getFieldValue("nr_data_points").toString())); } if (doc.getFieldValue("started_at") != null) { date = new DateTime((Date)doc.getFieldValue("started_at")); dataAcquisition.setStartedAt(date.withZone(DateTimeZone.UTC).toString("EEE MMM dd HH:mm:ss zzz yyyy")); } if (doc.getFieldValue("ended_at") != null) { date = new DateTime((Date)doc.getFieldValue("ended_at")); dataAcquisition.setEndedAt(date.withZone(DateTimeZone.UTC).toString("EEE MMM dd HH:mm:ss zzz yyyy")); } if (doc.getFieldValues("method_uri") != null) { dataAcquisition.setMethodUri(doc.getFieldValue("method_uri").toString()); } if (doc.getFieldValues("schema_uri") != null) { dataAcquisition.setSchemaUri(doc.getFieldValue("schema_uri").toString()); } if (doc.getFieldValue("label") != null) { dataAcquisition.setLabel(doc.getFieldValue("label").toString()); } if (doc.getFieldValue("comment") != null) { dataAcquisition.setComment(doc.getFieldValue("comment").toString()); } if (doc.getFieldValues("associated_uri") != null) { i = doc.getFieldValues("associated_uri").iterator(); while (i.hasNext()) { dataAcquisition.addAssociatedUri(i.next().toString()); } } if (doc.getFieldValues("type_uri") != null) { i = doc.getFieldValues("type_uri").iterator(); while (i.hasNext()) { dataAcquisition.addTypeUri(i.next().toString()); } } if (doc.getFieldValues("unit") != null) { i = doc.getFieldValues("unit").iterator(); while (i.hasNext()) { dataAcquisition.addUnit(i.next().toString()); } } if (doc.getFieldValues("unit_uri") != null) { i = doc.getFieldValues("unit_uri").iterator(); while (i.hasNext()) { dataAcquisition.addUnitUri(i.next().toString()); } } if (doc.getFieldValues("entity") != null) { i = doc.getFieldValues("entity").iterator(); while (i.hasNext()) { dataAcquisition.addEntity(i.next().toString()); } } if (doc.getFieldValues("entity_uri") != null) { i = doc.getFieldValues("entity_uri").iterator(); while (i.hasNext()) { dataAcquisition.addEntityUri(i.next().toString()); } } if (doc.getFieldValues("characteristic") != null) { i = doc.getFieldValues("characteristic").iterator(); while (i.hasNext()) { dataAcquisition.addCharacteristic(i.next().toString()); } } if (doc.getFieldValues("characteristic_uri") != null) { i = doc.getFieldValues("characteristic_uri").iterator(); while (i.hasNext()) { dataAcquisition.addCharacteristicUri(i.next().toString()); } } if (doc.getFieldValue("deployment_uri") != null) { dataAcquisition.setDeploymentUri(doc.getFieldValue("deployment_uri").toString()); } if (doc.getFieldValue("instrument_model") != null) { dataAcquisition.setInstrumentModel(doc.getFieldValue("instrument_model").toString()); } if (doc.getFieldValue("instrument_uri") != null) { dataAcquisition.setInstrumentUri(doc.getFieldValue("instrument_uri").toString()); } if (doc.getFieldValue("platform_name") != null) { dataAcquisition.setPlatformName(doc.getFieldValue("platform_name").toString()); } if (doc.getFieldValue("platform_uri") != null) { dataAcquisition.setPlatformUri(doc.getFieldValue("platform_uri").toString()); } if (doc.getFieldValues("dataset_uri") != null) { i = doc.getFieldValues("dataset_uri").iterator(); while (i.hasNext()) { dataAcquisition.addDatasetUri(i.next().toString()); } } } catch (Exception e) { System.out.println("[ERROR] DataAcquisition.convertFromSolr(SolrDocument) - e.Message: " + e.getMessage()); } return dataAcquisition; } public static List<DataAcquisition> find(String ownerUri, State state) { SolrQuery query = new SolrQuery(); if (state.getCurrent() == State.ALL) { if (null == ownerUri) { query.set("q", "owner_uri:*"); } else { query.set("q", "owner_uri:\"" + ownerUri + "\""); } } else if (state.getCurrent() == State.ACTIVE) { if (null == ownerUri) { query.set("q", "owner_uri:* AND ended_at:\"9999-12-31T23:59:59.999Z\""); } else { query.set("q", "owner_uri:\"" + ownerUri + "\" AND ended_at:\"9999-12-31T23:59:59.999Z\""); } } else { // it is assumed that state is CLOSED if (null == ownerUri) { query.set("q", "owner_uri:* AND -ended_at:\"9999-12-31T23:59:59.999Z\""); } else { query.set("q", "owner_uri:\"" + ownerUri + "\" AND -ended_at:\"9999-12-31T23:59:59.999Z\""); } } query.set("sort", "started_at asc"); query.set("rows", "10000000"); return findByQuery(query); } public static List<String> findAllAccessibleDataAcquisition(String user_uri) { List<String> results = new ArrayList<String>(); List<String> accessLevels = new ArrayList<String>(); User user = User.find(user_uri); if (null != user) { user.getGroupNames(accessLevels); } for(DataAcquisition acquisition : findAll()) { if(acquisition.getPermissionUri().equals("Public") || acquisition.getPermissionUri().equals(user_uri) || acquisition.getOwnerUri().equals(user_uri)){ results.add(acquisition.getUri()); continue; } for (String level : accessLevels) { if (acquisition.getPermissionUri().equals(level)) { results.add(acquisition.getUri()); } } } return results; } public static List<DataAcquisition> findAll() { SolrQuery query = new SolrQuery(); query.set("q", "owner_uri:*"); query.set("sort", "started_at asc"); query.set("rows", "10000000"); return findByQuery(query); } public static List<DataAcquisition> findAll(State state) { return find(null, state); } public static List<DataAcquisition> find(String ownerUri) { SolrQuery query = new SolrQuery(); query.set("q", "owner_uri:\"" + ownerUri + "\""); query.set("sort", "started_at asc"); query.set("rows", "10000000"); return findByQuery(query); } public static DataAcquisition findDataAcquisition(SolrQuery query) { DataAcquisition dataAcquisition = null; SolrClient solr = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.DATA_COLLECTION); try { QueryResponse queryResponse = solr.query(query); solr.close(); SolrDocumentList list = queryResponse.getResults(); if (list.size() == 1) { dataAcquisition = convertFromSolr(list.get(0)); } } catch (Exception e) { System.out.println("[ERROR] DataAcquisition.find(SolrQuery) - Exception message: " + e.getMessage()); } return dataAcquisition; } public static DataAcquisition findByUri(String dataAcquisitionUri) { SolrQuery query = new SolrQuery(); query.set("q", "uri:\"" + dataAcquisitionUri + "\""); query.set("sort", "started_at asc"); query.set("rows", "10000000"); List<DataAcquisition> results = findByQuery(query); if (!results.isEmpty()) { return results.get(0); } return null; } public int close(String endedAt) { this.setEndedAtXsd(endedAt); return this.save(); } public int delete() { try { deleteMeasurementData(); SolrClient solr = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.DATA_COLLECTION); UpdateResponse response = solr.deleteById(this.uri); solr.commit(); solr.close(); return response.getStatus(); } catch (SolrServerException e) { System.out.println("[ERROR] DataAcquisition.delete() - SolrServerException message: " + e.getMessage()); } catch (IOException e) { System.out.println("[ERROR] DataAcquisition.delete() - IOException message: " + e.getMessage()); } catch (Exception e) { System.out.println("[ERROR] DataAcquisition.delete() - Exception message: " + e.getMessage()); } return -1; } public boolean deleteMeasurementData() { Iterator<String> iter = datasetURIs.iterator(); while (iter.hasNext()) { if (Measurement.delete(iter.next()) == 0) { iter.remove(); } } return datasetURIs.isEmpty(); } public static List<DataAcquisition> findByQuery(SolrQuery query) { List<DataAcquisition> results = new ArrayList<DataAcquisition>(); SolrClient solr = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.DATA_COLLECTION); try { QueryResponse response = solr.query(query); solr.close(); SolrDocumentList docs = response.getResults(); Iterator<SolrDocument> i = docs.iterator(); while (i.hasNext()) { results.add(convertFromSolr(i.next())); } } catch (Exception e) { results.clear(); System.out.println("[ERROR] DataAcquisition.findByQuery(SolrQuery) - Exception message: " + e.getMessage()); } return results; } public static List<DataAcquisition> find(Deployment deployment, boolean active) { SolrQuery query = new SolrQuery(); query.set("q", "deployment_uri:\"" + deployment.getUri() + "\""); query.set("sort", "started_at desc"); query.set("rows", "10000000"); List<DataAcquisition> listDA = findByQuery(query); if (active == true) { // Filter out inactive data acquisition Iterator<DataAcquisition> iterDA = listDA.iterator(); while (iterDA.hasNext()) { DataAcquisition dataAcquisition = iterDA.next(); if (dataAcquisition.isFinished() == false) { iterDA.remove(); } } } return listDA; } public static DataAcquisition find(HADataC hadatac) { SolrQuery query = new SolrQuery("uri:\"" + hadatac.getDataAcquisitionKbUri() + "\""); return findDataAcquisition(query); } public static DataAcquisition find(Model model, Dataset dataset) { String queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT ?dc ?startedAt ?endedAt WHERE {\n" + " <" + dataset.getCcsvUri() + "> prov:wasGeneratedBy ?dc .\n" + " ?dc a hasneto:DataAcquisition .\n" + " ?dc prov:startedAtTime ?startedAt .\n" + " OPTIONAL { ?dc prov:endedAtTime ?endedAt } .\n" + "}"; Query query = QueryFactory.create(queryString); QueryExecution qexec = QueryExecutionFactory.create(query, model); ResultSet results = qexec.execSelect(); ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results); if (resultsrw.size() >= 1) { QuerySolution soln = resultsrw.next(); DataAcquisition dataAcquisition = new DataAcquisition(); dataAcquisition.setLocalName(soln.getResource("dc").getLocalName()); dataAcquisition.setCcsvUri(soln.getResource("dc").getURI()); dataAcquisition.setStartedAtXsd(soln.getLiteral("startedAt").getString()); if (soln.getLiteral("endedAt") != null) { dataAcquisition.setEndedAtXsd(soln.getLiteral("endedAt").getString()); } dataAcquisition.setStatus(0); return dataAcquisition; } queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT ?dc ?endedAt WHERE {\n" + " <" + dataset.getCcsvUri() + "> prov:wasGeneratedBy ?dc .\n" + " ?dc prov:endedAtTime ?endedAt .\n" + "}"; query = QueryFactory.create(queryString); qexec = QueryExecutionFactory.create(query, model); results = qexec.execSelect(); resultsrw = ResultSetFactory.copyResults(results); if (resultsrw.size() >= 1) { QuerySolution soln = resultsrw.next(); DataAcquisition dataAcquisition = new DataAcquisition(); dataAcquisition.setLocalName(soln.getResource("dc").getLocalName()); dataAcquisition.setCcsvUri(soln.getResource("dc").getURI()); dataAcquisition.setEndedAtXsd(soln.getLiteral("endedAt").getString()); dataAcquisition.setStatus(2); return dataAcquisition; } queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT ?dc ?endedAt WHERE {\n" + " <" + dataset.getCcsvUri() + "> prov:wasGeneratedBy ?dc .\n" + "}"; query = QueryFactory.create(queryString); qexec = QueryExecutionFactory.create(query, model); results = qexec.execSelect(); resultsrw = ResultSetFactory.copyResults(results); if (resultsrw.size() >= 1) { QuerySolution soln = resultsrw.next(); DataAcquisition dataAcquisition = new DataAcquisition(); dataAcquisition.setLocalName(soln.getResource("dc").getLocalName()); dataAcquisition.setCcsvUri(soln.getResource("dc").getURI()); dataAcquisition.setStatus(1); return dataAcquisition; } return null; } public static DataAcquisition create(HADataC hadatacCcsv, HADataC hadatacKb) { DataAcquisition dataAcquisition = new DataAcquisition(); dataAcquisition.setLocalName(hadatacCcsv.getDataAcquisition().getLocalName()); dataAcquisition.setUri(hadatacCcsv.getDataAcquisitionKbUri()); dataAcquisition.setStudyUri(hadatacCcsv.getDataAcquisition().getStudyUri()); dataAcquisition.setStartedAtXsd(hadatacCcsv.getDataAcquisition().getStartedAtXsd()); dataAcquisition.setEndedAtXsd(hadatacCcsv.getDataAcquisition().getEndedAtXsd()); Iterator<MeasurementType> i = hadatacKb.getDataset().getMeasurementTypes().iterator(); while (i.hasNext()) { MeasurementType measurementType = i.next(); dataAcquisition.addCharacteristic(measurementType.getCharacteristicLabel()); dataAcquisition.addCharacteristicUri(measurementType.getCharacteristicUri()); dataAcquisition.addEntity(measurementType.getEntityLabel()); dataAcquisition.addEntityUri(measurementType.getEntityUri()); dataAcquisition.addUnit(measurementType.getUnitLabel()); dataAcquisition.addUnitUri(measurementType.getUnitUri()); } dataAcquisition.setDeploymentUri(hadatacKb.getDeploymentUri()); dataAcquisition.setInstrumentModel(hadatacKb.getDeployment().getInstrument().getLabel()); dataAcquisition.setInstrumentUri(hadatacKb.getDeployment().getInstrument().getUri()); dataAcquisition.setPlatformName(hadatacKb.getDeployment().getPlatform().getLabel()); dataAcquisition.setPlatformUri(hadatacKb.getDeployment().getPlatform().getUri()); dataAcquisition.setLocation(hadatacKb.getDeployment().getPlatform().getLocation()); dataAcquisition.setElevation(hadatacKb.getDeployment().getPlatform().getElevation()); dataAcquisition.addDatasetUri(hadatacCcsv.getDatasetKbUri()); return dataAcquisition; } public void merge(DataAcquisition dataCollection) { Iterator<String> i; i = dataCollection.unit.iterator(); while (i.hasNext()) { addUnit(i.next()); } i = dataCollection.unitUri.iterator(); while (i.hasNext()) { addUnitUri(i.next()); } i = dataCollection.entity.iterator(); while (i.hasNext()) { addEntity(i.next()); } i = dataCollection.entityUri.iterator(); while (i.hasNext()) { addEntityUri(i.next()); } i = dataCollection.characteristic.iterator(); while (i.hasNext()) { addCharacteristic(i.next()); } i = dataCollection.characteristicUri.iterator(); while (i.hasNext()) { addCharacteristicUri(i.next()); } i = dataCollection.datasetURIs.iterator(); while (i.hasNext()) { addDatasetUri(i.next()); } } public String toString() { StringBuilder builder = new StringBuilder(); Iterator<String> i; builder.append("localName: " + this.localName + "\n"); builder.append("uri: " + this.getUri() + "\n"); builder.append("started_at: " + this.getStartedAt() + "\n"); builder.append("ended_at: " + this.getEndedAt() + "\n"); i = unit.iterator(); while (i.hasNext()) { builder.append("unit: " + i.next() + "\n"); } i = unitUri.iterator(); while (i.hasNext()) { builder.append("unit_uri: " + i.next() + "\n"); } i = characteristic.iterator(); while (i.hasNext()) { builder.append("characteristic: " + i.next() + "\n"); } i = characteristicUri.iterator(); while (i.hasNext()) { builder.append("characteristic_uri: " + i.next() + "\n"); } i = entity.iterator(); while (i.hasNext()) { builder.append("entity: " + i.next() + "\n"); } i = entityUri.iterator(); while (i.hasNext()) { builder.append("entity_uri: " + i.next() + "\n"); } builder.append("deployment_uri: " + this.deploymentUri + "\n"); builder.append("instrument_model: " + this.instrumentModel + "\n"); builder.append("instrument_uri: " + this.instrumentUri + "\n"); builder.append("platform_name: " + this.platformName + "\n"); builder.append("platform_uri: " + this.platformUri + "\n"); builder.append("location: " + this.location + "\n"); builder.append("elevation: " + this.elevation + "\n"); i = datasetURIs.iterator(); while (i.hasNext()) { builder.append("dataset_uri: " + i.next() + "\n"); } return builder.toString(); } @Restrict(@Group(AuthApplication.DATA_MANAGER_ROLE)) public int saveToLabKey(String user_name, String password) throws CommandException { String site = ConfigProp.getPropertyValue("labkey.config", "site"); String path = "/" + ConfigProp.getPropertyValue("labkey.config", "folder"); LabkeyDataHandler loader = new LabkeyDataHandler( site, user_name, password, path); List<String> abbrevTypeURIs = new ArrayList<String>(); for (String uri : getTypeURIs()) { abbrevTypeURIs.add(ValueCellProcessing.replaceNameSpaceEx(uri)); } List<String> abbrevAssociatedURIs = new ArrayList<String>(); for (String uri : getAssociatedURIs()) { abbrevAssociatedURIs.add(ValueCellProcessing.replaceNameSpaceEx(uri)); } List< Map<String, Object> > rows = new ArrayList< Map<String, Object> >(); Map<String, Object> row = new HashMap<String, Object>(); row.put("a", String.join(", ", abbrevTypeURIs)); row.put("hasURI", ValueCellProcessing.replaceNameSpaceEx(getUri())); row.put("rdfs:label", getLabel()); row.put("rdfs:comment", getComment()); row.put("prov:startedAtTime", getStartedAt()); row.put("prov:used", getParameter()); row.put("prov:wasAssociatedWith", String.join(", ", abbrevAssociatedURIs)); row.put("hasneto:hasDeployment", ValueCellProcessing.replaceNameSpaceEx(getDeploymentUri())); row.put("hasco:isDataAcquisitionOf", ValueCellProcessing.replaceNameSpaceEx(getStudyUri())); row.put("hasco:hasSchema", ValueCellProcessing.replaceNameSpaceEx(getSchemaUri())); row.put("hasco:hasTriggeringEvent", getTriggeringEventName()); row.put("prov:endedAtTime", getEndedAt().startsWith("9999")? "" : getEndedAt()); rows.add(row); return loader.insertRows("DataAcquisition", rows); } }