package org.hadatac.entity.pojo; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; 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.ResultSetFormatter; import org.apache.jena.query.ResultSetRewindable; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.ModelFactory; import org.apache.jena.rdf.model.Property; import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.rdf.model.Resource; import org.apache.jena.sparql.engine.http.QueryExceptionHTTP; import org.apache.jena.sparql.resultset.RDFOutput; 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.FacetField; import org.apache.solr.client.solrj.response.PivotField; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.client.solrj.response.FacetField.Count; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.hadatac.console.controllers.metadata.DynamicFunctions; import org.hadatac.console.models.FacetHandler; import org.hadatac.console.models.Pivot; import org.hadatac.data.model.MetadataAcquisitionQueryResult; import org.hadatac.utils.Collections; 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 play.Play; public class Study { private DateTime startedAt; private DateTime endedAt; @Field("studyUri") private String studyUri; // @Field("permission_uri") // private String permissionUri; @Field("studyLabel_i") private String label; @Field("proj_i") private String project; @Field("studyComment_i") private String comment; @Field("institutionName_i") private String institution; @Field("agentName_i") private String agent; @Field("studyTitle_i") private String title; private List<DataAcquisition> dataAcquisitions; // Constructer public Study() { startedAt = null; endedAt = null; // permissionUri = ""; label = ""; project= ""; comment = ""; institution = ""; agent = ""; } // get Methods public String getUri() { return studyUri; } /* public String getPermissionUri() { return permissionUri; } */ public String getLabel() { return label; } public String getProject() { return project; } public String getComment() { return comment; } /* public int getNumSamples() { return numSamples; } public int getNumSubjects() { return numSubjects; }*/ public String getInstitution() { return institution; } public String getAgent() { return agent; } public String getTitle() { return title; } public List<DataAcquisition> getDataAcquisitions() { return dataAcquisitions; } public void setDataAcquisitions(List<DataAcquisition> dataAcquisition) { this.dataAcquisitions = dataAcquisition; } // get Start Time Methods 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); } // get End Time Methods 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); } // set Methods public void setUri(String uri) { this.studyUri = uri; } /* public void setPermissionUri(String permissionUri) { this.permissionUri = permissionUri; } */ public void setLabel(String label) { this.label = label; } public void setProject(String project) { this.project = project; } public void setComment(String comment) { this.comment = comment; } /* public void setNumSamples(int numSamples) { this.numSamples = numSamples; } public void setNumSubjects(int numSubjects) { this.numSubjects = numSubjects; } */ public void setInstitution(String institution) { this.institution = institution; } public void setAgent(String agent) { this.agent = agent; } public void setTitle(String title) { this.title = title; } // set Start Time Methods @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); } // set End Time Methods @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 static Study create(String uri) { Study study = new Study(); study.setUri(uri); return study; } public static Study convertFromSolr(SolrDocument doc) { Iterator<Object> i; DateTime date; Study study = new Study(); // URI study.setUri(doc.getFieldValue("studyUri").toString()); // permissions /* if (doc.getFieldValues("permission_uri") != null) { study.setPermissionUri(doc.getFieldValue("permission_uri").toString()); }*/ // label if (doc.getFieldValues("studyLabel_i") != null) { study.setLabel(doc.getFieldValue("studyLabel_i").toString()); } // projectTitle if (doc.getFieldValues("proj_i") != null) { study.setProject(doc.getFieldValue("proj_i").toString()); } // comment if (doc.getFieldValues("comment_i") != null) { study.setLabel(doc.getFieldValue("comment_i").toString()); } // description if (doc.getFieldValues("studyTitle_i") != null) { study.setTitle(doc.getFieldValue("studyTitle_i").toString()); } /* // numSubjects if (doc.getFieldValues("numSubjects") != null) { study.setNumSubjects(Integer.parseInt(doc.getFieldValue("numSubjects").toString())); } // numSamples if (doc.getFieldValues("numSamples") != null) { study.setNumSamples(Integer.parseInt(doc.getFieldValue("numSamples").toString())); }*/ // institution if (doc.getFieldValues("institutionName_i") != null) { study.setInstitution(doc.getFieldValue("institutionName_i").toString()); } // agent if (doc.getFieldValues("agentName_i") != null) { study.setAgent(doc.getFieldValue("agentName_i").toString()); } return study; } public static MetadataAcquisitionQueryResult find(int page, int qtd, List<String> permissions, FacetHandler handler) { MetadataAcquisitionQueryResult result = new MetadataAcquisitionQueryResult(); SolrClient solr = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.STUDIES); SolrQuery query = new SolrQuery(); String permission_query = ""; String facet_query = ""; String q; permission_query += "permission_uri:\"" + "PUBLIC" + "\""; if (permissions != null) { Iterator<String> i = permissions.iterator(); while (i.hasNext()) { permission_query += " OR "; permission_query += "permission_uri:\"" + i.next() + "\""; } } if (handler != null) { facet_query = handler.toSolrQuery(); /* Iterator<String> i = handler.facetsAnd.keySet().iterator(); while (i.hasNext()) { String field = i.next(); String value = handler.facetsAnd.get(field); facet_query += field + ":\"" + value + "\""; if (i.hasNext()) { facet_query += " AND "; } } */ } if (facet_query.trim().equals("")) { facet_query = "*:*"; } q = "(" + permission_query + ") AND (" + facet_query + ")"; System.out.println("!!! QUERY: " + q); query.setQuery(q); query.setStart((page-1)*qtd); query.setRows(qtd); query.setFacet(true); query.addFacetField("demographics,acculturation,occupation,housingCharacteristics,ATIDU,socioEconomicStatus,assessment,BDN,anthropometry,laboratory,birthOutcomes"); // See Measurement.java as an example if we wish to add the possible facet values as pivots try { QueryResponse queryResponse = solr.query(query); solr.close(); SolrDocumentList results = queryResponse.getResults(); Iterator<SolrDocument> m = results.iterator(); while (m.hasNext()) { result.documents.add(convertFromSolr(m.next())); } if (queryResponse.getFacetFields() != null) { Iterator<FacetField> f = queryResponse.getFacetFields().iterator(); while (f.hasNext()) { FacetField field = f.next(); result.field_facets.put(field.getName(), new HashMap<String, Long>()); Iterator<Count> v = field.getValues().iterator(); while (v.hasNext()) { Count count = v.next(); Map<String, Long> map = result.field_facets.get(field.getName()); map.put(count.getName(), count.getCount()); } } } } catch (SolrServerException e) { System.out.println("[ERROR] Study.find(int, int, List<String>, Map<String, String>) - SolrServerException message: " + e.getMessage()); } catch (IOException e) { System.out.println("[ERROR] Study.find(int, int, List<String>, Map<String, String>) - IOException message: " + e.getMessage()); } catch (Exception e) { System.out.println("[ERROR] Study.find(int, int, List<String>, Map<String, String>) - Exception message: " + e.getMessage()); } return result; } public static Study find(String study_uri) { Study returnStudy = new Study(); String studyQueryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT DISTINCT ?studyUri ?studyLabel ?proj ?studyComment (group_concat( ?agentName_ ; separator = ' & ') as ?agentName) ?institutionName " + " WHERE { ?subUri rdfs:subClassOf* hasco:Study . " + " ?studyUri a ?subUri . " + " ?studyUri rdfs:label ?studyLabel . " + " FILTER ( ?studyUri = " + DynamicFunctions.replaceURLWithPrefix(study_uri) + " ) . " + " OPTIONAL {?studyUri hasco:hasProject ?proj} . " + " OPTIONAL { ?studyUri rdfs:comment ?studyComment } . " + " OPTIONAL{ ?studyUri hasco:hasAgent ?agent . " + " ?agent foaf:name ?agentName_} . " + " OPTIONAL { ?studyUri hasco:hasInstitution ?institution . " + " ?institution foaf:name ?institutionName} . " + " }" + "GROUP BY ?studyUri ?studyLabel ?proj ?studyTitle ?studyComment ?agentName ?institutionName "; try { Query studyQuery = QueryFactory.create(studyQueryString); QueryExecution qexec = QueryExecutionFactory.sparqlService(Collections.getCollectionsName(Collections.METADATA_SPARQL), studyQuery); ResultSet results = qexec.execSelect(); ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results); qexec.close(); while (resultsrw.hasNext()) { QuerySolution soln = resultsrw.next(); //values = new HashMap<String, String>(); returnStudy.setUri(soln.get("studyUri").toString()); if (soln.contains("studyLabel")) returnStudy.setLabel(soln.get("studyLabel").toString()); if (soln.contains("proj")) returnStudy.setProject(soln.get("proj").toString()); if (soln.contains("studyComment")) returnStudy.setComment(soln.get("studyComment").toString()); if (soln.contains("agentName")) returnStudy.setAgent(soln.get("agentName").toString()); if (soln.contains("institutionName")) returnStudy.setInstitution(soln.get("institutionName").toString()); } } catch (QueryExceptionHTTP e) { e.printStackTrace(); } return returnStudy; } public static Model findModel(String study) { String studyQueryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT DISTINCT ?s ?p ?o " + "WHERE " + "{ " + " { " + " { " + // Study " ?subUri rdfs:subClassOf* hasco:Study . " + " ?s a ?subUri . " + " ?s ?p ?o . " + " FILTER (?s = " + study + ") " + " } " + " MINUS " + " { " + // Other Studies " ?subUri rdfs:subClassOf* hasco:Study . " + " ?s a ?subUri . " + " ?s ?p ?o . " + " FILTER (?s != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // Data Acquisitions, Cohort " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?s hasco:isDataAcquisitionOf|hasco:isCohortOf ?study . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other Data Acquisitions, Cohort " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?s hasco:isDataAcquisitionOf|hasco:isCohortOf ?study . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // Cohort Subjects " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?cohort hasco:isCohortOf ?study . " + " ?s hasco:isSubjectOf ?cohort . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other Cohort Subjects " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?cohort hasco:isCohortOf ?study . " + " ?s hasco:isSubjectOf ?cohort . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // Data Acquisition Schema and Deployment " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?da hasco:isDataAcquisitionOf ?study . " + " ?da hasco:hasSchema|hasneto:hasDeployment ?s . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other Data Acquisition Schema and Deployment " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?da hasco:isDataAcquisitionOf ?study . " + " ?da hasco:hasSchema|hasneto:hasDeployment ?s . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // Sample Collections " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?s hasco:isSampleCollectionOf ?study . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other Sample Collections " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?s hasco:isSampleCollectionOf ?study . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // Sample Collection Samples " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?sc hasco:isSampleCollectionOf ?study . " + " ?s hasco:isObjectOf ?sc . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other Sample Collection Samples " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?sc hasco:isSampleCollectionOf ?study . " + " ?s hasco:isObjectOf ?sc . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // Deployment - Platform, Instrument, detector " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?da hasco:isDataAcquisitionOf ?study . " + " ?da hasneto:hasDeployment ?deploy . " + " ?deploy vstoi:hasPlatform|hasneto:hasInstrument|hasneto:hasDetector ?s . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other Deployment - Platform, Instrument, detector " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?da hasco:isDataAcquisitionOf ?study . " + " ?da hasneto:hasDeployment ?deploy . " + " ?deploy vstoi:hasPlatform|hasneto:hasInstrument|hasneto:hasDetector ?s . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // DA Schema Attribute " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?da hasco:isDataAcquisitionOf ?study . " + " ?da hasco:hasSchema ?schema . " + " ?s hasneto:partOfSchema ?schema . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other DA Schema Attribute " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?da hasco:isDataAcquisitionOf ?study . " + " ?da hasco:hasSchema ?schema . " + " ?s hasneto:partOfSchema ?schema . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // Datasets " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?s hasco:isDatasetOf ?study . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other Datasets " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?s hasco:isDatasetOf ?study . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + " UNION " + " { " + " { " + // Attribute References " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?data hasco:isDatasetOf ?study . " + " ?s hasco:isAttributeReferenceOf ?data . " + " ?s ?p ?o . " + " FILTER (?study = " + study + ") " + " } " + " MINUS " + " { " + // Other Attribute References " ?subUri rdfs:subClassOf* hasco:Study . " + " ?study a ?subUri . " + " ?data hasco:isDatasetOf ?study . " + " ?s hasco:isAttributeReferenceOf ?data . " + " ?s ?p ?o . " + " FILTER (?study != " + study + ") " + " } " + " } " + "} "; Model model = ModelFactory.createDefaultModel(); try { Query studyQuery = QueryFactory.create(studyQueryString); QueryExecution qexec = QueryExecutionFactory.sparqlService( Collections.getCollectionsName(Collections.METADATA_SPARQL), studyQuery); ResultSet results = qexec.execSelect(); ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results); qexec.close(); System.out.println("resultsrw.size(): " + resultsrw.size()); while (resultsrw.hasNext()) { QuerySolution soln = resultsrw.next(); Resource subject = soln.getResource("s"); Property property = model.createProperty(soln.getResource("p").toString()); RDFNode object = soln.get("o"); model.add(subject, property, object); } } catch (QueryExceptionHTTP e) { e.printStackTrace(); } return model; } public static List<Study> find(State state) { List<Study> studies = new ArrayList<Study>(); String queryString = ""; if (state.getCurrent() == State.ACTIVE) { queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT DISTINCT ?studyUri ?studyLabel ?proj ?studyComment (group_concat( ?agentName_ ; separator = ' & ') as ?agentName) ?institutionName " + " WHERE { ?subUri rdfs:subClassOf* hasco:Study . " + " ?studyUri a ?subUri . " + " ?studyUri rdfs:label ?studyLabel . " + " OPTIONAL {?studyUri hasco:hasProject ?proj} . " + " OPTIONAL { ?studyUri rdfs:comment ?studyComment } . " + " OPTIONAL{ ?studyUri hasco:hasAgent ?agent . " + " ?agent foaf:name ?agentName_} . " + " OPTIONAL { ?studyUri hasco:hasInstitution ?institution . " + " ?institution foaf:name ?institutionName} . " + " FILTER NOT EXISTS { ?studyUri prov:endedAtTime ?enddatetime . } " + " }" + "GROUP BY ?studyUri ?studyLabel ?proj ?studyTitle ?studyComment ?agentName ?institutionName "; } else { if (state.getCurrent() == State.CLOSED) { queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT ?studyUri ?studyLabel ?proj ?studyComment (group_concat( ?agentName_ ; separator = ' & ') as ?agentName) ?institutionName " + " WHERE { ?subUri rdfs:subClassOf* hasco:Study . " + " ?studyUri a ?subUri . " + " ?studyUri rdfs:label ?studyLabel . " + //" ?studyUri prov:startedAtTime ?startdatetime . " + //" ?studyUri prov:endedAtTime ?enddatetime . " + " OPTIONAL {?studyUri hasco:hasProject ?proj} . " + " OPTIONAL { ?studyUri rdfs:comment ?studyComment } . " + " OPTIONAL{ ?studyUri hasco:hasAgent ?agent . " + " ?agent foaf:name ?agentName_} . " + " OPTIONAL { ?studyUri hasco:hasInstitution ?institution . " + " ?institution foaf:name ?institutionName} . " + " }"+ "GROUP BY ?studyUri ?studyLabel ?proj ?studyComment ?agentName ?institutionName ";// + //"ORDER BY DESC(?enddatetime) "; } else { if (state.getCurrent() == State.ALL) { queryString = NameSpaces.getInstance().printSparqlNameSpaceList() + "SELECT ?studyUri ?studyLabel ?proj ?studyComment (group_concat( ?agentName_ ; separator = ' & ') as ?agentName ) ?institutionName " + " WHERE { ?subUri rdfs:subClassOf* hasco:Study . " + " ?studyUri a ?subUri . " + " ?studyUri rdfs:label ?studyLabel . " + " OPTIONAL {?studyUri hasco:hasProject ?proj} . " + " OPTIONAL { ?studyUri rdfs:comment ?studyComment } . " + " OPTIONAL{ ?studyUri hasco:hasAgent ?agent . " + " ?agent foaf:name ?agentName_} . " + " OPTIONAL { ?studyUri hasco:hasInstitution ?institution . " + " ?institution foaf:name ?institutionName} . " + " }" + "GROUP BY ?studyUri ?studyLabel ?proj ?studyComment ?agentName ?institutionName "; } else { System.out.println("Study.java: no valid state specified."); return null; } } } Query query = QueryFactory.create(queryString); QueryExecution qexec = QueryExecutionFactory.sparqlService( Collections.getCollectionsName(Collections.METADATA_SPARQL), query); ResultSet results = qexec.execSelect(); ResultSetRewindable resultsrw = ResultSetFactory.copyResults(results); qexec.close(); Study study = null; while (resultsrw.hasNext()) { QuerySolution soln = resultsrw.next(); if (soln != null && soln.getResource("studyUri").getURI()!= null) { study = Study.find(soln.get("studyUri").toString()); System.out.println("Study URI: " + soln.get("studyUri").toString()); } studies.add(study); } return studies; } public int close(String endedAt) { this.setEndedAtXsd(endedAt); return this.save(); } public void delete() { deleteStudy(); deleteDataCollections(); deleteMeasurements(); } public int deleteStudy() { SolrClient study_solr = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.STUDIES); try { UpdateResponse response = study_solr.deleteByQuery("studyUri:\"" + studyUri + "\""); study_solr.commit(); study_solr.close(); return response.getStatus(); } catch (SolrServerException e) { System.out.println("[ERROR] Study.delete() - SolrServerException message: " + e.getMessage()); } catch (IOException e) { System.out.println("[ERROR] Study.delete() - IOException message: " + e.getMessage()); } catch (Exception e) { System.out.println("[ERROR] Study.delete() - Exception message: " + e.getMessage()); } return -1; } public int deleteDataCollections() { SolrClient study_solr = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.DATA_COLLECTION); try { UpdateResponse response = study_solr.deleteByQuery("study_uri:\"" + studyUri + "\""); study_solr.commit(); study_solr.close(); return response.getStatus(); } catch (SolrServerException e) { System.out.println("[ERROR] Study.delete() - SolrServerException message: " + e.getMessage()); } catch (IOException e) { System.out.println("[ERROR] Study.delete() - IOException message: " + e.getMessage()); } catch (Exception e) { System.out.println("[ERROR] Study.delete() - Exception message: " + e.getMessage()); } return -1; } public int deleteMeasurements() { SolrClient study_solr = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.DATA_ACQUISITION); try { UpdateResponse response = study_solr.deleteByQuery("study_uri:\"" + DynamicFunctions.replaceURLWithPrefix(studyUri) + "\""); study_solr.commit(); study_solr.close(); return response.getStatus(); } catch (SolrServerException e) { System.out.println("[ERROR] Study.delete() - SolrServerException message: " + e.getMessage()); } catch (IOException e) { System.out.println("[ERROR] Study.delete() - IOException message: " + e.getMessage()); } catch (Exception e) { System.out.println("[ERROR] Study.delete() - Exception message: " + e.getMessage()); } return -1; } public int save() { try { SolrClient client = new HttpSolrClient( Play.application().configuration().getString("hadatac.solr.data") + Collections.STUDIES); 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] Study.save() - e.Message: " + e.getMessage()); return -1; } } public int save(SolrClient solr) { try { if (endedAt.toString().startsWith("9999")) { endedAt = DateTime.parse("9999-12-31T23:59:59.999Z"); } int status = solr.addBean(this).getStatus(); solr.commit(); solr.close(); return status; } catch (IOException | SolrServerException e) { System.out.println("[ERROR] Study.save(SolrClient) - e.Message: " + e.getMessage()); return -1; } } }