use of gov.nih.nci.ctd2.dashboard.model.Observation in project nci-ctd2-dashboard by CBIIT.
the class ObservationController method getOneObservationsPerSubmission.
@Transactional
@RequestMapping(value = "onePerSubmissionBySubject", method = { RequestMethod.GET, RequestMethod.POST }, headers = "Accept=application/json")
public ResponseEntity<String> getOneObservationsPerSubmission(@RequestParam("subjectId") Integer subjectId, @RequestParam(value = "role", required = false, defaultValue = "") String role, @RequestParam(value = "tier", required = false, defaultValue = "0") Integer tier) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=utf-8");
List<ObservationWithCount> list = null;
if (tier > 0 || role.trim().length() > 0) {
list = onePerSubmissionBySubjectId(subjectId, role, tier);
} else {
Map<Observation, BigInteger> observationAndCount = dashboardDao.getOneObservationPerSubmission(subjectId);
list = new ArrayList<ObservationWithCount>();
for (Observation observation : observationAndCount.keySet()) {
list.add(new ObservationWithCount(observation, observationAndCount.get(observation).intValue()));
}
}
JSONSerializer jsonSerializer = new JSONSerializer().transform(new ImplTransformer(), Class.class).transform(new DateTransformer(), Date.class);
return new ResponseEntity<String>(jsonSerializer.serialize(list), headers, HttpStatus.OK);
}
use of gov.nih.nci.ctd2.dashboard.model.Observation in project nci-ctd2-dashboard by CBIIT.
the class ObservationController method getObservationsBySubmissionIdAndSubjuectId.
/*
* For a given submission, tier is decided so there is point of further
* specifiying tier.
*/
@Transactional
@RequestMapping(value = "bySubmissionAndSubject", method = { RequestMethod.GET, RequestMethod.POST }, headers = "Accept=application/json")
public ResponseEntity<String> getObservationsBySubmissionIdAndSubjuectId(@RequestParam("submissionId") Integer submissionId, @RequestParam("subjectId") Integer subjectId, @RequestParam(value = "role", required = false, defaultValue = "") String role) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json; charset=utf-8");
String summaryTemplate = null;
Set<Observation> observations = new HashSet<Observation>();
Subject subject = dashboardDao.getEntityById(Subject.class, subjectId);
for (ObservedSubject observedSubject : dashboardDao.findObservedSubjectBySubject(subject)) {
Observation observation = observedSubject.getObservation();
Submission submission = observation.getSubmission();
if (!submission.getId().equals(submissionId)) {
continue;
} else if (summaryTemplate == null) {
summaryTemplate = submission.getObservationTemplate().getObservationSummary();
}
String subjectRole = observedSubject.getObservedSubjectRole().getSubjectRole().getDisplayName();
if ((role.equals("") || role.equals(subjectRole))) {
observations.add(observation);
}
}
List<ObservationWithSummary> list = new ArrayList<ObservationWithSummary>();
for (Observation observation : observations) {
String expanded = dashboardDao.expandSummary(observation.getId(), summaryTemplate) + " (<a class='button-link' href='#" + observation.getStableURL() + "'>details »</a>)";
list.add(new ObservationWithSummary(observation, expanded));
}
JSONSerializer jsonSerializer = new JSONSerializer().transform(new ImplTransformer(), Class.class).transform(new DateTransformer(), Date.class);
return new ResponseEntity<String>(jsonSerializer.serialize(list), headers, HttpStatus.OK);
}
use of gov.nih.nci.ctd2.dashboard.model.Observation in project nci-ctd2-dashboard by CBIIT.
the class DashboardDaoImpl method findObservedEvidenceRole.
@Override
public ObservedEvidenceRole findObservedEvidenceRole(String templateName, String columnName) {
List<ObservedEvidenceRole> list = new ArrayList<ObservedEvidenceRole>();
// first grab observation template name
List<ObservationTemplate> otList = queryWithClass("from ObservationTemplateImpl where displayName = :templateName", "templateName", templateName);
for (ObservationTemplate ot : otList) {
List<ObservedEvidenceRole> oerList = query2ParamsWithClass("from ObservedEvidenceRoleImpl as oer where columnName = :columnName and " + "oer.observationTemplate = :ot", "columnName", columnName, "ot", ot);
for (ObservedEvidenceRole o : oerList) {
list.add(o);
}
}
assert list.size() <= 1;
return (list.size() == 1) ? list.iterator().next() : null;
}
use of gov.nih.nci.ctd2.dashboard.model.Observation in project nci-ctd2-dashboard by CBIIT.
the class DashboardDaoImpl method getObservations.
@Override
public ObservationItem[] getObservations(String submissionId, Set<Integer> indexes) {
// this works because observation URIs are totally based on submission URI
List<String> uris = indexes.stream().map(i -> "observation/" + submissionId + "-" + i).collect(Collectors.toList());
// uris.forEach(System.out::println);
Session session = getSession();
List<ObservationItem> list = new ArrayList<ObservationItem>();
@SuppressWarnings("unchecked") org.hibernate.query.Query<ObservationItem> query = session.createQuery("FROM ObservationItem WHERE uri IN (:uris)");
query.setParameterList("uris", uris);
try {
list = query.getResultList();
} catch (NoResultException e) {
log.info("ObservationItem not available for submission ID " + submissionId);
}
ObservationItem[] x = list.stream().toArray(ObservationItem[]::new);
log.debug("count of observations:" + x.length);
session.close();
return x;
}
use of gov.nih.nci.ctd2.dashboard.model.Observation in project nci-ctd2-dashboard by CBIIT.
the class DashboardDaoImpl method getEcoBrowse.
@Override
public List<EcoBrowse> getEcoBrowse() {
Session session = getSession();
@SuppressWarnings("unchecked") org.hibernate.query.Query<Object[]> ecocodeQuery = session.createNativeQuery("SELECT ecocode, id, tier, submissionCenter_id FROM observation_template WHERE LENGTH(ecocode)>0");
List<Object[]> ecocodeResult = ecocodeQuery.list();
Map<String, EcoBrowse> map = new HashMap<String, EcoBrowse>();
Map<String, Set<Integer>> mapTier1centers = new HashMap<String, Set<Integer>>();
Map<String, Set<Integer>> mapTier2centers = new HashMap<String, Set<Integer>>();
Map<String, Set<Integer>> mapTier3centers = new HashMap<String, Set<Integer>>();
for (Object[] array : ecocodeResult) {
String allcodes = (String) array[0];
Integer templateId = (Integer) array[1];
Integer tier = (Integer) array[2];
Integer centerId = (Integer) array[3];
String countSql = "SELECT COUNT(DISTINCT submission.id), COUNT(DISTINCT observation.id)" + " FROM observation JOIN submission ON observation.submission_id=submission.id" + " JOIN observation_template ON submission.observationTemplate_id=observation_template.id" + " WHERE submission.observationTemplate_id=" + templateId;
@SuppressWarnings("unchecked") org.hibernate.query.Query<Object[]> query = session.createNativeQuery(countSql);
Object[] result = query.getSingleResult();
BigInteger submissionCount = (BigInteger) result[0];
BigInteger tierCount = (BigInteger) result[1];
String[] ecocodes = allcodes.split("\\|");
for (String code : ecocodes) {
EcoBrowse b = map.get(code);
if (b == null) {
// this term not in the map yet
@SuppressWarnings("unchecked") org.hibernate.query.Query<ECOTerm> ecotermQuery = session.createQuery("FROM ECOTermImpl WHERE code='" + code + "'");
ECOTerm term = ecotermQuery.getSingleResult();
b = new EcoBrowse(term.getDisplayName(), term.getStableURL(), 0);
map.put(code, b);
}
b.setNumberOfSubmissions(b.getNumberOfSubmissions() + submissionCount.intValue());
Set<Integer> centerSet = null;
switch(tier) {
case 1:
b.setNumberOfTier1Observations(b.getNumberOfTier1Observations() + tierCount.intValue());
centerSet = mapTier1centers.get(code);
if (centerSet == null) {
centerSet = new HashSet<Integer>();
mapTier1centers.put(code, centerSet);
}
break;
case 2:
b.setNumberOfTier2Observations(b.getNumberOfTier2Observations() + tierCount.intValue());
centerSet = mapTier2centers.get(code);
if (centerSet == null) {
centerSet = new HashSet<Integer>();
mapTier2centers.put(code, centerSet);
}
break;
case 3:
b.setNumberOfTier3Observations(b.getNumberOfTier3Observations() + tierCount.intValue());
centerSet = mapTier3centers.get(code);
if (centerSet == null) {
centerSet = new HashSet<Integer>();
mapTier3centers.put(code, centerSet);
}
break;
default:
log.error("unknow tier number " + tier);
}
centerSet.add(centerId);
}
}
map.forEach((code, browseItem) -> {
int tier1 = 0, tier2 = 0, tier3 = 0;
Set<Integer> set1 = mapTier1centers.get(code);
Set<Integer> set2 = mapTier2centers.get(code);
Set<Integer> set3 = mapTier3centers.get(code);
if (set1 != null)
tier1 = set1.size();
if (set2 != null)
tier2 = set2.size();
if (set3 != null)
tier3 = set3.size();
browseItem.setNumberOfTier1SubmissionCenters(tier1);
browseItem.setNumberOfTier2SubmissionCenters(tier2);
browseItem.setNumberOfTier3SubmissionCenters(tier3);
});
session.close();
log.debug("map size " + map.size());
return new ArrayList<EcoBrowse>(map.values());
}
Aggregations