annotate flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeWriter.java @ 2089:0da8874bd378

Added initial state to map artifact to be able to advance and step back. The map artifact overrides describe() to have the complete UI information in the describe response document. flys-artifacts/trunk@3613 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 06 Jan 2012 12:02:10 +0000
parents ca6ccf722c24
children 22732713c54d
rev   line source
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.collections;
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
1639
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
3 import java.util.ArrayList;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
4 import java.util.List;
1810
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
5 import java.util.HashMap;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6 import java.util.Map;
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8 import org.apache.log4j.Logger;
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
9
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
10 import de.intevation.artifacts.ArtifactDatabase;
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
11 import de.intevation.artifacts.ArtifactDatabaseException;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import de.intevation.artifactdatabase.state.Facet;
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 import de.intevation.artifactdatabase.state.Output;
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
16 import de.intevation.flys.artifacts.FLYSArtifact;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17 import de.intevation.flys.artifacts.model.ManagedFacet;
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
19 /**
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
20 * Create attribute- element of describe document of an ArtifactCollection.
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
21 * The attribute-element contains the merged output of all outputmodes and
1780
b503d92dd709 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1709
diff changeset
22 * facets that are part of the collection.
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
23 */
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 public class AttributeWriter {
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
26 /** ArtifactDatabase used to fetch Artifacts. */
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
27 protected ArtifactDatabase db = null;
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
28
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29 protected Map<String, Output> oldAttr;
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
30
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31 protected Map<String, Output> newAttr;
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
33 /** List of already seen facets. */
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
34 protected List<Facet> oldFacets;
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
35
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
36 /** List of "new" facets. */
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
37 protected List<Facet> newFacets;
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
38
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
39 /**
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
40 * "Compatibility matrix", mapws list of facet names to output names.
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
41 * Any facet that is not found in the list for a specific output will
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
42 * not be added to the resulting document.
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
43 */
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
44 protected Map<String, List<String>> compatibilities;
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
45
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
46
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
47 /** The result of the <i>write()</i> operation.*/
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
48 protected CollectionAttribute attribute;
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
49
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
50
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51 private static Logger logger = Logger.getLogger(AttributeWriter.class);
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
54 /**
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
55 * Create a AttributeWriter.
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
56 * Attributes not present in newAttr will not be included in the document.
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
57 * @param db Database to fetch artifacts.
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
58 * @param oldAttr "Old" (possibly user-changed) outputs.
1780
b503d92dd709 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1709
diff changeset
59 * @param newAttr "New" (eventually re-read in its original, unchanged
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
60 * form) outputs.
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
61 */
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62 public AttributeWriter(
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
63 ArtifactDatabase db,
1993
85132c9edd64 Make reuse of the old CollectionAttribute during the describe() operation of FLYSArtifactCollection - remove the old facets only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1984
diff changeset
64 CollectionAttribute attribute,
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 Map<String, Output> oldAttr,
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
66 List<Facet> oldFacets,
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
67 Map<String, Output> newAttr,
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
68 List<Facet> newFacets,
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
69 Map<String, List<String>> matrix)
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
70 {
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
71 this.db = db;
1993
85132c9edd64 Make reuse of the old CollectionAttribute during the describe() operation of FLYSArtifactCollection - remove the old facets only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1984
diff changeset
72 this.attribute = attribute;
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
73 this.oldAttr = oldAttr;
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
74 this.newAttr = newAttr;
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
75 this.oldFacets = oldFacets;
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
76 this.newFacets = newFacets;
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
77 this.compatibilities = matrix;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
78 }
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
79
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80
1628
16c74ca3586e Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1171
diff changeset
81 /**
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
82 * Create document by merging outputs given in
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
83 * constructor.
1780
b503d92dd709 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1709
diff changeset
84 *
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
85 * The "new" set rules about existance of attributes, so anything not
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
86 * present in it will not be included in the resulting document.
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
87 * The "old" set rules about the content of attributes (as user changes
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
88 * are recorded here and not in the new set).
1780
b503d92dd709 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1709
diff changeset
89 *
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
90 * @return document with merged outputs as described.
1628
16c74ca3586e Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1171
diff changeset
91 */
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
92 protected CollectionAttribute write() {
1995
f114c0d55d19 Little optimisation when writing CollectionAttributes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1993
diff changeset
93 for (Map.Entry<String, Output> entry: newAttr.entrySet()) {
f114c0d55d19 Little optimisation when writing CollectionAttributes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1993
diff changeset
94 String outName = entry.getKey();
f114c0d55d19 Little optimisation when writing CollectionAttributes
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1993
diff changeset
95 Output a = entry.getValue();
1996
c6432e8ea31e Bugfix: add new Outputs during merge process in AttributeWriter.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1995
diff changeset
96
c6432e8ea31e Bugfix: add new Outputs during merge process in AttributeWriter.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1995
diff changeset
97 Output exists = attribute.getOutput(outName);
c6432e8ea31e Bugfix: add new Outputs during merge process in AttributeWriter.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1995
diff changeset
98 if (exists == null) {
c6432e8ea31e Bugfix: add new Outputs during merge process in AttributeWriter.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1995
diff changeset
99 attribute.addOutput(outName, a);
c6432e8ea31e Bugfix: add new Outputs during merge process in AttributeWriter.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1995
diff changeset
100 }
c6432e8ea31e Bugfix: add new Outputs during merge process in AttributeWriter.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1995
diff changeset
101
1993
85132c9edd64 Make reuse of the old CollectionAttribute during the describe() operation of FLYSArtifactCollection - remove the old facets only.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1984
diff changeset
102 attribute.clearFacets(outName);
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
103 writeOutput(a.getName(), newFacets, oldFacets);
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
104 }
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
105
2079
ca6ccf722c24 #447 removed empty Outputs from Collection's attribute.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1996
diff changeset
106 // THIS CALL IS ABSOLUTELY NECESSARY!
ca6ccf722c24 #447 removed empty Outputs from Collection's attribute.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1996
diff changeset
107 attribute.cleanEmptyOutputs();
ca6ccf722c24 #447 removed empty Outputs from Collection's attribute.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1996
diff changeset
108
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
109 return attribute;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
110 }
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111
1634
cc47828a1390 Added documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1628
diff changeset
112
1628
16c74ca3586e Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1171
diff changeset
113 /**
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
114 * @param outputName the "new" outputs name
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
115 * @param newOutFacets Facets of the new outputs
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
116 * @param oldOutFacets Facets of the old outputs (can be null)
1628
16c74ca3586e Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1171
diff changeset
117 */
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
118 protected void writeOutput(
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
119 String outputName,
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
120 List<Facet> newOutFacets,
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
121 List<Facet> oldOutFacets
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
122 ) {
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
123 List<String> compatFacets = this.compatibilities.get(outputName);
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
124 try {
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
125 writeFacets(outputName, newOutFacets, oldOutFacets, compatFacets);
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
126 }
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
127 catch (ArtifactDatabaseException ade) {
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
128 logger.error(ade, ade);
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
129 }
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
130 }
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
131
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
132
1628
16c74ca3586e Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1171
diff changeset
133 /**
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
134 * @param newFacets the new facets
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
135 * @param oldFacets the old facets
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
136 * @param compatibleFacets List of facets to accept
1831
490ab097f58c Prevent empty output-nodes in flyscollections attributes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1810
diff changeset
137 * @return true if any facets are written to the out.
1628
16c74ca3586e Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1171
diff changeset
138 */
1831
490ab097f58c Prevent empty output-nodes in flyscollections attributes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1810
diff changeset
139 protected boolean writeFacets(
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
140 String outputName,
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
141 List<Facet> newFacets,
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
142 List<Facet> oldFacets,
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
143 List<String> compatibleFacets)
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
144 throws ArtifactDatabaseException
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145 {
1788
d5d2bffb26ca Avoid NPE when compatibility matrix is empty for given output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1785
diff changeset
146 if (compatibleFacets == null) {
d5d2bffb26ca Avoid NPE when compatibility matrix is empty for given output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1785
diff changeset
147 logger.warn("No compatible facets, not generating out.");
1831
490ab097f58c Prevent empty output-nodes in flyscollections attributes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1810
diff changeset
148 return false;
1788
d5d2bffb26ca Avoid NPE when compatibility matrix is empty for given output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1785
diff changeset
149 }
d5d2bffb26ca Avoid NPE when compatibility matrix is empty for given output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1785
diff changeset
150
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
151 int num = newFacets.size();
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
152
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
153 // Add all new Facets either in their old state or (if really
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
154 // new) as they are.
1639
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
155 List<ManagedFacet> currentFacets = new ArrayList<ManagedFacet>();
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
156 List<ManagedFacet> genuinelyNewFacets = new ArrayList<ManagedFacet>();
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
157
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
158 for (int i = 0; i < num; i++) {
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
159 ManagedFacet facet = (ManagedFacet) newFacets.get(i);
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
160 if (!compatibleFacets.contains(facet.getName())) {
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
161 //logger.debug("Have incompatible facet, skip: " + facet.getName());
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
162 continue;
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
163 }
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
164 //else logger.debug("Have compatible facet: " + facet.getName());
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
165
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
166 ManagedFacet picked = pickFacet(facet, oldFacets);
1785
661dfad9910a Use compatibility matrix when creating collections output.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1780
diff changeset
167
1639
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
168 if (facet.equals(picked)) {
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
169 genuinelyNewFacets.add(picked);
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
170 }
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
171 else {
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
172 currentFacets.add(picked);
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
173 }
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
174 }
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
175
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
176 // With each genuinely new Facet, ask Artifact whether it comes to live
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
177 // in/activate.
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
178 for (ManagedFacet newMF: genuinelyNewFacets) {
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
179 FLYSArtifact flys = (FLYSArtifact) db.getRawArtifact(newMF.getArtifact());
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
180 newMF.setActive(flys.getInitialFacetActivity(
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
181 outputName,
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
182 newMF.getName(),
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
183 newMF.getIndex()));
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
184 }
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
185
1639
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
186 // For each genuinely new Facet check positional conflicts.
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
187 for (ManagedFacet newMF: genuinelyNewFacets) {
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
188 boolean conflicts = true;
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
189 // Loop until all conflicts resolved.
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
190 while (conflicts) {
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
191 conflicts = false;
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
192 for (ManagedFacet oldMF: currentFacets) {
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
193 if (newMF.getPosition() == oldMF.getPosition()) {
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
194 conflicts = true;
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
195 logger.debug("Positional conflict while merging " +
1780
b503d92dd709 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1709
diff changeset
196 "facets, pushing newest facet 1 up (" + newMF.getPosition() + ")");
1639
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
197 newMF.setPosition(newMF.getPosition() + 1);
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
198 break;
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
199 }
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
200 }
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
201 }
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
202 currentFacets.add(newMF);
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
203 }
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
204
1810
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
205 // Fill/correct "gaps" (e.g. position 1,2,5 are taken, after gap filling
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
206 // expect positions 1,2,3 [5->3])
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
207 // Preparations to be able to detect gaps.
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
208 Map<Integer, ManagedFacet> mfmap = new HashMap<Integer, ManagedFacet>();
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
209 int max = 0;
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
210 for (ManagedFacet mf: currentFacets) {
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
211 int pos = mf.getPosition();
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
212 mfmap.put(Integer.valueOf(pos), mf);
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
213 if (pos > max) max = pos;
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
214 }
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
215
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
216 // Finally do gap correction.
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
217 if (max != currentFacets.size()) {
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
218 int gap = 0;
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
219 for (int i = 1; i <= max; i++) {
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
220 ManagedFacet mf = mfmap.get(Integer.valueOf(i));
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
221 if (mf == null) {
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
222 gap++;
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
223 continue;
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
224 }
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
225 mf.setPosition(mf.getPosition() - gap);
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
226 }
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
227 }
193a916d1ab5 Pass output name to artifacts getInitialFacetActivity, prevent gaps in collection attributes outputs facets positions.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1788
diff changeset
228
1639
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
229 // Now add all facets.
12235a2ace21 Add positional-conflict-awareness when merging Facets in attribute
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1635
diff changeset
230 for (ManagedFacet oldMF: currentFacets) {
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
231 attribute.addFacet(outputName, oldMF);
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
232 }
1831
490ab097f58c Prevent empty output-nodes in flyscollections attributes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1810
diff changeset
233
490ab097f58c Prevent empty output-nodes in flyscollections attributes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1810
diff changeset
234 return currentFacets.size() > 0;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
235 }
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
236
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
237
1628
16c74ca3586e Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1171
diff changeset
238 /**
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
239 * Returns the facet to be added to Document.
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
240 * Return the new facet only if the "same" facet was not present before.
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
241 * Return the "old" facet otherwise (user-defined information sticks
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
242 * to it).
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
243 * @param facet the new facet.
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
244 * @param oldFacets the old facets, new facet is compared against each of
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
245 * these.
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
246 * @return facet if genuinely new, matching old facet otherwise.
1628
16c74ca3586e Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1171
diff changeset
247 */
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
248 protected ManagedFacet pickFacet(ManagedFacet facet, List<Facet> oldFacets)
1709
f643ea084213 Allow simple codepaths to have Facets initially being 'inactive' (wrt rendering).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1639
diff changeset
249 {
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
250 if (oldFacets == null) {
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
251 logger.debug("No old facets to compare a new to found.");
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
252 return facet;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
253 }
1976
0b466bd4ab24 Introduced a CollectionAttribute class that stores the information provided by the Collection's attribute document.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1831
diff changeset
254
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
255 String hash = facet.getName() + facet.getIndex() + facet.getArtifact();
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
256
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
257 // Compare "new" facet with all old facets.
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
258 // Take oldFacet if that facet was already present (otherwise
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
259 // information is lost, the new one otherwise.
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
260 for (Facet oFacet: oldFacets) {
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
261 ManagedFacet oldFacet = (ManagedFacet) oFacet;
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
262 String oldHash = oldFacet.getName()
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
263 + oldFacet.getIndex()
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
264 + oldFacet.getArtifact();
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
265 if (hash.equals(oldHash)) {
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
266 return oldFacet;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
267 }
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
268 }
1635
1b5204203e18 Minor refactoring, documentation.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1634
diff changeset
269 return facet;
346
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
270 }
16161de47662 The Attributes of a collection are written into its DESCRIBE now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
271 }
705
853dceead0f4 Only generate facets when needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 694
diff changeset
272 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org