From 19d4482bf3da479cc1282205292d1642ec7c8447 Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Tue, 24 Nov 2009 10:02:30 +0000 Subject: [PATCH] [LMS-1264] implemented first version of entity tracking email content generation SVN: 13479 --- .../dsu/tracking/EntityTrackingEmailData.java | 5 +- .../EntityTrackingEmailGenerator.java | 131 ++++++++++++++---- 2 files changed, 106 insertions(+), 30 deletions(-) diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/EntityTrackingEmailData.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/EntityTrackingEmailData.java index d0d1dd9a371..8e69a9a05e0 100644 --- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/EntityTrackingEmailData.java +++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/EntityTrackingEmailData.java @@ -17,6 +17,7 @@ package ch.ethz.bsse.cisd.dsu.tracking; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -88,9 +89,9 @@ public class EntityTrackingEmailData return recipient; } - public Map<Long, SequencingSampleData> getSequencingSampleData() + public Collection<SequencingSampleData> getSequencingSamplesData() { - return sequencingSampleData; + return sequencingSampleData.values(); } public List<ExternalData> getDataSets() diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/EntityTrackingEmailGenerator.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/EntityTrackingEmailGenerator.java index b5d2124ddcb..dae1c34888e 100644 --- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/EntityTrackingEmailGenerator.java +++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/tracking/EntityTrackingEmailGenerator.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.List; import java.util.Properties; +import ch.ethz.bsse.cisd.dsu.tracking.EntityTrackingEmailData.SequencingSampleData; import ch.systemsx.cisd.common.utilities.PropertyUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; @@ -32,23 +33,33 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; */ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerator { - private static final String NOTIFICATION_EMAIL_SUBJECT = "notification-email-subject"; - private static final String NOTIFICATION_EMAIL_FROM = "notification-email-from"; private static final String NOTIFICATION_EMAIL_REPLY_TO = "notification-email-reply-to"; + private static final String NOTIFICATION_EMAIL_SUBJECT = "notification-email-subject"; + + private static final String NOTIFICATION_EMAIL_BEGINNING = "notification-email-beginning"; + + private static final String NOTIFICATION_EMAIL_ENDING = "notification-email-ending"; + private final String subject; private final String from; private final String replyTo; + private final String beginning; + + private final String ending; + public EntityTrackingEmailGenerator(Properties properties) { subject = PropertyUtils.getMandatoryProperty(properties, NOTIFICATION_EMAIL_SUBJECT); from = PropertyUtils.getMandatoryProperty(properties, NOTIFICATION_EMAIL_FROM); replyTo = PropertyUtils.getMandatoryProperty(properties, NOTIFICATION_EMAIL_REPLY_TO); + beginning = PropertyUtils.getMandatoryProperty(properties, NOTIFICATION_EMAIL_BEGINNING); + ending = PropertyUtils.getMandatoryProperty(properties, NOTIFICATION_EMAIL_ENDING); } public List<Email> generateEmails(TrackedEntities trackedEntities) @@ -67,7 +78,7 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat private Email createEmail(EntityTrackingEmailData emailData) { - String content = EmailContentGenerator.generate(emailData); + String content = EmailContentGenerator.generate(emailData, beginning, ending); String recipient = emailData.getRecipient(); return new Email(subject, content, replyTo, from, recipient); } @@ -95,38 +106,94 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat private static final String PERMLINK_LABEL = "Permlink"; - private static String createSeparatorLine(char separatorChar) + public static String generate(EntityTrackingEmailData emailData, String beginning, + String ending) { - char[] line = new char[SEPARATOR_LINE_WIDTH]; - Arrays.fill(line, separatorChar); - return new String(line); + StringBuilder sb = new StringBuilder(); + appendln(sb, beginning); + appendNewline(sb); + appendSequencingSamplesData(sb, emailData.getSequencingSamplesData()); + appendDataSetsData(sb, emailData.getDataSets()); + appendNewline(sb); + appendln(sb, ending); + return sb.toString(); } - // TODO 2009-11-23, Piotr Buczek: implement - public static String generate(EntityTrackingEmailData emailData) + private static void appendSequencingSamplesData(StringBuilder sb, + Collection<SequencingSampleData> sequencingSamplesData) { - StringBuilder sb = new StringBuilder(); - appendDataSetsInfo(sb, emailData.getDataSets()); - return null; + for (SequencingSampleData sequencingSampleData : sequencingSamplesData) + { + appendln(sb, SECTION_SEPARATOR_LINE); + appendln(sb, SUBSECTION_SEPARATOR_LINE); + // heading of section depends on whether sequencing sample already existed + String sectionHeading; + final String sequencingSampleCode = + sequencingSampleData.getSequencingSample().getCode(); + final int flowLaneSamplesSize = sequencingSampleData.getFlowLaneSamples().size(); + if (sequencingSampleData.isNewlyTracked()) + { + String headingSuffix = + flowLaneSamplesSize == 0 ? "" : String.format( + " and %d connected Flow Lane sample(s).", flowLaneSamplesSize); + sectionHeading = + String.format("Tracked creation of Sequencing sample '%s'%s.", + sequencingSampleCode, headingSuffix); + } else + { + sectionHeading = + String.format("Tracked creation of %d Flow Lane sample(s) " + + "connected with Sequencing sample '%s'.", + flowLaneSamplesSize, sequencingSampleCode); + } + appendln(sb, sectionHeading); + appendln(sb, SUBSECTION_SEPARATOR_LINE); + + // append Sequencing sample details and then Flow Lane samples in subsections + appendSampleDetails(sb, "Sequencing", sequencingSampleData.getSequencingSample()); + appendln(sb, SUBSECTION_SEPARATOR_LINE); + for (Sample flowLaneSample : sequencingSampleData.getFlowLaneSamples()) + { + appendSampleDetails(sb, "Flow Lane", flowLaneSample); + appendln(sb, SUBSECTION_SEPARATOR_LINE); + } + } + } + + private static void appendSampleDetails(StringBuilder sb, String sampleTypeLabel, + Sample sample) + { + appendln(sb, String.format("%s sample '%s' details", sampleTypeLabel, sample.getCode())); + + // basic sample info + appendAttribute(sb, PERMLINK_LABEL, sample.getPermlink()); + appendAttribute(sb, "Identifier", sample.getIdentifier()); + appendNewline(sb); + + // sample properties + appendln(sb, "Filled sample properties:"); + appendProperties(sb, sample.getProperties()); } - private static void appendDataSetsInfo(StringBuilder sb, List<ExternalData> dataSets) + private static void appendDataSetsData(StringBuilder sb, List<ExternalData> dataSets) { appendln(sb, SECTION_SEPARATOR_LINE); appendln(sb, SUBSECTION_SEPARATOR_LINE); appendln(sb, String.format( - "Tracked creation of %s data set(s) connected with Flow Lane samples.", + "Tracked creation of %d data set(s) connected with Flow Lane samples.", dataSets.size())); appendln(sb, SUBSECTION_SEPARATOR_LINE); for (ExternalData dataSet : dataSets) { - appendDataSetInfo(sb, dataSet); + appendDataSetDetails(sb, dataSet); appendln(sb, SUBSECTION_SEPARATOR_LINE); } } - private static void appendDataSetInfo(StringBuilder sb, ExternalData dataSet) + private static void appendDataSetDetails(StringBuilder sb, ExternalData dataSet) { + appendln(sb, String.format("Data set '%s' details", dataSet.getCode())); + // basic data set info appendAttribute(sb, PERMLINK_LABEL, dataSet.getPermlink()); appendNewline(sb); @@ -142,21 +209,22 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat .getCode(), sequencingSample.getPermlink())); // data set properties - - // no information about assigned properties - cannot put information about empty - // List<DataSetTypePropertyType> assignedProperties = - // dataSet.getDataSetType().getAssignedPropertyTypes(); - for (IEntityProperty property : dataSet.getProperties()) - { - appendProperty(sb, property); - } + appendln(sb, "Filled data set properties:"); + appendProperties(sb, dataSet.getProperties()); } - private static void appendProperty(StringBuilder sb, IEntityProperty property) + // NOTE: Information about properties assigned to entity type are not loaded. + // If it would be available we could append information about all properties assigned + // to entity type, not only about properties filled for specific entity. Additionally + // we could group entities by in sections. + private static void appendProperties(StringBuilder sb, List<IEntityProperty> properties) { - final String label = property.getPropertyType().getLabel(); - final String value = property.getValue(); - appendAttribute(sb, label, value); + for (IEntityProperty property : properties) + { + final String label = property.getPropertyType().getLabel(); + final String value = property.getValue(); + appendAttribute(sb, label, value); + } } private static void appendAttribute(StringBuilder sb, String name, String value) @@ -175,6 +243,13 @@ public class EntityTrackingEmailGenerator implements IEntityTrackingEmailGenerat sb.append(NEW_LINE); } + private static String createSeparatorLine(char separatorChar) + { + char[] line = new char[SEPARATOR_LINE_WIDTH]; + Arrays.fill(line, separatorChar); + return new String(line); + } + } } -- GitLab