* 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 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.
+ * 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 mir.producer.EntityEnumeratingProducerNode;
import mir.producer.EntityListProducerNode;
import mir.producer.EvaluatedAssignmentProducerNode;
-import mir.producer.ExpandedAssignmentProducerNode;
+import mir.producer.*;
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.*;
import mir.producer.ResourceBundleProducerNode;
import mir.producer.ScriptCallingProducerNode;
import mir.util.XMLReader;
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));
aBuilderLibrary.registerFactory("Batch", new BatchingProducerNodeBuilder.factory(aModel));
+ aBuilderLibrary.registerFactory("UpdateEntity", new UpdateEntityProducerNodeBuilder.factory(aModel));
+ aBuilderLibrary.registerFactory("CreateEntity", new CreateEntityProducerNodeBuilder.factory(aModel));
+
aBuilderLibrary.registerFactory("Generate",
new GeneratingProducerNodeBuilder.factory(aGeneratorLibrary, aWriterEngine));
}
public static class EnumeratingProducerNodeBuilder extends AbstractProducerNodeBuilder {
private final static String ENUMERATION_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
private final static String ENUMERATION_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
+ private final static String ENUMERATION_LIST_ATTRIBUTE = "list";
private final static String ENUMERATION_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
private final static String ENUMERATION_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
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_REQUIRED_ATTRIBUTES = { ENUMERATION_KEY_ATTRIBUTE, ENUMERATION_DEFINITION_ATTRIBUTE };
- private final static String[] ENUMERATION_OPTIONAL_ATTRIBUTES = { ENUMERATION_SELECTION_ATTRIBUTE, ENUMERATION_ORDER_ATTRIBUTE, ENUMERATION_LIMIT_ATTRIBUTE, ENUMERATION_SKIP_ATTRIBUTE};
+ 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_SUBNODES = {ENUMERATION_DEFAULT_SUBNODE};
private String key;
private String definition;
+ private String list;
private String selection;
private String order;
private String limit;
}
public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
- XMLReaderTool.checkAttributes(anAttributes, ENUMERATION_REQUIRED_ATTRIBUTES, ENUMERATION_OPTIONAL_ATTRIBUTES);
+ definition = (String) anAttributes.get(ENUMERATION_DEFINITION_ATTRIBUTE);
+ list = (String) anAttributes.get(ENUMERATION_DEFINITION_ATTRIBUTE);
+
+ if ((list==null && definition==null) || (list!=null && definition!=null))
+ throw new ProducerConfigExc("Exactly one of "+ENUMERATION_LIST_ATTRIBUTE+" and "+ENUMERATION_LIST_ATTRIBUTE+" must be set");
+
+
+ if (list!=null)
+ XMLReaderTool.checkAttributes(anAttributes, ENUMERATION_LIST_REQUIRED_ATTRIBUTES, ENUMERATION_LIST_OPTIONAL_ATTRIBUTES);
+ if (definition!=null)
+ XMLReaderTool.checkAttributes(anAttributes, ENUMERATION_QUERY_REQUIRED_ATTRIBUTES, ENUMERATION_QUERY_OPTIONAL_ATTRIBUTES);
+
key = (String) anAttributes.get(ENUMERATION_KEY_ATTRIBUTE);
- definition = (String) anAttributes.get(ENUMERATION_DEFINITION_ATTRIBUTE);
selection = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, ENUMERATION_SELECTION_ATTRIBUTE, "");
order = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, ENUMERATION_ORDER_ATTRIBUTE, "");
limit = (String) anAttributes.get(ENUMERATION_LIMIT_ATTRIBUTE);
};
public ProducerNode constructNode() {
- return new EntityEnumeratingProducerNode(key, model, definition, selection, order, limit, skip, getSubNode(ENUMERATION_DEFAULT_SUBNODE ));
+ if (definition!=null)
+ return new EntityEnumeratingProducerNode(key, model, definition, selection, order, limit, skip, getSubNode(ENUMERATION_DEFAULT_SUBNODE ));
+ else
+ return new ListEnumeratingProducerNode(key, list, getSubNode(ENUMERATION_DEFAULT_SUBNODE ));
};
public static class factory implements ProducerNodeBuilderFactory {
////////////////////////////////////////////////////////////////////////////////
+ public static class UpdateEntityProducerNodeBuilder extends AbstractProducerNodeBuilder {
+ private final static String UPDATE_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
+ private final static String UPDATE_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
+ private final static String[] UPDATE_SUBNODES = {};
+
+ private String key;
+ private String definition;
+ private Map fieldValues;
+
+ private EntityAdapterModel model;
+
+ public UpdateEntityProducerNodeBuilder(EntityAdapterModel aModel) {
+ super(UPDATE_SUBNODES);
+
+ model = aModel;
+ fieldValues = new HashMap();
+ }
+
+ public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
+ key = (String) anAttributes.get(UPDATE_KEY_ATTRIBUTE);
+
+ if (key == null)
+ throw new XMLReader.XMLReaderExc("missing required attribute '" + UPDATE_KEY_ATTRIBUTE + "'" );
+ definition = (String) anAttributes.get(UPDATE_DEFINITION_ATTRIBUTE);
+
+ fieldValues.putAll(anAttributes);
+ fieldValues.remove(UPDATE_KEY_ATTRIBUTE);
+ fieldValues.remove(UPDATE_DEFINITION_ATTRIBUTE);
+ };
+
+ public ProducerNode constructNode() {
+ return new EntityModifyingProducerNode(model, false, definition, key, fieldValues);
+ };
+
+ public static class factory implements ProducerNodeBuilderFactory {
+ private EntityAdapterModel model;
+
+ public factory(EntityAdapterModel aModel) {
+ model = aModel;
+ }
+
+ public ProducerNodeBuilder makeBuilder() {
+ return new UpdateEntityProducerNodeBuilder(model);
+ }
+ }
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+ public static class CreateEntityProducerNodeBuilder extends AbstractProducerNodeBuilder {
+ private final static String CREATEENTITY_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
+ private final static String CREATEENTITY_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
+ private final static String[] CREATEENTITY_SUBNODES = {};
+
+ private String key;
+ private String definition;
+ private Map fieldValues;
+
+ private EntityAdapterModel model;
+
+ public CreateEntityProducerNodeBuilder(EntityAdapterModel aModel) {
+ super(CREATEENTITY_SUBNODES);
+
+ model = aModel;
+ fieldValues = new HashMap();
+ }
+
+ public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
+ key = (String) anAttributes.get(CREATEENTITY_KEY_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);
+ fieldValues.remove(CREATEENTITY_DEFINITION_ATTRIBUTE);
+ };
+
+ public ProducerNode constructNode() {
+ return new EntityModifyingProducerNode(model, true, definition, key, fieldValues);
+ };
+
+ public static class factory implements ProducerNodeBuilderFactory {
+ private EntityAdapterModel model;
+
+ public factory(EntityAdapterModel aModel) {
+ model = aModel;
+ }
+
+ public ProducerNodeBuilder makeBuilder() {
+ return new CreateEntityProducerNodeBuilder(model);
+ }
+ }
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
public static class LoopProducerNodeBuilder extends AbstractProducerNodeBuilder {
private final static String LOOP_CONDITION_ATTRIBUTE = "condition";
private final static String LOOP_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE;
////////////////////////////////////////////////////////////////////////////////
+ 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";
////////////////////////////////////////////////////////////////////////////////
+ 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;