diff flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeWriter.java @ 1709:f643ea084213

Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering). flys-artifacts/trunk@2969 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Fri, 14 Oct 2011 08:52:44 +0000
parents 12235a2ace21
children b503d92dd709
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeWriter.java	Thu Oct 13 12:42:31 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeWriter.java	Fri Oct 14 08:52:44 2011 +0000
@@ -10,6 +10,8 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+import de.intevation.artifacts.ArtifactDatabase;
+import de.intevation.artifacts.ArtifactDatabaseException;
 import de.intevation.artifacts.ArtifactNamespaceContext;
 
 import de.intevation.artifactdatabase.state.Facet;
@@ -18,6 +20,7 @@
 import de.intevation.artifacts.common.utils.XMLUtils;
 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
 
+import de.intevation.flys.artifacts.FLYSArtifact;
 import de.intevation.flys.artifacts.model.ManagedFacet;
 
 /**
@@ -27,7 +30,11 @@
  */
 public class AttributeWriter {
 
+    /** ArtifactDatabase used to fetch Artifacts. */
+    protected ArtifactDatabase db = null;
+
     protected Map<String, Output> oldAttr;
+
     protected Map<String, Output> newAttr;
 
     private static Logger logger = Logger.getLogger(AttributeWriter.class);
@@ -36,14 +43,17 @@
     /**
      * Create a AttributeWriter.
      * Attributes not present in newAttr will not be included in the document.
+     * @param db      Database to fetch artifacts.
      * @param oldAttr "Old" (possibly user-changed) outputs.
      * @param newAttr "New" (eventually re-read in its original, unchagnged
      *                form) outputs.
      */
     public AttributeWriter(
+        ArtifactDatabase    db,
         Map<String, Output> oldAttr,
         Map<String, Output> newAttr)
     {
+        this.db      = db;
         this.oldAttr = oldAttr;
         this.newAttr = newAttr;
     }
@@ -109,7 +119,13 @@
             facetsB = b.getFacets();
         }
 
-        writeFacets(doc, cr, output, facetsA, facetsB);
+
+        try {
+            writeFacets(doc, cr, output, facetsA, facetsB);
+        }
+        catch (ArtifactDatabaseException ade) {
+            logger.error(ade, ade);
+        }
     }
 
 
@@ -125,6 +141,7 @@
         Element        output,
         List<Facet>    newFacets,
         List<Facet>    oldFacets)
+    throws ArtifactDatabaseException
     {
         int num = newFacets.size();
 
@@ -144,6 +161,15 @@
             }
         }
 
+        // With each genuinely new Facet, ask Artifact whether it comes to live
+        // in/activate.
+        for (ManagedFacet newMF: genuinelyNewFacets) {
+            FLYSArtifact flys = (FLYSArtifact) db.getRawArtifact(newMF.getArtifact());
+            newMF.setActive(flys.getInitialFacetActivity(
+                newMF.getName(),
+                newMF.getIndex()));
+        }
+        
         // For each genuinely new Facet check positional conflicts.
         for (ManagedFacet newMF: genuinelyNewFacets) {
             boolean conflicts = true;
@@ -184,7 +210,8 @@
      * @return facet if genuinely new, matching old facet otherwise.
      */
     protected ManagedFacet pickFacet(ManagedFacet facet,
-         List<Facet> oldFacets) {
+        List<Facet> oldFacets)
+    {
         if (oldFacets == null) {
             logger.debug("No old facets to compare a new to found.");
             return facet;

http://dive4elements.wald.intevation.org