import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Set;
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;
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));
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;
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 ));
};
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);
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;
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 {
////////////////////////////////////////////////////////////////////////////////
+ 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";
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)");
}
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;
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() {
batchDataKey,
batchInfoKey,
model,
+ mainTablePrefix,
+ extraTables,
definition,
selection,
order,
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);
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);
};
}