Search in sources :

Example 1 with Summary

use of gov.nih.nci.ctd2.dashboard.util.Summary in project nci-ctd2-dashboard by CBIIT.

the class DashboardDaoImpl method summarizeTotal.

private Summary summarizeTotal() {
    Session session = getSession();
    @SuppressWarnings("unchecked") org.hibernate.query.Query<BigInteger> query = session.createNativeQuery("SELECT COUNT(*) FROM submission" + " JOIN observation_template ON submission.observationTemplate_id=observation_template.id");
    BigInteger submissions = query.getSingleResult();
    String tierQuery = "SELECT tier, COUNT(*) FROM observation" + " JOIN submission ON observation.submission_id=submission.id" + " JOIN observation_template ON submission.observationTemplate_id=observation_template.id" + " GROUP BY tier";
    @SuppressWarnings("unchecked") org.hibernate.query.Query<Object[]> query2 = session.createNativeQuery(tierQuery);
    int[] tierCount = new int[3];
    List<Object[]> result = query2.list();
    for (Object[] obj : result) {
        Integer tier = (Integer) obj[0];
        BigInteger count = (BigInteger) obj[1];
        tierCount[tier - 1] = count.intValue();
    }
    session.close();
    return new Summary("", submissions.intValue(), tierCount[0], tierCount[1], tierCount[2]);
}
Also used : BigInteger(java.math.BigInteger) BigInteger(java.math.BigInteger) Summary(gov.nih.nci.ctd2.dashboard.util.Summary) FullTextSession(org.hibernate.search.FullTextSession) Session(org.hibernate.Session)

Example 2 with Summary

use of gov.nih.nci.ctd2.dashboard.util.Summary in project nci-ctd2-dashboard by CBIIT.

the class DashboardDaoImpl method summarizeStories.

private Summary summarizeStories() {
    Session session = getSession();
    @SuppressWarnings("unchecked") org.hibernate.query.Query<BigInteger> query = session.createNativeQuery("SELECT COUNT(*) FROM submission" + " JOIN observation_template ON submission.observationTemplate_id=observation_template.id" + " WHERE isSubmissionStory=True");
    BigInteger submissions = query.getSingleResult();
    String tierQuery = "SELECT tier, COUNT(*) FROM observation" + " JOIN submission ON observation.submission_id=submission.id" + " JOIN observation_template ON submission.observationTemplate_id=observation_template.id" + " WHERE isSubmissionStory=TRUE" + " GROUP BY tier";
    @SuppressWarnings("unchecked") org.hibernate.query.Query<Object[]> query2 = session.createNativeQuery(tierQuery);
    int[] tierCount = new int[3];
    List<Object[]> result = query2.list();
    for (Object[] obj : result) {
        Integer tier = (Integer) obj[0];
        BigInteger count = (BigInteger) obj[1];
        tierCount[tier - 1] = count.intValue();
    }
    session.close();
    return new Summary("Stories", submissions.intValue(), tierCount[0], tierCount[1], tierCount[2]);
}
Also used : BigInteger(java.math.BigInteger) BigInteger(java.math.BigInteger) Summary(gov.nih.nci.ctd2.dashboard.util.Summary) FullTextSession(org.hibernate.search.FullTextSession) Session(org.hibernate.Session)

Example 3 with Summary

use of gov.nih.nci.ctd2.dashboard.util.Summary in project nci-ctd2-dashboard by CBIIT.

the class DashboardDaoImpl method summarize.

@Override
public void summarize() {
    findEntities(Summary.class).forEach(s -> delete(s));
    Map<Class<?>, String> summaryClasses = new HashMap<Class<?>, String>();
    summaryClasses.put(AnimalModel.class, "Animal Models");
    summaryClasses.put(CellSample.class, "Cell Lines");
    summaryClasses.put(Compound.class, "Compounds");
    summaryClasses.put(Gene.class, "Genes");
    summaryClasses.put(ShRna.class, "shRNA");
    summaryClasses.put(TissueSample.class, "Disease Contexts (Tissues)");
    summaryClasses.forEach((clazz, label) -> {
        @SuppressWarnings("unchecked") Summary s = summarizePerSubject((Class<? extends Subject>) clazz, label);
        save(s);
    });
    Summary s = summarizeStories();
    save(s);
    Summary eco = summarizeECO();
    save(eco);
    Summary total = summarizeTotal();
    save(total);
}
Also used : HashMap(java.util.HashMap) Summary(gov.nih.nci.ctd2.dashboard.util.Summary)

Example 4 with Summary

use of gov.nih.nci.ctd2.dashboard.util.Summary in project nci-ctd2-dashboard by CBIIT.

the class DashboardDaoImpl method summarizeECO.

private Summary summarizeECO() {
    Session session = getSession();
    @SuppressWarnings("unchecked") org.hibernate.query.Query<BigInteger> query = session.createNativeQuery("SELECT COUNT(*) FROM submission" + " JOIN observation_template ON submission.observationTemplate_id=observation_template.id" + " WHERE ecoCode <> ''");
    BigInteger submissions = query.getSingleResult();
    String tierQuery = "SELECT tier, COUNT(*) FROM observation" + " JOIN submission ON observation.submission_id=submission.id" + " JOIN observation_template ON submission.observationTemplate_id=observation_template.id" + " WHERE ecoCode <> ''" + " GROUP BY tier";
    @SuppressWarnings("unchecked") org.hibernate.query.Query<Object[]> query2 = session.createNativeQuery(tierQuery);
    int[] tierCount = new int[3];
    List<Object[]> result = query2.list();
    for (Object[] obj : result) {
        Integer tier = (Integer) obj[0];
        BigInteger count = (BigInteger) obj[1];
        tierCount[tier - 1] = count.intValue();
    }
    session.close();
    return new Summary("Evidence Types", submissions.intValue(), tierCount[0], tierCount[1], tierCount[2]);
}
Also used : BigInteger(java.math.BigInteger) BigInteger(java.math.BigInteger) Summary(gov.nih.nci.ctd2.dashboard.util.Summary) FullTextSession(org.hibernate.search.FullTextSession) Session(org.hibernate.Session)

Example 5 with Summary

use of gov.nih.nci.ctd2.dashboard.util.Summary in project nci-ctd2-dashboard by CBIIT.

the class RssController method generateFeed.

private String generateFeed(List<? extends DashboardEntity> dashboardEntities, String rssTitlePostfix, String rssDescription, String rssLink) {
    String dashboardUrl = context.getScheme() + "://" + context.getServerName() + context.getContextPath() + "/";
    // Set the stage and define metadata on the RSS feed
    SyndFeed feed = new SyndFeedImpl();
    feed.setFeedType("rss_2.0");
    feed.setTitle("CTD^2 Dashboard - " + rssTitlePostfix);
    feed.setDescription(rssDescription);
    feed.setLink(rssLink);
    // We will have two major categories: Subject and Submission
    // and will have subcategories of Subject for each particular subject
    List<SyndCategory> categories = new ArrayList<SyndCategory>();
    SyndCategory subjectCategory = new SyndCategoryImpl();
    subjectCategory.setName("Subject");
    categories.add(subjectCategory);
    SyndCategory submissionCategory = new SyndCategoryImpl();
    submissionCategory.setName("Submission");
    categories.add(submissionCategory);
    feed.setCategories(categories);
    feed.setLanguage("en");
    feed.setManagingEditor("ocg@mail.nih.gov (CTD^2 Network)");
    SyndImage feedImg = new SyndImageImpl();
    feedImg.setTitle("CTD^2 Logo");
    feedImg.setUrl(dashboardUrl + "img/logos/ctd2_overall.png");
    feedImg.setLink(dashboardUrl);
    feed.setImage(feedImg);
    // And prepare the items to be put into the RSS
    List<SyndEntry> rssItems = new ArrayList<SyndEntry>();
    for (DashboardEntity entity : dashboardEntities) {
        if (entity instanceof Subject) {
            Subject subject = (Subject) entity;
            // Collect all role & submission pairs for this particular subject
            Map<Submission, Set<String>> roleMap = new HashMap<Submission, Set<String>>();
            Map<Submission, Set<ObservedSubject>> osMap = new HashMap<Submission, Set<ObservedSubject>>();
            List<ObservedSubject> sObservations = dashboardDao.findObservedSubjectBySubject((Subject) entity);
            for (ObservedSubject sObservation : sObservations) {
                String role = sObservation.getObservedSubjectRole().getSubjectRole().getDisplayName();
                Submission submission = sObservation.getObservation().getSubmission();
                Set<String> roles = roleMap.get(submission);
                if (roles == null) {
                    roles = new HashSet<String>();
                    roleMap.put(submission, roles);
                }
                roles.add(role);
                Set<ObservedSubject> oses = osMap.get(submission);
                if (oses == null) {
                    oses = new HashSet<ObservedSubject>();
                    osMap.put(submission, oses);
                }
                oses.add(sObservation);
            }
            // These will always belong to "Subject"
            List<SyndCategory> sCategories = new ArrayList<SyndCategory>();
            sCategories.add(subjectCategory);
            // and "Subject/<name>" categories
            SyndCategory sCategory = new SyndCategoryImpl();
            sCategory.setName(subjectCategory.getName() + "/" + entity.getDisplayName());
            categories.add(sCategory);
            // Also add this specific category to the global list
            sCategories.add(sCategory);
            // And now combine this information into individual items around submissions/subject
            for (Submission submission : roleMap.keySet()) {
                Set<String> roles = roleMap.get(submission);
                assert roles != null;
                Set<ObservedSubject> oses = osMap.get(submission);
                assert oses != null;
                SyndEntry item = new SyndEntryImpl();
                item.setCategories(sCategories);
                // Construct title
                ObservationTemplate observationTemplate = submission.getObservationTemplate();
                String description = observationTemplate.getDescription();
                Integer tier = observationTemplate.getTier();
                String combinedRoles = StringUtils.join(roles, ", ");
                String name = subject.getDisplayName();
                int noOfObservations = oses.size();
                StringBuilder title = new StringBuilder();
                title.append("Role '").append(combinedRoles).append("'").append(": ").append(description).append(" ").append("(").append("Tier ").append(tier).append(" - ").append(noOfObservations).append(" ").append(noOfObservations > 1 ? "observations" : "observation").append(" on ").append(name).append(")");
                item.setTitle(title.toString());
                String centerName = observationTemplate.getSubmissionCenter().getDisplayName();
                item.setAuthor(centerName);
                item.setPublishedDate(submission.getSubmissionDate());
                String submissionDescription = observationTemplate.getSubmissionDescription();
                StringBuilder itemDescStr = new StringBuilder();
                itemDescStr.append("<b>Project</b>: ").append(observationTemplate.getProject()).append("<br />");
                if (submissionDescription != null && !submissionDescription.isEmpty()) {
                    itemDescStr.append("<b>Summary</b>: ").append(submissionDescription);
                }
                SyndContent itemDesc = new SyndContentImpl();
                itemDesc.setType("text/html");
                itemDesc.setValue(itemDescStr.toString());
                item.setDescription(itemDesc);
                // Create a link to the subject page with filters enabled
                item.setLink(dashboardUrl + "#subject/" + subject.getId() + "/" + combinedRoles + "/" + tier);
                item.setUri(String.format("#ctd2#subject#%s#%d", name, title.hashCode() & Integer.MAX_VALUE));
                rssItems.add(item);
            }
        // End of subject-centered items
        } else if (entity instanceof Submission) {
            Submission submission = (Submission) entity;
            SyndEntry item = new SyndEntryImpl();
            ObservationTemplate observationTemplate = submission.getObservationTemplate();
            int noOfObservations = dashboardDao.findObservationsBySubmission(submission).size();
            StringBuilder title = new StringBuilder();
            Boolean isStory = observationTemplate.getIsSubmissionStory();
            title.append(isStory ? "Story" : "Submission").append(": ");
            title.append(observationTemplate.getDescription().replaceAll("\\.$", "")).append(" (").append("Tier ").append(observationTemplate.getTier()).append(" - ").append(noOfObservations).append(" ").append(noOfObservations > 1 ? "observations" : "observation").append(")");
            item.setTitle(title.toString());
            String submissionDescription = observationTemplate.getSubmissionDescription();
            StringBuilder itemDescStr = new StringBuilder();
            itemDescStr.append("<b>Project</b>: ").append(observationTemplate.getProject()).append("<br />");
            if (submissionDescription != null && !submissionDescription.isEmpty()) {
                itemDescStr.append("<b>Summary</b>: ").append(submissionDescription);
            }
            SyndContent itemDesc = new SyndContentImpl();
            itemDesc.setType("text/html");
            itemDesc.setValue(itemDescStr.toString());
            item.setDescription(itemDesc);
            item.setPublishedDate(submission.getSubmissionDate());
            String centerName = observationTemplate.getSubmissionCenter().getDisplayName();
            item.setAuthor(centerName);
            item.setLink(dashboardUrl + "#submission/" + submission.getId());
            item.setUri(String.format("ctd2#submission#%d", title.hashCode() & Integer.MAX_VALUE));
            rssItems.add(item);
        }
    // End of submission item(s)
    }
    // Add all items into the feed
    feed.setEntries(rssItems);
    // And print the XML/RSS version out
    SyndFeedOutput feedOutput = new SyndFeedOutput();
    String feedStr = null;
    try {
        feedStr = feedOutput.outputString(feed, true);
    } catch (FeedException e) {
        e.printStackTrace();
    }
    return feedStr;
}
Also used : SyndCategory(com.rometools.rome.feed.synd.SyndCategory) SyndImageImpl(com.rometools.rome.feed.synd.SyndImageImpl) HashSet(java.util.HashSet) Set(java.util.Set) HashMap(java.util.HashMap) SyndContentImpl(com.rometools.rome.feed.synd.SyndContentImpl) ArrayList(java.util.ArrayList) SyndFeedOutput(com.rometools.rome.io.SyndFeedOutput) SyndFeed(com.rometools.rome.feed.synd.SyndFeed) DashboardEntity(gov.nih.nci.ctd2.dashboard.model.DashboardEntity) SyndEntryImpl(com.rometools.rome.feed.synd.SyndEntryImpl) SyndImage(com.rometools.rome.feed.synd.SyndImage) ObservationTemplate(gov.nih.nci.ctd2.dashboard.model.ObservationTemplate) SyndFeedImpl(com.rometools.rome.feed.synd.SyndFeedImpl) Submission(gov.nih.nci.ctd2.dashboard.model.Submission) SyndEntry(com.rometools.rome.feed.synd.SyndEntry) FeedException(com.rometools.rome.io.FeedException) Subject(gov.nih.nci.ctd2.dashboard.model.Subject) ObservedSubject(gov.nih.nci.ctd2.dashboard.model.ObservedSubject) SyndCategoryImpl(com.rometools.rome.feed.synd.SyndCategoryImpl) SyndContent(com.rometools.rome.feed.synd.SyndContent) ObservedSubject(gov.nih.nci.ctd2.dashboard.model.ObservedSubject)

Aggregations

Summary (gov.nih.nci.ctd2.dashboard.util.Summary)6 BigInteger (java.math.BigInteger)4 Session (org.hibernate.Session)4 FullTextSession (org.hibernate.search.FullTextSession)4 HashMap (java.util.HashMap)2 SyndCategory (com.rometools.rome.feed.synd.SyndCategory)1 SyndCategoryImpl (com.rometools.rome.feed.synd.SyndCategoryImpl)1 SyndContent (com.rometools.rome.feed.synd.SyndContent)1 SyndContentImpl (com.rometools.rome.feed.synd.SyndContentImpl)1 SyndEntry (com.rometools.rome.feed.synd.SyndEntry)1 SyndEntryImpl (com.rometools.rome.feed.synd.SyndEntryImpl)1 SyndFeed (com.rometools.rome.feed.synd.SyndFeed)1 SyndFeedImpl (com.rometools.rome.feed.synd.SyndFeedImpl)1 SyndImage (com.rometools.rome.feed.synd.SyndImage)1 SyndImageImpl (com.rometools.rome.feed.synd.SyndImageImpl)1 FeedException (com.rometools.rome.io.FeedException)1 SyndFeedOutput (com.rometools.rome.io.SyndFeedOutput)1 JSONSerializer (flexjson.JSONSerializer)1 ExcludeTransformer (gov.nih.nci.ctd2.dashboard.api.ExcludeTransformer)1 SimpleDateTransformer (gov.nih.nci.ctd2.dashboard.api.SimpleDateTransformer)1