X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fproducer%2Freader%2FDefaultProducerNodeBuilders.java;h=b458fed14815e49544b462a0d51f874ffe9f63a1;hb=ca12a9f67370f53d6ba44ea6ee68eb67bd168c54;hp=625240256269720e5eaacdfdcc154e7fc6122050;hpb=3da84ce0196319b33211328515e3ca12b422c95c;p=mir.git diff --git a/source/mir/producer/reader/DefaultProducerNodeBuilders.java b/source/mir/producer/reader/DefaultProducerNodeBuilders.java index 62524025..b458fed1 100755 --- a/source/mir/producer/reader/DefaultProducerNodeBuilders.java +++ b/source/mir/producer/reader/DefaultProducerNodeBuilders.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001, 2002 The Mir-coders group + * Copyright (C) 2001, 2002 The Mir-coders group * * This file is part of Mir. * @@ -18,47 +18,45 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * In addition, as a special exception, The Mir-coders gives permission to link - * the code of this program with the com.oreilly.servlet library, any library - * licensed under the Apache Software License, The Sun (tm) Java Advanced - * Imaging library (JAI), The Sun JIMI library (or with modified versions of - * the above that use the same license as the above), and distribute linked - * combinations including the two. You must obey the GNU General Public - * License in all respects for all of the code used other than the above - * mentioned libraries. If you modify this file, you may extend this exception - * to your version of the file, but you are not obligated to do so. If you do - * not wish to do so, delete this exception statement from your version. + * the code of this program with any library licensed under the Apache Software License, + * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library + * (or with modified versions of the above that use the same license as the above), + * and distribute linked combinations including the two. You must obey the + * GNU General Public License in all respects for all of the code used other than + * the above mentioned libraries. If you modify this file, you may extend this + * exception to your version of the file, but you are not obligated to do so. + * If you do not wish to do so, delete this exception statement from your version. */ - package mir.producer.reader; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -import mir.entity.adapter.EntityAdapterModel; -import mir.generator.Generator; -import mir.generator.WriterEngine; -import mir.log.LoggerWrapper; -import mir.producer.ConditionalProducerNode; -import mir.producer.DirCopyingProducerNode; -import mir.producer.EntityBatchingProducerNode; -import mir.producer.EntityEnumeratingProducerNode; -import mir.producer.EntityListProducerNode; -import mir.producer.EvaluatedAssignmentProducerNode; -import mir.producer.ExpandedAssignmentProducerNode; -import mir.producer.FileDateSettingProducerNode; -import mir.producer.FileDeletingProducerNode; -import mir.producer.GeneratingProducerNode; -import mir.producer.LoggingProducerNode; -import mir.producer.LoopProducerNode; -import mir.producer.ProducerNode; -import mir.producer.RSSProducerNode; -import mir.producer.ResourceBundleProducerNode; -import mir.producer.ScriptCallingProducerNode; -import mir.util.XMLReader; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import mir.entity.adapter.EntityAdapterModel; +import mir.generator.Generator; +import mir.generator.WriterEngine; +import mir.log.LoggerWrapper; +import mir.producer.ConditionalProducerNode; +import mir.producer.DirCopyingProducerNode; +import mir.producer.EntityBatchingProducerNode; +import mir.producer.EntityEnumeratingProducerNode; +import mir.producer.EntityListProducerNode; +import mir.producer.EvaluatedAssignmentProducerNode; +import mir.producer.ExpandedAssignmentProducerNode; +import mir.producer.FileDateSettingProducerNode; +import mir.producer.FileDeletingProducerNode; +import mir.producer.GeneratingProducerNode; +import mir.producer.LoggingProducerNode; +import mir.producer.LoopProducerNode; +import mir.producer.ProducerNode; +import mir.producer.*; +import mir.producer.ResourceBundleProducerNode; +import mir.producer.ScriptCallingProducerNode; +import mir.util.XMLReader; import mir.util.XMLReaderTool; public class DefaultProducerNodeBuilders { @@ -80,6 +78,9 @@ public class DefaultProducerNodeBuilders { aBuilderLibrary.registerBuilder("While", LoopProducerNodeBuilder.class); aBuilderLibrary.registerBuilder("RSS", RSSProducerNodeBuilder.class); + aBuilderLibrary.registerBuilder("RDFAggregate", RDFAggregatorProducerNodeBuilder.class); + + aBuilderLibrary.registerBuilder("FreeQuery", FreeQueryProducerNodeBuilder.class); aBuilderLibrary.registerFactory("Enumerate", new EnumeratingProducerNodeBuilder.factory(aModel)); aBuilderLibrary.registerFactory("List", new ListProducerNodeBuilder.factory(aModel)); @@ -368,6 +369,56 @@ public class DefaultProducerNodeBuilders { //////////////////////////////////////////////////////////////////////////////// + public static class FreeQueryProducerNodeBuilder extends AbstractProducerNodeBuilder { + private final static String FREEQUERY_KEY_ATTRIBUTE = KEY_ATTRIBUTE; + private final static String FREEQUERY_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE; + private final static String FREEQUERY_QUERY_ATTRIBUTE = "query"; + private final static String FREEQUERY_TYPE_ATTRIBUTE = "type"; + private final static String[] FREEQUERY_REQUIRED_ATTRIBUTES = { KEY_ATTRIBUTE, FREEQUERY_QUERY_ATTRIBUTE }; + private final static String[] FREEQUERY_OPTIONAL_ATTRIBUTES = { LIMIT_ATTRIBUTE, FREEQUERY_TYPE_ATTRIBUTE }; + private final static String[] FREEQUERY_SUBNODES = {}; + + private String key; + private String query; + private String limit; + private int type; + + public FreeQueryProducerNodeBuilder() { + super(FREEQUERY_SUBNODES); + } + + public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc { + String typeString; + + XMLReaderTool.checkAttributes(anAttributes, FREEQUERY_REQUIRED_ATTRIBUTES, FREEQUERY_OPTIONAL_ATTRIBUTES); + + key = (String) anAttributes.get(FREEQUERY_KEY_ATTRIBUTE); + query = (String) anAttributes.get(FREEQUERY_QUERY_ATTRIBUTE); + limit = (String) anAttributes.get(FREEQUERY_LIMIT_ATTRIBUTE); + + if (anAttributes.containsKey(FREEQUERY_TYPE_ATTRIBUTE)) { + typeString = ((String) anAttributes.get( FREEQUERY_TYPE_ATTRIBUTE )); + + if (typeString.toLowerCase().equals("set")) + type = FreeQueryProducerNode.QUERY_TYPE_SET; + else if (typeString.toLowerCase().equals("row")) + type = FreeQueryProducerNode.QUERY_TYPE_ROW; + else if (typeString.toLowerCase().equals("value")) + type = FreeQueryProducerNode.QUERY_TYPE_VALUE; + else + throw new ProducerConfigExc("unknown query type: " + typeString + " (allowed are set, row and value)"); + } + else + type = FreeQueryProducerNode.QUERY_TYPE_SET; + }; + + public ProducerNode constructNode() { + return new FreeQueryProducerNode(key, query, limit, type); + }; + } + +//////////////////////////////////////////////////////////////////////////////// + public static class ResourceBundleProducerNodeBuilder extends AbstractProducerNodeBuilder { private final static String RESOURCEBUNDLE_KEY_ATTRIBUTE = KEY_ATTRIBUTE; private final static String RESOURCEBUNDLE_BUNDLE_ATTRIBUTE = "bundle"; @@ -723,6 +774,41 @@ public class DefaultProducerNodeBuilders { //////////////////////////////////////////////////////////////////////////////// + public static class RDFAggregatorProducerNodeBuilder extends AbstractProducerNodeBuilder { + private final static String RDF_AGGREGATOR_KEY_ATTRIBUTE = KEY_ATTRIBUTE; + private final static String RDF_AGGREGATOR_SOURCE_ATTRIBUTE = "source"; + private final static String RDF_AGGREGATOR_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE; + private final static String RDF_AGGREGATOR_FILTER_ATTRIBUTE = "filter"; + + private final static String[] RDF_AGGREGATOR_REQUIRED_ATTRIBUTES = { RDF_AGGREGATOR_KEY_ATTRIBUTE, RDF_AGGREGATOR_SOURCE_ATTRIBUTE }; + private final static String[] RDF_AGGREGATOR_OPTIONAL_ATTRIBUTES = { RDF_AGGREGATOR_ORDER_ATTRIBUTE, RDF_AGGREGATOR_FILTER_ATTRIBUTE }; + private final static String[] RDF_AGGREGATOR_SUBNODES = { }; + + private String key; + private String source; + private String order; + private String filter; + + public RDFAggregatorProducerNodeBuilder() { + super(RDF_AGGREGATOR_SUBNODES); + } + + public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc { + XMLReaderTool.checkAttributes(anAttributes, RDF_AGGREGATOR_REQUIRED_ATTRIBUTES, RDF_AGGREGATOR_OPTIONAL_ATTRIBUTES); + + key = (String) anAttributes.get( RDF_AGGREGATOR_KEY_ATTRIBUTE ); + source = (String) anAttributes.get( RDF_AGGREGATOR_SOURCE_ATTRIBUTE ); + order = XMLReaderTool.getStringAttributeWithDefault(anAttributes, RDF_AGGREGATOR_SOURCE_ATTRIBUTE, ""); + filter = XMLReaderTool.getStringAttributeWithDefault(anAttributes, RDF_AGGREGATOR_FILTER_ATTRIBUTE, ""); + }; + + public ProducerNode constructNode() { + return new RDFAggregatorProducerNode(key, source, order, filter); + }; + } + +//////////////////////////////////////////////////////////////////////////////// + public static class ScriptedProducerParameterNodeBuilder implements ProducerNodeBuilder { private String parameterName; private String scriptedNodeName;