Mercurial > dive4elements > river
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( |