########## admin ##########
# language: english
-# $Id: admin_en.properties,v 1.21 2002/10/20 03:22:44 maulwurf Exp $
+# $Id: admin_en.properties,v 1.22 2002/10/25 03:25:13 zapata Exp $
# general
yes=yes
start.content.last_changes=latest changes
start.content.with_comments=with internal comments
start.content.search=search
-start.generate.title=GENERATE MANUALLY
-start.generate.all.title=all areas
-start.generate.all.new=all new (standard, update to www > 5min.)
-start.generate.parts.title=specific parts of the site
-start.generate.startpages.new=new startpage
-start.generate.all_forced=all (forced)
-start.generate.all_sync=all (forced + sync)
-start.generate.content.new=new content
-start.generate.topics.new=new topics
-start.generate.postings.new=new openpostings
-start.generate.images.new=new images
-start.generate.audio.new=new audio files
-start.generate.video.new=new video files
-start.generate.other.new=new other media
-start.generate.navigation=navigation
+
+start.producers.title=GENERATE MANUALLY
+start.producers.produceAllNew=Generate all new
+start.producers.advanced=Advanced page (use with care!)
+
start.coverage.title=COVERAGE
start.topics.title=TOPICS
start.images.title=PICTURES
foot.top=top
+
+
+producer.producer = Producer name
+producer.verb.name = Task name
+producer.verb.description = Task description
+producer.verb.enqueue = enqueue
+
+producer.job.name = Job
+producer.job.status = Status
+producer.job.date = Last change
+producer.job.cancel = cancel
+producer.job.abort = abort
+
+producer.jobqueue.title = Current jobs
+producer.jobqueue.refresh = refresh
+producer.producerlist.title = Add a new job
+
+
+
########## error ##########
-error.htmltitle=the system is the error
-error.title=OOPS!
-error.text=That can happen. Even if the following error message may not be very useful to you, it could be very helpful for <a href="mailto:{0}">{1}</a>:
-error.text2=So please send a mail with the <font color="Red">red text</font> and a detailed error description to <a href="mailto:{0}">{1}</a>. Thanks!
+error.htmltitle=the system caused an error
+error.title=The system caused an error
+error.text=This can happen. Even if the following error message is not be comprehensible for you, it might be helpful to <a href="mailto:{0}">{1}</a>:
+error.text2=So please send an e-mail with the <font color="Red">red text</font> and detailed information regarding the events that led to this error to <a href="mailto:{0}">{1}</a>. Thanks!
-usererror.htmltitle=input error
-usererror.title=OOPS!
+usererror.htmltitle=validation error
+usererror.title=Validation error
usererror.text=Your input caused the following error:
usererror.what_to_do=Please press the back button and try it again
+
+infomessage.title = Information
+infomessage.produceAllNewAddedToQueue = Your request has been added to the queue.
StandardLanguage=de
DirectOpenposting=yes
+Log.LogClass = mir.log.log4j.LoggerImpl
+Log.log4j.ConfigurationFile = etc/log4j.properties
+Log.Home = log
+
Mir.Localizer=mircoders.localizer.basic.MirBasicLocalizer
Mir.Localizer.Logfile=log/localizer.log
Mir.Localizer.OpenPosting.GeneratorLibrary= default=freemarker(etc/open/)
# Which producers need to be called after an article (resp. a comment) is posted
-Mir.Localizer.OpenPosting.ContentProducers= media.new;articles.new;startpage.new;synchronization.run
-Mir.Localizer.OpenPosting.CommentProducers= articles.new;synchronization.run
+Mir.Localizer.OpenPosting.ContentProducers= media.new;articles.changed;startpage.generate;synchronization.run
+Mir.Localizer.OpenPosting.CommentProducers= articles.changed;synchronization.run
+
+# Which producers need to be called after the "produce all new" link is clicked
+from admin
+Mir.Localizer.Producer.AllNewProducers= media.new;articles.changed;startpage.run;syn
+chronization.run
+
#note that you can't make pdf's without making fo's
GenerateFO=yes
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=DEBUG, A1
-# A1 is set to be a ConsoleAppender.
+log4j.rootLogger= DEBUG, A1
+log4j.logger.servlet= INFO, ServletA
+
log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.ServletA=org.apache.log4j.RollingFileAppender
+log4j.appender.ServletA.File=${log.home}/servlet.log
+
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+
+log4j.appender.ServletA.layout=org.apache.log4j.PatternLayout
+log4j.appender.ServletA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
<List key="breakingnews" table="breakingNews" limit="10"
order="webdb_create desc"/>
-
-
<Language>
<Generate
generator="/startpage.template"
</Language>
</body>
</producer>
+
+ <producer name="synchronization">
+ <verbs>
+ <verb name="run" default="1" description="Synchronizes the publication site with the production site"/>
+ </verbs>
+
+ <body>
+ <If condition="config['Rsync']">
+ <then>
+ <Execute command="${config['Rsync.Script.Path']}"/>
+ </then>
+ </If>
+ </body>
+ </producer>
+
</producers>
/**
* Mir.java - main servlet, that dispatches to servletmodules
*
- * @author $Author: bruno $
- * @version $Revision: 1.20 $ $Date: 2002/10/09 16:09:05 $
+ * @author $Author: zapata $
+ * @version $Revision: 1.21 $ $Date: 2002/10/25 03:25:13 $
*
* $Log: Mir.java,v $
+ * Revision 1.21 2002/10/25 03:25:13 zapata
+ * - producer links are moved to an "advanced" page, not intended for normal
+ * users. Normal users have only 1 link "generate all new"
+ * - used br1's support for log4j at 1 place (ServletModuleDispatch)
+ * - misc. small changes/fixes here and there
+ *
* Revision 1.20 2002/10/09 16:09:05 bruno
* contains only admin templates which should not be changed by users
*
}
catch (ServletModuleException e) {
handleError(req, res, res.getWriter(),
- "ServletException in Module " + moduleName + " -- " + e.toString());
+ "ServletException in Module " + moduleName + " -- " + e.getMessage());
}
catch (ServletModuleUserException e) {
- handleUserError(req, res, res.getWriter(), e.getMsg());
+ handleUserError(req, res, res.getWriter(), e.getMessage());
}
// timing...
}
catch (Exception e) {
throw new ServletModuleException("*** error resolving classname for " +
- moduleName + " -- " + e.toString());
+ moduleName + " -- " + e.getMessage());
}
}
else
out.close();
}
catch (Exception e) {
- System.err.println("Error in ErrorTemplate");
+ e.printStackTrace(System.out);
+ System.err.println("Error in ErrorTemplate: " + e.getMessage());
}
}
out.close();
}
catch (Exception e) {
- System.err.println("Fehler in UserErrorTemplate");
+ System.err.println("Error in UserErrorTemplate");
}
}
return usersModule.getUserForLogin(user, password);
}
catch (Exception e) {
- theLog.printDebugInfo(e.toString());
+ theLog.printDebugInfo(e.getMessage());
e.printStackTrace();
return null;
}
mergeData.put("articletypes", DatabaseArticleType.getInstance().selectByWhereClause("", "id", 0, 20));
+/*
SimpleList producersData = new SimpleList();
Iterator i = MirGlobal.localizer().producers().factories().entrySet().iterator();
while (i.hasNext()) {
producersData.add(producerData);
}
mergeData.put("producers", producersData);
-
+ */
HTMLTemplateProcessor.process(res, startTemplate, mergeData, out, getLocale(req));
}
catch (Exception e) {
e.printStackTrace(System.out);
- handleError(req, res, out, "error while trying to send startpage. " + e.toString());
+ handleError(req, res, out, "error while trying to send startpage. " + e.getMessage());
}
}
ServletModuleDispatch.dispatch(ServletModuleOpenIndy.getInstance(),req,res);
}
catch (ServletModuleUserException e) {
- handleUserError(req,res,res.getWriter(), e.getMsg());
+ handleUserError(req,res,res.getWriter(), e.getMessage());
}
catch (ServletModuleException e){
e.printStackTrace();
- handleError(req,res,res.getWriter(), "OpenIndy :: ServletException in Module ServletModule -- " + e.toString());
+ handleError(req,res,res.getWriter(), "OpenIndy :: ServletException in Module ServletModule -- " + e.getMessage());
}
// timing...
sessionConnectTime = new java.util.Date().getTime() - startTime;
out.close();
}
catch (Exception e) {
- System.err.println("Fehler in UserErrorTemplate");
+ System.err.println("Error in UserErrorTemplate");
}
}
out.close();
}
catch (Exception e) {
- System.err.println("Fehler in ErrorTemplate");
+ System.err.println("Error in ErrorTemplate");
}
}
public interface Logger {
- public void debug( Object o, String s);
- public void info( Object o, String s);
- public void warn( Object o, String s);
- public void error( Object o, String s);
- public void fatal( Object o, String s);
+ public void debug( Object o, String s);
+ public void info( Object o, String s);
+ public void warn( Object o, String s);
+ public void error( Object o, String s);
+ public void fatal( Object o, String s);
}
--- /dev/null
+package mir.log;
+
+public class LoggerWrapper {
+ private Object object;
+
+ public LoggerWrapper( Object anObject ) {
+ object = anObject;
+ }
+
+ public void debug( String aMessage ) {
+ Log.debug(object, aMessage);
+ };
+
+ public void info( String aMessage ) {
+ Log.info(object, aMessage);
+ };
+
+ public void warn( String aMessage ) {
+ Log.warn(object, aMessage);
+ };
+
+
+ public void error( String aMessage ) {
+ Log.error(object, aMessage);
+ };
+
+ public void fatal( String aMessage ) {
+ Log.fatal(object, aMessage);
+ };
+}
\ No newline at end of file
import java.util.Map;
import java.util.HashMap;
+import mir.misc.MirConfig;
+
public class LoggerImpl implements mir.log.Logger {
private static Map loggers = new HashMap();
public LoggerImpl() {
- PropertyConfigurator.configure("log4j.properties");
+ System.setProperty("log.home", MirConfig.getPropWithHome("Log.Home"));
+ PropertyConfigurator.configure(MirConfig.getPropWithHome("Log.log4j.ConfigurationFile").trim());
}
private Logger getLogger( Object o ) {
String name;
- if (o instanceof Class) {
+
+ if (o instanceof String) {
+ name = (String) o;
+ } else if (o instanceof Class) {
name = ((Class)o).getName();
} else if (o!=null) {
name = o.getClass().getName();
throw new ProducerFailure(t.getMessage(), t);
}
};
-
}
\ No newline at end of file
subNodes.clear();
}
- public void produce(Map aValueSet, String aVerb, PrintWriter aLogger) throws ProducerFailure, ProducerExc {
- Iterator i = subNodes.iterator();
-
- while (i.hasNext()) {
- ProducerNode node = (ProducerNode) i.next();
- node.produce(aValueSet, aVerb, aLogger);
- }
+ protected boolean isAborted(Map aValueMap) {
+ Object producerValue = aValueMap.get(NodedProducer.PRODUCER_KEY);
+ return (
+ (producerValue instanceof NodedProducer) &&
+ ((NodedProducer) producerValue).getIsAborted());
}
- public Set buildVerbSet() {
+ public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure, ProducerExc {
Iterator i = subNodes.iterator();
- Set result = new HashSet();
- while (i.hasNext())
- result.addAll(((ProducerNode) i.next()).buildVerbSet());
-
- return result;
+ while (i.hasNext() && !isAborted(aValueMap)) {
+ ProducerNode node = (ProducerNode) i.next();
+ node.produce(aValueMap, aVerb, aLogger);
+ }
}
}
\ No newline at end of file
throw new ProducerFailure(e);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
\ No newline at end of file
throw new ProducerFailure("Copying " + source + " into " + destination + " failed: " + e.getMessage(), e);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
import mir.util.*;
public class EntityBatchingProducerNode implements ProducerNode {
- private Map verbs;
-
private String batchInfoKey;
private String batchDataKey;
private EntityAdapterModel model;
private String nrEntitiesToSkipExpression;
private String nrEntitiesPerBatchExpression;
private String minNrEntitiesInFirstBatchExpression;
- private String defaultNrBatchesToProcessExpression;
+ private String nrBatchesToProcessExpression;
private ProducerNode batchSubNode;
private ProducerNode batchListSubNode;
String aDefinition,
String aWhereClause,
String anOrderByClause,
- int anrEntitiesPerBatchExpression,
- int aminNrEntitiesInFirstBatchExpression,
- int anrEntitiesToSkipExpression,
- ProducerNode aBatchSubNode) {
- this(aBatchDataKey, aBatchInfoKey, aModel, aDefinition, aWhereClause,
- anOrderByClause, anrEntitiesPerBatchExpression, aminNrEntitiesInFirstBatchExpression, anrEntitiesToSkipExpression,
- aBatchSubNode, null);
- }
-
- public EntityBatchingProducerNode(
- String aBatchDataKey,
- String aBatchInfoKey,
- EntityAdapterModel aModel,
- String aDefinition,
- String aWhereClause,
- String anOrderByClause,
- int aNrEntitiesPerBatch,
- int aMinNrEntitiesInFirstBatch,
- int aNrEntitiesToSkip,
- ProducerNode aBatchSubNode,
- ProducerNode aBatchListSubNode) {
-
- this(aBatchDataKey, aBatchInfoKey, aModel, aDefinition,
- aWhereClause, anOrderByClause,
- Integer.toString(aNrEntitiesPerBatch),
- Integer.toString(aMinNrEntitiesInFirstBatch),
- Integer.toString(aNrEntitiesToSkip),
- "1",
- aBatchSubNode, aBatchListSubNode);
-
- }
-
- public EntityBatchingProducerNode(
- String aBatchDataKey,
- String aBatchInfoKey,
- EntityAdapterModel aModel,
- String aDefinition,
- String aWhereClause,
- String anOrderByClause,
String anrEntitiesPerBatchExpression,
String aminNrEntitiesInFirstBatchExpression,
String anrEntitiesToSkipExpression,
- String aDefaultNrBatchesToProcessExpression,
+ String aNrBatchesToProcessExpression,
ProducerNode aBatchSubNode,
ProducerNode aBatchListSubNode) {
batchSubNode = aBatchSubNode;
batchListSubNode = aBatchListSubNode;
- verbs = new HashMap();
-
batchDataKey = aBatchDataKey;
batchInfoKey = aBatchInfoKey;
model = aModel;
nrEntitiesToSkipExpression = anrEntitiesToSkipExpression;
nrEntitiesPerBatchExpression = anrEntitiesPerBatchExpression;
minNrEntitiesInFirstBatchExpression = aminNrEntitiesInFirstBatchExpression;
- defaultNrBatchesToProcessExpression = aDefaultNrBatchesToProcessExpression;
+ nrBatchesToProcessExpression = aNrBatchesToProcessExpression;
+ }
+
+ protected boolean isAborted(Map aValueMap) {
+ Object producerValue = aValueMap.get(NodedProducer.PRODUCER_KEY);
+ return (
+ (producerValue instanceof NodedProducer) &&
+ ((NodedProducer) producerValue).getIsAborted());
}
public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
Map batchData;
String expandedWhereClause;
String expandedOrderByClause;
- EntityBatchingProducerNodeVerb verb = (EntityBatchingProducerNodeVerb) verbs.get(aVerb);
List batchLocations;
BatchLocation location;
try {
- if (verb==null) {
- nrBatchesToProcess = ParameterExpander.evaluateIntegerExpressionWithDefault( aValueMap, defaultNrBatchesToProcessExpression, -1 );
- }
- else {
- nrBatchesToProcess=verb.nrBatchesToProcess;
- }
+ nrBatchesToProcess = ParameterExpander.evaluateIntegerExpressionWithDefault( aValueMap, nrBatchesToProcessExpression, -1 );
expandedWhereClause = ParameterExpander.expandExpression( aValueMap, whereClause );
expandedOrderByClause = ParameterExpander.expandExpression( aValueMap, orderByClause );
batchData.put("last", batchesData.get(batchesData.size()-1));
batchData.put("count", new Integer(batchesData.size()));
- if (batchListSubNode!=null) {
+ if (batchListSubNode!=null && (!isAborted(aValueMap))) {
batchListSubNode.produce(aValueMap, aVerb, aLogger);
}
}
if (batchSubNode!=null) {
- for (i=0; i<nrBatchesToProcess; i++) {
+ for (i=0; i<nrBatchesToProcess && !isAborted(aValueMap); i++) {
location = (BatchLocation) batchLocations.get(i);
batchData.put("current", batchesData.get(i));
nrEntities = aNrEntities;
}
}
-
- public Set buildVerbSet() {
- return verbs.keySet();
- };
-
- public void addVerb(String aVerb, int aNrPagesToGenerate) {
- verbs.put(aVerb, new EntityBatchingProducerNodeVerb(aNrPagesToGenerate));
- }
-
- private class EntityBatchingProducerNodeVerb {
- int nrBatchesToProcess;
-
- EntityBatchingProducerNodeVerb(int aNrBatchesToProcess) {
- nrBatchesToProcess = aNrBatchesToProcess;
- }
- }
}
import mir.util.*;
public class EntityEnumeratingProducerNode extends ProducerNodeDecorator {
- private Map verbs;
- private EntityEnumeratingProducerNodeVerb defaultVerb;
private String key;
private EntityAdapterModel model;
private String definition;
private String skip;
private String limit;
+ private String whereClause;
+ private String orderByClause;
+
public EntityEnumeratingProducerNode(
- String aKey,
- EntityAdapterModel aModel, String aDefinition,
- ProducerNode aSubNode) {
+ String aKey,
+ EntityAdapterModel aModel, String aDefinition,
+ String aWhereClause, String anOrderByClause,
+ String aLimit, String aSkip,
+ ProducerNode aSubNode) {
super(aSubNode);
- defaultVerb = null;
- verbs = new HashMap();
model = aModel;
definition = aDefinition;
key = aKey;
- }
- public EntityEnumeratingProducerNode(
- String aKey,
- EntityAdapterModel aModel, String aDefinition,
- String aDefaultWhereClause, String aDefaultOrderByClause,
- ProducerNode aSubNode) {
- this(aKey, aModel, aDefinition, aDefaultWhereClause, aDefaultOrderByClause, "", "", aSubNode);
- }
-
- public EntityEnumeratingProducerNode(
- String aKey,
- EntityAdapterModel aModel, String aDefinition,
- String aDefaultWhereClause, String aDefaultOrderByClause,
- String aLimit, String aSkip,
- ProducerNode aSubNode) {
- this(aKey, aModel, aDefinition, aSubNode);
+ whereClause = aWhereClause;
+ orderByClause = anOrderByClause;
limit= aLimit;
skip = aSkip;
- defaultVerb = new EntityEnumeratingProducerNodeVerb(aDefaultWhereClause, aDefaultOrderByClause);
}
public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
- EntityEnumeratingProducerNodeVerb verb = (EntityEnumeratingProducerNodeVerb) verbs.get(aVerb);
Iterator browser;
- if (verb==null)
- verb = defaultVerb;
-
- if (verb==null)
- throw new ProducerFailure("EntityEnumeratingProducerNode: unknown verb '"+aVerb+"'", null);
-
try {
browser = new EntityIteratorAdapter(
- ParameterExpander.expandExpression( aValueMap, verb.whereClause ),
- ParameterExpander.expandExpression( aValueMap, verb.orderByClause ),
+ ParameterExpander.expandExpression( aValueMap, whereClause ),
+ ParameterExpander.expandExpression( aValueMap, orderByClause ),
100,
model,
definition,
ParameterExpander.evaluateIntegerExpressionWithDefault( aValueMap, limit, -1),
ParameterExpander.evaluateIntegerExpressionWithDefault( aValueMap, skip, 0));
- while (browser.hasNext()) {
+ while (browser.hasNext() && !isAborted(aValueMap)) {
ParameterExpander.setValueForKey( aValueMap, key, browser.next());
super.produce(aValueMap, aVerb, aLogger);
}
throw new ProducerFailure(t.getMessage(), t);
}
};
-
- public Set buildVerbSet() {
- Set set;
-
- set = super.buildVerbSet();
- set.addAll(verbs.keySet());
-
- return set;
- };
-
- public void addVerb(String aVerb, String aWhereClause, String anOrderByClause) {
- verbs.put(aVerb, new EntityEnumeratingProducerNodeVerb(aWhereClause, anOrderByClause));
- }
-
- private class EntityEnumeratingProducerNodeVerb {
- String whereClause;
- String orderByClause;
-
- EntityEnumeratingProducerNodeVerb(String aWhereClause, String anOrderByClause) {
- whereClause = aWhereClause;
- orderByClause = anOrderByClause;
- }
- }
}
\ No newline at end of file
throw new ProducerFailure(t.getMessage(), t);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
\ No newline at end of file
throw new ProducerFailure(t.getMessage(), t);
}
};
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
\ No newline at end of file
throw new ProducerFailure(t.getMessage(), t);
}
};
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
\ No newline at end of file
throw new ProducerFailure(t.getMessage(), t);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
\ No newline at end of file
aLogger.println(" Time: " + (endTime-startTime) + " ms");
aLogger.flush();
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
\ No newline at end of file
throw new ProducerFailure(t.getMessage(), t);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
\ No newline at end of file
condition = aCondition;
}
+
public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
int loopNr;
int maxNrLoops;
try {
loopNr = 0;
maxNrLoops = ParameterExpander.evaluateIntegerExpressionWithDefault(aValueMap, limit, 1000);
- while (ParameterExpander.evaluateBooleanExpression(aValueMap, condition) && (loopNr<maxNrLoops)) {
+ while (ParameterExpander.evaluateBooleanExpression(aValueMap, condition) &&
+ (loopNr<maxNrLoops) &&
+ !isAborted(aValueMap)) {
super.produce(aValueMap, aVerb, aLogger);
loopNr++;
}
import java.io.*;
public class NodedProducer implements Producer {
- ProducerNode rootNode;
- String verb;
- Map baseValues;
+ 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) {
rootNode = aRootNode;
verb = aVerb;
baseValues = aBaseValues;
+ isAborted = false;
+ isAborted = false;
}
public void produce( PrintWriter aLogger ) throws ProducerFailure, ProducerExc {
valueMap = new HashMap();
valueMap.putAll(baseValues);
+ valueMap.put(PRODUCER_KEY, this);
rootNode.produce(valueMap, verb, aLogger);
+
+ synchronized(this) {
+ isFinished=true;
+ }
};
+
+ public void abort() {
+ synchronized(this) {
+ if (!isFinished)
+ isAborted=true;
+ }
+ }
+
+ public boolean getIsAborted() {
+ synchronized(this) {
+ return isAborted;
+ }
+ }
+
+ public boolean getIsFinished() {
+ synchronized(this) {
+ return isFinished;
+ }
+ }
}
public class NodedProducerFactory implements ProducerFactory {
private ProducerNode rootNode;
+ private List verbs;
+ private String name;
- public NodedProducerFactory(ProducerNode aRootNode) {
+ public NodedProducerFactory(String aName, ProducerNode aRootNode) {
rootNode = aRootNode;
+ verbs = new Vector();
+ name = aName;
+ }
+
+ public void addVerb(String aName, String aDescription) {
+ verbs.add(new SimpleProducerVerb(aName, aDescription));
+ }
+
+ public String getName() {
+ return name;
}
public mir.producer.Producer makeProducer(String aVerb, Map aBasicValueSet) throws ProducerFailure {
};
public Iterator verbs() {
- Set verbSet = rootNode.buildVerbSet();
-
- if (verbSet.isEmpty()) {
- verbSet = new HashSet();
-
- verbSet.add("(default)");
- }
-
- return verbSet.iterator();
+ return verbs.iterator();
};
}
public interface Producer {
public void produce( PrintWriter aLogger ) throws ProducerFailure, ProducerExc;
+ public void abort();
}
import java.util.*;
public interface ProducerFactory {
+ public interface ProducerVerb {
+ String getName();
+ String getDescription();
+ }
+
+ public String getName();
public Producer makeProducer(String aVerb, Map aStartingValues) throws ProducerFailure, ProducerExc;
- public Iterator verbs();
+ public Iterator verbs(); /* returns ProducerVerbs */
}
public interface ProducerNode {
public void produce(Map aValueSet, String aVerb, PrintWriter aLogger) throws ProducerExc, ProducerFailure;
- public Set buildVerbSet();
}
\ No newline at end of file
slave = aSlave;
}
- public void produce(Map aValueSet, String aVerb, PrintWriter aLogger) throws ProducerFailure, ProducerExc {
- if (slave!=null)
- slave.produce(aValueSet, aVerb, aLogger);
+ protected boolean isAborted(Map aValueMap) {
+ Object producerValue = aValueMap.get(NodedProducer.PRODUCER_KEY);
+ return (
+ (producerValue instanceof NodedProducer) &&
+ ((NodedProducer) producerValue).getIsAborted());
}
- public Set buildVerbSet() {
+ public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure, ProducerExc {
if (slave!=null)
- return slave.buildVerbSet();
- else
- return new HashSet();
+ slave.produce(aValueMap, aVerb, aLogger);
}
}
\ No newline at end of file
import mir.util.*;
import mir.misc.*;
-public class ResourceBundleProducerNode extends ProducerNodeDecorator {
+public class ResourceBundleProducerNode implements ProducerNode {
private String key;
private String bundleIdentifier;
private String languageIdentifier;
- public ResourceBundleProducerNode(String aKey, String aBundleIdentifier, ProducerNode aSubNode) {
- this (aKey, aBundleIdentifier, null, aSubNode);
+ public ResourceBundleProducerNode(String aKey, String aBundleIdentifier) {
+ this (aKey, aBundleIdentifier, null);
}
- public ResourceBundleProducerNode(String aKey, String aBundleIdentifier, String aLanguageIdentifier, ProducerNode aSubNode) {
- super(aSubNode);
-
+ public ResourceBundleProducerNode(String aKey, String aBundleIdentifier, String aLanguageIdentifier) {
bundleIdentifier = aBundleIdentifier;
languageIdentifier = aLanguageIdentifier;
key = aKey;
public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
Object messages;
-
try {
if (languageIdentifier!=null) {
messages =
ParameterExpander.expandExpression( aValueMap, bundleIdentifier ));
}
ParameterExpander.setValueForKey( aValueMap, key, messages );
-
- super.produce(aValueMap, aVerb, aLogger);
}
catch (Throwable t) {
throw new ProducerFailure(t.getMessage(), t);
throw new ProducerFailure("Executing script failed: " + e.getMessage(), e);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
--- /dev/null
+package mir.producer;
+
+public class SimpleProducerVerb implements ProducerFactory.ProducerVerb {
+ private String name;
+ private String description;
+
+ public SimpleProducerVerb(String aName, String aDescription) {
+ super();
+
+ name = aName;
+ description = aDescription;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+}
\ No newline at end of file
throw new ProducerFailure(t.getMessage(), t);
}
};
-
}
\ No newline at end of file
};
public ProducerNode constructNode() {
- return new ResourceBundleProducerNode(key, bundle, language, null );
+ return new ResourceBundleProducerNode(key, bundle, language);
};
}
Map.Entry entry = (Map.Entry) i.next();
if (definition.getIntegerParameters().keySet().contains(entry.getKey()))
- integerParameterValues.put(entry.getKey(), entry.getValue());
+ integerParameterValues.put(entry.getKey(), entry.getValue());
else
- stringParameterValues.put(entry.getKey(), entry.getValue());
+ stringParameterValues.put(entry.getKey(), entry.getValue());
}
};
super();
};
- public void parseFile(String aFileName, ProducerNodeBuilderLibrary aBuilderLibrary, Map aProducerFactories) throws ProducerConfigFailure {
+ public void parseFile(String aFileName, ProducerNodeBuilderLibrary aBuilderLibrary, List aProducerFactories) throws ProducerConfigFailure {
parseFile(aFileName, aBuilderLibrary, aProducerFactories, new Vector());
}
- public void parseFile(String aFileName, ProducerNodeBuilderLibrary aBuilderLibrary, Map aProducerFactories, List aUsedFiles) throws ProducerConfigFailure {
+ public void parseFile(String aFileName, ProducerNodeBuilderLibrary aBuilderLibrary, List aProducerFactories, List aUsedFiles) throws ProducerConfigFailure {
try {
builderLibrary = aBuilderLibrary;
scriptedNodeBuilderLibrary = new ProducerNodeBuilderLibrary();
private List usedFiles;
private InputSource inputSource;
- public ProducerConfigHandler(SAXParserFactory aParserFactory, Map aProducers, List aUsedFiles) {
+ public ProducerConfigHandler(SAXParserFactory aParserFactory, List aProducers, List aUsedFiles) {
super();
includeFileStack=new Stack();
}
public class RootSectionHandler extends SectionHandler {
- private Map producers;
+ private List producers;
- public RootSectionHandler(Map aProducers) {
+ public RootSectionHandler(List aProducers) {
producers = aProducers;
}
private final static String[] NODE_DEFINITION_OPTIONAL_ATTRIBUTES = { };
public class ProducersSectionHandler extends SectionHandler {
- private Map producers;
+ private List producers;
+ private Set producerNames;
private String name;
- public ProducersSectionHandler(Map aProducers) {
+ public ProducersSectionHandler(List aProducers) {
producers = aProducers;
+ producerNames = new HashSet();
}
public SectionHandler startElement(String aTag, Map anAttributes) throws ProducerConfigExc {
name = (String) anAttributes.get(PRODUCER_NAME_ATTRIBUTE);
ReaderTool.checkValidIdentifier( name );
- if (producers.containsKey(name))
+ if (producerNames.contains(name))
throw new ProducerConfigExc("Duplicate producer name: '" + name + "'");
name = (String) anAttributes.get(PRODUCER_NAME_ATTRIBUTE);
- return new ProducerSectionHandler();
+ return new ProducerSectionHandler(name);
}
else if (aTag.equals("nodedefinition")) {
ReaderTool.checkAttributes(anAttributes, NODE_DEFINITION_REQUIRED_ATTRIBUTES, NODE_DEFINITION_OPTIONAL_ATTRIBUTES);
public void endElement(SectionHandler aHandler) throws ProducerConfigExc {
if (aHandler instanceof ProducerSectionHandler) {
- producers.put(name, ((ProducerSectionHandler) aHandler).getProducerFactory());
+ producers.add(((ProducerSectionHandler) aHandler).getProducerFactory());
+ producerNames.add(((ProducerSectionHandler) aHandler).getProducerFactory().getName());
}
else if (aHandler instanceof NodeDefinitionSectionHandler) {
scriptedNodeBuilderLibrary.registerFactory(name,
public class ProducerSectionHandler extends SectionHandler {
private ProducerFactory producerFactory;
+ private String factoryName;
private ProducerNode body;
- private Map verbs;
+ private Map verbNodes;
+ private List verbs;
private String defaultVerb;
+ public ProducerSectionHandler(String aName) {
+ factoryName = aName;
+ }
+
public SectionHandler startElement(String aTag, Map anAttributes) throws ProducerConfigExc {
if (aTag.equals("verbs")) {
if (verbs!=null)
else if (aHandler instanceof ProducerVerbsSectionHandler)
{
verbs = ((ProducerVerbsSectionHandler) aHandler).getVerbs();
+ verbNodes = ((ProducerVerbsSectionHandler) aHandler).getVerbNodes();
defaultVerb = ((ProducerVerbsSectionHandler) aHandler).getDefaultVerb();
}
else throw new ProducerConfigExc("ProducerSectionHandler.endElement Internal error: Unexpected handler: " + aHandler.getClass().getName());
if (body==null)
throw new ProducerConfigExc("No body defined");
- producerFactory = new ScriptedProducerFactory(verbs, body, defaultVerb);
+ producerFactory = new ScriptedProducerFactory(factoryName, verbs, verbNodes, body, defaultVerb);
}
public ProducerFactory getProducerFactory() {
private final static String[] PRODUCER_VERB_OPTIONAL_ATTRIBUTES = { PRODUCER_VERB_DEFAULT_ATTRIBUTE, PRODUCER_VERB_DESCRIPTION_ATTRIBUTE };
public class ProducerVerbsSectionHandler extends SectionHandler {
- private Map verbs;
+ private Map verbNodes;
+ private List verbs;
private String defaultVerb;
private String currentVerb;
private String currentVerbDescription;
public ProducerVerbsSectionHandler() {
- verbs = new HashMap();
+ verbNodes = new HashMap();
+ verbs = new Vector();
defaultVerb = null;
}
ReaderTool.checkValidIdentifier( currentVerb );
- if (verbs.containsKey(currentVerb))
+ if (verbNodes.containsKey(currentVerb))
throw new ProducerConfigExc( "Duplicate definition of verb '" + currentVerb + "'" );
if (anAttributes.containsKey(PRODUCER_VERB_DEFAULT_ATTRIBUTE)) {
}
public void endElement(SectionHandler aHandler) {
- verbs.put(currentVerb, ((ProducerNodeSectionHandler) aHandler).getProducerNode());
+ verbNodes.put(currentVerb, ((ProducerNodeSectionHandler) aHandler).getProducerNode());
+ verbs.add(new SimpleProducerVerb(currentVerb, currentVerbDescription));
}
public void finishSection() {
return defaultVerb;
}
- public Map getVerbs() {
+ public List getVerbs() {
return verbs;
}
+
+ public Map getVerbNodes() {
+ return verbNodes;
+ }
}
public class EmptySectionHandler extends SectionHandler {
}
}
}
-
-
-/*
- / (expecting producers)
- producers/ (expecting nodedefinition, producer)
- nodedefinition (expecting parameters, definition)
- parameters (expecting parameter declarations)
- definition (expecting nodes, subnodes)
-*/
-
import mir.producer.*;
public class ScriptedProducerFactory implements ProducerFactory {
- private Map verbs;
+ private List verbs;
+ private Map verbNodes;
private ProducerNode body;
private String defaultVerb;
+ private String name;
- public ScriptedProducerFactory(Map aVerbs, ProducerNode aBody, String aDefaultVerb) {
+ public ScriptedProducerFactory(String aName, List aVerbs, Map aVerbNodes, ProducerNode aBody, String aDefaultVerb) {
verbs = aVerbs;
+ verbNodes = aVerbNodes;
body = aBody;
defaultVerb = aDefaultVerb;
+ name = aName;
}
- public ScriptedProducerFactory(Map aVerbs, ProducerNode aBody) {
- this(aVerbs, aBody, null);
+ public String getName() {
+ return name;
+ }
+
+ public ScriptedProducerFactory(String aName, List aVerbs, Map aVerbNodes, ProducerNode aBody) {
+ this(aName, aVerbs, aVerbNodes, aBody, null);
}
public Producer makeProducer(String aVerb, Map aStartingValues) throws ProducerFailure, ProducerExc {
CompositeProducerNode rootNode;
ProducerNode verbNode;
- if (verbs.containsKey(aVerb)) {
- verbNode = (ProducerNode) verbs.get(aVerb);
+ if (verbNodes.containsKey(aVerb)) {
+ verbNode = (ProducerNode) verbNodes.get(aVerb);
}
- else if (defaultVerb!=null && verbs.containsKey(defaultVerb)) {
- verbNode = (ProducerNode) verbs.get(defaultVerb);
+ else if (defaultVerb!=null && verbNodes.containsKey(defaultVerb)) {
+ verbNode = (ProducerNode) verbNodes.get(defaultVerb);
}
- else throw new ProducerExc("Undefined verb: " + aVerb);
+ else throw new ProducerExc("Undefined verb: " + aVerb + " (and no default verb was defined)");
rootNode = new CompositeProducerNode();
rootNode.addSubNode(verbNode);
};
public Iterator verbs() {
- return verbs.keySet().iterator();
+ return verbs.iterator();
}
}
\ No newline at end of file
nodeParameterValues.putAll(aNodeParameterValues);
}
- public Set buildVerbSet() {
- return new HashSet();
- }
-
public void produce(Map aValues, String aVerb, PrintWriter aLogger) throws ProducerFailure, ProducerExc {
try {
Map oldValues = new HashMap();
}
}
catch (Exception e) {
- throw new ServletModuleException(e.toString());
+ throw new ServletModuleException(e.getMessage());
}
}
deliver(req, res, mergeData, templateObjektString);
}
catch (Exception e) {
- throw new ServletModuleException(e.toString());
+ throw new ServletModuleException(e.getMessage());
}
}
list(req, res);
}
catch (Exception e) {
- throw new ServletModuleException(e.toString());
+ throw new ServletModuleException(e.getMessage());
}
}
}
}
catch (Exception e) {
- throw new ServletModuleException(e.toString());
+ throw new ServletModuleException(e.getMessage());
}
}
deliver(req, res, mainModule.getById(idParam), templateObjektString);
}
catch (ModuleException e) {
- throw new ServletModuleException(e.toString());
+ throw new ServletModuleException(e.getMessage());
}
}
//list(req,res);
}
catch (Exception e) {
- throw new ServletModuleException(e.toString());
+ throw new ServletModuleException(e.getMessage());
}
}
* @param tmpl Name des Templates
* @exception ServletModuleException
*/
- public void deliver(HttpServletRequest req, HttpServletResponse res,
- TemplateModelRoot rtm, TemplateModelRoot popups,
- String templateFilename)
- throws ServletModuleException {
- if (rtm == null) rtm = new SimpleHash();
- try {
- PrintWriter out = res.getWriter();
- HTMLTemplateProcessor.process(res, templateFilename, rtm, popups, out,
- getLocale(req), "bundles.admin");
+ public void deliver(HttpServletRequest req, HttpServletResponse res,
+ TemplateModelRoot rtm, TemplateModelRoot popups,
+ String templateFilename)
+ throws ServletModuleException {
+ if (rtm == null) rtm = new SimpleHash();
+ try {
+ PrintWriter out = res.getWriter();
+ HTMLTemplateProcessor.process(res, templateFilename, rtm, popups, out,
+ getLocale(req), "bundles.admin");
// we default to admin bundles here, which is not exactly beautiful...
// but this whole producer stuff is going to be rewritten soon.
// ServletModuleOpenIndy overwrites deliver() to use open bundles
// (br1)
- out.close();
- } catch (HTMLParseException e) {
- throw new ServletModuleException(e.toString());
- } catch (IOException e) {
- throw new ServletModuleException(e.toString());
- }
- }
-
-
- /**
- * deliver liefert das Template mit dem Filenamen templateFilename
- * an den HttpServletResponse res aus, nachdem es mit den Daten aus
- * TemplateModelRoot rtm gemischt wurde
- *
- * @param res Http-Response, die vom Dispatcher durchgereicht wird
- * @param rtm beinahalten das freemarker.template.TempalteModelRoot mit den
- * Daten, die ins Template gemerged werden sollen.
- * @param tmpl Name des Templates
- * @exception ServletModuleException
- */
- public void deliver(HttpServletRequest req, HttpServletResponse res,
- TemplateModelRoot rtm, String templateFilename)
- throws ServletModuleException {
- deliver(req, res, rtm, null, templateFilename);
- }
-
+ out.close();
+ }
+ catch (HTMLParseException e) {
+ throw new ServletModuleException(e.getMessage());
+ } catch (IOException e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ }
+
+
+ /**
+ * deliver liefert das Template mit dem Filenamen templateFilename
+ * an den HttpServletResponse res aus, nachdem es mit den Daten aus
+ * TemplateModelRoot rtm gemischt wurde
+ *
+ * @param res Http-Response, die vom Dispatcher durchgereicht wird
+ * @param rtm beinahalten das freemarker.template.TempalteModelRoot mit den
+ * Daten, die ins Template gemerged werden sollen.
+ * @param tmpl Name des Templates
+ * @exception ServletModuleException
+ */
+ public void deliver(HttpServletRequest req, HttpServletResponse res,
+ TemplateModelRoot rtm, String templateFilename)
+ throws ServletModuleException {
+ deliver(req, res, rtm, null, templateFilename);
+ }
+
/**
* deliver liefert das Template mit dem Filenamen templateFilename
* an den HttpServletResponse res aus, nachdem es mit den Daten aus
* @param tmpl Name des Templates
* @exception ServletModuleException
*/
- public void deliver_compressed(HttpServletRequest req, HttpServletResponse res, TemplateModelRoot rtm, String templateFilename)
+ public void deliver_compressed(HttpServletRequest req, HttpServletResponse res,
+ TemplateModelRoot rtm, String templateFilename)
throws ServletModuleException {
if (rtm == null) rtm = new SimpleHash();
try {
out.close();
}
catch (HTMLParseException e) {
- throw new ServletModuleException(e.toString());
+ throw new ServletModuleException(e.getMessage());
}
catch (IOException e) {
- throw new ServletModuleException(e.toString());
+ throw new ServletModuleException(e.getMessage());
}
}
* @param tmpl Name des Templates
* @exception ServletModuleException
*/
- private void deliver(HttpServletResponse res, HttpServletRequest req, PrintWriter out, TemplateModelRoot rtm, String templateFilename)
+ private void deliver(HttpServletResponse res, HttpServletRequest req, PrintWriter out,
+ TemplateModelRoot rtm, String templateFilename)
throws HTMLParseException {
HTMLTemplateProcessor.process(res, templateFilename, rtm, out, getLocale(req));
}
theFieldList = theStorage.getFields();
}
catch (StorageObjectException e) {
- throw new ServletModuleException("ServletModule.getIntersectingValues: " + e.toString());
+ throw new ServletModuleException("ServletModule.getIntersectingValues: " + e.getMessage());
}
HashMap withValues = new HashMap();
import javax.servlet.http.*;
import mir.servlet.ServletModuleException;
import mir.misc.*;
+import mir.log.*;
/**
* Dispatcher, calls the method passed to ServletModule Class, through the "do"
* Parameter (via POST or GET)
*
- * @version $Id: ServletModuleDispatch.java,v 1.7 2002/09/01 22:05:52 mh Exp $
+ * @version $Id: ServletModuleDispatch.java,v 1.8 2002/10/25 03:25:15 zapata Exp $
*
* @Author rk
*
*/
public final class ServletModuleDispatch {
- private static Logfile theLog;
- private static final Class[] SIGNATURE =
- { HttpServletRequest.class, HttpServletResponse.class };
+ private static LoggerWrapper logger;
+ private static final Class[] SIGNATURE = { HttpServletRequest.class, HttpServletResponse.class };
+ static {
+ logger = new LoggerWrapper("servlet.dispatch");
+ }
- static {
- theLog = Logfile.getInstance("/tmp/smod.dispatch");
- }
+ /**
+ * private constructor to prevent unwanted instantiation;
+ */
- /**
- * privater Konstruktor, um versehentliche Instantiierung zu verhindern
- */
- private ServletModuleDispatch () {
- }
+ private ServletModuleDispatch () {
+ }
- /**
- * Die Dispatch-Routine ruft das von dem Hauptservlet kommende ServletModule
- * mit dem per HttpServletRequest angegebenen Paramter <code>do</code> auf.
- * Ist kein Parameter angegeben, so wird versucht, in die <code>defaultAction</code>
- * des ServletModules zu springen.
- *
- * @param req Http-Request, das vom Dispatcher an die Methode des
- * ServletModules durchgereicht wird
- * @param res Http-Response, die vom Dispatcher an die Methode des
- * ServletModules durchgereicht wird
- * @param sMod ServletModule, an das dispatched wird.
- * @param mod Name des Modules als String (für Logfile)
- */
+ /**
+ * Die Dispatch-Routine ruft das von dem Hauptservlet kommende ServletModule
+ * mit dem per HttpServletRequest angegebenen Paramter <code>do</code> auf.
+ * Ist kein Parameter angegeben, so wird versucht, in die <code>defaultAction</code>
+ * des ServletModules zu springen.
+ *
+ * @param req Http-Request, das vom Dispatcher an die Methode des
+ * ServletModules durchgereicht wird
+ * @param res Http-Response, die vom Dispatcher an die Methode des
+ * ServletModules durchgereicht wird
+ * @param sMod ServletModule, an das dispatched wird.
+ * @param mod Name des Modules als String (für Logfile)
+ */
- public static void dispatch(ServletModule sMod, HttpServletRequest req,
- HttpServletResponse res) throws ServletModuleException, ServletModuleUserException
- {
- //sMod.predeliver(req,res);
+ public static void dispatch(ServletModule sMod, HttpServletRequest req,
+ HttpServletResponse res) throws ServletModuleException, ServletModuleUserException
+ {
+ //sMod.predeliver(req,res);
- String doParam = req.getParameter("do");
- theLog.printInfo("SerletModuleDispatch: " + sMod.toString() + " with method " + doParam);
- if (doParam == null) {
- if (sMod.defaultAction() != null) doParam = sMod.defaultAction();
- else throw new ServletModuleException("no parameter do supplied!");
- }
+ String doParam = req.getParameter("do");
+ logger.info("ServletModuleDispatch: " + sMod.toString() + " with method " + doParam);
+ if (doParam == null) {
+ if (sMod.defaultAction() != null)
+ doParam = sMod.defaultAction();
+ else
+ throw new ServletModuleException("no parameter do supplied!");
+ }
- try {
- Method method = sMod.getClass().getMethod(doParam,SIGNATURE);
- if (method != null) {
- method.invoke(sMod,new Object[] {req,res} );
- return;
- }
- else theLog.printDebugInfo("method lookup unsuccesful");
- }
- catch ( NoSuchMethodException e) { throw new ServletModuleException("no such method!" + e.toString());}
- catch ( SecurityException e) { throw new ServletModuleException("method not allowed!" + e.toString());}
- catch ( InvocationTargetException e) {
- if (e.getTargetException().getClass().getName().equals("mir.servlet.ServletModuleUserException")) {
- throw new ServletModuleUserException(((ServletModuleUserException)e.getTargetException()).getMsg());
- } else {
- e.printStackTrace();
- throw new ServletModuleException(e.getTargetException().toString());
- }
- }
- catch ( IllegalAccessException e) { throw new ServletModuleException("illegal method not allowed!" + e.toString());}
+ try {
+ Method method = sMod.getClass().getMethod(doParam,SIGNATURE);
+ if (method != null) {
+ method.invoke(sMod,new Object[] {req,res} );
+ return;
+ }
+ else logger.debug("method lookup unsuccesful");
+ }
+ catch ( NoSuchMethodException e) {
+ throw new ServletModuleException("no such method '"+doParam+"' (" + e.getMessage() + ")");
+ }
+ catch ( SecurityException e) {
+ throw new ServletModuleException("method not allowed!" + e.getMessage());
+ }
+ catch ( InvocationTargetException e) {
+ System.out.println(e.getMessage());
+ if (e.getTargetException() instanceof ServletModuleUserException) {
+ throw new ServletModuleUserException(e.getTargetException().getMessage());
+ }
+ else {
+ e.printStackTrace();
+ throw new ServletModuleException(e.getTargetException().getMessage());
+ }
+ }
+ catch ( IllegalAccessException e) {
+ throw new ServletModuleException("illegal method not allowed!" + e.getMessage());
+ }
- //hopefully we don't get here ...
- throw new ServletModuleException("delivery failed! -- ");
- }
+//hopefully we don't get here ...
+ throw new ServletModuleException("delivery failed! -- ");
+ }
}
* Return an Exception with a simple String Message Method
* Differentiates user errors from System bugs/errors.
*
- *
+ *
* @version 02.2002
* @author mh
*/
public final class ServletModuleUserException extends Exception
{
- String msg;
-
public ServletModuleUserException(String msg) {
super(msg);
- this.msg = msg;
- }
-
- public String getMsg() {
- return msg;
}
}
public class JobQueue {
private Vector jobs;
+ private Vector finishedJobs;
private Map dataToJob;
+ private Map identifierToJob;
+ private int nrJobs;
public static final int STATUS_PENDING = 0;
public static final int STATUS_PROCESSING = 1;
public static final int STATUS_PROCESSED = 2;
+ public static final int STATUS_CANCELLED = 3;
+ public static final int STATUS_ABORTED = 4;
+
+ public static final int PRIORITY_NORMAL = 100;
+ public static final int PRIORITY_LOW = 10;
+ public static final int PRIORITY_HIGH = 1000;
+
+ public static final int FINISHEDJOBS_LOGSIZE = 10;
public JobQueue() {
+ finishedJobs = new Vector();
jobs = new Vector();
dataToJob = new HashMap();
+ identifierToJob = new HashMap();
+ nrJobs = 0;
}
- public void appendJob(Object aData) {
+ public String appendJob(Object aData) {
synchronized (jobs) {
- Job job = new Job(aData);
+ Job job = new Job(aData, Integer.toString(nrJobs));
+ nrJobs++;
jobs.add(job);
dataToJob.put(aData, job);
+ identifierToJob.put(job.getIdentifier(), job);
+ return job.getIdentifier();
}
}
public Object acquirePendingJob() {
synchronized (jobs) {
- Iterator i = jobs.iterator();
+ int priorityFound= 0;
+ Job jobFound;
- while (i.hasNext()) {
- Job job = (Job) i.next();
+ do {
+ jobFound = null;
+ Iterator i = jobs.iterator();
+ while (i.hasNext()) {
+ Job job = (Job) i.next();
- if (job.setProcessing()) {
- return job.getData();
+ if (job.isPending() && (jobFound==null || priorityFound<job.getPriority())) {
+ jobFound = job;
+ priorityFound = job.getPriority();
+ }
}
}
+ while (jobFound!=null && !jobFound.setProcessing());
+
+ if (jobFound!=null)
+ return jobFound.getData();
+ else
+ return null;
}
+ }
- return null;
+ private void finishJob(Job aJob) {
+ synchronized (jobs) {
+ identifierToJob.remove(aJob.identifier);
+ jobs.remove(aJob);
+ finishedJobs.insertElementAt(aJob, 0);
+ if (finishedJobs.size()>FINISHEDJOBS_LOGSIZE)
+ finishedJobs.remove(finishedJobs.size()-1);
+ }
}
- public void flagOffJob(Object aData) {
+ public void jobProcessed(Object aData) {
synchronized (jobs) {
Job job = (Job) dataToJob.get(aData);
if (job!=null) {
job.setProcessed();
+ finishJob(job);
}
}
}
- public void cleanupJobs() {
+ public void jobAborted(Object aData) {
synchronized (jobs) {
- Iterator i = jobs.iterator();
+ Job job = (Job) dataToJob.get(aData);
- while (i.hasNext()) {
- Job job = (Job) i.next();
+ if (job!=null) {
+ job.setAborted();
+ finishJob(job);
+ }
+ }
+ }
- if (job.hasBeenProcessed()) {
- i.remove();
- }
+ public void cancelJob(Object aData) {
+ synchronized (jobs) {
+ Job job = (Job) dataToJob.get(aData);
+
+ if (job!=null && job.setCancelled()) {
+ finishJob(job);
}
}
}
+ public void makeJobListSnapshots(List aJobList, List aFinishedJobList) {
+ synchronized (jobs) {
+ aJobList.addAll(makeJobListSnapshot());
+ aFinishedJobList.addAll(makeFinishedJobListSnapshot());
+ }
+ }
+
public List makeJobListSnapshot() {
synchronized (jobs) {
return (List) jobs.clone();
}
}
+ public List makeFinishedJobListSnapshot() {
+ synchronized (jobs) {
+ return (List) finishedJobs.clone();
+ }
+ }
+
public class Job implements Cloneable {
private Object data;
+ private Date lastChange;
+ private String identifier;
private int status;
+ private int priority;
- public Job(Object aData, int aStatus) {
+ public Job(Object aData, String anIdentifier, int aStatus, int aPriority, Date aLastChange) {
data = aData;
status = aStatus;
+ identifier = anIdentifier;
+ priority = aPriority;
+ lastChange = aLastChange;
+ }
+
+ public Job(Object aData, String anIdentifier, int aStatus, int aPriority) {
+ this(aData, anIdentifier, aStatus, aPriority, (new GregorianCalendar()).getTime());
+ }
+
+ public Date getLastChange() {
+ return lastChange;
+ }
+
+ public String getIdentifier() {
+ return identifier;
}
- public Job(Object aData) {
- this(aData, STATUS_PENDING);
+ public Job(Object aData, String anIdentifier) {
+ this(aData, anIdentifier, STATUS_PENDING, PRIORITY_NORMAL);
}
public Object getData() {
}
}
+ public int getPriority() {
+ return priority;
+ }
+
protected boolean setProcessing() {
return setStatus(STATUS_PENDING, STATUS_PROCESSING);
}
setStatus(STATUS_PROCESSING, STATUS_PROCESSED);
}
+ protected void setAborted() {
+ setStatus(STATUS_PROCESSING, STATUS_ABORTED);
+ }
+
+ protected boolean setCancelled() {
+ return setStatus(STATUS_PENDING, STATUS_CANCELLED);
+ }
+
public boolean hasBeenProcessed() {
return getStatus() == STATUS_PROCESSED;
}
+ public boolean hasBeenAborted() {
+ return getStatus() == STATUS_ABORTED;
+ }
+
+ public boolean isCancelled() {
+ return getStatus() == STATUS_CANCELLED;
+ }
+
+ public boolean isFinished() {
+ return hasBeenProcessed() || hasBeenAborted() || isCancelled();
+ }
+
public boolean isProcessing() {
return getStatus() == STATUS_PROCESSING;
}
synchronized(this) {
if (status == anOldStatus) {
status = aNewStatus;
+ lastChange = (new GregorianCalendar()).getTime();
return true;
}
else {
protected Object clone() {
synchronized(this) {
- return new Job(data, status);
+ System.out.println(" blabla");
+ return new Job(data, identifier, status, priority, lastChange);
}
}
}
private PrintWriter log;
protected ProducerEngine() {
-// producers = MirGlobal.localizer().producers().factories();
producerJobQueue = new JobQueue();
try {
RandomAccessFile raFile = (new RandomAccessFile(MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Producer.Logfile"), "rw"));
log = new PrintWriter(new FileWriter( raFile.getFD()));
}
catch (Exception e) {
-// throw new ProducerEngineRuntimeExc("Creating PrintWriter log failed",e);
log = new PrintWriter(new NullWriter());
}
queueThread = new Thread(new ProducerJobQueueThread());
}
}
- public void printQueueStatus(PrintWriter aWriter) {
- Iterator iterator = producerJobQueue.makeJobListSnapshot().iterator();
- producerJobQueue.cleanupJobs();
- JobQueue.Job job;
-
- while (iterator.hasNext()) {
- job = (JobQueue.Job) iterator.next();
- ProducerJob producerJob = (ProducerJob) job.getData();
-
- aWriter.print(producerJob.factoryName + "." + producerJob.verb);
- if (job.hasBeenProcessed())
- aWriter.print(" processed");
- else if (job.isProcessing())
- aWriter.print(" processing");
- else if (job.isPending())
- aWriter.print(" pending");
- else
- aWriter.print(" unknown status");
-
- aWriter.println("<br/>");
- }
+ private String convertStatus(JobQueue.Job aJob) {
+ if (aJob.hasBeenProcessed())
+ return "processed";
+ if (aJob.isProcessing())
+ return "processing";
+ if (aJob.isPending())
+ return "pending";
+ if (aJob.isCancelled())
+ return "cancelled";
+ if (aJob.hasBeenAborted())
+ return "aborted";
+
+ return "unknown";
}
- private void produceNow(String aProducerFactory, String aVerb, PrintWriter aLogger) {
- try {
- long startTime;
- long endTime;
- Map startingMap = new HashMap();
+ private Map convertJob(JobQueue.Job aJob) {
+ Map result = new HashMap();
+ ProducerJob producerJob = (ProducerJob) aJob.getData();
- startTime = System.currentTimeMillis();
+ result.put("identifier", aJob.getIdentifier());
+ result.put("factory", producerJob.getFactoryName());
+ result.put("verb", producerJob.getVerb());
+ result.put("priority", new Integer(aJob.getPriority()));
+ result.put("status", convertStatus(aJob));
+ result.put("lastchange", new DateToMapAdapter(aJob.getLastChange()));
- aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")");
+ return result;
+ }
- ProducerFactory factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get(aProducerFactory);
+ private void convertJobList(List aSourceJobList, List aDestination) {
+ Iterator i = aSourceJobList.iterator();
- if (factory == null )
- throw new Exception("No producer factory '"+aProducerFactory+"' present.");
+ while (i.hasNext())
+ aDestination.add(convertJob((JobQueue.Job) i.next()));
+ }
- MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(startingMap);
- Producer producer = factory.makeProducer(aVerb, startingMap);
+ public List getQueueStatus() {
+ List result = new Vector();
+ List pendingJobs = new Vector();
+ List finishedJobs = new Vector();
- producer.produce(aLogger);
+ producerJobQueue.makeJobListSnapshots(pendingJobs, finishedJobs);
- endTime = System.currentTimeMillis();
+ convertJobList(pendingJobs, result);
+ convertJobList(finishedJobs, result);
- aLogger.println("Time: " + (endTime-startTime) + " ms<br>");
- }
- catch (Throwable e) {
- try {
- aLogger.println("exception occurred:<br>");
- aLogger.println(e.getMessage());
- e.printStackTrace(aLogger);
- }
- catch (Throwable f) {
- }
- }
+ return result;
}
- private class ProducerJob {
+private class ProducerJob {
private String factoryName;
private String verb;
+ private Producer producer;
public ProducerJob(String aFactory, String aVerb) {
factoryName = aFactory;
verb = aVerb;
+ producer=null;
+ }
+
+ public String getFactoryName() {
+ return factoryName;
+ }
+
+ public String getVerb() {
+ return verb;
+ }
+
+ public void abort() {
+ if (producer!=null) {
+ producer.abort();
+ }
}
public void execute() {
ProducerFactory factory;
- Producer producer;
long startTime;
long endTime;
Map startingMap = new HashMap();
log.println("Producing job: "+factoryName+"."+verb);
try {
- factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get( factoryName );
+ factory = MirGlobal.localizer().producers().getFactoryForName( factoryName );
if (factory!=null) {
MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(startingMap);
t.printStackTrace(log);
}
log.println("Done producing job: "+factoryName+"."+verb);
- endTime = System.currentTimeMillis();
+ endTime = System.currentTimeMillis();
+ log.println("Time: " + (endTime-startTime) + " ms");
+ log.flush();
+ }
- log.println("Time: " + (endTime-startTime) + " ms");
- log.flush();
+ boolean isAborted() {
+ return false;
}
}
ProducerJob job = (ProducerJob) producerJobQueue.acquirePendingJob();
if (job!=null) {
job.execute();
- producerJobQueue.flagOffJob(job);
+ if (job.isAborted())
+ producerJobQueue.jobAborted(job);
+ else
+ producerJobQueue.jobProcessed(job);
}
else
{
}
}
+ public static class ProducerEngineExc extends Exc {
+ public ProducerEngineExc(String aMessage) {
+ super(aMessage);
+ }
+ }
public static class ProducerEngineRuntimeExc extends Failure {
public ProducerEngineRuntimeExc(String msg, Exception cause){
public String getProducer() {
return producer;
}
+
+ public static List parseProducerTaskList(String aList) throws ProducerEngineExc {
+ Iterator i;
+ List result = new Vector();
+
+ i = StringRoutines.splitString(aList, ";").iterator();
+ while (i.hasNext()) {
+ String taskExpression = (String) i.next();
+ List parts = StringRoutines.splitString(taskExpression, ".");
+
+ if (parts.size()!=2)
+ throw new ProducerEngineExc("Invalid producer expression: '" + taskExpression + "'");
+ else
+ result.add(new ProducerEngine.ProducerTask((String) parts.get(0), (String) parts.get(1)));
+ }
+
+ return result;
+ }
}
}
\ No newline at end of file
package mircoders.localizer;
-import java.util.*;
+import java.util.List;
+import mir.producer.ProducerFactory;
public interface MirProducerLocalizer {
- public Map factories() throws MirLocalizerException, MirLocalizerFailure;
+ public List factories() throws MirLocalizerException, MirLocalizerFailure;
+ public ProducerFactory getFactoryForName(String aName);
+ public void produceAllNew();
}
protected static Logfile logger = Logfile.getInstance( MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Mir.Localizer.Logfile"));
public MirBasicOpenPostingLocalizer() {
- String contentProducers = MirGlobal.getConfigProperty("Mir.Localizer.OpenPosting.ContentProducers");
- String commentProducers = MirGlobal.getConfigProperty("Mir.Localizer.OpenPosting.CommentProducers");
+ try {
+ String contentProducers = MirGlobal.getConfigProperty("Mir.Localizer.OpenPosting.ContentProducers");
+ String commentProducers = MirGlobal.getConfigProperty("Mir.Localizer.OpenPosting.CommentProducers");
- afterContentProducerTasks = parseProducerTaskList(contentProducers);
- afterCommentProducerTasks = parseProducerTaskList(commentProducers);
+ afterContentProducerTasks = ProducerEngine.ProducerTask.parseProducerTaskList(contentProducers);
+ afterCommentProducerTasks = ProducerEngine.ProducerTask.parseProducerTaskList(commentProducers);
+ }
+ catch (Throwable t) {
+ logger.printError("Setting up MirBasicOpenPostingLocalizer failed: " + t.getMessage());
+ }
}
public void afterContentPosting() {
return locale.getLanguage();
}
- protected List parseProducerTaskList(String aList) {
- Iterator i;
- List result = new Vector();
-
- i = StringRoutines.splitString(aList, ";").iterator();
- while (i.hasNext()) {
- String taskExpression = (String) i.next();
- List parts = StringRoutines.splitString(taskExpression, ".");
-
- if (parts.size()!=2)
- logger.printError("Invalid producer expression: '" + taskExpression + "'");
- else
- result.add(new ProducerEngine.ProducerTask((String) parts.get(0), (String) parts.get(1)));
- }
-
- return result;
- }
}
import mircoders.producer.*;
public class MirBasicProducerLocalizer implements MirProducerLocalizer {
- private Map producerFactories;
+ private List producerFactories;
+ private Map nameToFactory;
+ private List allNewProducerTasks;
+
protected FileMonitor fileMonitor;
protected EntityAdapterModel model;
protected Generator.GeneratorLibrary generatorLibrary;
public MirBasicProducerLocalizer() {
+
+
try {
- producerFactories = new HashMap();
+ String allNewProducers = MirGlobal.getConfigProperty("Mir.Localizer.Producer.AllNewProducers");
+ allNewProducerTasks = ProducerEngine.ProducerTask.parseProducerTaskList(allNewProducers);
+
+ producerFactories = new Vector();
model = MirGlobal.localizer().dataModel().adapterModel();
generatorLibrary = MirGlobal.localizer().generators().makeProducerGeneratorLibrary();
writerEngine = MirGlobal.localizer().generators().makeWriterEngine();
+ nameToFactory = new HashMap();
}
catch (Throwable t) {
logger.printError("MirBasicProducerLocalizer(): Exception "+t.getMessage());
}
}
- public Map factories() throws MirLocalizerException {
+ public List factories() throws MirLocalizerException {
if (fileMonitor==null || producerFactories == null || fileMonitor.hasChanged()) {
try {
- Map newProducers = new HashMap();
+ List newProducers = new Vector();
FileMonitor newFileMonitor = new FileMonitor();
setupFactories(newProducers, newFileMonitor);
producerFactories = newProducers;
fileMonitor = newFileMonitor;
- logger.printError("MirBasicProducerLocalizer.factories(): successfully setup factories");
+ logger.printInfo("MirBasicProducerLocalizer.factories(): successfully setup factories");
+
+ nameToFactory.clear();
+ Iterator i = producerFactories.iterator();
+ while (i.hasNext()) {
+ ProducerFactory factory = (ProducerFactory) i.next();
+ nameToFactory.put(factory.getName(), factory);
+ }
}
catch (Throwable t) {
logger.printError("MirBasicProducerLocalizer.factories(): Unable to setup factories: "+t.getMessage());
return producerFactories;
};
- protected void setupContentFactory(CompositeProducerNode aProducerNode) {
- }
-
- protected void setupStartPageFactory(CompositeProducerNode aProducerNode) {
- }
-
- protected void setupSynchronizationFactory(CompositeProducerNode aProducerNode) {
- if(MirGlobal.getConfigBooleanProperty("Rsync")){
- aProducerNode.addSubNode(
- new ScriptCallingProducerNode(MirGlobal.getConfigProperty("Rsync.Script.Path"))
- );
- }
- }
-
- protected void setupStaticFactory(CompositeProducerNode aProducerNode) {
- }
-
- protected void setupTopicsFactory(CompositeProducerNode aProducerNode) {
- }
-
protected void setupProducerNodeBuilderLibrary(ProducerNodeBuilderLibrary aLibrary) {
DefaultProducerNodeBuilders.registerBuilders(
aLibrary, model, generatorLibrary, writerEngine,
SupplementalProducerNodeBuilders.registerBuilders(aLibrary, model);
}
- protected void setupFactories(Map aFactoriesMap, FileMonitor aFileMonitor) throws MirLocalizerException, MirLocalizerFailure {
+ protected void setupFactories(List aFactories, FileMonitor aFileMonitor) throws MirLocalizerException, MirLocalizerFailure {
ProducerConfigReader reader;
ProducerNodeBuilderLibrary library = new ProducerNodeBuilderLibrary();
setupProducerNodeBuilderLibrary(library);
List usedFiles = new Vector();
+ Iterator i;
aFileMonitor.clear();
reader = new ProducerConfigReader();
- reader.parseFile(MirGlobal.getConfigProperty("Home") + File.separatorChar + MirGlobal.getConfigProperty("Mir.Localizer.ProducerConfigFile"), library, aFactoriesMap, usedFiles);
+ reader.parseFile(MirGlobal.getConfigProperty("Home") + File.separatorChar + MirGlobal.getConfigProperty("Mir.Localizer.ProducerConfigFile"), library, aFactories, usedFiles);
- Iterator i = usedFiles.iterator();
+ i = usedFiles.iterator();
while (i.hasNext())
aFileMonitor.addFile((File) i.next());
- setupFactories(aFactoriesMap);
+ setupFactories(aFactories);
}
- protected void setupFactories(Map aFactoriesMap ) throws MirLocalizerException, MirLocalizerFailure {
+ protected void setupFactories(List aFactories) throws MirLocalizerException, MirLocalizerFailure {
CompositeProducerNode node;
try {
- node = new CompositeProducerNode();
- setupContentFactory( node );
- if (node.getNrSubNodes()>0)
- aFactoriesMap.put("content", new NodedProducerFactory(node));
-
- node = new CompositeProducerNode();
- setupStartPageFactory( node );
- if (node.getNrSubNodes()>0)
- aFactoriesMap.put("startpage", new NodedProducerFactory(node));
-
- node = new CompositeProducerNode();
- setupSynchronizationFactory( node );
- if (node.getNrSubNodes()>0)
- aFactoriesMap.put("synchronization", new NodedProducerFactory(node));
-
- node = new CompositeProducerNode();
- setupStaticFactory( node );
- if (node.getNrSubNodes()>0)
- aFactoriesMap.put("static", new NodedProducerFactory(node));
-
- node = new CompositeProducerNode();
- setupTopicsFactory( node );
- if (node.getNrSubNodes()>0)
- aFactoriesMap.put("topics", new NodedProducerFactory(node));
-
- aFactoriesMap.put("media",
- new CompositeProducerFactory( new ProducerFactory[] {
- new OldProducerAdapterFactory(new ProducerImages()),
- new OldProducerAdapterFactory(new ProducerAudio()),
- new OldProducerAdapterFactory(new ProducerVideo()),
- new OldProducerAdapterFactory(new ProducerOther())
+ aFactories.add(
+ new CompositeProducerFactory("media", new ProducerFactory[] {
+ new OldProducerAdapterFactory("images", new ProducerImages()),
+ new OldProducerAdapterFactory("audio", new ProducerAudio()),
+ new OldProducerAdapterFactory("video", new ProducerVideo()),
+ new OldProducerAdapterFactory("other", new ProducerOther())
} )
);
}
throw new MirLocalizerFailure(e);
}
};
+
+ public void produceAllNew() {
+ MirGlobal.producerEngine().addTasks(allNewProducerTasks);
+ };
+
+ public ProducerFactory getFactoryForName(String aName) {
+ return (ProducerFactory) nameToFactory.get(aName);
+ }
}
import mir.producer.*;
public class CompositeProducer implements mir.producer.Producer {
-
- List producers;
+ private List producers;
public CompositeProducer() {
producers = new Vector();
while (i.hasNext())
((mir.producer.Producer) i.next()).produce(aLogger);
}
+
+ public void abort() {
+
+ }
}
import mir.producer.*;
public class CompositeProducerFactory implements ProducerFactory {
- Map factories; // verb -> Vector ( ProducerFactory )
+ private Map factories; // verb -> Vector ( ProducerFactory )
+ private List verbs;
+ private String name;
- public CompositeProducerFactory() {
+ public CompositeProducerFactory(String aName) {
factories = new HashMap();
+ verbs = new Vector();
+ name = aName;
}
- public CompositeProducerFactory(ProducerFactory[] aSubProducerFactories) {
- this();
+ public CompositeProducerFactory(String aName, ProducerFactory[] aSubProducerFactories) {
+ this(aName);
int i;
}
}
- private List factoriesForVerb(String aVerb) {
+ private List findFactoriesForVerb(String aVerb) {
+ List result = (List) factories.get(aVerb);
+
+ if (result==null)
+ result = new Vector();
+
+ return result;
+ }
+
+ private List factoriesForVerb(ProducerVerb aVerb) {
List result;
- result=(List) factories.get(aVerb);
+ result=(List) factories.get(aVerb.getName());
if (result==null) {
result=new Vector();
- factories.put(aVerb, result);
+ verbs.add(aVerb);
+ factories.put(aVerb.getName(), result);
}
return result;
i=aFactory.verbs();
while (i.hasNext()) {
- factoriesForVerb((String) i.next()).add(aFactory);
+ factoriesForVerb((ProducerVerb) i.next()).add(aFactory);
}
}
public mir.producer.Producer makeProducer(String aVerb, Map aBasicValueSet) throws ProducerExc, ProducerFailure {
CompositeProducer result = new CompositeProducer();
- Iterator i=factoriesForVerb(aVerb).iterator();
+ Iterator i=findFactoriesForVerb(aVerb).iterator();
while (i.hasNext())
result.addProducer(((ProducerFactory) i.next()).makeProducer(aVerb, aBasicValueSet));
}
public Iterator verbs() {
- return factories.keySet().iterator();
+ return verbs.iterator();
+ }
+
+ public String getName() {
+ return name;
}
}
throw new ProducerFailure(t.getMessage(), t);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
\ No newline at end of file
throw new ProducerFailure(t.getMessage(), t);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
aLogger.println(" IndexTime: " + (endTime-startTime) + " ms<br>");
aLogger.flush();
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
throw new ProducerFailure(t.getMessage(), t);
}
}
+}
+
+
+/*
+
- public Set buildVerbSet() {
- return new HashSet();
+ abstract Database getStorage() throws StorageObjectException;
+
+ public void handle(PrintWriter htmlout, EntityUsers user, boolean force,
+ boolean sync) throws StorageObjectException, ModuleException {
+ handle(htmlout,user,force,sync,null);
}
-}
+
+ public void handle(PrintWriter htmlout,EntityUsers user,boolean force,
+ boolean sync, String id) throws StorageObjectException, ModuleException
+ {
+ long sessionConnectTime = 0;
+ long startTime = (new java.util.Date()).getTime();
+ String whereClause;
+ String orderBy;
+ Entity currentMedia;
+ MirMedia currentMediaHandler;
+ EntityList batchEntityList;
+
+ int contentBatchsize =
+ Integer.parseInt(MirConfig.getProp("Producer.Content.Batchsize"));
+ orderBy = "date desc, webdb_lastchange desc";
+
+ // get batch of non-produced medias, that are to be published
+ whereClause="is_published='1'";
+ if (id!= null) {
+ whereClause += " and id="+id;
+ // optimization to avoid select count(*)..
+ contentBatchsize = -1;
+ }
+ if (force==false) whereClause += " and is_produced='0'";
+
+ batchEntityList = getStorage().selectByWhereClause(whereClause,
+ orderBy, 0, contentBatchsize);
+
+ while (batchEntityList != null) {
+ for(int i=0;i<batchEntityList.size();i++) {
+ currentMedia = (Entity)batchEntityList.elementAt(i);
+ try {
+ Entity currentMediaType =
+ DatabaseUploadedMedia.getInstance().getMediaType(currentMedia);
+ currentMediaHandler = MediaHelper.getHandler( currentMediaType );
+
+ // now produce
+ currentMediaHandler.produce(currentMedia,currentMediaType);
+ currentMedia.setValueForProperty("publish_server",
+ currentMediaHandler.getPublishHost());
+ currentMedia.setValueForProperty("icon_is_produced", "1");
+ currentMedia.setValueForProperty("is_produced", "1");
+ currentMedia.update();
+ logHTML(htmlout,"produced media id "+currentMedia.getId()
+ +": "+currentMediaType.getValue("mime_type")+" success");
+ } catch (Exception e) {
+ // don't throw and exception here, just log.
+ // we don't want to make the admin interface unuseable
+ theLog.printError("media exception: "+currentMedia.getId()+
+ e.toString());
+ logHTML(htmlout, "problem with media id: "+currentMedia.getId()+
+ " <font color=\"Red\"> failed!</font>: "+e.toString());
+ e.printStackTrace(htmlout);
+ }
+ }
+
+ // if next batch get it...
+ if (batchEntityList.hasNextBatch()){
+ batchEntityList = uploadedMediaModule.getByWhereClause(whereClause,
+ orderBy, batchEntityList.getNextBatch(),contentBatchsize);
+ } else {
+ batchEntityList=null;
+ }
+ }
+ // Finish
+ sessionConnectTime = new java.util.Date().getTime() - startTime;
+ logHTML(htmlout, "Producer.Media finished: " + sessionConnectTime + " ms.");
+ }
+*/
throw new ProducerFailure("Failure at handling old Producers",e);
}
}
+
+ public void abort() {
+ }
}
\ No newline at end of file
import java.util.*;
public class OldProducerAdapterFactory implements ProducerFactory {
+ private List verbs;
+ private String name;
private mircoders.producer.Producer oldProducer;
- public Iterator verbs() {
- Vector verbList = new Vector();
+ public OldProducerAdapterFactory(String aName, mircoders.producer.Producer anOldProducer) {
+ name = aName;
+ verbs = new Vector();
- verbList.add("new");
- verbList.add("all");
- return verbList.iterator();
- }
+ verbs.add(new SimpleProducerVerb("new", "generate only altered items"));
+ verbs.add(new SimpleProducerVerb("all", "generate all items"));
- public OldProducerAdapterFactory(mircoders.producer.Producer anOldProducer) {
oldProducer = anOldProducer;
}
+ public Iterator verbs() {
+ return verbs.iterator();
+ }
+
public mir.producer.Producer makeProducer(String aVerb, Map anInitialValues) {
return new OldProducerAdapter(oldProducer, new Boolean(aVerb.equals("all")));
}
+
+ public String getName() {
+ return name;
+ }
}
\ No newline at end of file
destinationIdentifier = ParameterExpander.expandExpression( aValueMap, destinationExpression );
generatorIdentifier = ParameterExpander.expandExpression( aValueMap, generatorExpression );
- stylesheetIdentifier = ParameterExpander.expandExpression( aValueMap, stylesheet);
+ stylesheetIdentifier = ParameterExpander.expandExpression( aValueMap, stylesheet);
aLogger.println("Generating " + generatorIdentifier + " into " + destinationIdentifier + " using "+ stylesheetIdentifier);
aLogger.flush();
}
catch (Throwable t) {
- t.printStackTrace();
- aLogger.println(" error while generating: " + t.getMessage() + t.toString());
+ t.printStackTrace();
+ aLogger.println(" error while generating: " + t.getMessage() + t.toString());
aLogger.flush();
}
endTime = System.currentTimeMillis();
aLogger.println(" Time: " + (endTime-startTime) + " ms<br>");
aLogger.flush();
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
public class PDFPreFormattingProducerNode implements ProducerNode {
private String contentKey;
private int numLinesBetweenImages;
- private float contentAreaWidthCM;
- private float characterWidthCM;
+ private float contentAreaWidthCM;
+ private float characterWidthCM;
private float pixelWidthCM;
private float lineHeightCM;
characterWidthCM=(new Float(aCharacterWidthCM)).floatValue();
pixelWidthCM=(new Float(aPixelWidthCM)).floatValue();
lineHeightCM=(new Float(aLineHeightCM)).floatValue();
-
+
// float characterWidthCM = 0.17F;
//float contentAreaWidthCM = 16;
//float pixelWidthCM = .03F;
int currentPosition = 0;
//int numLinesBetweenImages=3;
-
-
+
+
int numCharsInAnImagelessRow = (new Float(numLinesBetweenImages * (contentAreaWidthCM/characterWidthCM))).intValue();
boolean outOfText = false;
- ArrayList brokenUpContent = new ArrayList();
-
+ ArrayList brokenUpContent = new ArrayList();
+
EntityList images=DatabaseContentToMedia.getInstance().getImages((EntityContent)entity);
- String theContent = ((EntityContent) entity).getValue("content_data");
+ String theContent = ((EntityContent) entity).getValue("content_data");
if (images == null){
- HashMap row = new HashMap();
- row.put("text",theContent);
- row.put("hasImage","0");
- brokenUpContent.add(row);
+ HashMap row = new HashMap();
+ row.put("text",theContent);
+ row.put("hasImage","0");
+ brokenUpContent.add(row);
}
if (images != null){
- //need to add checks for out of content!
- HashMap row0 = new HashMap();
- if (numCharsInAnImagelessRow>(theContent).length()){
- row0.put("text",theContent);
- outOfText = true;
- }
- else {
- //break on words so we don't split html entities
- int lastSpaceAt = theContent.lastIndexOf(" ",numCharsInAnImagelessRow);
- row0.put("text",theContent.substring(0,lastSpaceAt));
- currentPosition=lastSpaceAt;
- }
- row0.put("hasImage","0");
- brokenUpContent.add(row0);
- aLogger.println("CP1 is "+ currentPosition);
- while(images.hasNext()){
- HashMap row1 = new HashMap();
- HashMap row2 = new HashMap();
- EntityImages currentImage=(EntityImages) images.next();
- float img_width=(new Float(currentImage.getValue("img_width"))).floatValue();
- float img_height=(new Float(currentImage.getValue("img_height"))).floatValue();
-
- //oversize images must be shrunk
- if (img_width>400){
- img_height=(new Float((new Float(img_height*(400.0F/img_width))).intValue())).floatValue();
- img_width=400.0F;
- }
-
-
- //calculate how much text goes in the column(use 8 pixels to pad the column)
- float text_widthCM = contentAreaWidthCM-((img_width+8)*pixelWidthCM);
- float number_of_lines = img_height*pixelWidthCM/lineHeightCM; //don't worry we will make it an int
- //add one line for image description
- int text_amount= (new Float((text_widthCM/characterWidthCM)*(number_of_lines+1))).intValue();
-
- row1.put("text_widthCM",Float.toString(text_widthCM));
-
- row1.put("img_title",currentImage.getValue("title"));
-
- row1.put("img_width",Float.toString(img_width));
- row1.put("img_height",Float.toString(img_height));
-
- aLogger.println("img_width " +Float.toString(img_width));
- aLogger.println("img_height "+Float.toString(img_height));
-
- row1.put("img_src",currentImage.getValue("publish_path"));
- row1.put("hasImage","1");
- if (! outOfText){
- try {
- int lastSpaceAt = theContent.lastIndexOf(" ",currentPosition+text_amount);
- row1.put("text",theContent.substring(currentPosition,lastSpaceAt));
- currentPosition=lastSpaceAt;
- }
- catch (IndexOutOfBoundsException e){
- row1.put("text",theContent.substring(currentPosition));
- outOfText = true;
- }
- }
- aLogger.println("CP2 is "+ currentPosition);
- brokenUpContent.add(row1);
-
- if (! outOfText){
- try {
- int lastSpaceAt = theContent.lastIndexOf(" ",currentPosition+numCharsInAnImagelessRow);
- row2.put("text",theContent.substring(currentPosition,lastSpaceAt));
- currentPosition=lastSpaceAt;
- }
- catch (IndexOutOfBoundsException e){
- row2.put("text",theContent.substring(currentPosition));
- outOfText = true;
- }
- }
- row2.put("hasImage","0");
- brokenUpContent.add(row2);
-
- aLogger.println("CP3 is "+ currentPosition);
- }
- HashMap row3 = new HashMap();
- if (! outOfText){
- row3.put("text",theContent.substring(currentPosition));
- row3.put("hasImage","0");
- brokenUpContent.add(row3);
- }
-
+ //need to add checks for out of content!
+ HashMap row0 = new HashMap();
+ if (numCharsInAnImagelessRow>(theContent).length()){
+ row0.put("text",theContent);
+ outOfText = true;
+ }
+ else {
+ //break on words so we don't split html entities
+ int lastSpaceAt = theContent.lastIndexOf(" ",numCharsInAnImagelessRow);
+ row0.put("text",theContent.substring(0,lastSpaceAt));
+ currentPosition=lastSpaceAt;
+ }
+ row0.put("hasImage","0");
+ brokenUpContent.add(row0);
+ aLogger.println("CP1 is "+ currentPosition);
+ while(images.hasNext()){
+ HashMap row1 = new HashMap();
+ HashMap row2 = new HashMap();
+ EntityImages currentImage=(EntityImages) images.next();
+ float img_width=(new Float(currentImage.getValue("img_width"))).floatValue();
+ float img_height=(new Float(currentImage.getValue("img_height"))).floatValue();
+
+ //oversize images must be shrunk
+ if (img_width>400){
+ img_height=(new Float((new Float(img_height*(400.0F/img_width))).intValue())).floatValue();
+ img_width=400.0F;
+ }
+
+
+ //calculate how much text goes in the column(use 8 pixels to pad the column)
+ float text_widthCM = contentAreaWidthCM-((img_width+8)*pixelWidthCM);
+ float number_of_lines = img_height*pixelWidthCM/lineHeightCM; //don't worry we will make it an int
+ //add one line for image description
+ int text_amount= (new Float((text_widthCM/characterWidthCM)*(number_of_lines+1))).intValue();
+
+ row1.put("text_widthCM",Float.toString(text_widthCM));
+
+ row1.put("img_title",currentImage.getValue("title"));
+
+ row1.put("img_width",Float.toString(img_width));
+ row1.put("img_height",Float.toString(img_height));
+
+ aLogger.println("img_width " +Float.toString(img_width));
+ aLogger.println("img_height "+Float.toString(img_height));
+
+ row1.put("img_src",currentImage.getValue("publish_path"));
+ row1.put("hasImage","1");
+ if (! outOfText){
+ try {
+ int lastSpaceAt = theContent.lastIndexOf(" ",currentPosition+text_amount);
+ row1.put("text",theContent.substring(currentPosition,lastSpaceAt));
+ currentPosition=lastSpaceAt;
+ }
+ catch (IndexOutOfBoundsException e){
+ row1.put("text",theContent.substring(currentPosition));
+ outOfText = true;
+ }
+ }
+ aLogger.println("CP2 is "+ currentPosition);
+ brokenUpContent.add(row1);
+
+ if (! outOfText){
+ try {
+ int lastSpaceAt = theContent.lastIndexOf(" ",currentPosition+numCharsInAnImagelessRow);
+ row2.put("text",theContent.substring(currentPosition,lastSpaceAt));
+ currentPosition=lastSpaceAt;
+ }
+ catch (IndexOutOfBoundsException e){
+ row2.put("text",theContent.substring(currentPosition));
+ outOfText = true;
+ }
+ }
+ row2.put("hasImage","0");
+ brokenUpContent.add(row2);
+
+ aLogger.println("CP3 is "+ currentPosition);
+ }
+ HashMap row3 = new HashMap();
+ if (! outOfText){
+ row3.put("text",theContent.substring(currentPosition));
+ row3.put("hasImage","0");
+ brokenUpContent.add(row3);
+ }
+
}
-
-
-
-
-
+
+
+
+
+
ParameterExpander.setValueForKey(
- aValueMap,
- "data.formatted_content",
- new CachingRewindableIterator(brokenUpContent.iterator())
- );
+ aValueMap,
+ "data.formatted_content",
+ new CachingRewindableIterator(brokenUpContent.iterator())
+ );
}
throw new ProducerFailure(t.getMessage(), t);
}
}
-
- public Set buildVerbSet() {
- return new HashSet();
- }
}
generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator("admin/commentlist2.template");
model = MirGlobal.localizer().dataModel().adapterModel();
-// commentList = mainModule.getByWhereClause(whereClause, order, offset);
-
generationData = new HashMap();
MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(generationData);
import javax.servlet.*;
import javax.servlet.http.*;
+import org.apache.struts.util.MessageResources;
+
import freemarker.template.*;
import mir.servlet.*;
import mir.misc.*;
import mir.producer.*;
+import mir.generator.*;
+import mir.producer.*;
+import mir.entity.adapter.*;
+import mir.util.*;
-import mircoders.producer.*;
-import mircoders.entity.*;
import mircoders.global.*;
/* Verteilerservlet, dass je nach Parameter task die Klasse Producer"TASK"
public class ServletModuleProducer extends ServletModule
{
- private static ServletModuleProducer instance = new ServletModuleProducer();
- public static ServletModule getInstance() { return instance; }
+ private static ServletModuleProducer instance = new ServletModuleProducer();
+ public static ServletModule getInstance() { return instance; }
+
+ Object comments;
+ Map generationData;
+ Generator generator;
+ int totalNrComments;
+ List producersData;
+
+ void generateResponse(String aGeneratorIdentifier, PrintWriter aWriter, Map aResponseData, Locale aLocale) throws ServletModuleException {
+ try {
+ generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator(aGeneratorIdentifier);
+ MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(aResponseData);
+ aResponseData.put( "lang", new ResourceBundleGeneratorFunction( aLocale, MessageResources.getMessageResources("bundles.admin")));
+ generator.generate(aWriter, aResponseData, new PrintWriter(new NullWriter()));
+ }
+ catch (Throwable t) {
+ throw new ServletModuleException(t.getMessage());
+ }
+ }
+
+ private ServletModuleProducer() {
+ theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("ServletModule.Producer.Logfile"));
+ defaultAction="showProducerQueueStatus";
+ }
+
+ public void showMessage(PrintWriter aWriter, Locale aLocale, String aMessage, String anArgument1, String anArgument2) throws ServletModuleException {
+ Map responseData;
+ try {
+ responseData = new HashMap();
+ responseData.put("message", aMessage);
+ responseData.put("argument1", anArgument1);
+ responseData.put("argument2", anArgument2);
+ generateResponse("infomessage.template", aWriter, responseData, aLocale);
+ }
+ catch (Throwable t) {
+ throw new ServletModuleException(t.getMessage());
+ }
+ }
- private ServletModuleProducer() {
- theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("ServletModule.Producer.Logfile"));
- defaultAction="produce";
- }
+ public void showProducerQueueStatus(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {
+ Object comments;
+ Map generationData;
+ Generator generator;
+ int totalNrComments;
+ List producersData;
- public void produce(HttpServletRequest req, HttpServletResponse res)
- throws ServletModuleException
- {
- try {
- PrintWriter out = res.getWriter();
+ try {
+ generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator("producerqueue.template");
+ generationData = new HashMap();
+ MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(generationData);
- if (req.getParameter("producer")!=null) {
- // ML: new producer system:
+ generationData.put( "lang", new ResourceBundleGeneratorFunction( getLocale(aRequest), MessageResources.getMessageResources("bundles.admin")));
+ generationData.put( "thisurl", "module=Producer&do=showProducerQueueStatus");
- String producerParam = req.getParameter("producer");
- String verbParam = req.getParameter("verb");
+ producersData = new Vector();
+ Iterator i = MirGlobal.localizer().producers().factories().iterator();
+ while (i.hasNext()) {
+ ProducerFactory factory = (ProducerFactory) i.next();
- MirGlobal.producerEngine().addJob(producerParam, verbParam);
- MirGlobal.producerEngine().printQueueStatus(out);
+ List producerVerbs = new Vector();
+ Iterator j = factory.verbs();
+ while (j.hasNext()) {
+ Map verbData = new HashMap();
+ ProducerFactory.ProducerVerb verb = (ProducerFactory.ProducerVerb) j.next();
+ verbData.put("name", verb.getName());
+ verbData.put("description", verb.getDescription());
-// ProducerFactory factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get(producerParam);
-// mir.producer.Producer producer = factory.makeProducer(verbParam);
+ producerVerbs.add(verbData);
+ }
-// producer.produce(out);
+ Map producerData = new HashMap();
+ producerData.put("name", factory.getName());
+ producerData.put("verbs", producerVerbs);
+ producersData.add(producerData);
}
- else
- {
- // ML: old producer system:
-
- String taskParam = req.getParameter("task");
- String forcedParam = req.getParameter("forced");
- String syncParam = req.getParameter("sync");
- theLog.printInfo("Starting Task: " + taskParam);
- if (taskParam == null) {
- throw new ServletModuleException("Kein Task angegeben!");
- } else {
- Class producerModule = Class.forName("mircoders.producer.Producer" + taskParam);
- mircoders.producer.Producer producer = (mircoders.producer.Producer) producerModule.newInstance();
- HttpSession session=req.getSession(false);
- EntityUsers user = (EntityUsers)session.getAttribute("login.uid");
-
- if (forcedParam!=null && !forcedParam.equals("")) {
- if (syncParam!=null && !syncParam.equals("")) {
- producer.handle(out, user, true, true);
- } else {
- producer.handle(out, user, true,false);
- }
- } else {
- producer.handle(out, user, false,false);
- }
-
- }
- }
- }
- catch (Exception e) {
- throw new ServletModuleException(e.toString());
+ generationData.put("producers", producersData);
+
+ generationData.put("queue", MirGlobal.producerEngine().getQueueStatus());
+ generator.generate(aResponse.getWriter(), generationData, new PrintWriter(new NullWriter()));
+ }
+ catch (Throwable t) {
+ throw new ServletModuleException(t.getMessage());
}
- }
+ }
+
+ public void produce(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException {
+ /*
+ * This method will only be called by external scripts (e.g. from cron jobs).
+ * The output therefore is very simple.
+ *
+ */
+ try {
+ PrintWriter out = res.getWriter();
+
+ if (req.getParameter("producer")!=null) {
+ String producerParam = req.getParameter("producer");
+ String verbParam = req.getParameter("verb");
+
+ MirGlobal.producerEngine().addJob(producerParam, verbParam);
+ out.println("job added");
+ }
+ }
+ catch (Exception e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ }
+
+ public void produceAllNew(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {
+ try {
+ MirGlobal.localizer().producers().produceAllNew();
+ showMessage(aResponse.getWriter(), getLocale(aRequest), "produceAllNewAddedToQueue", "", "");
+ }
+ catch (Exception e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ }
+
+ public void enqueue(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {
+ try {
+ if (aRequest.getParameter("producer")!=null) {
+ String producerParam = aRequest.getParameter("producer");
+ String verbParam = aRequest.getParameter("verb");
+
+ MirGlobal.producerEngine().addJob(producerParam, verbParam);
+
+ showProducerQueueStatus(aRequest, aResponse);
+ }
+ }
+ catch (Exception e) {
+ throw new ServletModuleException(e.getMessage());
+ }
+ }
+ public void cancelAbortJob(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException {
+ // ML: to be coded
+ }
}
--- /dev/null
+<html>
+<head>
+ <title>${config["Mir.Name"]} | ${lang("error.htmltitle")}</title>
+ <link rel="stylesheet" type="text/css" href="${config.docRoot}/style/admin.css">
+</head>
+<body>
+<include "head.template">
+<table width="100%" border="0" align="center">
+ <tr class="grey">
+ <td>
+ <div align="center"><h2><font class="specialtext">${lang("error.title")}</font></h2>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>${lang("error.text", config["Mir.Tech-email.address"], config["Mir.Tech-email.name"])}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <p align="center"><font color="red">${data.date} -- ${data.errorstring}</font>
+ <p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p align="center">
+ ${lang("error.text2", config["Mir.Tech-email.address"], config["Mir.Tech-email.name"])}
+ <p>
+ </td>
+ </tr>
+</table>
+<include "foot.template">
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+ <title>${config["Mir.Name"]} | ${lang("error.htmltitle")}</title>
+ <link rel="stylesheet" type="text/css" href="${config.docRoot}/style/admin.css">
+</head>
+<body>
+<include "head.template">
+<table width="100%" border="0" align="center">
+ <tr>
+ <td>
+ <p>
+ <b>${lang("infomessage."+message, argument1, argument2)}<b>
+ <p>
+ </td>
+ </tr>
+</table>
+<include "foot.template">
+</body>
+</html>
--- /dev/null
+<html>
+<head>
+ <title>${config["Mir.Name"]} | ${lang("producerqueue.htmltitle")}</title>
+ <link rel="stylesheet" type="text/css" href="${config.docRoot}/style/admin.css">
+</head>
+
+<body marginwidth="0" marginheight="0" topmargin="0" leftmargin="0">
+<include "head.template">
+
+<span class="spezialtext"><b>${lang("producer.jobqueue.title")}</b></span>
+<p>
+<table border="0">
+ <tr class="darkgrey">
+ <td colspan="2"><span class="witesmall">${lang("producer.job.name")}</span></td>
+ <td><span class="witesmall">${lang("producer.job.status")}</span></td>
+ <td><span class="witesmall">${lang("producer.job.date")}</span></td>
+<comment>
+ <td> </td>
+</comment>
+ </tr>
+
+ <if queue>
+ <assign grey="1">
+ <list queue as q>
+ <tr <if grey=="1">class="list1"<else>class="list2"</if>>
+ <td><span><b>${q.factory}</b></span></td>
+ <td><span><b>${q.verb}</b></span></td>
+ <td><span>${q.status}</span></td>
+ <td><span>${q.lastchange["HH:mm:ss"]}</span></td>
+<comment> ML: needs to be implemented
+ <td><span><a href="${config.actionRoot}?module=Producer&do=abort">${lang("producer.job.cancel")}</a></span></td>
+</comment>
+ </tr>
+ <if grey=="1"><assign grey="0"><else><assign grey="1"></if>
+ </list>
+ <else>
+ <tr class="list1">
+ <td colspan="5">Queue is empty</td>
+ </tr>
+ </if>
+
+</table>
+<a href="${config.actionRoot}?${thisurl}">${lang("producer.jobqueue.refresh")}</a><br><br>
+
+<br><br>
+
+<span class="spezialtext"><b>${lang("producer.producerlist.title")}</b></span>
+<p>
+<table border="0">
+ <tr class="darkgrey">
+ <td> </td>
+ <td><span class="witesmall">${lang("producer.verb.name")}</span></td>
+ <td><span class="witesmall">${lang("producer.verb.description")}</span></td>
+ <td><span class="witesmall"> </span></td>
+ </tr>
+
+ <assign grey="1">
+ <list producers as p>
+ <tr <if grey=="1">class="list1"<else>class="list2"</if>>
+ <td colspan="4"><span><b>${p.name}</b></span></td>
+ </tr>
+
+ <list p.verbs as v>
+ <tr <if grey=="1">class="list1"<else>class="list2"</if>>
+ <td width="25"></td>
+ <td><span class="small">${v.name}</span></td>
+ <td><span class="small">${v.description}</span></td>
+ <td><span class="small"><a href="${config.actionRoot}?module=Producer&do=enqueue&producer=${utility.encodeURI(p.name)}&verb=${utility.encodeURI(v.name)}">${lang("producer.verb.enqueue")}</a> </span></td>
+ </tr>
+ </list>
+ <if grey=="1"><assign grey="0"><else><assign grey="1"></if>
+ </list>
+</table>
+
+<include "foot.template">
+
+</body>
+</html>
+
+
<tr><td bgcolor="white"> </td></tr>
</table>
- <span class="spezialtext">
- <b>Localizer producers</b></font>
-
-
- <div align="left">
- <table>
- <tr><th>producer</th><th>verbs</th></tr>
-
- <list data.producers as p>
- <tr>
- <td>${p.key}</td>
-
- <td>
- <table>
- <tr>
- <list p.verbs as v>
- <td width="30">
- <a href="${config.actionRoot}?module=Producer&producer=${p.key}&verb=${v}">
- ${v}
- </a>
- </td>
- </list>
- <tr>
- </table>
- </td>
- </tr>
-
- </list>
-
- </table>
- </div>
+ <span class="spezialtext">
+ <b>${lang("start.producers.title")}</b></span>
+ <p>
+ <a href="${config.actionRoot}?module=Producer&do=produceAllNew">${lang("start.producers.produceAllNew")}</a><br>
+ <a href="${config.actionRoot}?module=Producer&do=showProducerQueueStatus">${lang("start.producers.advanced")}</a>
- </td>
+ </td>
<td bgcolor="white" width="5%">
</td>
<td valign="top" width="30%" class="grey">
-<!-- not finished yet
+<comment> -- not finished yet --
<span class="spezialtext">
<b>${lang("start.coverage.title")}</b></span>
<a href="${config.actionRoot}?module=Schwerpunkt&do=add" >
<img src="${config.docRoot}/img/pointgris.gif" border=0> ${lang("add")}</a>
<p>
--->
+</comment>
+
<span class="spezialtext">
<b>${lang("start.topics.title")}</b></span>
<img src="${config.docRoot}/img/pointgris.gif" border=0> ${lang("add")}</a>
<p>
-<!--
+<comment> -- not finished yet --
<span class="spezialtext">
<b>${lang("start.languages.title")}</b></span>
<img src="${config.docRoot}/img/pointgris.gif" border=0> ${lang("add")}</a>
<p>
--->
+</comment>
<span class="spezialtext">
<b>${lang("start.imcs.title")}</b></span>
</td>
<td valign="top" width="20%" class="pink">
- <!-- internes messageboard -->
+ <comment>internal messageboard</comment>
<span class="spezialtext">
<b>${lang("start.messageboard.title")}</b>
- <span class="small"><br><a href="${config.actionRoot}?module=Message&do=add">${lang("add")}</a></span>
+ <span class="small"><br><a href="${config.actionRoot}?module=Message&do=add">${lang("add")}</a>
+ <a href="${config.actionRoot}?module=Message&do=list">${lang("edit")}</a></span>
<if data.messages>
<list data.messages as m>
<p>
--- /dev/null
+<html>
+<head>
+<title>${lang("usererror.htmltitle")}</title>
+</head>
+<body>
+<include "templates/admin/head_nonavi.template">
+<table width="100%" border="0" align="center">
+ <tr bgcolor="#006600">
+ <td>
+ <div align="center"><h2><font color="Pink">${lang("usererror.title")}</font></h2>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>${lang("usererror.text")}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>
+ <p align="center"><font size="5" color="Red"><b> ${data.errorstring}</b></font>
+ <p>
+ <p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">${lang("usererror.what_to_do")}
+ </a></font>
+ <p>
+ </td>
+ </tr>
+</table>
+<include "foot.template">
+</body>
+</html>