use of gov.nih.nci.ctd2.dashboard.model.SubjectRole in project nci-ctd2-dashboard by CBIIT.
the class ControlledVocabularyPerColumnFieldSetMapper method mapFieldSet.
public ControlledVocabulary mapFieldSet(FieldSet fieldSet) throws BindException {
String templateName = fieldSet.readString(TEMPLATE_NAME);
ObservationTemplate observationTemplate = observationTemplateNameMap.get(templateName);
if (observationTemplate == null)
return new ControlledVocabulary(null, null, null);
if (subjectRoleCache == null)
subjectRoleCache = new HashMap<String, SubjectRole>();
if (evidenceRoleCache == null)
evidenceRoleCache = new HashMap<String, EvidenceRole>();
String subject = fieldSet.readString(SUBJECT);
String evidence = fieldSet.readString(EVIDENCE);
if (subject.length() > 0) {
String subjectRoleStr = fieldSet.readString(ROLE);
SubjectRole subjectRole = subjectRoleCache.get(subjectRoleStr);
if (subjectRole == null) {
subjectRole = dashboardFactory.create(SubjectRole.class);
subjectRole.setDisplayName(subjectRoleStr);
subjectRoleCache.put(subjectRoleStr, subjectRole);
}
ObservedSubjectRole observedSubjectRole = dashboardFactory.create(ObservedSubjectRole.class);
observedSubjectRole.setSubjectRole(subjectRole);
observedSubjectRole.setColumnName(fieldSet.readString(COLUMN_NAME));
observedSubjectRole.setDisplayText(fieldSet.readString(DISPLAY_TEXT));
observedSubjectRole.setObservationTemplate(observationTemplate);
return new ControlledVocabulary(observationTemplate, subjectRole, observedSubjectRole);
} else if (evidence.length() > 0) {
String evidenceRoleStr = fieldSet.readString(ROLE);
EvidenceRole evidenceRole = evidenceRoleCache.get(evidenceRoleStr);
if (evidenceRole == null) {
evidenceRole = dashboardFactory.create(EvidenceRole.class);
evidenceRole.setDisplayName(evidenceRoleStr);
evidenceRoleCache.put(evidenceRoleStr, evidenceRole);
}
ObservedEvidenceRole observedEvidenceRole = dashboardFactory.create(ObservedEvidenceRole.class);
observedEvidenceRole.setEvidenceRole(evidenceRole);
observedEvidenceRole.setColumnName(fieldSet.readString(COLUMN_NAME));
observedEvidenceRole.setDisplayText(fieldSet.readString(DISPLAY_TEXT));
observedEvidenceRole.setObservationTemplate(observationTemplate);
observedEvidenceRole.setAttribute(getObservedEvidenceRoleAttribute(fieldSet.readString(MIME_TYPE), fieldSet.readString(NUMERIC_UNITS)));
return new ControlledVocabulary(observationTemplate, evidenceRole, observedEvidenceRole);
}
return new ControlledVocabulary(null, null, null);
}
use of gov.nih.nci.ctd2.dashboard.model.SubjectRole in project nci-ctd2-dashboard by CBIIT.
the class SubjectScorer method scoreAllRoles.
@Transactional
public void scoreAllRoles() {
log.info("Removing all role-based scores...");
List<SubjectWithSummaries> oldEntities = dashboardDao.findEntities(SubjectWithSummaries.class);
for (SubjectWithSummaries subjectWithSummaries : oldEntities) {
dashboardDao.delete(subjectWithSummaries);
}
log.info("Removed " + oldEntities.size() + " old scores.");
log.info("Re-scoring all roles...");
List<SubjectWithSummaries> subjectWithSummariesList = new ArrayList<SubjectWithSummaries>();
List<SubjectRole> entities = dashboardDao.findEntities(SubjectRole.class);
for (SubjectRole subjectRole : entities) {
String keyword = subjectRole.getDisplayName();
log.info("Scoring subject with role: " + keyword);
HashMap<Subject, SubjectWithSummaries> subjectToSummaries = new HashMap<Subject, SubjectWithSummaries>();
HashMap<Subject, HashSet<SubmissionCenter>> subjectToCenters = new HashMap<Subject, HashSet<SubmissionCenter>>();
HashMap<Subject, HashMap<SubmissionCenter, Integer>> centerBasedScores = new HashMap<Subject, HashMap<SubmissionCenter, Integer>>();
for (ObservedSubject observedSubject : dashboardDao.findObservedSubjectByRole(keyword)) {
Subject subject = observedSubject.getSubject();
SubjectWithSummaries withSummaries = subjectToSummaries.get(subject);
ObservationTemplate observationTemplate = observedSubject.getObservation().getSubmission().getObservationTemplate();
SubmissionCenter submissionCenter = observationTemplate.getSubmissionCenter();
Integer tier = observationTemplate.getTier();
if (withSummaries == null) {
withSummaries = new SubjectWithSummaries();
withSummaries.setRole(keyword);
withSummaries.setSubject(subject);
withSummaries.setMaxTier(tier);
withSummaries.setNumberOfObservations(1);
HashSet<SubmissionCenter> centers = new HashSet<SubmissionCenter>();
centers.add(submissionCenter);
withSummaries.setNumberOfSubmissionCenters(1);
withSummaries.addSubmission(tier, submissionCenter.getId());
subjectToCenters.put(subject, centers);
subjectToSummaries.put(subject, withSummaries);
HashMap<SubmissionCenter, Integer> cScores = new HashMap<>();
cScores.put(submissionCenter, tier);
centerBasedScores.put(subject, cScores);
} else {
withSummaries.setMaxTier(Math.max(withSummaries.getMaxTier(), tier));
withSummaries.setNumberOfObservations(withSummaries.getNumberOfObservations() + 1);
HashSet<SubmissionCenter> submissionCenters = subjectToCenters.get(subject);
submissionCenters.add(submissionCenter);
withSummaries.setNumberOfSubmissionCenters(submissionCenters.size());
withSummaries.addSubmission(tier, submissionCenter.getId());
HashMap<SubmissionCenter, Integer> cScores = centerBasedScores.get(subject);
Integer previousScore = cScores.get(submissionCenter);
cScores.put(submissionCenter, previousScore == null ? tier : Math.max(tier, previousScore));
}
}
Collection<SubjectWithSummaries> perRole = subjectToSummaries.values();
for (SubjectWithSummaries subjectWithSummaries : perRole) {
Integer totalScore = 0;
for (Integer aScore : centerBasedScores.get(subjectWithSummaries.getSubject()).values()) {
totalScore += aScore;
}
subjectWithSummaries.setScore(totalScore);
}
subjectWithSummariesList.addAll(perRole);
log.info("Done scoring role: " + keyword);
}
dashboardDao.batchSave(subjectWithSummariesList, 0);
log.info("Done scoring all roles...");
}
use of gov.nih.nci.ctd2.dashboard.model.SubjectRole in project nci-ctd2-dashboard by CBIIT.
the class ObservationController method getBySubjectId.
private List<Observation> getBySubjectId(Integer subjectId, String role, Integer tier) {
Subject subject = dashboardDao.getEntityById(Subject.class, subjectId);
if (subject != null) {
Set<Observation> observations = new HashSet<Observation>();
for (ObservedSubject observedSubject : dashboardDao.findObservedSubjectBySubject(subject)) {
ObservedSubjectRole observedSubjectRole = observedSubject.getObservedSubjectRole();
String subjectRole = observedSubjectRole.getSubjectRole().getDisplayName();
Integer observationTier = observedSubject.getObservation().getSubmission().getObservationTemplate().getTier();
if ((role.equals("") || role.equals(subjectRole)) && (tier == 0 || tier == observationTier)) {
observations.add(observedSubject.getObservation());
}
}
List<Observation> list = new ArrayList<Observation>(observations);
Collections.sort(list, new Comparator<Observation>() {
@Override
public int compare(Observation o1, Observation o2) {
Integer tier2 = o2.getSubmission().getObservationTemplate().getTier();
Integer tier1 = o1.getSubmission().getObservationTemplate().getTier();
return tier2 - tier1;
}
});
return list;
} else {
return new ArrayList<Observation>();
}
}
use of gov.nih.nci.ctd2.dashboard.model.SubjectRole in project nci-ctd2-dashboard by CBIIT.
the class SubjectResponse method createInstance.
private static SubjectResponse createInstance(final Subject subject, final Filter filter, DashboardDao dashboardDao) {
int[] tierCount = new int[3];
Set<Integer> set = new HashSet<Integer>();
for (ObservedSubject observedSubject : dashboardDao.findObservedSubjectBySubject(subject)) {
ObservedSubjectRole observedSubjectRole = observedSubject.getObservedSubjectRole();
String subjectRole = observedSubjectRole.getSubjectRole().getDisplayName();
if (filter.rolesIncluded.size() > 0 && !filter.rolesIncluded.contains(subjectRole))
continue;
ObservationTemplate observatinoTemplate = observedSubject.getObservation().getSubmission().getObservationTemplate();
Integer observationTier = observatinoTemplate.getTier();
String centerNameBrief = observatinoTemplate.getSubmissionCenter().getStableURL().substring(7);
if (filter.centerIncluded.size() > 0 && !filter.centerIncluded.contains(centerNameBrief))
continue;
if ((Arrays.asList(filter.tiersIncluded).contains(observationTier))) {
set.add(observedSubject.getObservation().getId());
tierCount[observationTier.intValue() - 1]++;
if (filter.limit > 0 && set.size() >= filter.limit) {
break;
}
}
}
List<ObservationItem> observations = dashboardDao.findObservationInfo(new ArrayList<Integer>(set));
Set<String> roles = new TreeSet<String>();
for (int i = 0; i < observations.size(); i++) {
for (SubjectItem sub : observations.get(i).subject_list) {
if (sub.getName().equals(subject.getDisplayName())) {
roles.add(sub.getRole());
break;
}
}
}
String[] uris = observations.stream().map(x -> x.uri).toArray(String[]::new);
SubjectResponse subjectResponse = new SubjectResponse(subject, uris, roles.toArray(new String[0]), tierCount);
return subjectResponse;
}
use of gov.nih.nci.ctd2.dashboard.model.SubjectRole 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);
}
Aggregations