-
+import freemarker.template.SimpleList;
import freemarker.template.SimpleHash;
import freemarker.template.SimpleScalar;
import mir.misc.HTMLParseException;
import mir.misc.MirConfig;
import mir.misc.StringUtil;
import mir.servlet.*;
+import mir.producer.*;
+
+import mircoders.global.*;
+import mircoders.localizer.*;
import mircoders.entity.EntityUsers;
import mircoders.module.ModuleMessage;
import mircoders.module.ModuleUsers;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Locale;
+import java.util.*;
/**
* Mir.java - main servlet, that dispatches to servletmodules
mergeData.put("login_user", userEntity);
if (messageModule == null) messageModule = new ModuleMessage(DatabaseMessages.getInstance());
mergeData.put("messages", messageModule.getByWhereClause(null, "webdb_create desc", 0, 10));
+
+
+
+ SimpleList producersData = new SimpleList();
+ Iterator i = MirGlobal.localizer().producers().factories().entrySet().iterator();
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry) i.next();
+
+ SimpleList producerVerbs = new SimpleList();
+ Iterator j = ((ProducerFactory) entry.getValue()).verbs();
+ while (j.hasNext()) {
+ producerVerbs.add((String) j.next());
+ }
+
+ SimpleHash producerData = new SimpleHash();
+ producerData.put("key", (String) entry.getKey());
+ producerData.put("verbs", producerVerbs);
+
+ producersData.add(producerData);
+ }
+
+ mergeData.put("producers", producersData);
+
+
+
HTMLTemplateProcessor.process(res, startTemplate, mergeData, out, getLocale(req));
}
catch (Exception e) {
--- /dev/null
+package mir.util;
+
+import java.io.*;
+
+public class NullWriter extends Writer {
+
+ public NullWriter() {
+ }
+
+ public void close() {
+ }
+
+ public void flush() {
+ }
+
+ public void write(char[] cbuf, int off, int len) {
+ }
+}
\ No newline at end of file
--- /dev/null
+package mircoders.global;
+
+import mir.misc.*;
+import mircoders.localizer.*;
+
+import mircoders.localizer.basic.*;
+
+
+public class MirGlobal {
+ static private MirConfig configuration;
+ static private MirLocalizer localizer;
+ static private ProducerEngine producerEngine;
+
+ public static MirLocalizer localizer() {
+ if (localizer == null ) {
+ localizer = new MirBasicLocalizer();
+ }
+
+ return localizer;
+ };
+
+ public static MirConfig config() {
+ if (configuration == null) {
+ configuration = new MirConfig();
+ }
+
+ return configuration;
+ };
+
+ public static ProducerEngine producerEngine() {
+ if (producerEngine == null) {
+ producerEngine = new ProducerEngine();
+ }
+
+ return producerEngine;
+ }
+
+ public static String getConfigProperty(String aPropertyName) {
+ String result;
+
+ result = config().getProp(aPropertyName);
+
+ if (result==null)
+ throw new ConfigException("Property '" + aPropertyName + "' not present");
+
+ return result;
+ }
+
+ public static int getConfigIntegerProperty(String aPropertyName) {
+ String result;
+
+ result = config().getProp(aPropertyName);
+
+ return Integer.parseInt(result);
+ }
+
+ public static boolean getConfigBooleanProperty(String aPropertyName) {
+ String result;
+
+ result = config().getProp(aPropertyName);
+
+ if (result==null)
+ throw new ConfigException("Boolean property '" + aPropertyName + "' not present");
+
+ return (result.equals("yes") || result.equals("1"));
+ }
+}
--- /dev/null
+package mircoders.global;
+
+import java.util.*;
+import java.io.*;
+import mir.producer.*;
+import mir.util.*;
+
+public class ProducerEngine {
+ private Map producers;
+ private List Queue;
+ private Thread queueThread;
+
+ void ProducerEngine() {
+ producers = MirGlobal.localizer().producers().factories();
+ Queue = new Vector();
+
+// queueThread = new Thread(
+ }
+
+ void addTask(String aProducerFactory, String aVerb) {
+ produceNow(aProducerFactory, aVerb, new PrintWriter(new NullWriter()));
+ }
+
+ void produceNow(String aProducerFactory, String aVerb, PrintWriter aLogger) {
+ try {
+ aLogger.println("Producing <" + aProducerFactory + "," + aVerb + "><br>");
+
+ ProducerFactory factory = (ProducerFactory) producers.get(aProducerFactory);
+
+ if (factory == null )
+ throw new Exception("No producer factory '"+aProducerFactory+"' present.");
+
+ Producer producer = factory.makeProducer(aVerb);
+
+ producer.produce(aLogger);
+ }
+ catch (Throwable e) {
+ try {
+ aLogger.println("exception occurred:<br>");
+ aLogger.println(e.getMessage());
+ e.printStackTrace(aLogger);
+ }
+ catch (Throwable f) {
+ }
+ }
+ }
+
+ private class ProducerQueueItem {
+ String factory;
+ String verb;
+
+ public ProducerQueueItem(String aFactory, String aVerb) {
+ factory = aFactory;
+ verb = aVerb;
+ }
+
+ public String getVerb() {
+ return verb;
+ }
+
+ public String getFactory() {
+ return factory;
+ }
+ }
+
+ private class ProducerQueue implements Runnable {
+ public void run() {
+ while (false) {
+ }
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package mircoders.localizer;
+
+import mir.generator.*;
+
+public interface MirGeneratorLocalizer {
+ public Generator makeGenerator(String anIdentifier) throws MirLocalizerException;
+}
\ No newline at end of file
--- /dev/null
+package mircoders.localizer;
+
+public interface MirLocalizer {
+ public MirProducerLocalizer producers();
+ public MirOpenPostingLocalizer openPostings();
+ public MirProducerToolLocalizer producerTool();
+ public MirGeneratorLocalizer generators();
+}
\ No newline at end of file
--- /dev/null
+package mircoders.localizer;
+
+public class MirLocalizerException extends Exception {
+
+ public MirLocalizerException(String aMessage) {
+ super(aMessage);
+ }
+ public MirLocalizerException(Throwable aCause) {
+ super(aCause.getMessage());
+ }
+}
\ No newline at end of file
--- /dev/null
+package mircoders.localizer;
+
+public interface MirOpenPostingLocalizer {
+ public void afterContentPosting();
+ public void afterCommentPosting();
+}
--- /dev/null
+package mircoders.localizer;
+
+import java.util.*;
+
+public interface MirProducerLocalizer {
+ public Map factories();
+}
--- /dev/null
+package mircoders.localizer;
+
+public interface MirProducerToolLocalizer {
+}
--- /dev/null
+package mircoders.localizer.basic;
+
+import freemarker.template.*;
+import mir.generator.*;
+import mircoders.localizer.*;
+
+public class FreemarkerGeneratorLocalizer implements MirGeneratorLocalizer {
+ private FileTemplateCache templateCache;
+
+ public FreemarkerGeneratorLocalizer(String aTemplateRoot) {
+ templateCache = new FileTemplateCache(aTemplateRoot+"/");
+ templateCache.setLoadingPolicy(templateCache.LOAD_ON_DEMAND);
+ }
+
+ public Generator makeGenerator(String anIdentifier) throws MirLocalizerException {
+ Template template = (Template) templateCache.getItem(anIdentifier, "template");
+
+ if (template==null) {
+ throw new MirLocalizerException("FreemarkerGeneratorLocalizer: Can't find template "+templateCache.getDirectory()+anIdentifier);
+ }
+
+ prepareTemplate(template);
+
+ // ML: check for null!
+
+ return new FreemarkerGenerator(template);
+ };
+
+ public void prepareTemplate(Template aTemplate) throws MirLocalizerException {
+ }
+}
+
--- /dev/null
+package mircoders.localizer.basic;
+
+import freemarker.template.*;
+import mircoders.localizer.*;
+
+public class MirBasicGeneratorLocalizer extends FreemarkerGeneratorLocalizer {
+
+ public MirBasicGeneratorLocalizer (String aTemplateRoot) {
+ super(aTemplateRoot);
+ }
+
+ public void prepareTemplate(Template aTemplate) throws MirLocalizerException {
+ }
+}
--- /dev/null
+package mircoders.localizer.basic;
+
+import mircoders.localizer.*;
+import mircoders.global.*;
+
+public class MirBasicLocalizer implements MirLocalizer {
+
+ public MirProducerLocalizer producers() {
+ return new MirBasicProducerLocalizer();
+ }
+
+ public MirGeneratorLocalizer generators() {
+ return new MirBasicGeneratorLocalizer(MirGlobal.getConfigProperty("Home")+MirGlobal.getConfigProperty("HTMLTemplateProcessor.Dir"));
+ }
+
+ public MirOpenPostingLocalizer openPostings() {
+ return new MirBasicOpenPostingLocalizer();
+ }
+
+ public MirProducerToolLocalizer producerTool() {
+ return new MirBasicProducerToolLocalizer();
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package mircoders.localizer.basic;
+
+import mircoders.localizer.*;
+
+public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
+
+ public void afterContentPosting() {
+ }
+
+ public void afterCommentPosting() {
+ }
+}
--- /dev/null
+package mircoders.localizer.basic;
+
+import java.util.*;
+import mir.producer.*;
+import mircoders.global.*;
+import mircoders.localizer.*;
+import mircoders.producer.*;
+
+public class MirBasicProducerLocalizer implements MirProducerLocalizer {
+ private Map producerFactories;
+
+ public MirBasicProducerLocalizer() {
+ producerFactories = new HashMap();
+
+ setupFactories(producerFactories);
+ }
+
+ public Map factories() {
+ return producerFactories;
+ };
+
+ protected void setupFactories(Map aFactoriesMap ) {
+
+ aFactoriesMap.put(
+ "content",
+ new ContentProducerFactory(
+ MirGlobal.getConfigProperty("Producer.Content.Template"),
+ "bundles.admin",
+ MirGlobal.getConfigProperty("Producer.StorageRoot"),
+ ".shtml",
+ Integer.parseInt(MirGlobal.getConfigProperty("Producer.Content.Batchsize"))));
+
+ aFactoriesMap.put("oldstartpage", new OldProducerAdapterFactory(new ProducerStartPage()));
+ aFactoriesMap.put("images", new OldProducerAdapterFactory(new ProducerImages()));
+ aFactoriesMap.put("navigation", new OldProducerAdapterFactory(new ProducerNavigation()));
+ aFactoriesMap.put("openposting", new OldProducerAdapterFactory(new ProducerOpenPosting()));
+ aFactoriesMap.put("topics", new OldProducerAdapterFactory(new ProducerTopics()));
+
+ aFactoriesMap.put("startpage", new StartPageProducerFactory(
+ MirGlobal.getConfigProperty("Producer.StartPage.Template"),
+ "bundles.admin",
+ MirGlobal.getConfigProperty("Producer.StorageRoot") + "/index.shtml",
+ MirGlobal.getConfigIntegerProperty("Producer.StartPage.Items"),
+ MirGlobal.getConfigIntegerProperty("Producer.StartPage.Newswire")));
+
+ if(MirGlobal.getConfigBooleanProperty("Rsync")){
+ aFactoriesMap.put("sync", new ScriptCallProducerFactory(MirGlobal.getConfigProperty("Rsync.Script.Path")));
+ }
+ };
+}
--- /dev/null
+package mircoders.localizer.basic;
+
+import mircoders.localizer.*;
+
+public class MirBasicProducerToolLocalizer implements MirProducerToolLocalizer {
+}
--- /dev/null
+package mircoders.producer;
+
+import java.io.*;
+import java.util.*;
+
+import mir.misc.*;
+import mir.entity.*;
+import mir.producer.*;
+import mir.generator.*;
+
+import mircoders.localizer.*;
+import mircoders.global.*;
+import mircoders.entity.*;
+
+import org.apache.struts.util.MessageResources;
+
+// @todo ML: the file that gets generated should be better configurable
+
+public class ContentProducer implements mir.producer.Producer {
+
+ private String generatorIdentifier;
+ private String resourceBundle;
+
+ private String outputFilePrefix;
+ private String outputFilePostfix;
+
+ EntityBrowser browser;
+
+ public ContentProducer(
+ EntityBrowser aBrowser,
+ String aGeneratorIdentifier,
+ String aResourceBundle,
+ String anOutputFilePrefix,
+ String anOutputFilePostfix) {
+
+ browser = aBrowser;
+ generatorIdentifier=aGeneratorIdentifier;
+ resourceBundle=aResourceBundle;
+ outputFilePrefix=anOutputFilePrefix;
+ outputFilePostfix=anOutputFilePostfix;
+ }
+
+ public void produce( PrintWriter aLogger ) throws ProducerException {
+ EntityContent content;
+
+ Map configMap = new HashMap();
+ Map generationValues = new HashMap();
+ Map dataMap = new HashMap();
+ String fileName;
+
+
+
+ configMap.put("producerDocRoot", MirGlobal.getConfigProperty("Producer.DocRoot"));
+ configMap.put("storageRoot", MirGlobal.getConfigProperty("Producer.StorageRoot"));
+ configMap.put("productionHost", MirGlobal.getConfigProperty("Producer.ProductionHost"));
+ configMap.put("openAction", MirGlobal.getConfigProperty("Producer.OpenAction"));
+ configMap.put("docRoot", MirGlobal.getConfigProperty("RootUri"));
+ configMap.put("now", StringUtil.date2readableDateTime(new GregorianCalendar()));
+ configMap.put("videoHost", MirGlobal.getConfigProperty("Producer.Video.Host"));
+ configMap.put("audioHost", MirGlobal.getConfigProperty("Producer.Audio.Host"));
+ configMap.put("imageHost", MirGlobal.getConfigProperty("Producer.Image.Host"));
+ configMap.put("imagePath", MirGlobal.getConfigProperty("Producer.Image.Path"));
+ configMap.put("mirVersion", MirGlobal.getConfigProperty("Mir.Version"));
+ configMap.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
+ generationValues.put("config", configMap);
+
+ MessageResources messages = MessageResources.getMessageResources(resourceBundle);
+ generationValues.put("lang", new MessageMethodModel(null, messages) );
+ generationValues.put("data", dataMap);
+
+
+
+ try {
+ Generator generator = MirGlobal.localizer().generators().makeGenerator(generatorIdentifier);
+
+ aLogger.println("ContentProducer.produce:<br>");
+ aLogger.println("generatorIdentifier = " + generatorIdentifier + "<br>");
+
+ while (browser.hasNext()) {
+ content = (EntityContent) browser.next();
+ dataMap.put("content", content);
+
+ String date = content.getValue("date");
+
+
+ fileName = outputFilePrefix + "/" +
+ date.substring(0,4) + "/" + date.substring(4,6) + "/" +
+ content.getValue("id") + outputFilePostfix;
+
+ aLogger.println("fileName = " + fileName + "<br>");
+ aLogger.println("Yo1<br>");
+
+ try {
+ File file = new File(fileName);
+ FileWriter fileWriter = new FileWriter(file);
+ PrintWriter printWriter = new PrintWriter(fileWriter);
+
+ aLogger.println("generating: " + fileName + "<br/>");
+
+ aLogger.println("Yo2<br>");
+ generator.generate(printWriter, generationValues, aLogger);
+
+ aLogger.println("Yo3<br>");
+ printWriter.close();
+ fileWriter.close();
+ aLogger.println("Yo4<br>");
+
+ aLogger.println("Yo5<br>");
+
+ content.setProduced(true);
+ aLogger.println("Yo6<br>");
+
+ aLogger.println("done generating: " + fileName + "<br/>");
+ }
+ catch (Exception e) {
+ aLogger.println("exception while generating " + fileName + ":<br/>");
+ aLogger.println(e.getMessage() + "<br/>");
+ e.printStackTrace(aLogger);
+ aLogger.flush();
+ }
+ }
+ }
+ catch (Exception e) {
+ aLogger.println("exception while generating:<br/>");
+ aLogger.println(e.getMessage() + "<br/>");
+ e.printStackTrace(aLogger);
+ aLogger.flush();
+ }
+
+ aLogger.println("ContentProducer.produce: done<br>");
+
+ }
+
+}
+
--- /dev/null
+package mircoders.producer;
+
+import java.util.*;
+import mir.entity.*;
+import mir.producer.*;
+import mircoders.storage.*;
+
+public class ContentProducerFactory implements ProducerFactory {
+ private String generatorIdentifier;
+ private String resourceBundle;
+ private String outputFilePrefix;
+ private String outputFilePostfix;
+ private int batchSize;
+
+// ML: extra selection needed for article types
+ public ContentProducerFactory(
+ String aGeneratorIdentifier,
+ String aResourceBundle,
+ String anOutputFilePrefix,
+ String anOutputFilePostfix,
+ int aBatchSize) {
+
+ generatorIdentifier=aGeneratorIdentifier;
+ resourceBundle=aResourceBundle;
+ outputFilePrefix=anOutputFilePrefix;
+ outputFilePostfix=anOutputFilePostfix;
+ batchSize=aBatchSize;
+ }
+
+ public mir.producer.Producer makeProducer(String aVerb) throws ProducerException {
+ try {
+ QueryBuilder queryBuilder = new QueryBuilder();
+
+ queryBuilder.appendAndCondition("is_published='1'");
+
+ if (!aVerb.equals("all")) {
+ queryBuilder.appendAndCondition("is_produced='0'");
+ }
+
+ return new ContentProducer(
+ new EntityBrowser(
+ DatabaseContent.getInstance(),
+ queryBuilder.getWhereClause(),
+ queryBuilder.getOrderByClause(),
+ batchSize),
+ generatorIdentifier,
+ resourceBundle,
+ outputFilePrefix,
+ outputFilePostfix
+ );
+ } catch (Exception e) {
+ throw new ProducerException(e);
+ }
+ };
+
+ public Iterator verbs() {
+ Vector verbList = new Vector();
+
+ verbList.add("new");
+ verbList.add("all");
+
+ return verbList.iterator();
+ };
+}
+
--- /dev/null
+package mircoders.producer;
+
+import mir.producer.*;
+import java.io.*;
+
+public class OldProducerAdapter implements mir.producer.Producer {
+
+ private mircoders.producer.Producer oldProducer;
+ private Boolean forced;
+
+ public OldProducerAdapter( mircoders.producer.Producer anOldProducer, Boolean aForced ) {
+ oldProducer = anOldProducer;
+ forced = aForced;
+ }
+
+ public void produce( PrintWriter aLogger ) throws ProducerException {
+ try {
+ oldProducer.handle( aLogger, null, forced.booleanValue(), false );
+ }
+ catch (Throwable e) {
+ throw new ProducerException(e);
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package mircoders.producer;
+
+import mir.producer.*;
+import java.util.*;
+
+public class OldProducerAdapterFactory implements ProducerFactory {
+
+ private mircoders.producer.Producer oldProducer;
+
+ public Iterator verbs() {
+ Vector verbList = new Vector();
+
+ verbList.add("new");
+ verbList.add("all");
+ return verbList.iterator();
+ }
+
+ public OldProducerAdapterFactory(mircoders.producer.Producer anOldProducer) {
+ oldProducer = anOldProducer;
+ }
+
+ public mir.producer.Producer makeProducer(String aVerb) {
+ return new OldProducerAdapter(oldProducer, new Boolean(aVerb.equals("all")));
+ }
+}
\ No newline at end of file
--- /dev/null
+package mircoders.producer;
+
+import mir.producer.*;
+import java.io.*;
+
+// ML: needs to be tested!
+
+public class ScriptCallProducer implements mir.producer.Producer {
+ String script;
+
+ public ScriptCallProducer(String aScript) {
+ script = aScript;
+ }
+
+ public void produce( PrintWriter aLogger ) throws ProducerException {
+ Process process;
+ int returnValue;
+
+ aLogger.println("Executing " + script + ":<br>");
+
+ try {
+ process = Runtime.getRuntime().exec(script);
+ returnValue = process.waitFor();
+ aLogger.println("Terminated successfully, return value = " + returnValue + ".<br>");
+ }
+ catch (Throwable e) {
+ aLogger.println("Exception has occurred: " + e.getMessage() + ":<br>");
+ e.printStackTrace(aLogger);
+ throw new ProducerException(e);
+ }
+ }
+}
--- /dev/null
+package mircoders.producer;
+
+import java.util.*;
+import mir.entity.*;
+import mir.producer.*;
+import mircoders.storage.*;
+
+public class ScriptCallProducerFactory implements ProducerFactory {
+ private String script;
+
+
+ public ScriptCallProducerFactory(String aScript) {
+ script=aScript;
+ }
+
+ public mir.producer.Producer makeProducer(String aVerb) throws ProducerException {
+
+
+ return new ScriptCallProducer(script);
+ };
+
+ public Iterator verbs() {
+ Vector verbList = new Vector();
+
+ verbList.add("run");
+
+ return verbList.iterator();
+ };
+}
+
--- /dev/null
+package mircoders.producer;
+
+import java.io.*;
+import java.util.*;
+
+import mir.misc.*;
+import mir.entity.*;
+import mir.producer.*;
+import mir.generator.*;
+
+import mircoders.localizer.*;
+import mircoders.global.*;
+import mircoders.entity.*;
+
+import mircoders.module.*;
+
+import org.apache.struts.util.MessageResources;
+
+public class StartPageProducer implements mir.producer.Producer {
+
+ private String generatorIdentifier;
+ private String resourceBundle;
+ private String outputFile;
+ private EntityList newswireItems;
+ private EntityList features;
+ private EntityList topics;
+ private EntityList breakingNews;
+
+ EntityBrowser browser;
+
+ public StartPageProducer(
+ String aGeneratorIdentifier,
+ String aResourceBundle,
+ String anOutputFile,
+
+ EntityList aNewswireItems,
+ EntityList aFeatures,
+ EntityList aTopics,
+ EntityList aBreakingNews) {
+
+ generatorIdentifier=aGeneratorIdentifier;
+ resourceBundle=aResourceBundle;
+ outputFile=anOutputFile;
+ newswireItems = aNewswireItems;
+ features = aFeatures;
+ topics = aTopics;
+ breakingNews = aBreakingNews;
+ }
+
+ public void produce( PrintWriter aLogger ) throws ProducerException {
+ Map configMap = new HashMap();
+ Map generationValues = new HashMap();
+ Map dataMap = new HashMap();
+
+ try {
+ configMap.put("producerDocRoot", MirGlobal.getConfigProperty("Producer.DocRoot"));
+ configMap.put("storageRoot", MirGlobal.getConfigProperty("Producer.StorageRoot"));
+ configMap.put("productionHost", MirGlobal.getConfigProperty("Producer.ProductionHost"));
+ configMap.put("openAction", MirGlobal.getConfigProperty("Producer.OpenAction"));
+ configMap.put("docRoot", MirGlobal.getConfigProperty("RootUri"));
+ configMap.put("now", StringUtil.date2readableDateTime(new GregorianCalendar()));
+ configMap.put("videoHost", MirGlobal.getConfigProperty("Producer.Video.Host"));
+ configMap.put("audioHost", MirGlobal.getConfigProperty("Producer.Audio.Host"));
+ configMap.put("imageHost", MirGlobal.getConfigProperty("Producer.Image.Host"));
+ configMap.put("imagePath", MirGlobal.getConfigProperty("Producer.Image.Path"));
+ configMap.put("mirVersion", MirGlobal.getConfigProperty("Mir.Version"));
+ configMap.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
+
+ generationValues.put("config", configMap);
+
+ MessageResources messages = MessageResources.getMessageResources(resourceBundle);
+ generationValues.put("lang", new MessageMethodModel(null, messages) );
+
+ generationValues.put("data", dataMap);
+
+ dataMap.put("dc_now", StringUtil.date2w3DateTime(new GregorianCalendar()));
+ dataMap.put("newswire", newswireItems);
+ dataMap.put("features", features);
+ dataMap.put("breakingnews", breakingNews);
+ dataMap.put("topics", topics);
+
+
+ Generator generator = MirGlobal.localizer().generators().makeGenerator(generatorIdentifier);
+
+ aLogger.println("StartPageProducer.produce:<br>");
+ aLogger.println("generatorIdentifier = " + generatorIdentifier + "<br>");
+
+ File file = new File(outputFile);
+ FileWriter fileWriter = new FileWriter(file);
+ PrintWriter printWriter = new PrintWriter(fileWriter);
+
+ aLogger.println("generating: " + outputFile + "<br/>");
+ generator.generate(printWriter, generationValues, aLogger);
+ printWriter.close();
+ fileWriter.close();
+ aLogger.println("done<br/>");
+ }
+ catch (Exception e) {
+ aLogger.println("exception while generating " + outputFile + ":<br/>");
+ aLogger.println(e.getMessage() + "<br/>");
+ e.printStackTrace(aLogger);
+ aLogger.flush();
+ }
+ }
+}
--- /dev/null
+package mircoders.producer;
+
+import java.util.*;
+import mir.entity.*;
+import mir.producer.*;
+import mircoders.storage.*;
+import mircoders.module.*;
+
+public class StartPageProducerFactory implements ProducerFactory {
+ private String generatorIdentifier;
+ private String resourceBundle;
+ private String outputFile;
+ private int nrNewswireItems;
+ private int nrFeatures;
+
+ public StartPageProducerFactory(
+ String aGeneratorIdentifier,
+ String aResourceBundle,
+ String anOutputFile,
+ int aNrFeatures,
+ int aNrNewswireItems) {
+
+ generatorIdentifier = aGeneratorIdentifier;
+ resourceBundle = aResourceBundle;
+ outputFile = anOutputFile;
+ nrFeatures = aNrFeatures;
+ nrNewswireItems = aNrNewswireItems;
+ }
+
+
+ public mir.producer.Producer makeProducer(String aVerb) throws ProducerException {
+
+ try {
+ ModuleContent contentModule = new ModuleContent(DatabaseContent.getInstance());
+ ModuleTopics topicsModule = new ModuleTopics(DatabaseTopics.getInstance());
+ ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance());
+
+ return new StartPageProducer(
+ generatorIdentifier,
+ resourceBundle,
+ outputFile,
+ contentModule.getFeatures(0,nrFeatures),
+ contentModule.getNewsWire(0,nrNewswireItems),
+ breakingModule.getBreakingNews(),
+ topicsModule .getTopicsList());
+ }
+ catch (Throwable e) {
+ throw new ProducerException(e);
+ }
+ };
+
+ public Iterator verbs() {
+ Vector verbList = new Vector();
+
+ verbList.add("all");
+
+ return verbList.iterator();
+ };
+}
+
import mir.servlet.*;
import mir.misc.*;
+import mir.producer.*;
import mircoders.producer.*;
import mircoders.entity.*;
+import mircoders.global.*;
/* Verteilerservlet, dass je nach Parameter task die Klasse Producer"TASK"
* ueber die Methode handle(); aufruft
{
try {
PrintWriter out = res.getWriter();
- 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);
- Producer 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);
+
+
+ if (req.getParameter("producer")!=null) {
+ // ML: new producer system:
+
+ String producerParam = req.getParameter("producer");
+ String verbParam = req.getParameter("verb");
+
+ ProducerFactory factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get(producerParam);
+ mir.producer.Producer producer = factory.makeProducer(verbParam);
+
+ producer.produce(out);
+
+ }
+ 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);
}
- } else {
- producer.handle(out, user, false,false);
- }
- }
+ }
+ }
}
catch (Exception e) {
throw new ServletModuleException(e.toString());