Search in sources :

Example 1 with ECOTerm

use of gov.nih.nci.ctd2.dashboard.model.ECOTerm in project nci-ctd2-dashboard by CBIIT.

the class DashboardDaoImpl method getEcoTerm.

@Override
public ECOTerm getEcoTerm(String ecoTermCode) {
    Session session = getSession();
    @SuppressWarnings("unchecked") org.hibernate.query.Query<ECOTerm> query = session.createQuery("from ECOTermImpl where code = :ecocode");
    query.setParameter("ecocode", ecoTermCode);
    ECOTerm result = null;
    try {
        result = query.getSingleResult();
    } catch (NoResultException e) {
        log.info("ECO term not available for ECO code " + ecoTermCode);
    }
    session.close();
    return result;
}
Also used : NoResultException(javax.persistence.NoResultException) ECOTerm(gov.nih.nci.ctd2.dashboard.model.ECOTerm) FullTextSession(org.hibernate.search.FullTextSession) Session(org.hibernate.Session)

Example 2 with ECOTerm

use of gov.nih.nci.ctd2.dashboard.model.ECOTerm in project nci-ctd2-dashboard by CBIIT.

the class DashboardDaoImpl method search.

@Override
@Cacheable(value = "searchCache")
public SearchResults search(String queryString) {
    queryString = queryString.trim();
    final String[] searchTerms = parseWords(queryString);
    log.debug("search terms: " + String.join(",", searchTerms));
    Map<Subject, Integer> subjects = new HashMap<Subject, Integer>();
    Map<Submission, Integer> submissions = new HashMap<Submission, Integer>();
    for (String singleTerm : searchTerms) {
        searchSingleTerm(singleTerm, subjects, submissions);
    }
    SearchResults searchResults = new SearchResults();
    searchResults.submission_result = submissions.keySet().stream().map(submission -> {
        ObservationTemplate template = submission.getObservationTemplate();
        return new SearchResults.SubmissionResult(submission.getStableURL(), submission.getSubmissionDate(), template.getDescription(), template.getTier(), template.getSubmissionCenter().getDisplayName(), submission.getId(), findObservationsBySubmission(submission).size(), template.getIsSubmissionStory());
    }).collect(Collectors.toList());
    Map<String, Set<Observation>> observationMap = new HashMap<String, Set<Observation>>();
    List<SubjectResult> subject_result = new ArrayList<SubjectResult>();
    for (Subject subject : subjects.keySet()) {
        Set<Observation> observations = new HashSet<Observation>();
        Set<SubmissionCenter> submissionCenters = new HashSet<SubmissionCenter>();
        Set<String> roles = new HashSet<String>();
        for (ObservedSubject observedSubject : findObservedSubjectBySubject(subject)) {
            Observation observation = observedSubject.getObservation();
            observations.add(observation);
            ObservationTemplate observationTemplate = observation.getSubmission().getObservationTemplate();
            submissionCenters.add(observationTemplate.getSubmissionCenter());
            roles.add(observedSubject.getObservedSubjectRole().getSubjectRole().getDisplayName());
        }
        SubjectResult x = new SubjectResult(subject, observations.size(), submissionCenters.size(), subjects.get(subject), roles);
        Arrays.stream(searchTerms).filter(term -> matchSubject(term, subject)).forEach(term -> {
            Set<Observation> obset = observationMap.get(term);
            if (obset == null) {
                obset = new HashSet<Observation>();
            }
            obset.addAll(observations);
            observationMap.put(term, obset);
        });
        subject_result.add(x);
    }
    /* search ECO terms */
    List<ECOTerm> ecoterms = findECOTerms(queryString);
    for (ECOTerm ecoterm : ecoterms) {
        List<Integer> observationIds = observationIdsForEcoCode(ecoterm.getCode());
        int observationNumber = observationIds.size();
        if (observationNumber == 0)
            continue;
        SubjectResult entity = new SubjectResult(ecoterm, observationNumber, centerCount(ecoterm.getCode()), null, // no matchNumber, no roles
        null);
        subject_result.add(entity);
        Set<Observation> observations = new HashSet<Observation>();
        observationIds.forEach(obid -> observations.add(getEntityById(Observation.class, obid)));
        Arrays.stream(searchTerms).filter(term -> ecoterm.containsTerm(term)).forEach(term -> {
            Set<Observation> obset = observationMap.get(term);
            if (obset == null) {
                obset = new HashSet<Observation>();
            }
            obset.addAll(observations);
            observationMap.put(term, obset);
        });
    }
    /*
         * Limit the size. This should be done more efficiently during the process of
         * builing up of the list.
         * Because the limit needs to be based on 'match number' ranking, which depends
         * on all terms, an efficient algorithm is not obvious.
         * Unfortunately, we also have to do this after processing all results because
         * we need (in fact more often) observation numbers as well in ranking. TODO
         */
    if (subject_result.size() > maxNumberOfSearchResults) {
        searchResults.oversized = subject_result.size();
        subject_result = subject_result.stream().sorted(new SearchResultComparator()).limit(maxNumberOfSearchResults).collect(Collectors.toList());
        log.debug("size after limiting: " + subject_result.size());
    }
    searchResults.subject_result = subject_result;
    if (searchTerms.length <= 1) {
        return searchResults;
    }
    // add intersection of observations
    Set<Observation> set0 = observationMap.get(searchTerms[0]);
    if (set0 == null) {
        log.debug("no observation for " + searchTerms[0]);
        return searchResults;
    }
    log.debug("set0 size=" + set0.size());
    for (int i = 1; i < searchTerms.length; i++) {
        Set<Observation> obset = observationMap.get(searchTerms[i]);
        if (obset == null) {
            log.debug("... no observation for " + searchTerms[i]);
            return searchResults;
        }
        log.debug("set " + i + " size=" + obset.size());
        set0.retainAll(obset);
    }
    // set0 is now the intersection
    if (set0.size() == 0) {
        log.debug("no intersection of observations");
    }
    if (set0.size() > maxNumberOfSearchResults) {
        searchResults.oversized_observations = set0.size();
        // no particular ranking is enforced when limiting
        set0 = set0.stream().limit(maxNumberOfSearchResults).collect(Collectors.toSet());
        log.debug("observation results count after limiting: " + set0.size());
    }
    searchResults.observation_result = new ArrayList<Observation>(set0);
    return searchResults;
}
Also used : Query(org.apache.lucene.search.Query) ObservedEvidenceRole(gov.nih.nci.ctd2.dashboard.model.ObservedEvidenceRole) Transcript(gov.nih.nci.ctd2.dashboard.model.Transcript) Arrays(java.util.Arrays) DashboardDao(gov.nih.nci.ctd2.dashboard.dao.DashboardDao) ObservedSubjectRole(gov.nih.nci.ctd2.dashboard.model.ObservedSubjectRole) Cacheable(org.springframework.cache.annotation.Cacheable) NoResultException(javax.persistence.NoResultException) XRefItem(gov.nih.nci.ctd2.dashboard.api.XRefItem) KeywordAnalyzer(org.apache.lucene.analysis.core.KeywordAnalyzer) SubmissionCenter(gov.nih.nci.ctd2.dashboard.model.SubmissionCenter) Matcher(java.util.regex.Matcher) MultiFieldQueryParser(org.apache.lucene.queryparser.classic.MultiFieldQueryParser) Map(java.util.Map) DashboardEntity(gov.nih.nci.ctd2.dashboard.model.DashboardEntity) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) BigInteger(java.math.BigInteger) TissueSample(gov.nih.nci.ctd2.dashboard.model.TissueSample) Organism(gov.nih.nci.ctd2.dashboard.model.Organism) CriteriaQuery(javax.persistence.criteria.CriteriaQuery) ScrollableResults(org.hibernate.ScrollableResults) SearchResults(gov.nih.nci.ctd2.dashboard.util.SearchResults) SubjectResult(gov.nih.nci.ctd2.dashboard.util.SubjectResult) Collection(java.util.Collection) SessionFactory(org.hibernate.SessionFactory) Set(java.util.Set) FullTextQuery(org.hibernate.search.FullTextQuery) CellSample(gov.nih.nci.ctd2.dashboard.model.CellSample) Compound(gov.nih.nci.ctd2.dashboard.model.Compound) ECOTerm(gov.nih.nci.ctd2.dashboard.model.ECOTerm) SubjectWithOrganism(gov.nih.nci.ctd2.dashboard.model.SubjectWithOrganism) Collectors(java.util.stream.Collectors) TissueSampleImpl(gov.nih.nci.ctd2.dashboard.impl.TissueSampleImpl) ObservationItem(gov.nih.nci.ctd2.dashboard.api.ObservationItem) List(java.util.List) Xref(gov.nih.nci.ctd2.dashboard.model.Xref) EcoBrowse(gov.nih.nci.ctd2.dashboard.util.EcoBrowse) CompoundImpl(gov.nih.nci.ctd2.dashboard.impl.CompoundImpl) ScrollMode(org.hibernate.ScrollMode) ObservedSubject(gov.nih.nci.ctd2.dashboard.model.ObservedSubject) DashboardEntityImpl(gov.nih.nci.ctd2.dashboard.impl.DashboardEntityImpl) Gene(gov.nih.nci.ctd2.dashboard.model.Gene) Pattern(java.util.regex.Pattern) LogFactory(org.apache.commons.logging.LogFactory) ShRna(gov.nih.nci.ctd2.dashboard.model.ShRna) Observation(gov.nih.nci.ctd2.dashboard.model.Observation) ParseException(org.apache.lucene.queryparser.classic.ParseException) FullTextSession(org.hibernate.search.FullTextSession) SubmissionImpl(gov.nih.nci.ctd2.dashboard.impl.SubmissionImpl) Subject(gov.nih.nci.ctd2.dashboard.model.Subject) Submission(gov.nih.nci.ctd2.dashboard.model.Submission) Session(org.hibernate.Session) HashMap(java.util.HashMap) EvidenceItem(gov.nih.nci.ctd2.dashboard.api.EvidenceItem) Evidence(gov.nih.nci.ctd2.dashboard.model.Evidence) TypedQuery(javax.persistence.TypedQuery) ObservationTemplate(gov.nih.nci.ctd2.dashboard.model.ObservationTemplate) SubjectWithSummaries(gov.nih.nci.ctd2.dashboard.util.SubjectWithSummaries) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Search(org.hibernate.search.Search) Summary(gov.nih.nci.ctd2.dashboard.util.Summary) SubjectImpl(gov.nih.nci.ctd2.dashboard.impl.SubjectImpl) AnimalModel(gov.nih.nci.ctd2.dashboard.model.AnimalModel) ObservedEvidence(gov.nih.nci.ctd2.dashboard.model.ObservedEvidence) WordCloudEntry(gov.nih.nci.ctd2.dashboard.util.WordCloudEntry) SubjectWithOrganismImpl(gov.nih.nci.ctd2.dashboard.impl.SubjectWithOrganismImpl) ObservationURIsAndTiers(gov.nih.nci.ctd2.dashboard.util.ObservationURIsAndTiers) FlushMode(org.hibernate.FlushMode) SubjectItem(gov.nih.nci.ctd2.dashboard.api.SubjectItem) Hierarchy(gov.nih.nci.ctd2.dashboard.util.Hierarchy) Annotation(gov.nih.nci.ctd2.dashboard.model.Annotation) ObservationTemplateImpl(gov.nih.nci.ctd2.dashboard.impl.ObservationTemplateImpl) Synonym(gov.nih.nci.ctd2.dashboard.model.Synonym) Protein(gov.nih.nci.ctd2.dashboard.model.Protein) Log(org.apache.commons.logging.Log) DashboardFactory(gov.nih.nci.ctd2.dashboard.model.DashboardFactory) Set(java.util.Set) HashSet(java.util.HashSet) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) SearchResults(gov.nih.nci.ctd2.dashboard.util.SearchResults) ObservationTemplate(gov.nih.nci.ctd2.dashboard.model.ObservationTemplate) ECOTerm(gov.nih.nci.ctd2.dashboard.model.ECOTerm) HashSet(java.util.HashSet) Submission(gov.nih.nci.ctd2.dashboard.model.Submission) ObservedSubject(gov.nih.nci.ctd2.dashboard.model.ObservedSubject) Subject(gov.nih.nci.ctd2.dashboard.model.Subject) BigInteger(java.math.BigInteger) SubmissionCenter(gov.nih.nci.ctd2.dashboard.model.SubmissionCenter) SubjectResult(gov.nih.nci.ctd2.dashboard.util.SubjectResult) Observation(gov.nih.nci.ctd2.dashboard.model.Observation) ObservedSubject(gov.nih.nci.ctd2.dashboard.model.ObservedSubject) Cacheable(org.springframework.cache.annotation.Cacheable)

Example 3 with ECOTerm

use of gov.nih.nci.ctd2.dashboard.model.ECOTerm in project nci-ctd2-dashboard by CBIIT.

the class DashboardDaoImpl method ontologySearchOneTerm.

private List<SubjectResult> ontologySearchOneTerm(String oneTerm, final Set<Integer> observations) {
    long t1 = System.currentTimeMillis();
    List<Integer> list = ontologySearchDiseaseContext(oneTerm);
    List<SubjectResult> entities = new ArrayList<SubjectResult>();
    Session session = getSession();
    @SuppressWarnings("unchecked") org.hibernate.query.Query<TissueSample> query = session.createQuery("from TissueSampleImpl where code = :code");
    List<Integer> subjectIds = new ArrayList<Integer>();
    for (Integer i : list) {
        query.setParameter("code", i);
        TissueSample result = null;
        try {
            result = query.getSingleResult();
        } catch (NoResultException e) {
            log.info("Tissue sample not available for code " + i);
            continue;
        }
        int observationNumber = observationCountForTissueSample(i);
        int centerCount = centerCountForTissueSample(i);
        Set<String> roles = getRolesForSubjectId(result.getId());
        SubjectResult x = new SubjectResult(result, observationNumber, centerCount, 1, roles);
        entities.add(x);
        subjectIds.add(result.getId());
    }
    long t2 = System.currentTimeMillis();
    log.debug("disease context ontology search for '" + oneTerm + "' took " + (t2 - t1) + " milliseconds");
    log.debug("tissue sample results count: " + entities.size());
    if (observations != null) {
        List<Integer> observationIds = observationIdsForSubjectIds(subjectIds);
        observations.addAll(observationIds);
        log.debug("observations count: " + observations.size());
    }
    List<ECOTerm> ecoterms = findECOTerms(oneTerm);
    List<Integer> eco_list = ontologySearchExperimentalEvidence(ecoterms);
    int eco_list_size = eco_list.size();
    log.debug("eco list size:" + eco_list_size);
    if (eco_list_size > 0) {
        @SuppressWarnings("unchecked") org.hibernate.query.Query<ECOTerm> query2 = session.createQuery("FROM ECOTermImpl WHERE code in (:codes)");
        List<String> codes = eco_list.stream().map(x -> String.format("ECO:%07d", x)).collect(Collectors.toList());
        query2.setParameterList("codes", codes);
        List<ECOTerm> list2 = query2.list();
        for (ECOTerm x : list2) {
            int observationNumber = observationCountForEcoCode(x.getCode());
            int centerCount = centerCountForEcoCode(x.getCode());
            // no matchNumber, no roles
            SubjectResult subjectResult = new SubjectResult(x, observationNumber, centerCount, null, null);
            entities.add(subjectResult);
            if (observations != null) {
                List<Integer> observationIdsForOneECOTerm = observationIdsForEcoCode(x.getCode());
                observations.addAll(observationIdsForOneECOTerm);
            }
        }
    }
    log.debug("tissue sample results count after getting ECO term: " + entities.size());
    if (observations != null) {
        log.debug("observations count after getting ECO term: " + observations.size());
    }
    if (observations != null) {
        searchSubjectsToUpdateObservations(oneTerm, observations);
        log.debug("observationIds count after getting other subjects: " + observations.size());
    }
    session.close();
    return entities;
}
Also used : Query(org.apache.lucene.search.Query) ObservedEvidenceRole(gov.nih.nci.ctd2.dashboard.model.ObservedEvidenceRole) Transcript(gov.nih.nci.ctd2.dashboard.model.Transcript) Arrays(java.util.Arrays) DashboardDao(gov.nih.nci.ctd2.dashboard.dao.DashboardDao) ObservedSubjectRole(gov.nih.nci.ctd2.dashboard.model.ObservedSubjectRole) Cacheable(org.springframework.cache.annotation.Cacheable) NoResultException(javax.persistence.NoResultException) XRefItem(gov.nih.nci.ctd2.dashboard.api.XRefItem) KeywordAnalyzer(org.apache.lucene.analysis.core.KeywordAnalyzer) SubmissionCenter(gov.nih.nci.ctd2.dashboard.model.SubmissionCenter) Matcher(java.util.regex.Matcher) MultiFieldQueryParser(org.apache.lucene.queryparser.classic.MultiFieldQueryParser) Map(java.util.Map) DashboardEntity(gov.nih.nci.ctd2.dashboard.model.DashboardEntity) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) BigInteger(java.math.BigInteger) TissueSample(gov.nih.nci.ctd2.dashboard.model.TissueSample) Organism(gov.nih.nci.ctd2.dashboard.model.Organism) CriteriaQuery(javax.persistence.criteria.CriteriaQuery) ScrollableResults(org.hibernate.ScrollableResults) SearchResults(gov.nih.nci.ctd2.dashboard.util.SearchResults) SubjectResult(gov.nih.nci.ctd2.dashboard.util.SubjectResult) Collection(java.util.Collection) SessionFactory(org.hibernate.SessionFactory) Set(java.util.Set) FullTextQuery(org.hibernate.search.FullTextQuery) CellSample(gov.nih.nci.ctd2.dashboard.model.CellSample) Compound(gov.nih.nci.ctd2.dashboard.model.Compound) ECOTerm(gov.nih.nci.ctd2.dashboard.model.ECOTerm) SubjectWithOrganism(gov.nih.nci.ctd2.dashboard.model.SubjectWithOrganism) Collectors(java.util.stream.Collectors) TissueSampleImpl(gov.nih.nci.ctd2.dashboard.impl.TissueSampleImpl) ObservationItem(gov.nih.nci.ctd2.dashboard.api.ObservationItem) List(java.util.List) Xref(gov.nih.nci.ctd2.dashboard.model.Xref) EcoBrowse(gov.nih.nci.ctd2.dashboard.util.EcoBrowse) CompoundImpl(gov.nih.nci.ctd2.dashboard.impl.CompoundImpl) ScrollMode(org.hibernate.ScrollMode) ObservedSubject(gov.nih.nci.ctd2.dashboard.model.ObservedSubject) DashboardEntityImpl(gov.nih.nci.ctd2.dashboard.impl.DashboardEntityImpl) Gene(gov.nih.nci.ctd2.dashboard.model.Gene) Pattern(java.util.regex.Pattern) LogFactory(org.apache.commons.logging.LogFactory) ShRna(gov.nih.nci.ctd2.dashboard.model.ShRna) Observation(gov.nih.nci.ctd2.dashboard.model.Observation) ParseException(org.apache.lucene.queryparser.classic.ParseException) FullTextSession(org.hibernate.search.FullTextSession) SubmissionImpl(gov.nih.nci.ctd2.dashboard.impl.SubmissionImpl) Subject(gov.nih.nci.ctd2.dashboard.model.Subject) Submission(gov.nih.nci.ctd2.dashboard.model.Submission) Session(org.hibernate.Session) HashMap(java.util.HashMap) EvidenceItem(gov.nih.nci.ctd2.dashboard.api.EvidenceItem) Evidence(gov.nih.nci.ctd2.dashboard.model.Evidence) TypedQuery(javax.persistence.TypedQuery) ObservationTemplate(gov.nih.nci.ctd2.dashboard.model.ObservationTemplate) SubjectWithSummaries(gov.nih.nci.ctd2.dashboard.util.SubjectWithSummaries) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Search(org.hibernate.search.Search) Summary(gov.nih.nci.ctd2.dashboard.util.Summary) SubjectImpl(gov.nih.nci.ctd2.dashboard.impl.SubjectImpl) AnimalModel(gov.nih.nci.ctd2.dashboard.model.AnimalModel) ObservedEvidence(gov.nih.nci.ctd2.dashboard.model.ObservedEvidence) WordCloudEntry(gov.nih.nci.ctd2.dashboard.util.WordCloudEntry) SubjectWithOrganismImpl(gov.nih.nci.ctd2.dashboard.impl.SubjectWithOrganismImpl) ObservationURIsAndTiers(gov.nih.nci.ctd2.dashboard.util.ObservationURIsAndTiers) FlushMode(org.hibernate.FlushMode) SubjectItem(gov.nih.nci.ctd2.dashboard.api.SubjectItem) Hierarchy(gov.nih.nci.ctd2.dashboard.util.Hierarchy) Annotation(gov.nih.nci.ctd2.dashboard.model.Annotation) ObservationTemplateImpl(gov.nih.nci.ctd2.dashboard.impl.ObservationTemplateImpl) Synonym(gov.nih.nci.ctd2.dashboard.model.Synonym) Protein(gov.nih.nci.ctd2.dashboard.model.Protein) Log(org.apache.commons.logging.Log) DashboardFactory(gov.nih.nci.ctd2.dashboard.model.DashboardFactory) ArrayList(java.util.ArrayList) NoResultException(javax.persistence.NoResultException) BigInteger(java.math.BigInteger) TissueSample(gov.nih.nci.ctd2.dashboard.model.TissueSample) SubjectResult(gov.nih.nci.ctd2.dashboard.util.SubjectResult) ECOTerm(gov.nih.nci.ctd2.dashboard.model.ECOTerm) FullTextSession(org.hibernate.search.FullTextSession) Session(org.hibernate.Session)

Example 4 with ECOTerm

use of gov.nih.nci.ctd2.dashboard.model.ECOTerm in project nci-ctd2-dashboard by CBIIT.

the class ECOTermDataFieldSetMapper method mapFieldSet.

public ECOTerm mapFieldSet(FieldSet fieldSet) throws BindException {
    String name = fieldSet.readString("name");
    String code = fieldSet.readString("code");
    String definition = fieldSet.readString("definition");
    String synonyms = fieldSet.readString("synonyms");
    log.debug("synonyms: " + synonyms);
    ECOTerm ecoterm = dashboardFactory.create(ECOTerm.class);
    ecoterm.setDisplayName(name);
    ecoterm.setCode(code);
    ecoterm.setDefinition(definition);
    ecoterm.setSynonyms(synonyms);
    return ecoterm;
}
Also used : ECOTerm(gov.nih.nci.ctd2.dashboard.model.ECOTerm)

Example 5 with ECOTerm

use of gov.nih.nci.ctd2.dashboard.model.ECOTerm in project nci-ctd2-dashboard by CBIIT.

the class ECOTermDataWriter method write.

public void write(List<? extends ECOTerm> items) throws Exception {
    StableURL stableURL = new StableURL();
    for (ECOTerm ecoterm : items) {
        ecoterm.setStableURL(stableURL.createURLWithPrefix("eco", ecoterm.getCode()));
    }
    dashboardDao.batchSave(items, batchSize);
    log.debug("ECO term written");
}
Also used : StableURL(gov.nih.nci.ctd2.dashboard.util.StableURL) ECOTerm(gov.nih.nci.ctd2.dashboard.model.ECOTerm)

Aggregations

ECOTerm (gov.nih.nci.ctd2.dashboard.model.ECOTerm)11 Session (org.hibernate.Session)5 FullTextSession (org.hibernate.search.FullTextSession)5 JSONSerializer (flexjson.JSONSerializer)3 DashboardEntity (gov.nih.nci.ctd2.dashboard.model.DashboardEntity)3 Gene (gov.nih.nci.ctd2.dashboard.model.Gene)3 Subject (gov.nih.nci.ctd2.dashboard.model.Subject)3 Xref (gov.nih.nci.ctd2.dashboard.model.Xref)3 ArrayList (java.util.ArrayList)3 List (java.util.List)3 NoResultException (javax.persistence.NoResultException)3 EvidenceItem (gov.nih.nci.ctd2.dashboard.api.EvidenceItem)2 ObservationItem (gov.nih.nci.ctd2.dashboard.api.ObservationItem)2 SubjectItem (gov.nih.nci.ctd2.dashboard.api.SubjectItem)2 XRefItem (gov.nih.nci.ctd2.dashboard.api.XRefItem)2 DashboardDao (gov.nih.nci.ctd2.dashboard.dao.DashboardDao)2 CompoundImpl (gov.nih.nci.ctd2.dashboard.impl.CompoundImpl)2 DashboardEntityImpl (gov.nih.nci.ctd2.dashboard.impl.DashboardEntityImpl)2 ObservationTemplateImpl (gov.nih.nci.ctd2.dashboard.impl.ObservationTemplateImpl)2 SubjectImpl (gov.nih.nci.ctd2.dashboard.impl.SubjectImpl)2