From: zapata
*
- * @version $Id: Entity.java,v 1.21.2.13 2005/07/28 21:44:01 grok Exp $
+ * @version $Id: Entity.java,v 1.21.2.14 2005/08/21 17:09:18 zapata Exp $
*/
public interface Entity {
@@ -79,11 +79,11 @@ public interface Entity {
/**
* Sets the value for a field. Issues a log message if the field name
* supplied was not found in the Entity.
- * @param theProp The field name whose value has to be set
- * @param theValue The new value of the field
+ * @param aFieldName The field name whose value has to be set
+ * @param aValue The new value of the field
* @exception DatabaseFailure
*/
- public void setFieldValue(String theProp, String theValue);
+ public void setFieldValue(String aFieldName, String aValue);
/**
* Returns the field names of the Entity
@@ -92,12 +92,12 @@ public interface Entity {
/**
* Returns the value of a field by field name.
- * @param field The name of the field
+ * @param aFieldName The name of the field
* @return value of the field
*/
- public String getFieldValue(String field);
+ public String getFieldValue(String aFieldName);
- public boolean hasFieldValue(String field);
+ public boolean hasFieldValue(String aFieldName);
/** Returns whether fieldName is a valid field name of this Entity.
*/
diff --git a/source/mir/entity/EntityBrowser.java b/source/mir/entity/EntityBrowser.java
index 51b07f61..03855fd6 100755
--- a/source/mir/entity/EntityBrowser.java
+++ b/source/mir/entity/EntityBrowser.java
@@ -93,7 +93,7 @@ public class EntityBrowser implements RewindableIterator {
readCurrentBatch(skip);
}
catch (Throwable t) {
- throw new Failure("Error while rewinging", t);
+ throw new Failure("Error while rewinding", t);
}
}
diff --git a/source/mir/entity/EntityList.java b/source/mir/entity/EntityList.java
index aae8f662..74da98ab 100755
--- a/source/mir/entity/EntityList.java
+++ b/source/mir/entity/EntityList.java
@@ -29,10 +29,6 @@
*/
package mir.entity;
-import java.util.ArrayList;
-import java.util.Set;
-
-import mir.config.MirPropertiesConfiguration;
import mir.log.LoggerWrapper;
import mir.storage.Database;
import mir.storage.store.StorableObject;
@@ -40,6 +36,10 @@ import mir.storage.store.StoreContainerType;
import mir.storage.store.StoreIdentifier;
import mir.storage.store.StoreUtil;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
/**
*
* Container class for lists of Entities.
@@ -51,9 +51,8 @@ import mir.storage.store.StoreUtil;
* @version 1.1 (cleaned up)
*/
public class EntityList implements StorableObject {
- protected static MirPropertiesConfiguration configuration = MirPropertiesConfiguration.instance();
protected LoggerWrapper logger;
- private ArrayList theEntityArrayList = new ArrayList();
+ private List entities = new ArrayList();
private String whereClause, orderClause;
private Database storage;
private int offset, limit;
@@ -63,7 +62,6 @@ public class EntityList implements StorableObject {
logger = new LoggerWrapper("Entity.List");
}
-/* get/set EntityClass of Objects stored in EntityList */
public void setStorage(Database aStorage) {
storage=aStorage;
}
@@ -86,15 +84,6 @@ public class EntityList implements StorableObject {
}
/**
- * Returns the WHERE clause that returned this EntityList from the database
- *
- * @return whereClause The WHERE clause
- */
- public String getWhere() {
- return whereClause;
- }
-
- /**
* Sets the sorting criterium of this EntityList
*
* @param oc
@@ -104,15 +93,6 @@ public class EntityList implements StorableObject {
}
/**
- * Returns the sorting criterium.
- *
- * @return orderClause The sort order
- */
- public String getOrder() {
- return orderClause;
- }
-
- /**
* Sets the offset
*
* @param i The offset
@@ -165,7 +145,7 @@ public class EntityList implements StorableObject {
public void add (Entity anEntity) {
if (anEntity!=null)
- theEntityArrayList.add(anEntity);
+ entities.add(anEntity);
else
logger.warn("EntityList: add called with empty Entity");
}
@@ -176,7 +156,7 @@ public class EntityList implements StorableObject {
*/
public int size() {
- return theEntityArrayList.size();
+ return entities.size();
}
@@ -187,8 +167,7 @@ public class EntityList implements StorableObject {
*/
public Entity elementAt(int i) {
- /** todo check if i is in list.size() */
- return (Entity) theEntityArrayList.get(i);
+ return (Entity) entities.get(i);
}
diff --git a/source/mir/entity/adapter/EntityAdapter.java b/source/mir/entity/adapter/EntityAdapter.java
index 2fff4d20..e0ab7be5 100755
--- a/source/mir/entity/adapter/EntityAdapter.java
+++ b/source/mir/entity/adapter/EntityAdapter.java
@@ -29,15 +29,11 @@
*/
package mir.entity.adapter;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import mir.entity.Entity;
import mir.util.CachingRewindableIterator;
+import mir.util.RewindableIterator;
+
+import java.util.*;
/** An EntityAdapter is a wrapper around an Entity meant to add
* missing functionality. It provides "calculated fields"
@@ -49,7 +45,7 @@ import mir.util.CachingRewindableIterator;
* etc.
* This whole framework is meant to be replaced by hibernate
+ * Based on an expression that will be evaluated as a boolean,
+ * one of 2 subnodes will be called.
+ */
public class ConditionalProducerNode implements ProducerNode {
private String condition;
private ProducerNode trueNode;
@@ -45,15 +49,18 @@ public class ConditionalProducerNode implements ProducerNode {
falseNode = aFalseNode;
}
- public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) throws ProducerFailure {
+ /**
+ * {@inheritDoc}
+ */
+ public void produce(ProductionContext aProducerContext) throws ProducerExc, ProducerFailure {
try {
- if (ParameterExpander.evaluateBooleanExpression(aValueMap, condition)) {
+ if (ParameterExpander.evaluateBooleanExpression(aProducerContext.getValueSet(), condition)) {
if (trueNode!=null)
- trueNode.produce(aValueMap, aVerb, aLogger);
+ trueNode.produce(aProducerContext);
}
else {
if (falseNode!=null)
- falseNode.produce(aValueMap, aVerb, aLogger);
+ falseNode.produce(aProducerContext);
}
}
catch (Exception e) {
diff --git a/source/mir/producer/DirCopyingProducerNode.java b/source/mir/producer/DirCopyingProducerNode.java
index 2eb3b084..8fc13e9c 100755
--- a/source/mir/producer/DirCopyingProducerNode.java
+++ b/source/mir/producer/DirCopyingProducerNode.java
@@ -33,10 +33,13 @@ import java.io.File;
import java.util.Map;
import mir.log.LoggerWrapper;
-import mir.util.FileFunctions;
+import mir.util.FileRoutines;
import mir.util.ParameterExpander;
-public class DirCopyingProducerNode implements ProducerNode {
+/**
+ *
+ */
+public class DirCopyingProducerNode extends AbstractProducerNode {
private String sourceExpression;
private String destinationExpression;
private File sourceBasePath;
@@ -56,7 +59,7 @@ public class DirCopyingProducerNode implements ProducerNode {
try {
source = ParameterExpander.expandExpression( aValueMap, sourceExpression );
destination = ParameterExpander.expandExpression( aValueMap, destinationExpression );
- FileFunctions.copy(
+ FileRoutines.copy(
new File(sourceBasePath, source),
new File(destinationBasePath, destination));
aLogger.info(source + " copied into " + destination);
diff --git a/source/mir/producer/EntityBatchingProducerNode.java b/source/mir/producer/EntityBatchingProducerNode.java
index abdacc65..3e3a294f 100755
--- a/source/mir/producer/EntityBatchingProducerNode.java
+++ b/source/mir/producer/EntityBatchingProducerNode.java
@@ -29,31 +29,17 @@
*/
package mir.producer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
import mir.entity.adapter.EntityAdapterModel;
import mir.entity.adapter.EntityIteratorAdapter;
-import mir.log.LoggerWrapper;
import mir.util.ParameterExpander;
import mir.util.StringRoutines;
+import java.util.*;
+
/**
- * Title: EntityBatchingProducerNode Description:
- * This producer makes it possible to show articles in batches, like on archive
- * pages.
- *
- * Copyright: Copyright (c) 2003 Company: Entity
represents a persistent data object, typically
* stored in a database.ProducerNode
that simply executes a
+ * list of ProducerNode
s sequentially
+ */
public class CompositeProducerNode implements ProducerNode {
private List subNodes;
@@ -70,19 +71,18 @@ public class CompositeProducerNode implements ProducerNode {
subNodes.clear();
}
- protected boolean isAborted(Map aValueMap) {
- Object producerValue = aValueMap.get(NodedProducer.PRODUCER_KEY);
+ protected boolean isAborted(ProductionContext aProductionContext) {
return (
- (producerValue instanceof NodedProducer) &&
- ((NodedProducer) producerValue).getIsAborted());
+ (aProductionContext.getProducer() instanceof NodedProducer) &&
+ ((NodedProducer) aProductionContext.getProducer()).getIsAborted());
}
- public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) throws ProducerFailure, ProducerExc {
+ public void produce(ProductionContext aProductionContext) throws ProducerExc, ProducerFailure {
Iterator i = subNodes.iterator();
- while (i.hasNext() && !isAborted(aValueMap)) {
+ while (i.hasNext() && !isAborted(aProductionContext)) {
ProducerNode node = (ProducerNode) i.next();
- node.produce(aValueMap, aVerb, aLogger);
+ node.produce(aProductionContext);
}
}
}
\ No newline at end of file
diff --git a/source/mir/producer/ConditionalProducerNode.java b/source/mir/producer/ConditionalProducerNode.java
index 20fb3f1d..cb92e9da 100755
--- a/source/mir/producer/ConditionalProducerNode.java
+++ b/source/mir/producer/ConditionalProducerNode.java
@@ -29,11 +29,15 @@
*/
package mir.producer;
-import java.util.Map;
-
-import mir.log.LoggerWrapper;
import mir.util.ParameterExpander;
+/**
+ * ProducerNode
for conditional constructs.
+ *
+ *
There used to be a time when there were Producers that weren't * NodedProducers, however they have been phased out.
*/ + public class NodedProducer implements Producer { private ProducerNode rootNode; - private String verb; - private Map baseValues; private boolean isAborted; private boolean isFinished; protected final static String PRODUCER_KEY = "$producer"; - public NodedProducer( ProducerNode aRootNode, String aVerb, Map aBaseValues) { + public NodedProducer(ProducerNode aRootNode) { rootNode = aRootNode; - verb = aVerb; - baseValues = aBaseValues; isAborted = false; } - public boolean produce( LoggerWrapper aLogger ) throws ProducerFailure, ProducerExc { - Map valueMap; - - valueMap = new HashMap(); - valueMap.putAll(baseValues); - valueMap.put(PRODUCER_KEY, this); - - rootNode.produce(valueMap, verb, aLogger); + public boolean execute(ProductionContext aProductionContext) throws ProducerFailure, ProducerExc { + rootNode.produce(aProductionContext); synchronized(this) { isFinished=true; + return !isAborted; } } - public void abort() { + public void abort(ProductionContext aContext) { synchronized(this) { if (!isFinished) isAborted=true; @@ -81,10 +69,4 @@ public class NodedProducer implements Producer { return isAborted; } } - - public boolean getIsFinished() { - synchronized(this) { - return isFinished; - } - } } diff --git a/source/mir/producer/Producer.java b/source/mir/producer/Producer.java index 4b284619..75312a7a 100755 --- a/source/mir/producer/Producer.java +++ b/source/mir/producer/Producer.java @@ -29,9 +29,7 @@ */ package mir.producer; -import mir.log.LoggerWrapper; - -/** +/** *A Producer is a set of tasks, scripted in xml. Producers allow * mir installations to have their own actions that can be called for * instance when a new article is posted. Originally producers were @@ -53,18 +51,16 @@ import mir.log.LoggerWrapper; * the Producer interface). When the Producer is executed, the * "produce" methods of each node are recursively called, effectively * executing the program as it was scripted
- * - * */ public interface Producer { /** - * - * - * @param aLogger - * @returnfalse
if aborted,true
if not
- * @throws ProducerFailure
- * @throws ProducerExc
+ * Execute the producer
+ */
+ public boolean execute(ProductionContext aContext) throws ProducerFailure, ProducerExc;
+
+ /**
+ * Abort the execution of the producer. Will be called from a different
+ * thread and implementations should take this into account.
*/
- public boolean produce( LoggerWrapper aLogger ) throws ProducerFailure, ProducerExc;
- public void abort();
+ public void abort(ProductionContext aContext);
}
diff --git a/source/mir/producer/ProducerExc.java b/source/mir/producer/ProducerExc.java
index c6129f86..93772fee 100755
--- a/source/mir/producer/ProducerExc.java
+++ b/source/mir/producer/ProducerExc.java
@@ -35,4 +35,8 @@ public class ProducerExc extends Exc {
public ProducerExc(String aMessage) {
super(aMessage);
}
+
+ public ProducerExc(String aMessage, Throwable aCause) {
+ super(aMessage, aCause);
+ }
}
diff --git a/source/mir/producer/ProducerFactory.java b/source/mir/producer/ProducerFactory.java
index dc8d7712..61d6763f 100755
--- a/source/mir/producer/ProducerFactory.java
+++ b/source/mir/producer/ProducerFactory.java
@@ -32,6 +32,9 @@ package mir.producer;
import java.util.List;
import java.util.Map;
+/**
+ *
+ */
public interface ProducerFactory {
public interface ProducerVerb {
String getName();
@@ -54,7 +57,7 @@ public interface ProducerFactory {
public Producer makeProducer(String aVerb, Map aStartingValues) throws ProducerFailure, ProducerExc;
/**
- * The set of pre-defined verbs. Returns a list of {@link ProducerVerb}s
+ * The set of pre-defined verbs. Returns a List
of {@link ProducerVerb}s
*/
public List verbs();
}
diff --git a/source/mir/producer/ProducerFailure.java b/source/mir/producer/ProducerFailure.java
index 48728130..aa1a52b1 100755
--- a/source/mir/producer/ProducerFailure.java
+++ b/source/mir/producer/ProducerFailure.java
@@ -32,8 +32,6 @@ package mir.producer;
import multex.Failure;
public class ProducerFailure extends Failure {
-
-
public ProducerFailure(String msg,Throwable cause) {
super(msg,cause);
}
diff --git a/source/mir/producer/ProducerNode.java b/source/mir/producer/ProducerNode.java
index 2e0f7c8f..d9502dec 100755
--- a/source/mir/producer/ProducerNode.java
+++ b/source/mir/producer/ProducerNode.java
@@ -29,18 +29,12 @@
*/
package mir.producer;
-import java.util.Map;
-
-import mir.log.LoggerWrapper;
-
/**
- * A ProducerNode
is an atom of a noded producer factory.
- *
+ * A ProducerNode
forms a building block of a noded producer factory.
*/
public interface ProducerNode {
/**
- * Perform the operations of the producer node, based on a verb and a value set.
- * The supplied logger object should be used for any logging.
+ * Perform the operations of the producer node, using the {@link ProductionContext}.
*/
- public void produce(Map aValueSet, String aVerb, LoggerWrapper aLogger) throws ProducerExc, ProducerFailure;
+ public void produce(ProductionContext aProductionContext) throws ProducerExc, ProducerFailure;
}
\ No newline at end of file
diff --git a/source/mir/producer/ProducerNodeDecorator.java b/source/mir/producer/ProducerNodeDecorator.java
index 747d9ee5..52011f0e 100755
--- a/source/mir/producer/ProducerNodeDecorator.java
+++ b/source/mir/producer/ProducerNodeDecorator.java
@@ -29,26 +29,22 @@
*/
package mir.producer;
-import java.util.Map;
-
-import mir.log.LoggerWrapper;
-
-public class ProducerNodeDecorator implements ProducerNode {
+public abstract class ProducerNodeDecorator implements ProducerNode {
private ProducerNode slave;
protected ProducerNodeDecorator(ProducerNode aSlave) {
slave = aSlave;
}
- protected boolean isAborted(Map aValueMap) {
- Object producerValue = aValueMap.get(NodedProducer.PRODUCER_KEY);
+ protected boolean isAborted(ProductionContext aProductionContext) {
return (
- (producerValue instanceof NodedProducer) &&
- ((NodedProducer) producerValue).getIsAborted());
+ (aProductionContext.getProducer() instanceof NodedProducer) &&
+ ((NodedProducer) aProductionContext.getProducer()).getIsAborted());
}
- public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) throws ProducerFailure, ProducerExc {
- if (slave!=null)
- slave.produce(aValueMap, aVerb, aLogger);
+ public void produce(ProductionContext aProductionContext) throws ProducerExc, ProducerFailure {
+ if (slave!=null) {
+ slave.produce(aProductionContext);
+ }
}
}
\ No newline at end of file
diff --git a/source/mir/producer/ProductionContext.java b/source/mir/producer/ProductionContext.java
new file mode 100755
index 00000000..76cce0d2
--- /dev/null
+++ b/source/mir/producer/ProductionContext.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2005 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * 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.
+ * If you do not wish to do so, delete this exception statement from your version.
+ */
+package mir.producer;
+
+import mir.log.LoggerWrapper;
+
+import java.util.Map;
+
+/**
+ * ProductionContext
incorporates all facilities available
+ * to a producer during production
+ */
+public interface ProductionContext {
+ ProducerFactory getFactory();
+ Producer getProducer();
+ String getVerb();
+ LoggerWrapper getLogger();
+ Map getValueSet();
+ // ProductionSpace getProductionSpace();
+}
diff --git a/source/mir/producer/RDFAggregatorProducerNode.java b/source/mir/producer/RDFAggregatorProducerNode.java
index 02ce1596..14377e98 100755
--- a/source/mir/producer/RDFAggregatorProducerNode.java
+++ b/source/mir/producer/RDFAggregatorProducerNode.java
@@ -34,27 +34,22 @@ import java.util.Map;
import mir.log.LoggerWrapper;
import mir.rss.RSSAggregator;
-import mir.util.ExceptionFunctions;
+import mir.util.ExceptionRoutines;
import mir.util.ParameterExpander;
-public class RDFAggregatorProducerNode implements ProducerNode {
+public class RDFAggregatorProducerNode extends AbstractProducerNode {
private String key;
private String source;
- private String order;
- private String filter;
- public RDFAggregatorProducerNode(String aKey, String aSource, String anOrder, String aFilter) {
+ public RDFAggregatorProducerNode(String aKey, String aSource) {
key = aKey;
source=aSource;
- order=anOrder;
- filter=aFilter;
}
public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) throws ProducerFailure {
try {
aLogger.debug(source);
String evaluatedKey = ParameterExpander.expandExpression( aValueMap, key );
- String evaluatedOrder = ParameterExpander.expandExpression( aValueMap, order );
Object evaluatedSource = ParameterExpander.evaluateExpression( aValueMap, source );
Object aggregator = aValueMap.get(evaluatedKey);
@@ -80,7 +75,7 @@ public class RDFAggregatorProducerNode implements ProducerNode {
throw new ProducerExc("RSSAggregator expected, " + aggregator.toString() + " found");
}
catch (Throwable t) {
- Throwable s = ExceptionFunctions.traceCauseException(t);
+ Throwable s = ExceptionRoutines.traceCauseException(t);
aLogger.error("Error while aggregating RDF data: " + s.getClass().getName()+","+ s.getMessage());
}
}
diff --git a/source/mir/producer/RSSProducerNode.java b/source/mir/producer/RSSProducerNode.java
index fa2bef15..29ee973e 100755
--- a/source/mir/producer/RSSProducerNode.java
+++ b/source/mir/producer/RSSProducerNode.java
@@ -35,10 +35,10 @@ import mir.log.LoggerWrapper;
import mir.rss.RSS091Reader;
import mir.rss.RSSData;
import mir.rss.RSSReader;
-import mir.util.ExceptionFunctions;
+import mir.util.ExceptionRoutines;
import mir.util.ParameterExpander;
-public class RSSProducerNode implements ProducerNode {
+public class RSSProducerNode extends AbstractProducerNode {
private String key;
private String url;
private String version;
@@ -89,8 +89,7 @@ public class RSSProducerNode implements ProducerNode {
ParameterExpander.setValueForKey(aValueMap, expandedKey, rssData);
}
catch (Throwable t) {
- Throwable s = ExceptionFunctions.traceCauseException(t);
- aLogger.error("Error while processing RSS data: " + s.getClass().getName()+","+ s.getMessage());
+ aLogger.warn("Error while processing RSS data", t);
}
}
}
\ No newline at end of file
diff --git a/source/mir/producer/ValuesMapProducerNode.java b/source/mir/producer/ValuesMapProducerNode.java
deleted file mode 100755
index e0a4ffcf..00000000
--- a/source/mir/producer/ValuesMapProducerNode.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2001, 2002 The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * 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.
- * If you do not wish to do so, delete this exception statement from your version.
- */
-package mir.producer;
-
-import java.util.Map;
-
-import mir.log.LoggerWrapper;
-
-public class ValuesMapProducerNode extends ProducerNodeDecorator {
- private String key;
- private String bundleIdentifier;
- private Map map;
-
- public ValuesMapProducerNode(Map aMap, ProducerNode aSubNode) {
- super(aSubNode);
- }
-
- public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) throws ProducerFailure {
- try {
- aValueMap.putAll(map);
-
- super.produce(aValueMap, aVerb, aLogger);
- }
- catch (Throwable t) {
- throw new ProducerFailure(t.getMessage(), t);
- }
- }
-}
\ No newline at end of file
diff --git a/source/mir/producer/reader/DefaultProducerNodeBuilders.java b/source/mir/producer/reader/DefaultProducerNodeBuilders.java
index e0c80249..86429c30 100755
--- a/source/mir/producer/reader/DefaultProducerNodeBuilders.java
+++ b/source/mir/producer/reader/DefaultProducerNodeBuilders.java
@@ -1040,11 +1040,9 @@ 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_OPTIONAL_ATTRIBUTES = { };
private final static String[] RDF_AGGREGATOR_SUBNODES = { };
private String key;
@@ -1061,12 +1059,10 @@ public class DefaultProducerNodeBuilders {
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);
+ return new RDFAggregatorProducerNode(key, source);
}
}
diff --git a/source/mir/producer/reader/ProducerConfigReader.java b/source/mir/producer/reader/ProducerConfigReader.java
index d39fbee0..3b106898 100755
--- a/source/mir/producer/reader/ProducerConfigReader.java
+++ b/source/mir/producer/reader/ProducerConfigReader.java
@@ -43,7 +43,7 @@ import mir.producer.CompositeProducerNode;
import mir.producer.ProducerFactory;
import mir.producer.ProducerNode;
import mir.producer.SimpleProducerVerb;
-import mir.util.ExceptionFunctions;
+import mir.util.ExceptionRoutines;
import mir.util.xml.XMLParserEngine;
import mir.util.xml.XMLParserExc;
import mir.util.xml.XMLParserFailure;
@@ -65,7 +65,7 @@ public class ProducerConfigReader {
}
catch (Throwable e) {
- Throwable root = ExceptionFunctions.traceCauseException(e);
+ Throwable root = ExceptionRoutines.traceCauseException(e);
if ((root instanceof XMLParserExc) && ((XMLParserExc) root).getHasLocation()) {
XMLParserExc f = (XMLParserExc) root;
@@ -83,7 +83,7 @@ public class ProducerConfigReader {
}
catch (Throwable e) {
- Throwable root = ExceptionFunctions.traceCauseException(e);
+ Throwable root = ExceptionRoutines.traceCauseException(e);
if ((root instanceof XMLParserExc) && ((XMLParserExc) root).getHasLocation()) {
XMLParserExc f = (XMLParserExc) root;
diff --git a/source/mir/producer/reader/ScriptedProducerFactory.java b/source/mir/producer/reader/ScriptedProducerFactory.java
index e870733c..9e7b8253 100755
--- a/source/mir/producer/reader/ScriptedProducerFactory.java
+++ b/source/mir/producer/reader/ScriptedProducerFactory.java
@@ -83,7 +83,7 @@ public class ScriptedProducerFactory implements ProducerFactory {
rootNode.addSubNode(verbNode);
rootNode.addSubNode(body);
- return new NodedProducer(rootNode, aVerb, aStartingValues);
+ return new NodedProducer(rootNode);
}
public List verbs() {
diff --git a/source/mir/producer/reader/ScriptedProducerNode.java b/source/mir/producer/reader/ScriptedProducerNode.java
index aa080524..0f256785 100755
--- a/source/mir/producer/reader/ScriptedProducerNode.java
+++ b/source/mir/producer/reader/ScriptedProducerNode.java
@@ -29,15 +29,16 @@
*/
package mir.producer.reader;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import mir.log.LoggerWrapper;
import mir.producer.ProducerExc;
import mir.producer.ProducerFailure;
import mir.producer.ProducerNode;
+import mir.producer.ProductionContext;
import mir.util.ParameterExpander;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
/**
* A ScriptedProducerNode is a ProducerNode which is defined in * producers.xml file by the <nodedefinition> statement.
@@ -63,11 +64,13 @@ public class ScriptedProducerNode implements ProducerNode { nodeParameterValues.putAll(aNodeParameterValues); } - public void produce(Map aValues, String aVerb, LoggerWrapper aLogger) throws ProducerFailure, ProducerExc { + public void produce(ProductionContext aProductionContext) throws ProducerFailure, ProducerExc { try { Map oldValues = new HashMap(); - ScriptedProducerNodeTool.saveMapValues(oldValues, aValues, definition.getStringParameters().keySet()); - ScriptedProducerNodeTool.saveMapValues(oldValues, aValues, definition.getIntegerParameters().keySet()); + ScriptedProducerNodeTool.saveMapValues(oldValues, + aProductionContext.getValueSet(), definition.getStringParameters().keySet()); + ScriptedProducerNodeTool.saveMapValues(oldValues, + aProductionContext.getValueSet(), definition.getIntegerParameters().keySet()); try { Iterator i = stringParameterValues.entrySet().iterator(); @@ -75,7 +78,9 @@ public class ScriptedProducerNode implements ProducerNode { Map.Entry entry = (Map.Entry) i.next(); if (entry.getValue() instanceof String) { - aValues.put(entry.getKey(), ParameterExpander.expandExpression(aValues, (String) entry.getValue())); + aProductionContext.getValueSet().put(entry.getKey(), + ParameterExpander.expandExpression(aProductionContext.getValueSet(), + (String) entry.getValue())); } } @@ -85,25 +90,27 @@ public class ScriptedProducerNode implements ProducerNode { Map.Entry entry = (Map.Entry) i.next(); if (entry.getValue() instanceof String) { - aValues.put(entry.getKey(), ParameterExpander.evaluateExpression(aValues, (String) entry.getValue())); + aProductionContext.getValueSet().put(entry.getKey(), + ParameterExpander.evaluateExpression(aProductionContext.getValueSet(), (String) entry.getValue())); } } - ScriptedProducerNodeTool.pushNodeParameterValues(aValues, definition.getName(), nodeParameterValues); + ScriptedProducerNodeTool.pushNodeParameterValues(aProductionContext.getValueSet(), + definition.getName(), nodeParameterValues); try { - definition.getBody().produce(aValues, aVerb, aLogger); + definition.getBody().produce(aProductionContext); } finally { - ScriptedProducerNodeTool.popNodeParameterValues(aValues, definition.getName()); + ScriptedProducerNodeTool.popNodeParameterValues(aProductionContext.getValueSet(), definition.getName()); } } finally { - ScriptedProducerNodeTool.restoreMapValues(aValues, definition.getIntegerParameters().keySet(), oldValues); - ScriptedProducerNodeTool.restoreMapValues(aValues, definition.getStringParameters().keySet(), oldValues); + ScriptedProducerNodeTool.restoreMapValues(aProductionContext.getValueSet(), definition.getIntegerParameters().keySet(), oldValues); + ScriptedProducerNodeTool.restoreMapValues(aProductionContext.getValueSet(), definition.getStringParameters().keySet(), oldValues); } } catch (Exception e) { - aLogger.error("Scripted producer node " + definition.getName() + " caused an exception: " + e.getMessage()); + aProductionContext.getLogger().error("Scripted producer node " + definition.getName() + " caused an exception", e); } } diff --git a/source/mir/producer/reader/ScriptedProducerNodeDefinition.java b/source/mir/producer/reader/ScriptedProducerNodeDefinition.java index 62a796d6..cf2015b7 100755 --- a/source/mir/producer/reader/ScriptedProducerNodeDefinition.java +++ b/source/mir/producer/reader/ScriptedProducerNodeDefinition.java @@ -29,18 +29,9 @@ */ package mir.producer.reader; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.Stack; - -import mir.log.LoggerWrapper; -import mir.producer.CompositeProducerNode; -import mir.producer.ProducerExc; -import mir.producer.ProducerFailure; -import mir.producer.ProducerNode; +import mir.producer.*; + +import java.util.*; public class ScriptedProducerNodeDefinition { private Map integerParameters; // name -> default value @@ -129,7 +120,6 @@ public class ScriptedProducerNodeDefinition { return result; } - protected static class NodeParameterProducerNode implements ProducerNode { private String parameterName; private String definitionName; @@ -139,16 +129,17 @@ public class ScriptedProducerNodeDefinition { parameterName = aParameterName; } - public void produce(Map aValues, String aVerb, LoggerWrapper aLogger) throws ProducerExc, ProducerFailure { + public void produce(ProductionContext aProductionContext) throws ProducerExc, ProducerFailure { ProducerNode producerNode; - Map runTimeData = (Map) ((Map) aValues.get(SCRIPTED_PRODUCERNODE_RUNTIMEDATA_KEY)).get(definitionName); + Map runTimeData = (Map) ((Map) aProductionContext.getValueSet().get(SCRIPTED_PRODUCERNODE_RUNTIMEDATA_KEY)).get(definitionName); Map parameters = (Map) ((Stack) runTimeData.get( SCRIPTED_PRODUCERNODE_RUNTIMESTACK_KEY )).peek(); producerNode = (ProducerNode) parameters.get(parameterName); - if (producerNode != null) - producerNode.produce(aValues, aVerb, aLogger); + if (producerNode != null) { + producerNode.produce(aProductionContext); + } } public Set buildVerbSet() { diff --git a/source/mir/rss/RSSReader.java b/source/mir/rss/RSSReader.java index faff1ea8..40db2173 100755 --- a/source/mir/rss/RSSReader.java +++ b/source/mir/rss/RSSReader.java @@ -35,7 +35,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import mir.util.DateTimeFunctions; +import mir.util.DateTimeRoutines; import mir.util.HTTPClientHelper; import mir.util.xml.XMLParserEngine; import mir.util.xml.XMLParserExc; @@ -455,7 +455,7 @@ public class RSSReader { try { String expression = data.toString().trim(); - return DateTimeFunctions.parseW3CDTFString(expression); + return DateTimeRoutines.parseW3CDTFString(expression); } catch (Throwable t) { diff --git a/source/mir/servlet/AbstractServlet.java b/source/mir/servlet/AbstractServlet.java index 1a90e763..d42d2e95 100755 --- a/source/mir/servlet/AbstractServlet.java +++ b/source/mir/servlet/AbstractServlet.java @@ -52,7 +52,7 @@ import mircoders.global.MirGlobal; * Copyright: Copyright (c) 2001, 2002 * Company: Mir-coders group * @author idfx, the Mir-coders group - * @version $Id: AbstractServlet.java,v 1.30.2.8 2005/03/26 11:26:24 zapata Exp $ + * @version $Id: AbstractServlet.java,v 1.30.2.9 2005/08/21 17:09:21 zapata Exp $ */ public abstract class AbstractServlet extends HttpServlet { @@ -157,7 +157,6 @@ public abstract class AbstractServlet extends HttpServlet { logger.info("Request now has encoding: " + aRequest.getCharacterEncoding()); } catch (NoSuchMethodException e) { - // TODO do something to support old servlet containers } catch (SecurityException e) { logger.error(e.getMessage()); diff --git a/source/mir/session/CommonsUploadedFileAdapter.java b/source/mir/session/CommonsUploadedFileAdapter.java index 8fcaf883..15c75bed 100755 --- a/source/mir/session/CommonsUploadedFileAdapter.java +++ b/source/mir/session/CommonsUploadedFileAdapter.java @@ -29,11 +29,13 @@ */ package mir.session; +import mir.util.IORoutines; +import org.apache.commons.fileupload.FileItem; + import java.io.File; import java.io.IOException; import java.io.InputStream; - -import org.apache.commons.fileupload.FileItem; +import java.io.OutputStream; public class CommonsUploadedFileAdapter implements UploadedFile { private FileItem fileItem; @@ -48,7 +50,15 @@ public class CommonsUploadedFileAdapter implements UploadedFile { fileItem.write(aFile); } catch (Exception e) { - e.printStackTrace(); + throw new SessionFailure(e); + } + } + + public void writeToStream(OutputStream aStream) throws SessionExc, SessionFailure { + try { + IORoutines.copyStream(fileItem.getInputStream(), aStream); + } + catch (Exception e) { throw new SessionFailure(e); } } diff --git a/source/mir/session/UploadedFile.java b/source/mir/session/UploadedFile.java index 89e54bdc..58eac873 100755 --- a/source/mir/session/UploadedFile.java +++ b/source/mir/session/UploadedFile.java @@ -31,6 +31,7 @@ package mir.session; import java.io.File; import java.io.InputStream; +import java.io.OutputStream; public interface UploadedFile { /** @@ -39,6 +40,11 @@ public interface UploadedFile { public void writeToFile(File aFile) throws SessionExc, SessionFailure; /** + * Writes the uploaded content to a file + */ + public void writeToStream(OutputStream aStream) throws SessionExc, SessionFailure; + + /** * Creates anInputStream
to access the uploaded content
*/
public InputStream getInputStream() throws SessionExc, SessionFailure;
diff --git a/source/mir/storage/Database.java b/source/mir/storage/Database.java
index e8faec53..5550c87a 100755
--- a/source/mir/storage/Database.java
+++ b/source/mir/storage/Database.java
@@ -45,7 +45,9 @@ import org.postgresql.PGConnection;
import org.postgresql.largeobject.LargeObject;
import org.postgresql.largeobject.LargeObjectManager;
-import java.io.*;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -54,7 +56,7 @@ import java.util.*;
/**
* Implements database access.
*
- * @version $Id: Database.java,v 1.44.2.32 2005/04/16 18:37:23 zapata Exp $
+ * @version $Id: Database.java,v 1.44.2.33 2005/08/21 17:09:21 zapata Exp $
* @author rk
* @author Zapata
*
@@ -180,8 +182,6 @@ public class Database {
break;
case java.sql.Types.NUMERIC:
- /** todo Numeric can be float or double depending upon
- * metadata.getScale() / especially with oracle */
long outl = aResultSet.getLong(aFieldIndex);
if (!aResultSet.wasNull()) {
@@ -393,8 +393,6 @@ public class Database {
anExtraTables=null;
}
- RecordRetriever retriever = new RecordRetriever(mainTable, aMainTablePrefix);
-
// check o_store for entitylist
// only if no relational select
if (anExtraTables==null) {
@@ -411,6 +409,8 @@ public class Database {
}
}
+ RecordRetriever retriever = new RecordRetriever(mainTable, aMainTablePrefix);
+
EntityList result = null;
Connection connection = null;
@@ -577,7 +577,6 @@ public class Database {
String returnId = null;
Connection con = null;
- PreparedStatement pstmt = null;
try {
String fieldName;
@@ -610,7 +609,6 @@ public class Database {
freeConnection(con);
}
- /** todo store entity in o_store */
return returnId;
}
@@ -707,7 +705,6 @@ public class Database {
public boolean delete(String id) throws DatabaseFailure {
invalidateObject(id);
- /** todo could be prepared Statement */
int resultCode = 0;
Connection connection = obtainConnection();
PreparedStatement statement = null;
diff --git a/source/mir/storage/store/ObjectStore.java b/source/mir/storage/store/ObjectStore.java
index 8c3a7f4a..3b4b6ce2 100755
--- a/source/mir/storage/store/ObjectStore.java
+++ b/source/mir/storage/store/ObjectStore.java
@@ -150,10 +150,6 @@ public class ObjectStore {
*/
public void invalidate(StoreContainerType stoc_type) {
if (stoc_type != null) {
- /* @todo invalidates too much:
- * improvement: if instanceof StoreContainerEntity && EntityList
- * then invalidate only StoreIdentifier matching the right table
- */
StoreContainer stoc = getStoreContainerForStocType(stoc_type);
if (stoc != null)
stoc.invalidate();
diff --git a/source/mir/storage/store/StoreIdentifier.java b/source/mir/storage/store/StoreIdentifier.java
index fab5a7d2..de65c7ac 100755
--- a/source/mir/storage/store/StoreIdentifier.java
+++ b/source/mir/storage/store/StoreIdentifier.java
@@ -48,9 +48,7 @@ import mir.entity.EntityList;
import mir.log.LoggerWrapper;
public class StoreIdentifier {
-
- /** @todo check if invalidating already to avoid deadlocks
- * what about concurrency? */
+ /** todo check if invalidating already to avoid deadlocks what about concurrency? */
private static ObjectStore o_store = ObjectStore.getInstance();
@@ -62,8 +60,6 @@ public class StoreIdentifier {
protected LoggerWrapper logger = new LoggerWrapper("Database.ObjectStore");
- private StoreIdentifier() {}
-
public StoreIdentifier(StorableObject reference, int storeType,
String uniqueIdentifier) {
Class theClass;
@@ -172,6 +168,4 @@ public class StoreIdentifier {
id.append(" (" + timesUsed).append(") times used.");
return id.toString();
}
-
-
}
\ No newline at end of file
diff --git a/source/mir/storage/store/test/TestStore.java b/source/mir/storage/store/test/TestStore.java
index 4f019955..b541757b 100755
--- a/source/mir/storage/store/test/TestStore.java
+++ b/source/mir/storage/store/test/TestStore.java
@@ -44,64 +44,61 @@ import mir.storage.store.StoreIdentifier;
public class TestStore {
- private static ObjectStore o_store = ObjectStore.getInstance();
+ private static ObjectStore o_store = ObjectStore.getInstance();
- public TestStore() {
+ public TestStore() {
- }
+ }
- public static void main(String[] args) {
- long startTime = System.currentTimeMillis();
- System.out.println("Starting testrun on ObjectStore...");
- TestStore testStore1 = new TestStore();
- testStore1.startTest();
- System.out.println("Finished testrun on ObjectStore. ("
- + (System.currentTimeMillis() - startTime) + " ms)");
- }
+ public static void main(String[] args) {
+ long startTime = System.currentTimeMillis();
+ System.out.println("Starting testrun on ObjectStore...");
+ TestStore testStore1 = new TestStore();
+ testStore1.startTest();
+ System.out.println("Finished testrun on ObjectStore. ("
+ + (System.currentTimeMillis() - startTime) + " ms)");
+ }
- public void startTest() {
+ public void startTest() {
- EntityC1 c1 = new EntityC1("1");
- o_store.add(c1.getStoreIdentifier());
- EntityC1 c12 = new EntityC1("2");
- o_store.add(c12.getStoreIdentifier());
+ EntityC1 c1 = new EntityC1("1");
+ o_store.add(c1.getStoreIdentifier());
+ EntityC1 c12 = new EntityC1("2");
+ o_store.add(c12.getStoreIdentifier());
o_store.add(c12.getStoreIdentifier()); // should not be added as it's there already
EntityC2 c2;
- for (int i=0; i<20; i++) {
- c2 = new EntityC2(""+i);
+ for (int i = 0; i < 20; i++) {
+ c2 = new EntityC2("" + i);
o_store.add(c2.getStoreIdentifier());
} // should contain only 10
- // test cycle: search in store
+// test cycle: search in store
- StorableObject reference; StoreIdentifier search_sid;
+ StorableObject reference;
+ StoreIdentifier search_sid;
- // search for EntityC1
- search_sid=new StoreIdentifier(EntityC1.class,"1");
- reference=o_store.use(search_sid);
- if (reference==null)
+// search for EntityC1
+ search_sid = new StoreIdentifier(EntityC1.class, "1");
+ reference = o_store.use(search_sid);
+ if (reference == null)
System.out.println("--- should have found" + search_sid.toString());
- search_sid=new StoreIdentifier(EntityC1.class,"A");
- reference=o_store.use(search_sid);
- if (reference!=null)
+ search_sid = new StoreIdentifier(EntityC1.class, "A");
+ reference = o_store.use(search_sid);
+ if (reference != null)
System.out.println("--- should not have found" + search_sid.toString());
- search_sid=new StoreIdentifier(EntityC3.class,"1");
- reference=o_store.use(search_sid);
- if (reference!=null)
+ search_sid = new StoreIdentifier(EntityC3.class, "1");
+ reference = o_store.use(search_sid);
+ if (reference != null)
System.out.println("--- should not have found" + search_sid.toString());
- // test cycle: invalidation */
- search_sid=new StoreIdentifier(EntityC1.class,"1");
+// test cycle: invalidation */
+ search_sid = new StoreIdentifier(EntityC1.class, "1");
o_store.invalidate(search_sid);
- System.out.println(o_store.toString());
- /** @todo compare values of store and state failed if values are not
- * right*/
+ System.out.println(o_store.toString());
-
-
- }
+ }
}
\ No newline at end of file
diff --git a/source/mir/util/DateTimeFunctions.java b/source/mir/util/DateTimeFunctions.java
index 4eff7486..95a81015 100755
--- a/source/mir/util/DateTimeFunctions.java
+++ b/source/mir/util/DateTimeFunctions.java
@@ -1,171 +1,36 @@
-/*
- * Copyright (C) 2001, 2002 The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * 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.
- * If you do not wish to do so, delete this exception statement from your version.
- */
-package mir.util;
-
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-public class DateTimeFunctions {
- /**
- * private parameter-less constructor to prevent construction
- */
-// private static LoggerWrapper logger = new LoggerWrapper("Utility.DatTimeFunctions");
-
-
- private DateTimeFunctions() {
- }
-
-
- private final static String SPACE = "[\t\n\r ]*";
- private final static String NUMBER = "[0-9]*";
- private final static String TWODIGITNUMBER = "[0-9][0-9]";
- private final static String FOURDIGITNUMBER = "[0-9][0-9][0-9][0-9]";
- private final static String FRACTION = "(\\.[0-9]*)|)";
- private final static String SIGN = "[-+]";
- private final static String TZD = "(Z|(+|-)([0-9][0-9]:[0-9][0-9]|[0-9][0-9][0-9][0-9]))";
-
- /**
- * Function to parse a W3CDTF formatted string.
- *
- *
- * YYYY[-MM[-DD[Thh:mm[:ss[.s*]]TZD]]]
- *
- * @param aString
- * @return Date
- */
- public static Date parseW3CDTFString(String aString) throws UtilExc, UtilFailure {
- try {
- int year = 1;
- int month = 1;
- int day = 1;
- int hour = 0;
- int minute = 0;
- int second = 0;
- int millisecond = 0;
- int houroffset = 0;
- int minuteoffset = 0;
- boolean negativeOffset = false;
-
-
- SimpleParser parser = new SimpleParser(aString.trim());
- String part = parser.parse(NUMBER);
- year=Integer.parseInt(part);
- if (parser.parses("-")) {
- parser.skip("-");
- part = parser.parse(NUMBER);
- month = Integer.parseInt(part);
- if (parser.parses("-")) {
- parser.skip("-");
- part = parser.parse(NUMBER);
- day = Integer.parseInt(part);
- if (parser.parses("T")) {
- parser.skip("T");
- part = parser.parse(NUMBER);
- hour = Integer.parseInt(part);
- parser.skip(":");
- part = parser.parse(NUMBER);
- minute = Integer.parseInt(part);
- if (parser.parses(":")) {
- parser.skip(":");
- part = parser.parse(NUMBER);
- second = Integer.parseInt(part);
- if (parser.parses("\\.")) {
- parser.skip("\\.");
- part = parser.parse(NUMBER).substring(0,3);
- while (part.length()<3)
- part = "0" + part;
- millisecond = Integer.parseInt(part);
- }
- }
- if (parser.parses("Z|\\+|-")) {
- String sign = parser.parse("Z|\\+|-");
- if (sign.equals("+") || sign.equals("-")) {
- if (parser.parses(TWODIGITNUMBER)) {
- part = parser.parse(TWODIGITNUMBER);
- houroffset = Integer.parseInt(part);
- }
- if (parser.parses(":"))
- parser.skip(":");
- if (parser.parses(TWODIGITNUMBER)) {
- part = parser.parse(TWODIGITNUMBER);
- minuteoffset = Integer.parseInt(part);
- }
-
- if (sign.equals("-")) {
- negativeOffset=true;
- }
- }
- }
- }
- }
- }
-
-
-
- String timeZoneID = "GMT";
- if (negativeOffset)
- timeZoneID = timeZoneID+"-";
- timeZoneID = timeZoneID + StringRoutines.padStringLeft(Integer.toString(houroffset), 2, '0') +
- StringRoutines.padStringLeft(Integer.toString(minuteoffset), 2, '0');
-
-
- TimeZone zone = TimeZone.getTimeZone(timeZoneID);
-
- Calendar calendar = new GregorianCalendar(zone);
- calendar.set(year, month-1, day, hour, minute, second);
- calendar.set(Calendar.MILLISECOND, millisecond);
-
- return calendar.getTime();
- }
- catch (Throwable t) {
-// logger.error("DateTimeFunctions.parseW3CDTFString: error parsing " + aString + ": " + t.toString());
-
- throw new UtilFailure(t);
- }
- }
-
- public static String advancedDateFormat(String aFormat, Date aDate, String aTimeZone) {
- return advancedDateFormat(aFormat, aDate, TimeZone.getTimeZone(aTimeZone));
- }
-
- public static String advancedDateFormat(String aFormat, Date aDate, TimeZone aTimeZone) {
- SimpleDateFormat simpleFormat = new SimpleDateFormat(aFormat);
-
- simpleFormat.setTimeZone(aTimeZone);
- return simpleFormat.format(aDate);
- }
-
- public static String dateToSortableString(Date aDate) {
- return advancedDateFormat("yyyyMMddHHmmss", aDate, "GMT");
- }
-}
\ No newline at end of file
+/*
+ * Copyright (C) 2005 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * 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.
+ * If you do not wish to do so, delete this exception statement from your version.
+ */
+package mir.util;
+
+/**
+ * @deprecated Use mir.util.DateTimeRoutines instead
+ */
+public class DateTimeFunctions extends DateTimeRoutines {
+}
diff --git a/source/mir/util/DateTimeRoutines.java b/source/mir/util/DateTimeRoutines.java
new file mode 100755
index 00000000..d3fc9418
--- /dev/null
+++ b/source/mir/util/DateTimeRoutines.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2001, 2002 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * 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.
+ * If you do not wish to do so, delete this exception statement from your version.
+ */
+package mir.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+public class DateTimeRoutines {
+ /**
+ * private parameter-less constructor to prevent construction
+ */
+ protected DateTimeRoutines() {
+ }
+
+ private final static String NUMBER = "[0-9]*";
+ private final static String TWODIGITNUMBER = "[0-9][0-9]";
+
+ /**
+ * Function to parse a W3CDTF formatted string.
+ *
+ *
+ * YYYY[-MM[-DD[Thh:mm[:ss[.s*]]TZD]]]
+ *
+ * @param aString
+ * @return Date
+ */
+ public static Date parseW3CDTFString(String aString) throws UtilExc, UtilFailure {
+ try {
+ int year = 1;
+ int month = 1;
+ int day = 1;
+ int hour = 0;
+ int minute = 0;
+ int second = 0;
+ int millisecond = 0;
+ int houroffset = 0;
+ int minuteoffset = 0;
+ boolean negativeOffset = false;
+
+
+ SimpleParser parser = new SimpleParser(aString.trim());
+ String part = parser.parse(NUMBER);
+ year=Integer.parseInt(part);
+ if (parser.parses("-")) {
+ parser.skip("-");
+ part = parser.parse(NUMBER);
+ month = Integer.parseInt(part);
+ if (parser.parses("-")) {
+ parser.skip("-");
+ part = parser.parse(NUMBER);
+ day = Integer.parseInt(part);
+ if (parser.parses("T")) {
+ parser.skip("T");
+ part = parser.parse(NUMBER);
+ hour = Integer.parseInt(part);
+ parser.skip(":");
+ part = parser.parse(NUMBER);
+ minute = Integer.parseInt(part);
+ if (parser.parses(":")) {
+ parser.skip(":");
+ part = parser.parse(NUMBER);
+ second = Integer.parseInt(part);
+ if (parser.parses("\\.")) {
+ parser.skip("\\.");
+ part = parser.parse(NUMBER).substring(0,3);
+ while (part.length()<3)
+ part = "0" + part;
+ millisecond = Integer.parseInt(part);
+ }
+ }
+ if (parser.parses("Z|\\+|-")) {
+ String sign = parser.parse("Z|\\+|-");
+ if (sign.equals("+") || sign.equals("-")) {
+ if (parser.parses(TWODIGITNUMBER)) {
+ part = parser.parse(TWODIGITNUMBER);
+ houroffset = Integer.parseInt(part);
+ }
+ if (parser.parses(":"))
+ parser.skip(":");
+ if (parser.parses(TWODIGITNUMBER)) {
+ part = parser.parse(TWODIGITNUMBER);
+ minuteoffset = Integer.parseInt(part);
+ }
+
+ if (sign.equals("-")) {
+ negativeOffset=true;
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ String timeZoneID = "GMT";
+ if (negativeOffset)
+ timeZoneID = timeZoneID+"-";
+ timeZoneID = timeZoneID + StringRoutines.padStringLeft(Integer.toString(houroffset), 2, '0') +
+ StringRoutines.padStringLeft(Integer.toString(minuteoffset), 2, '0');
+
+
+ TimeZone zone = TimeZone.getTimeZone(timeZoneID);
+
+ Calendar calendar = new GregorianCalendar(zone);
+ calendar.set(year, month-1, day, hour, minute, second);
+ calendar.set(Calendar.MILLISECOND, millisecond);
+
+ return calendar.getTime();
+ }
+ catch (Throwable t) {
+// logger.error("DateTimeFunctions.parseW3CDTFString: error parsing " + aString + ": " + t.toString());
+
+ throw new UtilFailure(t);
+ }
+ }
+
+ public static String advancedDateFormat(String aFormat, Date aDate, String aTimeZone) {
+ return advancedDateFormat(aFormat, aDate, TimeZone.getTimeZone(aTimeZone));
+ }
+
+ public static String advancedDateFormat(String aFormat, Date aDate, TimeZone aTimeZone) {
+ SimpleDateFormat simpleFormat = new SimpleDateFormat(aFormat);
+
+ simpleFormat.setTimeZone(aTimeZone);
+ return simpleFormat.format(aDate);
+ }
+
+ public static String dateToSortableString(Date aDate) {
+ return advancedDateFormat("yyyyMMddHHmmss", aDate, "GMT");
+ }
+}
\ No newline at end of file
diff --git a/source/mir/util/ExceptionFunctions.java b/source/mir/util/ExceptionFunctions.java
index 916692c7..aad178ca 100755
--- a/source/mir/util/ExceptionFunctions.java
+++ b/source/mir/util/ExceptionFunctions.java
@@ -1,89 +1,36 @@
-/*
- * Copyright (C) 2001, 2002 The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * 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.
- * If you do not wish to do so, delete this exception statement from your version.
- */
-package mir.util;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.InvocationTargetException;
-
-import multex.Failure;
-
-import org.xml.sax.SAXException;
-
-/**
- *
- * Title: ExceptionFunctions
- *Description: Functions to assist handling and throwing exceptions
- *Copyright: Copyright (c) 2003
- *Company: Mir coders
- * @author Zapata - * @version 1.0 - */ - -public class ExceptionFunctions { - private ExceptionFunctions() { - } - - /** - * Traces an exception to it's root cause, using all known exception types that support - * cause exceptions. - * - * @return the cause (if found) - */ - - public static Throwable traceCauseException(Throwable anException) { - Throwable result = anException; - - while (true) { - if ((result instanceof Failure) && (((Failure) result).getCause()!=null)) { - result = ((Failure) result).getCause(); - } - else if ((result instanceof SAXException) && (((SAXException) result).getException()!=null)) { - result = ((SAXException) result).getException(); - } - else if ((result instanceof InvocationTargetException) && (((InvocationTargetException) result).getTargetException()!=null)) { - result = ((InvocationTargetException) result).getTargetException(); - } - else - break; - } - - return result; - } - - /** - * Prints an exception's stacktrace to aString
- */
- public static String getStackTrace(Throwable aThrowable) {
- StringWriter writer = new StringWriter();
- aThrowable.printStackTrace(new PrintWriter(writer));
- return writer.toString();
- }
-}
+/*
+ * Copyright (C) 2005 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * 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.
+ * If you do not wish to do so, delete this exception statement from your version.
+ */
+package mir.util;
+
+/**
+ * @deprecated Use mir.util.ExceptionRoutines instead
+ */
+public class ExceptionFunctions extends ExceptionRoutines {
+}
diff --git a/source/mir/util/ExceptionRoutines.java b/source/mir/util/ExceptionRoutines.java
new file mode 100755
index 00000000..cf280506
--- /dev/null
+++ b/source/mir/util/ExceptionRoutines.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2001, 2002 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * 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.
+ * If you do not wish to do so, delete this exception statement from your version.
+ */
+package mir.util;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
+
+import multex.Failure;
+
+import org.xml.sax.SAXException;
+
+/**
+ * Routines to assist in handling and throwing exceptions
+ */
+
+public class ExceptionRoutines {
+ protected ExceptionRoutines() {
+ }
+
+ /**
+ * Traces an exception to it's root cause, using all known exception types that support
+ * cause exceptions.
+ *
+ * @return the cause (if found)
+ */
+
+ public static Throwable traceCauseException(Throwable anException) {
+ Throwable result = anException;
+
+ while (true) {
+ if ((result instanceof Failure) && (((Failure) result).getCause()!=null)) {
+ result = ((Failure) result).getCause();
+ }
+ else if ((result instanceof SAXException) && (((SAXException) result).getException()!=null)) {
+ result = ((SAXException) result).getException();
+ }
+ else if ((result instanceof InvocationTargetException) && (((InvocationTargetException) result).getTargetException()!=null)) {
+ result = ((InvocationTargetException) result).getTargetException();
+ }
+ else
+ break;
+ }
+
+ return result;
+ }
+
+ /**
+ * Prints an exception's stacktrace to a String
+ */
+ public static String getStackTrace(Throwable aThrowable) {
+ StringWriter writer = new StringWriter();
+ aThrowable.printStackTrace(new PrintWriter(writer));
+ return writer.toString();
+ }
+}
diff --git a/source/mir/util/ExecFunctions.java b/source/mir/util/ExecFunctions.java
index 5dc23f4e..bc6d8647 100755
--- a/source/mir/util/ExecFunctions.java
+++ b/source/mir/util/ExecFunctions.java
@@ -74,7 +74,7 @@ public class ExecFunctions
{
throw new IOException("command exit satus:"+exitStatus);
}
- byte [] result=FileFunctions.readFileIntoByteArray
+ byte [] result = FileRoutines.readFileIntoByteArray
(commandOutput.getAbsolutePath());
commandOutput.delete();
return result;
diff --git a/source/mir/util/FileFunctions.java b/source/mir/util/FileFunctions.java
index a49c1498..7ade9aa2 100755
--- a/source/mir/util/FileFunctions.java
+++ b/source/mir/util/FileFunctions.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2005 The Mir-coders group
*
* This file is part of Mir.
*
@@ -29,205 +29,9 @@
*/
package mir.util;
-import gnu.regexp.RE;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-public class FileFunctions {
- protected static final int FILE_COPY_BUFFER_SIZE = 65536;
-
- private FileFunctions() {
- }
-
- public static void copyFile(File aSourceFile, File aDestinationFile) throws IOException {
- BufferedInputStream inputStream;
- BufferedOutputStream outputStream;
- int nrBytesRead;
- byte[] buffer = new byte[FILE_COPY_BUFFER_SIZE];
-
- inputStream = new BufferedInputStream(
- new FileInputStream(aSourceFile));
- try {
- File directory = new File(aDestinationFile.getParent());
- if (directory!=null && !directory.exists()){
- directory.mkdirs();
- }
- outputStream = new BufferedOutputStream(
- new FileOutputStream(aDestinationFile),8192);
- try {
- do {
- nrBytesRead = inputStream.read(buffer);
- if (nrBytesRead>0)
- outputStream.write(buffer, 0, nrBytesRead);
- }
- while (nrBytesRead>=0);
- }
- finally {
- outputStream.close();
- }
- }
- finally {
- inputStream.close();
- }
- }
-
- public static void copyDirectory(File aSourceDirectory, File aDestinationDirectory) throws IOException {
- int i;
- File sourceFile;
- File destinationFile;
- File[] files = aSourceDirectory.listFiles();
-
- if (!aDestinationDirectory.exists())
- aDestinationDirectory.mkdirs();
-
- for (i=0; iList
of filenames of type String
+ */
+ public static List getDirectoryContentsAsList(File aDirectory, FilenameFilter aFilter) {
+ Object[] contents = aDirectory.list(aFilter);
+
+ if (contents==null) {
+ return Collections.EMPTY_LIST;
+ }
+
+ return Arrays.asList(contents);
+ }
+
+ /**
+ * Return the extension of a path. (e.g. getExtension("example.txt")
will
+ * return "txt"
+ */
+ public static String getExtension(String aPath) {
+ int position = aPath.lastIndexOf('.');
+ if (position>=0) {
+ return aPath.substring(position+1);
+ }
+ return "";
+ }
+
+ public static boolean isAbsolutePath(String aPath) {
+ return new File(aPath).isAbsolute();
+ }
+
+ /**
+ * Transforms an absolute or relative path into an absolute
+ * {@link File}.
+ *
+ * @param aBasePath The base path to use for relative paths
+ * @param aPath The path to transform
+ * @return An absolute representation of the supplied path
+ */
+ public static File getAbsoluteOrRelativeFile(File aBasePath, String aPath) {
+ if (isAbsolutePath(aPath)) {
+ return new File(aPath);
+ }
+
+ return new File(aBasePath, aPath);
+ }
+
+ /**
+ * Reads the content of a file into a string
+ *
+ * TODO: The encoding to be used has not been taken into account: the routine now
+ * assumes the file is encoded according to the JVM/platform default
+ */
+ public static String readFileIntoString(String fileName) throws IOException {
+ return new String(readFileIntoByteArray(fileName));
+ }
+
+ /**
+ * Reads the content of a file into an array of bytes
+ *
+ * TODO: add a loop: {@link java.io.InputStream#available()} is not
+ * the total number of bytes left in the stream, but depends on buffering
+ * etc.
+ */
+ public static byte[] readFileIntoByteArray(String fileName) throws IOException {
+ InputStream input = new FileInputStream(fileName);
+ int size= input.available();
+ byte result[] = new byte[size];
+ input.read(result);
+
+ return result;
+ }
+
+ /**
+ * Creates all parent directories of a file if they do not exist
+ */
+ public static void createParentDirectories(File aFile) {
+ if (aFile.getParentFile()!=null && !aFile.getParentFile().exists()) {
+ aFile.getParentFile().mkdirs();
+ }
+ }
+ }
\ No newline at end of file
diff --git a/source/mir/util/GeneratorDateTimeFunctions.java b/source/mir/util/GeneratorDateTimeFunctions.java
index 36a8d11a..234db7d0 100755
--- a/source/mir/util/GeneratorDateTimeFunctions.java
+++ b/source/mir/util/GeneratorDateTimeFunctions.java
@@ -65,14 +65,16 @@ public class GeneratorDateTimeFunctions {
SimpleDateFormat dateFormat = new SimpleDateFormat( (String) (aParameters.get(1)));
String timezoneString = "";
- if (aParameters.size()>2)
+ if (aParameters.size()>2) {
timezoneString = (String) aParameters.get(2);
- else
+ }
+ else {
timezoneString = defaultTimezone;
+ }
TimeZone timezone = null;
try {
- timezone = TimeZone.getTimeZone(defaultTimezone);
+ timezone = TimeZone.getTimeZone(timezoneString);
}
catch (Throwable t) {
}
diff --git a/source/mir/util/IORoutines.java b/source/mir/util/IORoutines.java
new file mode 100755
index 00000000..5f04a970
--- /dev/null
+++ b/source/mir/util/IORoutines.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2005 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * 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.
+ * If you do not wish to do so, delete this exception statement from your version.
+ */
+package mir.util;
+
+import java.io.OutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+
+public class IORoutines {
+ private IORoutines() {
+ }
+
+ public static void copyStream(InputStream anInputStream, OutputStream anOutputStream) throws IOException {
+ byte[] buffer = new byte[128*1024];
+ int size;
+
+ while ( (size = anInputStream.read(buffer)) > 0) {
+ anOutputStream.write(buffer, 0, size);
+ }
+ }
+
+ public static void writeStream(String aData, String anEncoding, OutputStream anOutputStream) throws IOException {
+ anOutputStream.write(aData.getBytes(anEncoding));
+ }
+
+}
diff --git a/source/mir/util/NullWriter.java b/source/mir/util/NullWriter.java
deleted file mode 100755
index fe8f0b6d..00000000
--- a/source/mir/util/NullWriter.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2001, 2002 The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * 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.
- * If you do not wish to do so, delete this exception statement from your version.
- */
-package mir.util;
-
-import java.io.Writer;
-
-public class NullWriter extends Writer {
-
- public NullWriter() {
- }
-
- public void close() {
- }
-
- public void flush() {
- }
-
- public void write(char[] cbuf, int off, int len) {
- }
-}
\ No newline at end of file
diff --git a/source/mir/util/Translate.java b/source/mir/util/Translate.java
deleted file mode 100755
index 90785dae..00000000
--- a/source/mir/util/Translate.java
+++ /dev/null
@@ -1,593 +0,0 @@
-// todo....figure out what license changes need to be made here...
-
-// HTMLParser Library v1_3_20030511 - A java-based parser for HTML
-// Copyright (C) Dec 31, 2000 Somik Raha
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// For any questions or suggestions, you can write to me at :
-// Email :somik@industriallogic.com
-//
-// Postal Address :
-// Somik Raha
-// Extreme Programmer & Coach
-// Industrial Logic Corporation
-// 2583 Cedar Street, Berkeley,
-// CA 94708, USA
-// Website : http://www.industriallogic.com
-//
-// This class was contributed by
-// Derrick Oswald
-//
-
-package mir.util;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Translate numeric character references and character entity references to unicode characters.
- * Based on tables found at
- * http://www.w3.org/TR/REC-html40/sgml/entities.html
- * Note: Do not edit! This class is created by the Generate class. - *
Typical usage: - *
- * String s = Translate.decode (getTextFromHtmlPage ()); - *- * @author Derrick Oswald - */ -public class Translate -{ - /** - * Table mapping entity reference kernel to character. - *
String
->Character
- */
- protected static Map refChar;
- static
- {
- refChar = new HashMap(1000);
-
- // Portions © International Organization for Standardization 1986
- // Permission to copy in any form is granted for use with
- // conforming SGML systems and applications as defined in
- // ISO 8879, provided this notice is included in all copies.
- // Character entity set. Typical invocation:
- //
- // %HTMLlat1;
- refChar.put ("nbsp", new Character ('\u00a0')); // no-break space = non-breaking space, U+00A0 ISOnum
- refChar.put ("iexcl", new Character ('\u00a1')); // inverted exclamation mark, U+00A1 ISOnum
- refChar.put ("cent", new Character ('\u00a2')); // cent sign, U+00A2 ISOnum
- refChar.put ("pound", new Character ('\u00a3')); // pound sign, U+00A3 ISOnum
- refChar.put ("curren", new Character ('\u00a4')); // currency sign, U+00A4 ISOnum
- refChar.put ("yen", new Character ('\u00a5')); // yen sign = yuan sign, U+00A5 ISOnum
- refChar.put ("brvbar", new Character ('\u00a6')); // broken bar = broken vertical bar, U+00A6 ISOnum
- refChar.put ("sect", new Character ('\u00a7')); // section sign, U+00A7 ISOnum
- refChar.put ("uml", new Character ('\u00a8')); // diaeresis = spacing diaeresis, U+00A8 ISOdia
- refChar.put ("copy", new Character ('\u00a9')); // copyright sign, U+00A9 ISOnum
- refChar.put ("ordf", new Character ('\u00aa')); // feminine ordinal indicator, U+00AA ISOnum
- refChar.put ("laquo", new Character ('\u00ab')); // left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum
- refChar.put ("not", new Character ('\u00ac')); // not sign, U+00AC ISOnum
- refChar.put ("shy", new Character ('\u00ad')); // soft hyphen = discretionary hyphen, U+00AD ISOnum
- refChar.put ("reg", new Character ('\u00ae')); // registered sign = registered trade mark sign, U+00AE ISOnum
- refChar.put ("macr", new Character ('\u00af')); // macron = spacing macron = overline = APL overbar, U+00AF ISOdia
- refChar.put ("deg", new Character ('\u00b0')); // degree sign, U+00B0 ISOnum
- refChar.put ("plusmn", new Character ('\u00b1')); // plus-minus sign = plus-or-minus sign, U+00B1 ISOnum
- refChar.put ("sup2", new Character ('\u00b2')); // superscript two = superscript digit two = squared, U+00B2 ISOnum
- refChar.put ("sup3", new Character ('\u00b3')); // superscript three = superscript digit three = cubed, U+00B3 ISOnum
- refChar.put ("acute", new Character ('\u00b4')); // acute accent = spacing acute, U+00B4 ISOdia
- refChar.put ("micro", new Character ('\u00b5')); // micro sign, U+00B5 ISOnum
- refChar.put ("para", new Character ('\u00b6')); // pilcrow sign = paragraph sign, U+00B6 ISOnum
- refChar.put ("middot", new Character ('\u00b7')); // middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum
- refChar.put ("cedil", new Character ('\u00b8')); // cedilla = spacing cedilla, U+00B8 ISOdia
- refChar.put ("sup1", new Character ('\u00b9')); // superscript one = superscript digit one, U+00B9 ISOnum
- refChar.put ("ordm", new Character ('\u00ba')); // masculine ordinal indicator, U+00BA ISOnum
- refChar.put ("raquo", new Character ('\u00bb')); // right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum
- refChar.put ("frac14", new Character ('\u00bc')); // vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum
- refChar.put ("frac12", new Character ('\u00bd')); // vulgar fraction one half = fraction one half, U+00BD ISOnum
- refChar.put ("frac34", new Character ('\u00be')); // vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum
- refChar.put ("iquest", new Character ('\u00bf')); // inverted question mark = turned question mark, U+00BF ISOnum
- refChar.put ("Agrave", new Character ('\u00c0')); // latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1
- refChar.put ("Aacute", new Character ('\u00c1')); // latin capital letter A with acute, U+00C1 ISOlat1
- refChar.put ("Acirc", new Character ('\u00c2')); // latin capital letter A with circumflex, U+00C2 ISOlat1
- refChar.put ("Atilde", new Character ('\u00c3')); // latin capital letter A with tilde, U+00C3 ISOlat1
- refChar.put ("Auml", new Character ('\u00c4')); // latin capital letter A with diaeresis, U+00C4 ISOlat1
- refChar.put ("Aring", new Character ('\u00c5')); // latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1
- refChar.put ("AElig", new Character ('\u00c6')); // latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1
- refChar.put ("Ccedil", new Character ('\u00c7')); // latin capital letter C with cedilla, U+00C7 ISOlat1
- refChar.put ("Egrave", new Character ('\u00c8')); // latin capital letter E with grave, U+00C8 ISOlat1
- refChar.put ("Eacute", new Character ('\u00c9')); // latin capital letter E with acute, U+00C9 ISOlat1
- refChar.put ("Ecirc", new Character ('\u00ca')); // latin capital letter E with circumflex, U+00CA ISOlat1
- refChar.put ("Euml", new Character ('\u00cb')); // latin capital letter E with diaeresis, U+00CB ISOlat1
- refChar.put ("Igrave", new Character ('\u00cc')); // latin capital letter I with grave, U+00CC ISOlat1
- refChar.put ("Iacute", new Character ('\u00cd')); // latin capital letter I with acute, U+00CD ISOlat1
- refChar.put ("Icirc", new Character ('\u00ce')); // latin capital letter I with circumflex, U+00CE ISOlat1
- refChar.put ("Iuml", new Character ('\u00cf')); // latin capital letter I with diaeresis, U+00CF ISOlat1
- refChar.put ("ETH", new Character ('\u00d0')); // latin capital letter ETH, U+00D0 ISOlat1
- refChar.put ("Ntilde", new Character ('\u00d1')); // latin capital letter N with tilde, U+00D1 ISOlat1
- refChar.put ("Ograve", new Character ('\u00d2')); // latin capital letter O with grave, U+00D2 ISOlat1
- refChar.put ("Oacute", new Character ('\u00d3')); // latin capital letter O with acute, U+00D3 ISOlat1
- refChar.put ("Ocirc", new Character ('\u00d4')); // latin capital letter O with circumflex, U+00D4 ISOlat1
- refChar.put ("Otilde", new Character ('\u00d5')); // latin capital letter O with tilde, U+00D5 ISOlat1
- refChar.put ("Ouml", new Character ('\u00d6')); // latin capital letter O with diaeresis, U+00D6 ISOlat1
- refChar.put ("times", new Character ('\u00d7')); // multiplication sign, U+00D7 ISOnum
- refChar.put ("Oslash", new Character ('\u00d8')); // latin capital letter O with stroke = latin capital letter O slash, U+00D8 ISOlat1
- refChar.put ("Ugrave", new Character ('\u00d9')); // latin capital letter U with grave, U+00D9 ISOlat1
- refChar.put ("Uacute", new Character ('\u00da')); // latin capital letter U with acute, U+00DA ISOlat1
- refChar.put ("Ucirc", new Character ('\u00db')); // latin capital letter U with circumflex, U+00DB ISOlat1
- refChar.put ("Uuml", new Character ('\u00dc')); // latin capital letter U with diaeresis, U+00DC ISOlat1
- refChar.put ("Yacute", new Character ('\u00dd')); // latin capital letter Y with acute, U+00DD ISOlat1
- refChar.put ("THORN", new Character ('\u00de')); // latin capital letter THORN, U+00DE ISOlat1
- refChar.put ("szlig", new Character ('\u00df')); // latin small letter sharp s = ess-zed, U+00DF ISOlat1
- refChar.put ("agrave", new Character ('\u00e0')); // latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1
- refChar.put ("aacute", new Character ('\u00e1')); // latin small letter a with acute, U+00E1 ISOlat1
- refChar.put ("acirc", new Character ('\u00e2')); // latin small letter a with circumflex, U+00E2 ISOlat1
- refChar.put ("atilde", new Character ('\u00e3')); // latin small letter a with tilde, U+00E3 ISOlat1
- refChar.put ("auml", new Character ('\u00e4')); // latin small letter a with diaeresis, U+00E4 ISOlat1
- refChar.put ("aring", new Character ('\u00e5')); // latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1
- refChar.put ("aelig", new Character ('\u00e6')); // latin small letter ae = latin small ligature ae, U+00E6 ISOlat1
- refChar.put ("ccedil", new Character ('\u00e7')); // latin small letter c with cedilla, U+00E7 ISOlat1
- refChar.put ("egrave", new Character ('\u00e8')); // latin small letter e with grave, U+00E8 ISOlat1
- refChar.put ("eacute", new Character ('\u00e9')); // latin small letter e with acute, U+00E9 ISOlat1
- refChar.put ("ecirc", new Character ('\u00ea')); // latin small letter e with circumflex, U+00EA ISOlat1
- refChar.put ("euml", new Character ('\u00eb')); // latin small letter e with diaeresis, U+00EB ISOlat1
- refChar.put ("igrave", new Character ('\u00ec')); // latin small letter i with grave, U+00EC ISOlat1
- refChar.put ("iacute", new Character ('\u00ed')); // latin small letter i with acute, U+00ED ISOlat1
- refChar.put ("icirc", new Character ('\u00ee')); // latin small letter i with circumflex, U+00EE ISOlat1
- refChar.put ("iuml", new Character ('\u00ef')); // latin small letter i with diaeresis, U+00EF ISOlat1
- refChar.put ("eth", new Character ('\u00f0')); // latin small letter eth, U+00F0 ISOlat1
- refChar.put ("ntilde", new Character ('\u00f1')); // latin small letter n with tilde, U+00F1 ISOlat1
- refChar.put ("ograve", new Character ('\u00f2')); // latin small letter o with grave, U+00F2 ISOlat1
- refChar.put ("oacute", new Character ('\u00f3')); // latin small letter o with acute, U+00F3 ISOlat1
- refChar.put ("ocirc", new Character ('\u00f4')); // latin small letter o with circumflex, U+00F4 ISOlat1
- refChar.put ("otilde", new Character ('\u00f5')); // latin small letter o with tilde, U+00F5 ISOlat1
- refChar.put ("ouml", new Character ('\u00f6')); // latin small letter o with diaeresis, U+00F6 ISOlat1
- refChar.put ("divide", new Character ('\u00f7')); // division sign, U+00F7 ISOnum
- refChar.put ("oslash", new Character ('\u00f8')); // latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1
- refChar.put ("ugrave", new Character ('\u00f9')); // latin small letter u with grave, U+00F9 ISOlat1
- refChar.put ("uacute", new Character ('\u00fa')); // latin small letter u with acute, U+00FA ISOlat1
- refChar.put ("ucirc", new Character ('\u00fb')); // latin small letter u with circumflex, U+00FB ISOlat1
- refChar.put ("uuml", new Character ('\u00fc')); // latin small letter u with diaeresis, U+00FC ISOlat1
- refChar.put ("yacute", new Character ('\u00fd')); // latin small letter y with acute, U+00FD ISOlat1
- refChar.put ("thorn", new Character ('\u00fe')); // latin small letter thorn, U+00FE ISOlat1
- refChar.put ("yuml", new Character ('\u00ff')); // latin small letter y with diaeresis, U+00FF ISOlat1
- // Mathematical, Greek and Symbolic characters for HTML
- // Character entity set. Typical invocation:
- //
- // %HTMLsymbol;
- // Portions © International Organization for Standardization 1986:
- // Permission to copy in any form is granted for use with
- // conforming SGML systems and applications as defined in
- // ISO 8879, provided this notice is included in all copies.
- // Relevant ISO entity set is given unless names are newly introduced.
- // New names (i.e., not in ISO 8879 list) do not clash with any
- // existing ISO 8879 entity names. ISO 10646 character numbers
- // are given for each character, in hex. CDATA values are decimal
- // conversions of the ISO 10646 values and refer to the document
- // character set. Names are ISO 10646 names.
- // Latin Extended-B
- refChar.put ("fnof", new Character ('\u0192')); // latin small f with hook = function = florin, U+0192 ISOtech
- // Greek
- refChar.put ("Alpha", new Character ('\u0391')); // greek capital letter alpha, U+0391
- refChar.put ("Beta", new Character ('\u0392')); // greek capital letter beta, U+0392
- refChar.put ("Gamma", new Character ('\u0393')); // greek capital letter gamma, U+0393 ISOgrk3
- refChar.put ("Delta", new Character ('\u0394')); // greek capital letter delta, U+0394 ISOgrk3
- refChar.put ("Epsilon", new Character ('\u0395')); // greek capital letter epsilon, U+0395
- refChar.put ("Zeta", new Character ('\u0396')); // greek capital letter zeta, U+0396
- refChar.put ("Eta", new Character ('\u0397')); // greek capital letter eta, U+0397
- refChar.put ("Theta", new Character ('\u0398')); // greek capital letter theta, U+0398 ISOgrk3
- refChar.put ("Iota", new Character ('\u0399')); // greek capital letter iota, U+0399
- refChar.put ("Kappa", new Character ('\u039a')); // greek capital letter kappa, U+039A
- refChar.put ("Lambda", new Character ('\u039b')); // greek capital letter lambda, U+039B ISOgrk3
- refChar.put ("Mu", new Character ('\u039c')); // greek capital letter mu, U+039C
- refChar.put ("Nu", new Character ('\u039d')); // greek capital letter nu, U+039D
- refChar.put ("Xi", new Character ('\u039e')); // greek capital letter xi, U+039E ISOgrk3
- refChar.put ("Omicron", new Character ('\u039f')); // greek capital letter omicron, U+039F
- refChar.put ("Pi", new Character ('\u03a0')); // greek capital letter pi, U+03A0 ISOgrk3
- refChar.put ("Rho", new Character ('\u03a1')); // greek capital letter rho, U+03A1
- // there is no Sigmaf, and no U+03A2 character either
- refChar.put ("Sigma", new Character ('\u03a3')); // greek capital letter sigma, U+03A3 ISOgrk3
- refChar.put ("Tau", new Character ('\u03a4')); // greek capital letter tau, U+03A4
- refChar.put ("Upsilon", new Character ('\u03a5')); // greek capital letter upsilon, U+03A5 ISOgrk3
- refChar.put ("Phi", new Character ('\u03a6')); // greek capital letter phi, U+03A6 ISOgrk3
- refChar.put ("Chi", new Character ('\u03a7')); // greek capital letter chi, U+03A7
- refChar.put ("Psi", new Character ('\u03a8')); // greek capital letter psi, U+03A8 ISOgrk3
- refChar.put ("Omega", new Character ('\u03a9')); // greek capital letter omega, U+03A9 ISOgrk3
- refChar.put ("alpha", new Character ('\u03b1')); // greek small letter alpha, U+03B1 ISOgrk3
- refChar.put ("beta", new Character ('\u03b2')); // greek small letter beta, U+03B2 ISOgrk3
- refChar.put ("gamma", new Character ('\u03b3')); // greek small letter gamma, U+03B3 ISOgrk3
- refChar.put ("delta", new Character ('\u03b4')); // greek small letter delta, U+03B4 ISOgrk3
- refChar.put ("epsilon", new Character ('\u03b5')); // greek small letter epsilon, U+03B5 ISOgrk3
- refChar.put ("zeta", new Character ('\u03b6')); // greek small letter zeta, U+03B6 ISOgrk3
- refChar.put ("eta", new Character ('\u03b7')); // greek small letter eta, U+03B7 ISOgrk3
- refChar.put ("theta", new Character ('\u03b8')); // greek small letter theta, U+03B8 ISOgrk3
- refChar.put ("iota", new Character ('\u03b9')); // greek small letter iota, U+03B9 ISOgrk3
- refChar.put ("kappa", new Character ('\u03ba')); // greek small letter kappa, U+03BA ISOgrk3
- refChar.put ("lambda", new Character ('\u03bb')); // greek small letter lambda, U+03BB ISOgrk3
- refChar.put ("mu", new Character ('\u03bc')); // greek small letter mu, U+03BC ISOgrk3
- refChar.put ("nu", new Character ('\u03bd')); // greek small letter nu, U+03BD ISOgrk3
- refChar.put ("xi", new Character ('\u03be')); // greek small letter xi, U+03BE ISOgrk3
- refChar.put ("omicron", new Character ('\u03bf')); // greek small letter omicron, U+03BF NEW
- refChar.put ("pi", new Character ('\u03c0')); // greek small letter pi, U+03C0 ISOgrk3
- refChar.put ("rho", new Character ('\u03c1')); // greek small letter rho, U+03C1 ISOgrk3
- refChar.put ("sigmaf", new Character ('\u03c2')); // greek small letter final sigma, U+03C2 ISOgrk3
- refChar.put ("sigma", new Character ('\u03c3')); // greek small letter sigma, U+03C3 ISOgrk3
- refChar.put ("tau", new Character ('\u03c4')); // greek small letter tau, U+03C4 ISOgrk3
- refChar.put ("upsilon", new Character ('\u03c5')); // greek small letter upsilon, U+03C5 ISOgrk3
- refChar.put ("phi", new Character ('\u03c6')); // greek small letter phi, U+03C6 ISOgrk3
- refChar.put ("chi", new Character ('\u03c7')); // greek small letter chi, U+03C7 ISOgrk3
- refChar.put ("psi", new Character ('\u03c8')); // greek small letter psi, U+03C8 ISOgrk3
- refChar.put ("omega", new Character ('\u03c9')); // greek small letter omega, U+03C9 ISOgrk3
- refChar.put ("thetasym", new Character ('\u03d1')); // greek small letter theta symbol, U+03D1 NEW
- refChar.put ("upsih", new Character ('\u03d2')); // greek upsilon with hook symbol, U+03D2 NEW
- refChar.put ("piv", new Character ('\u03d6')); // greek pi symbol, U+03D6 ISOgrk3
- // General Punctuation
- refChar.put ("bull", new Character ('\u2022')); // bullet = black small circle, U+2022 ISOpub
- // bullet is NOT the same as bullet operator, U+2219
- refChar.put ("hellip", new Character ('\u2026')); // horizontal ellipsis = three dot leader, U+2026 ISOpub
- refChar.put ("prime", new Character ('\u2032')); // prime = minutes = feet, U+2032 ISOtech
- refChar.put ("Prime", new Character ('\u2033')); // double prime = seconds = inches, U+2033 ISOtech
- refChar.put ("oline", new Character ('\u203e')); // overline = spacing overscore, U+203E NEW
- refChar.put ("frasl", new Character ('\u2044')); // fraction slash, U+2044 NEW
- // Letterlike Symbols
- refChar.put ("weierp", new Character ('\u2118')); // script capital P = power set = Weierstrass p, U+2118 ISOamso
- refChar.put ("image", new Character ('\u2111')); // blackletter capital I = imaginary part, U+2111 ISOamso
- refChar.put ("real", new Character ('\u211c')); // blackletter capital R = real part symbol, U+211C ISOamso
- refChar.put ("trade", new Character ('\u2122')); // trade mark sign, U+2122 ISOnum
- refChar.put ("alefsym", new Character ('\u2135')); // alef symbol = first transfinite cardinal, U+2135 NEW
- // alef symbol is NOT the same as hebrew letter alef,
- // U+05D0 although the same glyph could be used to depict both characters
- // Arrows
- refChar.put ("larr", new Character ('\u2190')); // leftwards arrow, U+2190 ISOnum
- refChar.put ("uarr", new Character ('\u2191')); // upwards arrow, U+2191 ISOnum
- refChar.put ("rarr", new Character ('\u2192')); // rightwards arrow, U+2192 ISOnum
- refChar.put ("darr", new Character ('\u2193')); // downwards arrow, U+2193 ISOnum
- refChar.put ("harr", new Character ('\u2194')); // left right arrow, U+2194 ISOamsa
- refChar.put ("crarr", new Character ('\u21b5')); // downwards arrow with corner leftwards = carriage return, U+21B5 NEW
- refChar.put ("lArr", new Character ('\u21d0')); // leftwards double arrow, U+21D0 ISOtech
- // ISO 10646 does not say that lArr is the same as the 'is implied by' arrow
- // but also does not have any other character for that function. So ? lArr can
- // be used for 'is implied by' as ISOtech suggests
- refChar.put ("uArr", new Character ('\u21d1')); // upwards double arrow, U+21D1 ISOamsa
- refChar.put ("rArr", new Character ('\u21d2')); // rightwards double arrow, U+21D2 ISOtech
- // ISO 10646 does not say this is the 'implies' character but does not have
- // another character with this function so ?
- // rArr can be used for 'implies' as ISOtech suggests
- refChar.put ("dArr", new Character ('\u21d3')); // downwards double arrow, U+21D3 ISOamsa
- refChar.put ("hArr", new Character ('\u21d4')); // left right double arrow, U+21D4 ISOamsa
- // Mathematical Operators
- refChar.put ("forall", new Character ('\u2200')); // for all, U+2200 ISOtech
- refChar.put ("part", new Character ('\u2202')); // partial differential, U+2202 ISOtech
- refChar.put ("exist", new Character ('\u2203')); // there exists, U+2203 ISOtech
- refChar.put ("empty", new Character ('\u2205')); // empty set = null set = diameter, U+2205 ISOamso
- refChar.put ("nabla", new Character ('\u2207')); // nabla = backward difference, U+2207 ISOtech
- refChar.put ("isin", new Character ('\u2208')); // element of, U+2208 ISOtech
- refChar.put ("notin", new Character ('\u2209')); // not an element of, U+2209 ISOtech
- refChar.put ("ni", new Character ('\u220b')); // contains as member, U+220B ISOtech
- // should there be a more memorable name than 'ni'?
- refChar.put ("prod", new Character ('\u220f')); // n-ary product = product sign, U+220F ISOamsb
- // prod is NOT the same character as U+03A0 'greek capital letter pi' though
- // the same glyph might be used for both
- refChar.put ("sum", new Character ('\u2211')); // n-ary sumation, U+2211 ISOamsb
- // sum is NOT the same character as U+03A3 'greek capital letter sigma'
- // though the same glyph might be used for both
- refChar.put ("minus", new Character ('\u2212')); // minus sign, U+2212 ISOtech
- refChar.put ("lowast", new Character ('\u2217')); // asterisk operator, U+2217 ISOtech
- refChar.put ("radic", new Character ('\u221a')); // square root = radical sign, U+221A ISOtech
- refChar.put ("prop", new Character ('\u221d')); // proportional to, U+221D ISOtech
- refChar.put ("infin", new Character ('\u221e')); // infinity, U+221E ISOtech
- refChar.put ("ang", new Character ('\u2220')); // angle, U+2220 ISOamso
- refChar.put ("and", new Character ('\u2227')); // logical and = wedge, U+2227 ISOtech
- refChar.put ("or", new Character ('\u2228')); // logical or = vee, U+2228 ISOtech
- refChar.put ("cap", new Character ('\u2229')); // intersection = cap, U+2229 ISOtech
- refChar.put ("cup", new Character ('\u222a')); // union = cup, U+222A ISOtech
- refChar.put ("int", new Character ('\u222b')); // integral, U+222B ISOtech
- refChar.put ("there4", new Character ('\u2234')); // therefore, U+2234 ISOtech
- refChar.put ("sim", new Character ('\u223c')); // tilde operator = varies with = similar to, U+223C ISOtech
- // tilde operator is NOT the same character as the tilde, U+007E,
- // although the same glyph might be used to represent both
- refChar.put ("cong", new Character ('\u2245')); // approximately equal to, U+2245 ISOtech
- refChar.put ("asymp", new Character ('\u2248')); // almost equal to = asymptotic to, U+2248 ISOamsr
- refChar.put ("ne", new Character ('\u2260')); // not equal to, U+2260 ISOtech
- refChar.put ("equiv", new Character ('\u2261')); // identical to, U+2261 ISOtech
- refChar.put ("le", new Character ('\u2264')); // less-than or equal to, U+2264 ISOtech
- refChar.put ("ge", new Character ('\u2265')); // greater-than or equal to, U+2265 ISOtech
- refChar.put ("sub", new Character ('\u2282')); // subset of, U+2282 ISOtech
- refChar.put ("sup", new Character ('\u2283')); // superset of, U+2283 ISOtech
- // note that nsup, 'not a superset of, U+2283' is not covered by the Symbol
- // font encoding and is not included. Should it be, for symmetry?
- // It is in ISOamsn
- refChar.put ("nsub", new Character ('\u2284')); // not a subset of, U+2284 ISOamsn
- refChar.put ("sube", new Character ('\u2286')); // subset of or equal to, U+2286 ISOtech
- refChar.put ("supe", new Character ('\u2287')); // superset of or equal to, U+2287 ISOtech
- refChar.put ("oplus", new Character ('\u2295')); // circled plus = direct sum, U+2295 ISOamsb
- refChar.put ("otimes", new Character ('\u2297')); // circled times = vector product, U+2297 ISOamsb
- refChar.put ("perp", new Character ('\u22a5')); // up tack = orthogonal to = perpendicular, U+22A5 ISOtech
- refChar.put ("sdot", new Character ('\u22c5')); // dot operator, U+22C5 ISOamsb
- // dot operator is NOT the same character as U+00B7 middle dot
- // Miscellaneous Technical
- refChar.put ("lceil", new Character ('\u2308')); // left ceiling = apl upstile, U+2308 ISOamsc
- refChar.put ("rceil", new Character ('\u2309')); // right ceiling, U+2309 ISOamsc
- refChar.put ("lfloor", new Character ('\u230a')); // left floor = apl downstile, U+230A ISOamsc
- refChar.put ("rfloor", new Character ('\u230b')); // right floor, U+230B ISOamsc
- refChar.put ("lang", new Character ('\u2329')); // left-pointing angle bracket = bra, U+2329 ISOtech
- // lang is NOT the same character as U+003C 'less than'
- // or U+2039 'single left-pointing angle quotation mark'
- refChar.put ("rang", new Character ('\u232a')); // right-pointing angle bracket = ket, U+232A ISOtech
- // rang is NOT the same character as U+003E 'greater than'
- // or U+203A 'single right-pointing angle quotation mark'
- // Geometric Shapes
- refChar.put ("loz", new Character ('\u25ca')); // lozenge, U+25CA ISOpub
- // Miscellaneous Symbols
- refChar.put ("spades", new Character ('\u2660')); // black spade suit, U+2660 ISOpub
- // black here seems to mean filled as opposed to hollow
- refChar.put ("clubs", new Character ('\u2663')); // black club suit = shamrock, U+2663 ISOpub
- refChar.put ("hearts", new Character ('\u2665')); // black heart suit = valentine, U+2665 ISOpub
- refChar.put ("diams", new Character ('\u2666')); // black diamond suit, U+2666 ISOpub
- // Special characters for HTML
- // Character entity set. Typical invocation:
- //
- // %HTMLspecial;
- // Portions © International Organization for Standardization 1986:
- // Permission to copy in any form is granted for use with
- // conforming SGML systems and applications as defined in
- // ISO 8879, provided this notice is included in all copies.
- // Relevant ISO entity set is given unless names are newly introduced.
- // New names (i.e., not in ISO 8879 list) do not clash with any
- // existing ISO 8879 entity names. ISO 10646 character numbers
- // are given for each character, in hex. CDATA values are decimal
- // conversions of the ISO 10646 values and refer to the document
- // character set. Names are ISO 10646 names.
- // C0 Controls and Basic Latin
- refChar.put ("quot", new Character ('\u0022')); // quotation mark = APL quote, U+0022 ISOnum
- refChar.put ("amp", new Character ('\u0026')); // ampersand, U+0026 ISOnum
- refChar.put ("lt", new Character ('\u003c')); // less-than sign, U+003C ISOnum
- refChar.put ("gt", new Character ('\u003e')); // greater-than sign, U+003E ISOnum
- // Latin Extended-A
- refChar.put ("OElig", new Character ('\u0152')); // latin capital ligature OE, U+0152 ISOlat2
- refChar.put ("oelig", new Character ('\u0153')); // latin small ligature oe, U+0153 ISOlat2
- // ligature is a misnomer, this is a separate character in some languages
- refChar.put ("Scaron", new Character ('\u0160')); // latin capital letter S with caron, U+0160 ISOlat2
- refChar.put ("scaron", new Character ('\u0161')); // latin small letter s with caron, U+0161 ISOlat2
- refChar.put ("Yuml", new Character ('\u0178')); // latin capital letter Y with diaeresis, U+0178 ISOlat2
- // Spacing Modifier Letters
- refChar.put ("circ", new Character ('\u02c6')); // modifier letter circumflex accent, U+02C6 ISOpub
- refChar.put ("tilde", new Character ('\u02dc')); // small tilde, U+02DC ISOdia
- // General Punctuation
- refChar.put ("ensp", new Character ('\u2002')); // en space, U+2002 ISOpub
- refChar.put ("emsp", new Character ('\u2003')); // em space, U+2003 ISOpub
- refChar.put ("thinsp", new Character ('\u2009')); // thin space, U+2009 ISOpub
- refChar.put ("zwnj", new Character ('\u200c')); // zero width non-joiner, U+200C NEW RFC 2070
- refChar.put ("zwj", new Character ('\u200d')); // zero width joiner, U+200D NEW RFC 2070
- refChar.put ("lrm", new Character ('\u200e')); // left-to-right mark, U+200E NEW RFC 2070
- refChar.put ("rlm", new Character ('\u200f')); // right-to-left mark, U+200F NEW RFC 2070
- refChar.put ("ndash", new Character ('\u2013')); // en dash, U+2013 ISOpub
- refChar.put ("mdash", new Character ('\u2014')); // em dash, U+2014 ISOpub
- refChar.put ("lsquo", new Character ('\u2018')); // left single quotation mark, U+2018 ISOnum
- refChar.put ("rsquo", new Character ('\u2019')); // right single quotation mark, U+2019 ISOnum
- refChar.put ("sbquo", new Character ('\u201a')); // single low-9 quotation mark, U+201A NEW
- refChar.put ("ldquo", new Character ('\u201c')); // left double quotation mark, U+201C ISOnum
- refChar.put ("rdquo", new Character ('\u201d')); // right double quotation mark, U+201D ISOnum
- refChar.put ("bdquo", new Character ('\u201e')); // double low-9 quotation mark, U+201E NEW
- refChar.put ("dagger", new Character ('\u2020')); // dagger, U+2020 ISOpub
- refChar.put ("Dagger", new Character ('\u2021')); // double dagger, U+2021 ISOpub
- refChar.put ("permil", new Character ('\u2030')); // per mille sign, U+2030 ISOtech
- refChar.put ("lsaquo", new Character ('\u2039')); // single left-pointing angle quotation mark, U+2039 ISO proposed
- // lsaquo is proposed but not yet ISO standardized
- refChar.put ("rsaquo", new Character ('\u203a')); // single right-pointing angle quotation mark, U+203A ISO proposed
- // rsaquo is proposed but not yet ISO standardized
- refChar.put ("euro", new Character ('\u20ac')); // euro sign, U+20AC NEW
- }
-
- /**
- * Table mapping character to entity reference kernel.
- *
Character
->String
- */
- protected static Map charRefTable;
- static
- {
- charRefTable = new HashMap (refChar.size ());
- Iterator iterator = refChar.keySet ().iterator ();
- while (iterator.hasNext ())
- {
- String key = (String)iterator.next ();
- Character character = (Character)refChar.get (key);
- charRefTable.put (character, key);
- }
- }
-
- /**
- * Private constructor.
- * This class is fully static and thread safe.
- */
- private Translate ()
- {
- }
-
- /**
- * Convert a reference to a unicode character.
- * Convert a single numeric character reference or character entity reference
- * to a unicode character.
- * @param string The string to convert. Of the form &xxxx; or &#xxxx; with
- * or without the leading ampersand or trailing semi-colon.
- * @return The converted character or '\0' (zero) if the string is an
- * invalid reference.
- */
- public static char convertToChar (String string)
- {
- int length;
- Character item;
- char ret;
-
- ret = 0;
-
- length = string.length ();
- if (0 < length)
- {
- if ('&' == string.charAt (0))
- {
- string = string.substring (1);
- length--;
- }
- if (0 < length)
- {
- if (';' == string.charAt (length - 1))
- string = string.substring (0, --length);
- if (0 < length)
- {
- if ('#' == string.charAt (0))
- try
- {
- ret = (char)Integer.parseInt (string.substring (1));
- }
- catch (NumberFormatException nfe)
- {
- /* failed conversion, return 0 */
- }
- else
- {
- item = (Character)refChar.get (string);
- if (null != item)
- ret = item.charValue ();
- }
- }
- }
- }
-
- return (ret);
- }
-
- /**
- * Decode a string containing references.
- * Change all numeric character reference and character entity references
- * to unicode characters.
- * @param string The string to translate.
- */
- public static String decode (String string)
- {
- int index;
- int length;
- int amp;
- int semi;
- String code;
- char character;
- StringBuffer ret;
- ret = new StringBuffer (string.length ());
- index = 0;
- length = string.length ();
- while ((index < length) && (-1 != (amp = string.indexOf ('&', index))))
- {
- ret.append (string.substring (index, amp));
- index = amp + 1;
- if (amp < length - 1)
- {
- semi = string.indexOf (';', amp);
- if (-1 != semi)
- code = string.substring (amp, semi + 1);
- else
- code = string.substring (amp);
- if (0 != (character = convertToChar (code)))
- index += code.length () - 1;
- else
- character = '&';
- }
- else
- character = '&';
- ret.append (character);
- }
- if (index < length)
- ret.append (string.substring (index));
- return (ret.toString ());
- }
-
- /**
- * Convert a character to a character entity reference.
- * Convert a unicode character to a character entity reference of
- * the form &xxxx;.
- * @param character The character to convert.
- * @return The converted character or null
if the character
- * is not one of the known entity references.
- */
- public static String convertToString (Character character)
- {
- StringBuffer buffer;
- String ret;
- if (null != (ret = (String)charRefTable.get (character)))
- {
- buffer = new StringBuffer (ret.length () + 2);
- buffer.append ('&');
- buffer.append (ret);
- buffer.append (';');
- ret = buffer.toString ();
- }
- return (ret);
- }
-
- /**
- * Convert a character to a numeric character reference.
- * Convert a unicode character to a numeric character reference of
- * the form &#xxxx;.
- * @param character The character to convert.
- * @return The converted character.
- */
- public static String convertToString (int character)
- {
- StringBuffer ret;
- ret = new StringBuffer (13); /* */
- ret.append ("");
- ret.append (character);
- ret.append (';');
- return (ret.toString ());
- }
-
- /**
- * Encode a string to use references.
- * Change all characters that are not ASCII to their numeric character
- * reference or character entity reference.
- * This implementation is inefficient, allocating a new
- * Character
for each character in the string,
- * but this class is primarily intended to decode strings
- * so efficiency and speed in the encoding was not a priority.
- * @param string The string to translate.
- */
- public static String encode (String string)
- {
- int length;
- char c;
- Character character;
- String value;
- StringBuffer ret;
- ret = new StringBuffer (string.length () * 6);
- length = string.length ();
- for (int i = 0; i < length; i++)
- {
- c = string.charAt (i);
- character = new Character (c);
- if (null != (value = convertToString (character)))
- ret.append (value);
- else if (!((c > 0x001F) && (c < 0x007F)))
- {
- value = convertToString (c);
- ret.append (value);
- }
- else
- ret.append (character);
- }
- return (ret.toString ());
- }
-}
diff --git a/source/mir/util/xml/XMLParserEngine.java b/source/mir/util/xml/XMLParserEngine.java
index 9b4d9286..8202e0e6 100755
--- a/source/mir/util/xml/XMLParserEngine.java
+++ b/source/mir/util/xml/XMLParserEngine.java
@@ -42,7 +42,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
-import mir.util.ExceptionFunctions;
+import mir.util.ExceptionRoutines;
import mir.util.xml.html.XMLHTMLParserProvider;
public class XMLParserEngine {
@@ -136,7 +136,7 @@ public class XMLParserEngine {
provider.parse(aReader, runner);
}
catch (Throwable e) {
- Throwable t = ExceptionFunctions.traceCauseException(e);
+ Throwable t = ExceptionRoutines.traceCauseException(e);
if (t instanceof XMLParserExc && runner.getLocator()!=null) {
((XMLParserExc) t).setLocation(runner.getLocator().getLineNr(), runner.getLocator().getColumnNr());
diff --git a/source/mir/util/xml/XMLSAXParserProvider.java b/source/mir/util/xml/XMLSAXParserProvider.java
index c5ee60ab..d47723c9 100755
--- a/source/mir/util/xml/XMLSAXParserProvider.java
+++ b/source/mir/util/xml/XMLSAXParserProvider.java
@@ -2,7 +2,7 @@ package mir.util.xml;
import java.util.Map;
-import mir.util.ExceptionFunctions;
+import mir.util.ExceptionRoutines;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
@@ -36,7 +36,7 @@ class XMLSAXParserProvider implements XMLParserEngine.XMLParserProvider {
parser.parse(new InputSource(aReader), new SAXHandler(aReceiver));
}
catch (org.xml.sax.SAXException e) {
- Throwable t = ExceptionFunctions.traceCauseException(e);
+ Throwable t = ExceptionRoutines.traceCauseException(e);
if (t instanceof XMLParserExc) {
throw (XMLParserExc) t;
diff --git a/source/mircoders/abuse/FilterEngine.java b/source/mircoders/abuse/FilterEngine.java
index 41b0d40a..1981946a 100755
--- a/source/mircoders/abuse/FilterEngine.java
+++ b/source/mircoders/abuse/FilterEngine.java
@@ -360,7 +360,7 @@ public class FilterEngine {
while (i.hasNext()) {
EntityAdapter entityAdapter = (EntityAdapter) i.next();
List filters = new ArrayList();
- Iterator j = (Iterator) entityAdapter.get("to_filters");
+ Iterator j = (Iterator) entityAdapter.getIterator("to_filters");
while (j.hasNext()) {
filters.add(((EntityAdapter) j.next()).getEntity());
}
diff --git a/source/mircoders/entity/EntityImages.java b/source/mircoders/entity/EntityImages.java
index eb6392ae..0c8f28ef 100755
--- a/source/mircoders/entity/EntityImages.java
+++ b/source/mircoders/entity/EntityImages.java
@@ -30,18 +30,15 @@
package mircoders.entity;
+import mir.log.LoggerWrapper;
+import mir.media.image.ImageMagickImageProcessor;
+import mir.media.image.ImageProcessor;
+import mir.storage.DatabaseFailure;
+
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.SQLException;
-import mir.log.LoggerWrapper;
-import mir.storage.DatabaseFailure;
-import mir.util.StreamCopier;
-import mir.media.image.ImageProcessor;
-// FIXME: delete this when finished testing ImageMagickImageProcessor
-//import mir.media.image.JAIImageProcessor;
-import mir.media.image.ImageMagickImageProcessor;
-
public class EntityImages extends EntityUploadedMedia
{
private int maxImageSize = configuration.getInt("Producer.Image.MaxSize");
@@ -75,13 +72,8 @@ public class EntityImages extends EntityUploadedMedia
public void setImage(InputStream anInputStream, String type) throws DatabaseFailure {
if (anInputStream != null) {
try {
- // FIXME: delete this when finished testing ImageMagickImageProcessor
- //ByteArrayOutputStream inputData = new ByteArrayOutputStream();
- //StreamCopier.copy(anInputStream, inputData);
-
ImageProcessor processor = new ImageMagickImageProcessor(anInputStream);
- // FIXME: delete this when finished testing ImageMagickImageProcessor
- //ImageProcessor processor = new JAIImageProcessor(inputData.toByteArray());
+
processor.descaleImage(maxImageSize, minDescaleRatio, minDescaleReduction);
ByteArrayOutputStream imageData = new ByteArrayOutputStream();
diff --git a/source/mircoders/global/Abuse.java b/source/mircoders/global/Abuse.java
index a6afb11d..e7dc56fd 100755
--- a/source/mircoders/global/Abuse.java
+++ b/source/mircoders/global/Abuse.java
@@ -51,7 +51,7 @@ import mir.entity.Entity;
import mir.entity.adapter.EntityAdapterModel;
import mir.log.LoggerWrapper;
import mir.session.Request;
-import mir.util.DateTimeFunctions;
+import mir.util.DateTimeRoutines;
import mir.util.EntityUtility;
import mir.util.GeneratorFormatAdapters;
import mir.util.StringRoutines;
@@ -159,7 +159,7 @@ public class Abuse {
StringBuffer line = new StringBuffer();
- line.append(DateTimeFunctions.advancedDateFormat(
+ line.append(DateTimeRoutines.advancedDateFormat(
configuration.getString("Mir.DefaultDateTimeFormat"),
(new GregorianCalendar()).getTime(), configuration.getString("Mir.DefaultTimezone")));
@@ -199,7 +199,7 @@ public class Abuse {
StringBuffer line = new StringBuffer();
- line.append(DateTimeFunctions.advancedDateFormat(
+ line.append(DateTimeRoutines.advancedDateFormat(
configuration.getString("Mir.DefaultDateTimeFormat"),
(new GregorianCalendar()).getTime(), configuration.getString("Mir.DefaultTimezone")));
diff --git a/source/mircoders/global/ProducerEngine.java b/source/mircoders/global/ProducerEngine.java
index 3de07eaa..201183aa 100755
--- a/source/mircoders/global/ProducerEngine.java
+++ b/source/mircoders/global/ProducerEngine.java
@@ -41,6 +41,7 @@ import mir.log.LoggerToWriterAdapter;
import mir.log.LoggerWrapper;
import mir.producer.Producer;
import mir.producer.ProducerFactory;
+import mir.producer.ProductionContext;
import mir.util.GeneratorFormatAdapters;
import mir.util.StringRoutines;
@@ -195,6 +196,7 @@ public class ProducerEngine {
private String factoryName;
private String verb;
private Producer producer;
+ private ProductionContext productionContext;
public ProducerJob(String aFactory, String aVerb) {
factoryName = aFactory;
@@ -211,17 +213,17 @@ public class ProducerEngine {
}
public void abort() {
- if (producer!=null) {
- producer.abort();
+ if (producer!=null && productionContext!=null) {
+ producer.abort(productionContext);
}
}
public boolean run() {
- ProducerFactory factory;
+ final ProducerFactory factory;
long startTime;
long endTime;
boolean result = false;
- Map startingMap = new HashMap();
+ final Map startingMap = new HashMap();
Map mirMap = new HashMap();
mirMap.put("producer", factoryName);
mirMap.put("verb", verb);
@@ -240,8 +242,43 @@ public class ProducerEngine {
synchronized(factory) {
producer = factory.makeProducer(verb, startingMap);
}
+
if (producer!=null) {
- result = producer.produce(logger);
+ try {
+ MirGlobal.localizer().producers().beforeProducerTask(factoryName, verb);
+ }
+ catch (Throwable t) {
+ logger.warn("Misbehaving beforeProducerTask",t );
+ }
+
+ productionContext = new ProductionContext() {
+ public ProducerFactory getFactory() {
+ return factory;
+ }
+
+ public Producer getProducer() {
+ return producer;
+ }
+
+ public String getVerb() {
+ return verb;
+ }
+
+ public LoggerWrapper getLogger() {
+ return logger;
+ }
+
+ public Map getValueSet() {
+ return startingMap;
+ }
+ };
+ result = producer.execute(productionContext);
+ try {
+ MirGlobal.localizer().producers().afterProducerTask(factoryName, verb);
+ }
+ catch (Throwable t) {
+ logger.warn("Misbehaving afterProducerTask", t);
+ }
}
}
}
diff --git a/source/mircoders/localizer/MirAdminInterfaceLocalizer.java b/source/mircoders/localizer/MirAdminInterfaceLocalizer.java
index 35777234..3c5880dd 100755
--- a/source/mircoders/localizer/MirAdminInterfaceLocalizer.java
+++ b/source/mircoders/localizer/MirAdminInterfaceLocalizer.java
@@ -101,8 +101,19 @@ public interface MirAdminInterfaceLocalizer {
public List simpleArticleOperations();
public interface MirSimpleEntityOperation {
+ /**
+ * Returns the name of the operation. Must be unique and immutable.
+ */
public String getName();
+
+ /**
+ * Is the operation valid for the given {@link EntityAdapter}
+ */
public boolean isAvailable(EntityAdapter anEntity) throws MirLocalizerExc, MirLocalizerFailure;
+
+ /**
+ * perform the operation on the given {@link EntityAdapter} as the given user
+ */
public void perform(EntityAdapter aUser, EntityAdapter anEntity) throws MirLocalizerExc, MirLocalizerFailure;
}
}
\ No newline at end of file
diff --git a/source/mircoders/localizer/MirLocalizer.java b/source/mircoders/localizer/MirLocalizer.java
index 31651946..228193a4 100755
--- a/source/mircoders/localizer/MirLocalizer.java
+++ b/source/mircoders/localizer/MirLocalizer.java
@@ -48,6 +48,7 @@ package mircoders.localizer;
* classes can be extended to override default behavior.