X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fproducer%2Freader%2FDefaultProducerNodeBuilders.java;h=f7fe8a3fe8544c747704b7e3d7838b97b7a84bfa;hb=55d0f77df79a52d553e93800d730aed1c7f0d485;hp=a7005c685b2d1c2c7ea7d87e265dbc67c23cebb5;hpb=516cd5317087a39ad8d0f26e1d49960894bcab89;p=mir.git diff --git a/source/mir/producer/reader/DefaultProducerNodeBuilders.java b/source/mir/producer/reader/DefaultProducerNodeBuilders.java index a7005c68..f7fe8a3f 100755 --- a/source/mir/producer/reader/DefaultProducerNodeBuilders.java +++ b/source/mir/producer/reader/DefaultProducerNodeBuilders.java @@ -33,6 +33,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Set; @@ -43,19 +44,25 @@ import mir.log.LoggerWrapper; import mir.producer.ConditionalProducerNode; import mir.producer.DirCopyingProducerNode; import mir.producer.EntityBatchingProducerNode; +import mir.producer.EntityDeletingProducerNode; import mir.producer.EntityEnumeratingProducerNode; import mir.producer.EntityListProducerNode; +import mir.producer.EntityModifyingProducerNode; import mir.producer.EvaluatedAssignmentProducerNode; -import mir.producer.*; +import mir.producer.ExpandedAssignmentProducerNode; import mir.producer.FileDateSettingProducerNode; import mir.producer.FileDeletingProducerNode; +import mir.producer.FreeQueryProducerNode; import mir.producer.GeneratingProducerNode; +import mir.producer.ListEnumeratingProducerNode; import mir.producer.LoggingProducerNode; import mir.producer.LoopProducerNode; import mir.producer.ProducerNode; -import mir.producer.*; +import mir.producer.RDFAggregatorProducerNode; +import mir.producer.RSSProducerNode; import mir.producer.ResourceBundleProducerNode; import mir.producer.ScriptCallingProducerNode; +import mir.util.StringRoutines; import mir.util.XMLReader; import mir.util.XMLReaderTool; @@ -88,6 +95,7 @@ public class DefaultProducerNodeBuilders { aBuilderLibrary.registerFactory("UpdateEntity", new UpdateEntityProducerNodeBuilder.factory(aModel)); aBuilderLibrary.registerFactory("CreateEntity", new CreateEntityProducerNodeBuilder.factory(aModel)); + aBuilderLibrary.registerFactory("DeleteEntity", new DeleteEntityProducerNodeBuilder.factory(aModel)); aBuilderLibrary.registerFactory("Generate", new GeneratingProducerNodeBuilder.factory(aGeneratorLibrary, aWriterEngine)); @@ -193,14 +201,17 @@ public class DefaultProducerNodeBuilders { private final static String ENUMERATION_DEFAULT_SUBNODE = "default"; private final static String ENUMERATION_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE; private final static String ENUMERATION_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE; + private final static String ENUMERATION_EXTRATABLES_ATTRIBUTE = "extratables"; private final static String[] ENUMERATION_LIST_REQUIRED_ATTRIBUTES = { ENUMERATION_LIST_ATTRIBUTE, ENUMERATION_KEY_ATTRIBUTE }; private final static String[] ENUMERATION_LIST_OPTIONAL_ATTRIBUTES = { }; private final static String[] ENUMERATION_QUERY_REQUIRED_ATTRIBUTES = { ENUMERATION_DEFINITION_ATTRIBUTE, ENUMERATION_KEY_ATTRIBUTE }; - private final static String[] ENUMERATION_QUERY_OPTIONAL_ATTRIBUTES = { ENUMERATION_SELECTION_ATTRIBUTE, ENUMERATION_ORDER_ATTRIBUTE, ENUMERATION_LIMIT_ATTRIBUTE, ENUMERATION_SKIP_ATTRIBUTE}; + private final static String[] ENUMERATION_QUERY_OPTIONAL_ATTRIBUTES = { ENUMERATION_SELECTION_ATTRIBUTE, ENUMERATION_ORDER_ATTRIBUTE, ENUMERATION_LIMIT_ATTRIBUTE, ENUMERATION_SKIP_ATTRIBUTE,ENUMERATION_EXTRATABLES_ATTRIBUTE}; private final static String[] ENUMERATION_SUBNODES = {ENUMERATION_DEFAULT_SUBNODE}; private String key; private String definition; + private String mainTablePrefix; + private List extraTables; private String list; private String selection; private String order; @@ -233,11 +244,15 @@ public class DefaultProducerNodeBuilders { order = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, ENUMERATION_ORDER_ATTRIBUTE, ""); limit = (String) anAttributes.get(ENUMERATION_LIMIT_ATTRIBUTE); skip = (String) anAttributes.get(ENUMERATION_SKIP_ATTRIBUTE); + extraTables = StringRoutines.splitString(XMLReaderTool.getStringAttributeWithDefault(anAttributes, ENUMERATION_EXTRATABLES_ATTRIBUTE,"").trim(), ","); + List parts = StringRoutines.splitString(definition.trim()," "); + if (parts.size()>0) definition=(String)parts.get(0); + if (parts.size()>1) mainTablePrefix=(String)parts.get(1); }; public ProducerNode constructNode() { if (definition!=null) - return new EntityEnumeratingProducerNode(key, model, definition, selection, order, limit, skip, getSubNode(ENUMERATION_DEFAULT_SUBNODE )); + return new EntityEnumeratingProducerNode(key, model, mainTablePrefix, extraTables, definition, selection, order, limit, skip, getSubNode(ENUMERATION_DEFAULT_SUBNODE )); else return new ListEnumeratingProducerNode(key, list, getSubNode(ENUMERATION_DEFAULT_SUBNODE )); }; @@ -326,12 +341,12 @@ public class DefaultProducerNodeBuilders { public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc { key = (String) anAttributes.get(CREATEENTITY_KEY_ATTRIBUTE); + definition = (String) anAttributes.get(CREATEENTITY_DEFINITION_ATTRIBUTE); if (key == null) throw new XMLReader.XMLReaderExc("missing required attribute '" + CREATEENTITY_KEY_ATTRIBUTE + "'" ); if (definition == null) throw new XMLReader.XMLReaderExc("missing required attribute '" + CREATEENTITY_DEFINITION_ATTRIBUTE + "'" ); - definition = (String) anAttributes.get(CREATEENTITY_DEFINITION_ATTRIBUTE); fieldValues.putAll(anAttributes); fieldValues.remove(CREATEENTITY_KEY_ATTRIBUTE); @@ -390,16 +405,19 @@ public class DefaultProducerNodeBuilders { private final static String LIST_KEY_ATTRIBUTE = KEY_ATTRIBUTE; private final static String LIST_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE; private final static String LIST_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE; + private final static String LIST_EXTRATABLES_ATTRIBUTE = "extratables"; private final static String LIST_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE; private final static String LIST_DEFAULT_SUBNODE = "default"; private final static String LIST_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE; private final static String LIST_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE; private final static String[] LIST_REQUIRED_ATTRIBUTES = { LIST_KEY_ATTRIBUTE, LIST_DEFINITION_ATTRIBUTE }; - private final static String[] LIST_OPTIONAL_ATTRIBUTES = { LIST_SELECTION_ATTRIBUTE, LIST_ORDER_ATTRIBUTE, LIST_SKIP_ATTRIBUTE, LIST_LIMIT_ATTRIBUTE}; + private final static String[] LIST_OPTIONAL_ATTRIBUTES = { LIST_SELECTION_ATTRIBUTE, LIST_ORDER_ATTRIBUTE, LIST_SKIP_ATTRIBUTE, LIST_LIMIT_ATTRIBUTE,LIST_EXTRATABLES_ATTRIBUTE}; private final static String[] LIST_SUBNODES = {}; private String key; private String definition; + private String mainTablePrefix; + private List extraTables; private String selection; private String order; private String limit; @@ -421,10 +439,15 @@ public class DefaultProducerNodeBuilders { order = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, LIST_ORDER_ATTRIBUTE, ""); limit = (String) anAttributes.get(LIST_LIMIT_ATTRIBUTE); skip = (String) anAttributes.get(LIST_SKIP_ATTRIBUTE); + extraTables = StringRoutines.splitString(XMLReaderTool.getStringAttributeWithDefault(anAttributes, LIST_EXTRATABLES_ATTRIBUTE,"").trim(), ","); + List parts = StringRoutines.splitString(definition.trim()," "); + if (parts.size()>0) definition=(String)parts.get(0); + if (parts.size()>1) mainTablePrefix=(String)parts.get(1); + }; public ProducerNode constructNode() { - return new EntityListProducerNode(key, model, definition, selection, order, limit, skip, null ); + return new EntityListProducerNode(key, model, mainTablePrefix, extraTables, definition, selection, order, limit, skip, null ); }; public static class factory implements ProducerNodeBuilderFactory { @@ -442,6 +465,50 @@ public class DefaultProducerNodeBuilders { //////////////////////////////////////////////////////////////////////////////// + public static class DeleteEntityProducerNodeBuilder extends AbstractProducerNodeBuilder { + private final static String DELETEENTITY_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE; + private final static String DELETEENTITY_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE; + private final static String[] DELETEENTITY_REQUIRED_ATTRIBUTES = { DELETEENTITY_SELECTION_ATTRIBUTE, DELETEENTITY_DEFINITION_ATTRIBUTE }; + private final static String[] DELETEENTITY_OPTIONAL_ATTRIBUTES = { }; + private final static String[] DELETEENTITY_SUBNODES = {}; + + private String definition; + private String selection; + + private EntityAdapterModel model; + + public DeleteEntityProducerNodeBuilder(EntityAdapterModel aModel) { + super(DELETEENTITY_SUBNODES); + + model = aModel; + } + + public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc { + XMLReaderTool.checkAttributes(anAttributes, DELETEENTITY_REQUIRED_ATTRIBUTES, DELETEENTITY_OPTIONAL_ATTRIBUTES); + + definition = (String) anAttributes.get(DELETEENTITY_DEFINITION_ATTRIBUTE); + selection = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, DELETEENTITY_SELECTION_ATTRIBUTE, ""); + }; + + public ProducerNode constructNode() { + return new EntityDeletingProducerNode(model, definition, selection); + }; + + public static class factory implements ProducerNodeBuilderFactory { + private EntityAdapterModel model; + + public factory(EntityAdapterModel aModel) { + model = aModel; + } + + public ProducerNodeBuilder makeBuilder() { + return new DeleteEntityProducerNodeBuilder(model); + } + } + } + +//////////////////////////////////////////////////////////////////////////////// + public static class LoggingProducerNodeBuilder extends AbstractProducerNodeBuilder { private final static String LOG_MESSAGE_ATTRIBUTE = "message"; private final static String LOG_TYPE_ATTRIBUTE = "type"; @@ -525,6 +592,8 @@ public class DefaultProducerNodeBuilders { type = FreeQueryProducerNode.QUERY_TYPE_ROW; else if (typeString.toLowerCase().equals("value")) type = FreeQueryProducerNode.QUERY_TYPE_VALUE; + else if (typeString.toLowerCase().equals("update")) + type = FreeQueryProducerNode.QUERY_TYPE_UPDATE; else throw new ProducerConfigExc("unknown query type: " + typeString + " (allowed are set, row and value)"); } @@ -759,18 +828,19 @@ public class DefaultProducerNodeBuilders { private final static String BATCHER_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE; private final static String BATCHER_PROCESS_ATTRIBUTE = "process"; + private final static String BATCHER_EXTRATABLES_ATTRIBUTE = "extratables"; private final static String BATCHER_BATCH_SUBNODE = "batches"; private final static String BATCHER_BATCHLIST_SUBNODE = "batchlist"; private final static String[] BATCHER_REQUIRED_ATTRIBUTES = { BATCHER_DATAKEY_ATTRIBUTE, BATCHER_INFOKEY_ATTRIBUTE, BATCHER_DEFINITION_ATTRIBUTE, BATCHER_BATCHSIZE_ATTRIBUTE }; - private final static String[] BATCHER_OPTIONAL_ATTRIBUTES = { BATCHER_SELECTION_ATTRIBUTE, BATCHER_ORDER_ATTRIBUTE, BATCHER_MINBATCHSIZE_ATTRIBUTE, BATCHER_SKIP_ATTRIBUTE, BATCHER_PROCESS_ATTRIBUTE }; + private final static String[] BATCHER_OPTIONAL_ATTRIBUTES = { BATCHER_SELECTION_ATTRIBUTE, BATCHER_ORDER_ATTRIBUTE, BATCHER_MINBATCHSIZE_ATTRIBUTE, BATCHER_SKIP_ATTRIBUTE, BATCHER_PROCESS_ATTRIBUTE, BATCHER_EXTRATABLES_ATTRIBUTE }; private final static String[] BATCHER_SUBNODES = { BATCHER_BATCH_SUBNODE, BATCHER_BATCHLIST_SUBNODE }; - // ML: batchSize, minBatchSize, skip should be expressions! - private EntityAdapterModel model; private String batchDataKey; private String batchInfoKey; + private String mainTablePrefix; + private List extraTables; private String definition; private String selection; private String order; @@ -797,7 +867,11 @@ public class DefaultProducerNodeBuilders { batchSize = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_BATCHSIZE_ATTRIBUTE, "20" ); minBatchSize = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_MINBATCHSIZE_ATTRIBUTE, "0" ); skip = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_SKIP_ATTRIBUTE, "0" ); - process = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_PROCESS_ATTRIBUTE, "-1" ); + process = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_PROCESS_ATTRIBUTE, "-1" ); + extraTables = StringRoutines.splitString(XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_EXTRATABLES_ATTRIBUTE,"").trim(), ","); + List parts = StringRoutines.splitString(definition.trim()," "); + if (parts.size()>0) definition=(String)parts.get(0); + if (parts.size()>1) mainTablePrefix=(String)parts.get(1); }; public ProducerNode constructNode() { @@ -805,6 +879,8 @@ public class DefaultProducerNodeBuilders { batchDataKey, batchInfoKey, model, + mainTablePrefix, + extraTables, definition, selection, order, @@ -868,13 +944,15 @@ public class DefaultProducerNodeBuilders { public static class RSSProducerNodeBuilder extends AbstractProducerNodeBuilder { private final static String RSS_KEY_ATTRIBUTE = KEY_ATTRIBUTE; private final static String RSS_URL_ATTRIBUTE = URL_ATTRIBUTE; + private final static String RSS_VERSION_ATTRIBUTE = "version"; private final static String[] RSS_REQUIRED_ATTRIBUTES = { RSS_KEY_ATTRIBUTE, RSS_URL_ATTRIBUTE }; - private final static String[] RSS_OPTIONAL_ATTRIBUTES = { }; + private final static String[] RSS_OPTIONAL_ATTRIBUTES = { RSS_VERSION_ATTRIBUTE }; private final static String[] RSS_SUBNODES = { }; private String key; private String url; + private String version; public RSSProducerNodeBuilder() { super(RSS_SUBNODES); @@ -885,10 +963,11 @@ public class DefaultProducerNodeBuilders { key = (String) anAttributes.get( RSS_KEY_ATTRIBUTE ); url = (String) anAttributes.get( RSS_URL_ATTRIBUTE ); + version = XMLReaderTool.getStringAttributeWithDefault(anAttributes, RSS_VERSION_ATTRIBUTE, "1.0"); }; public ProducerNode constructNode() { - return new RSSProducerNode(key, url); + return new RSSProducerNode(key, url, version); }; }