# HG changeset patch # User Ingo Weinzierl # Date 1324036077 0 # Node ID 02ce03329ef5e97002ae4d67a82ce7c358536f55 # Parent 3862c50d1cf38b278e0804999d453321ea0ccfa8 Some optimizations during out() operation of FLYSArtifactCollection. flys-artifacts/trunk@3437 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 3862c50d1cf3 -r 02ce03329ef5 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Dec 16 10:50:19 2011 +0000 +++ b/flys-artifacts/ChangeLog Fri Dec 16 11:47:57 2011 +0000 @@ -1,3 +1,10 @@ +2011-12-16 Ingo Weinzierl + + * src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java: + Some optimizations during out() operation - the CollectionAttribute is + parsed a single time now (*i guess*). This code really needs some + refactoring! + 2011-12-16 Ingo Weinzierl * src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java: diff -r 3862c50d1cf3 -r 02ce03329ef5 flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java --- a/flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java Fri Dec 16 10:50:19 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/collections/FLYSArtifactCollection.java Fri Dec 16 11:47:57 2011 +0000 @@ -228,7 +228,8 @@ if (settings == null) { log.debug("No Settings set for Output '" + outName + "'."); - output.setSettings(createInitialOutputSettings(cc, outName)); + output.setSettings( + createInitialOutputSettings(cc, attribute, outName)); modified = true; } @@ -241,18 +242,32 @@ /** * This method uses the the OutGenerator for the specified Output * out to create an initial Settings object. + * + * @param cc The CallContext object. + * @param attr The CollectionAttribute. + * @param out The name of the output. + * + * @return a default Settings object for the specified Output. */ - protected Settings createInitialOutputSettings(CallContext cc, String out) { + protected Settings createInitialOutputSettings( + CallContext cc, + CollectionAttribute attr, + String out + ) { OutGenerator outGen = getOutGenerator(cc, out, null); + if (outGen == null) { + return null; + } + // XXX NOTE: the outGen is not able to process its generate() operation, // because it has no OutputStream set! outGen.init(XMLUtils.newDocument(), null, cc); prepareMasterArtifact(outGen, cc); try { - Document attr = getAttribute(cc, out); - doOut(outGen, out, out, attr, cc); + Document outAttr = getAttribute(cc, attr, out); + doOut(outGen, out, out, outAttr, cc); } catch (ArtifactDatabaseException adbe) { log.error(adbe, adbe); @@ -305,11 +320,18 @@ return; } + Document oldAttrs = getAttribute(); + AttributeParser parser = new AttributeParser(oldAttrs); + CollectionAttribute cAttr = parser.getCollectionAttribute(); + + Output output = cAttr.getOutput(name); + Settings settings = output.getSettings(); + generator.init(format, out, context); prepareMasterArtifact(generator, context); try { - Document attr = getAttribute(context, name); + Document attr = getAttribute(context, cAttr, name); doOut(generator, name, subtype, attr, context); generator.generate(); } @@ -526,19 +548,18 @@ * Returns the "attribute" (part of description document) for a specific * output type. * + * @param context The CallContext object. + * @param cAttr The CollectionAttribute. * @param output The name of the desired output type. * * @return the attribute for the desired output type. */ - protected Document getAttribute(CallContext context, String output) + protected Document getAttribute( + CallContext context, + CollectionAttribute cAttr, + String output) throws ArtifactDatabaseException { - CollectionAttribute cAttr = buildOutAttributes( - context.getDatabase(), - context, - new AttributeParser(getAttribute()), - getArtifactUUIDs(context)); - Document attr = cAttr.toXML(); Node out = (Node) XMLUtils.xpath( @@ -896,6 +917,8 @@ String name, String type) { + log.debug("Search OutGenerator for Output '" + name + "'"); + FLYSContext flysContext = context instanceof FLYSContext ? (FLYSContext) context : (FLYSContext) context.globalContext();