diff artifacts/src/main/java/org/dive4elements/river/exports/AbstractChartGenerator.java @ 9311:7c7f73e5e01e

Moved chart metadata line to top of chart. Minor cleanup.
author gernotbelger
date Thu, 26 Jul 2018 11:16:06 +0200
parents 4082b8429353
children 094ed9d1f2ad
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/AbstractChartGenerator.java	Thu Jul 26 11:08:11 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/AbstractChartGenerator.java	Thu Jul 26 11:16:06 2018 +0200
@@ -21,6 +21,8 @@
 import java.io.OutputStream;
 import java.text.DateFormat;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
@@ -30,10 +32,13 @@
 
 import javax.xml.xpath.XPathConstants;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
+import org.dive4elements.artifactdatabase.CollectionCallContext;
 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
 import org.dive4elements.artifactdatabase.state.Settings;
 import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.ArtifactCollection;
 import org.dive4elements.artifacts.ArtifactNamespaceContext;
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.artifacts.CallMeta;
@@ -67,6 +72,7 @@
 import org.jfree.data.Range;
 import org.jfree.data.general.Series;
 import org.jfree.data.xy.XYDataset;
+import org.jfree.ui.HorizontalAlignment;
 import org.jfree.ui.RectangleInsets;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -467,22 +473,72 @@
         }
     }
 
+    protected final void generateTitles(final JFreeChart chart) {
+        /* add metadata title before real title */
+        addMetadataSubtitle(chart);
+
+        /* add the real chart title, but as subtitle after the metadata */
+        final String chartTitle =  getChartTitle(this.context);
+        if (chartTitle != null) {
+            final TextTitle title = new TextTitle(chartTitle, JFreeChart.DEFAULT_TITLE_FONT);
+            chart.addSubtitle(title);
+        }
+
+        addSubtitles(this.context, chart);
+    }
+
+
     /**
      * Adds a metadata sub-title to the chart if it gets exported
      */
-    protected final void addMetadataSubtitle(final CallContext context, final JFreeChart chart) {
+    protected final void addMetadataSubtitle(final JFreeChart chart) {
         if ((!isExport() || !isExportMetadata()))
             return;
 
+        final Collection<String> metadata = buildMetadata();
+        final String text = StringUtils.join(metadata, " - ");
+
+        /** The default font. */
+        final Font titleFont = new Font("SansSerif", Font.ITALIC, 10);
+
+        final TextTitle subtitle = new TextTitle(text, titleFont);
+        subtitle.setHorizontalAlignment(HorizontalAlignment.LEFT);
+        subtitle.setMargin(new RectangleInsets(10,10,10,10));
+
+        chart.addSubtitle(subtitle);
+    }
+
+    private Collection<String> buildMetadata() {
+
+        final CallMeta meta = this.context.getMeta();
+
+        if (!(this.context instanceof CollectionCallContext)) {
+            /* should never happen */
+            return Collections.emptyList();
+        }
+
+        final CollectionCallContext ccc = (CollectionCallContext) this.context;
+        final ArtifactCollection collection = ccc.getCollection();
+
+        final List<String> subtitles = new ArrayList<>();
+
+        /* version */
         final String version = FLYS.VERSION;
-        final String user = CalculationUtils.findArtifactUser(context, getArtifact());
-        final Locale locale = Resources.getLocale(context.getMeta());
+        subtitles.add(Resources.getMsg(meta, "chart.subtitle.metadata.version", "default", version));
+
+        /* user */
+        // REMARK: the use inside the collection is a fake user and hence we cant use it here.
+        // final User user = collection.getUser();
+        final String userName = CalculationUtils.findArtifactUser(this.context, getArtifact());
+        subtitles.add(Resources.getMsg(meta, "chart.subtitle.metadata.user", "default", userName));
+
+        /* creation date */
+        final Locale locale = Resources.getLocale(meta);
         final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
         final String dateText = df.format(new Date());
+        subtitles.add(Resources.getMsg(meta, "chart.subtitle.metadata.creationdate", "default", dateText));
 
-        final String text = Resources.getMsg(context.getMeta(), "chart.subtitle.metadata", "default", version, user, dateText);
-
-        chart.addSubtitle(new TextTitle(text));
+        return subtitles;
     }
 
     private boolean isExportMetadata() {

http://dive4elements.wald.intevation.org