comparison flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java @ 1979:a7c437c9547e

Added a getSettings() operation to OutGenerator - FLYSArtifactCollection will now evaluate all available Outputs and create initial Settings using OutGenerators if the Settings for an Output is missing. flys-artifacts/trunk@3409 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 14 Dec 2011 10:20:56 +0000
parents 0b466bd4ab24
children 158b3aabda2c
comparison
equal deleted inserted replaced
1978:4c10a4cb978f 1979:a7c437c9547e
4 import java.io.OutputStream; 4 import java.io.OutputStream;
5 import java.util.ArrayList; 5 import java.util.ArrayList;
6 import java.util.HashMap; 6 import java.util.HashMap;
7 import java.util.List; 7 import java.util.List;
8 import java.util.Map; 8 import java.util.Map;
9 import java.util.Set;
9 10
10 import javax.xml.xpath.XPathConstants; 11 import javax.xml.xpath.XPathConstants;
11 12
12 import org.apache.log4j.Logger; 13 import org.apache.log4j.Logger;
13 14
28 29
29 import de.intevation.artifactdatabase.Backend; 30 import de.intevation.artifactdatabase.Backend;
30 import de.intevation.artifactdatabase.Backend.PersistentArtifact; 31 import de.intevation.artifactdatabase.Backend.PersistentArtifact;
31 import de.intevation.artifactdatabase.DefaultArtifactCollection; 32 import de.intevation.artifactdatabase.DefaultArtifactCollection;
32 import de.intevation.artifactdatabase.state.ArtifactAndFacet; 33 import de.intevation.artifactdatabase.state.ArtifactAndFacet;
34 import de.intevation.artifactdatabase.state.Output;
35 import de.intevation.artifactdatabase.state.Settings;
33 import de.intevation.artifactdatabase.state.StateEngine; 36 import de.intevation.artifactdatabase.state.StateEngine;
34 37
35 import de.intevation.flys.artifacts.context.FLYSContext; 38 import de.intevation.flys.artifacts.context.FLYSContext;
36 import de.intevation.flys.artifacts.FLYSArtifact; 39 import de.intevation.flys.artifacts.FLYSArtifact;
37 import de.intevation.flys.artifacts.model.ManagedFacet; 40 import de.intevation.flys.artifacts.model.ManagedFacet;
89 92
90 try { 93 try {
91 String[] aUUIDs = getArtifactUUIDs(context); 94 String[] aUUIDs = getArtifactUUIDs(context);
92 CollectionAttribute newAttr = mergeAttributes( 95 CollectionAttribute newAttr = mergeAttributes(
93 db, context, parser, aUUIDs); 96 db, context, parser, aUUIDs);
97
98 if (checkOutputSettings(newAttr, context)) {
99 saveCollectionAttribute(db, context, newAttr);
100 }
94 101
95 helper.setAttribute(newAttr); 102 helper.setAttribute(newAttr);
96 103
97 // Make it an empty array if null. 104 // Make it an empty array if null.
98 if (aUUIDs == null) { 105 if (aUUIDs == null) {
129 buildOutAttributes(db, context, oldParser, uuids); 136 buildOutAttributes(db, context, oldParser, uuids);
130 137
131 cAttribute.setLoadedRecommendations( 138 cAttribute.setLoadedRecommendations(
132 getLoadedRecommendations(oldParser.getAttributeDocument())); 139 getLoadedRecommendations(oldParser.getAttributeDocument()));
133 140
134 Document doc = cAttribute.toXML(); 141 saveCollectionAttribute(db, context, cAttribute);
142
143 return cAttribute;
144 }
145
146
147 /**
148 * @param db The ArtifactDatabase which is required to save the attribute
149 * into.
150 * @param attribute The CollectionAttribute that should be stored in the
151 * database.
152 *
153 * @return true, if the transaction was successful, otherwise false.
154 */
155 protected boolean saveCollectionAttribute(
156 ArtifactDatabase db,
157 CallContext context,
158 CollectionAttribute attribute
159 ) {
160 log.info("Save new CollectionAttribute into database.");
161
162 Document doc = attribute.toXML();
135 163
136 try { 164 try {
137 // Save the merged document into database. 165 // Save the merged document into database.
138 db.setCollectionAttribute(identifier(), context.getMeta(), doc); 166 db.setCollectionAttribute(identifier(), context.getMeta(), doc);
167
168 log.info("Saving CollectionAttribute was successful.");
169
170 return true;
139 } 171 }
140 catch (ArtifactDatabaseException adb) { 172 catch (ArtifactDatabaseException adb) {
141 log.error(adb, adb); 173 log.error(adb, adb);
142 } 174 }
143 175
144 return cAttribute; 176 return false;
145 } 177 }
146 178
147 179
148 /** 180 /**
149 * Merge the recommendations which have already been loaded from the old 181 * Merge the recommendations which have already been loaded from the old
157 XPATH_LOADED_RECOMMENDATIONS, 189 XPATH_LOADED_RECOMMENDATIONS,
158 XPathConstants.NODE, 190 XPathConstants.NODE,
159 ArtifactNamespaceContext.INSTANCE); 191 ArtifactNamespaceContext.INSTANCE);
160 192
161 return loadedRecoms; 193 return loadedRecoms;
194 }
195
196
197 /**
198 * Evaluates the Output settings. If an Output has no Settings set, the
199 * relevant OutGenerator is used to initialize a default Settings object.
200 *
201 * @param attribute The CollectionAttribute.
202 * @param cc The CallContext.
203 *
204 * @return true, if the CollectionAttribute was modified, otherwise false.
205 */
206 protected boolean checkOutputSettings(
207 CollectionAttribute attribute,
208 CallContext cc
209 ) {
210 boolean modified = false;
211
212 Map<String, Output> outputMap = attribute != null
213 ? attribute.getOutputs()
214 : null;
215
216 if (outputMap == null || outputMap.size() == 0) {
217 log.debug("No Output Settings check necessary.");
218 return modified;
219 }
220
221 Set<Map.Entry<String, Output>> entries = outputMap.entrySet();
222
223 for (Map.Entry<String, Output> entry: entries) {
224 String outName = entry.getKey();
225 Output output = entry.getValue();
226
227 Settings settings = output.getSettings();
228
229 if (settings == null) {
230 log.debug("No Settings set for Output '" + outName + "'.");
231 output.setSettings(createInitialOutputSettings(cc, outName));
232
233 modified = true;
234 }
235 }
236
237 return modified;
238 }
239
240
241 /**
242 * This method uses the the OutGenerator for the specified Output
243 * <i>out</i> to create an initial Settings object.
244 */
245 protected Settings createInitialOutputSettings(CallContext cc, String out) {
246 OutGenerator outGen = getOutGenerator(cc, out, null);
247
248 // TODO simulate a real out() process and return finally the Settings
249 // object retrieved by the OutGenerator.
250
251 return outGen.getSettings();
162 } 252 }
163 253
164 254
165 @Override 255 @Override
166 public void out( 256 public void out(

http://dive4elements.wald.intevation.org