From: zapata Date: Mon, 22 Apr 2002 19:47:48 +0000 (+0000) Subject: some new files / some changes here and there for localized producers X-Git-Tag: prexmlproducerconfig~97 X-Git-Url: http://erislabs.net/gitweb/?p=mir.git;a=commitdiff_plain;h=39da7ac9a3a4dc50f76177770448e8a100ef85c0 some new files / some changes here and there for localized producers --- diff --git a/source/Mir.java b/source/Mir.java index de346368..77412c05 100755 --- a/source/Mir.java +++ b/source/Mir.java @@ -1,4 +1,4 @@ - +import freemarker.template.SimpleList; import freemarker.template.SimpleHash; import freemarker.template.SimpleScalar; import mir.misc.HTMLParseException; @@ -6,6 +6,10 @@ import mir.misc.HTMLTemplateProcessor; 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; @@ -23,6 +27,7 @@ import java.lang.reflect.Method; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Locale; +import java.util.*; /** * Mir.java - main servlet, that dispatches to servletmodules @@ -294,6 +299,31 @@ public class Mir extends AbstractServlet { 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) { diff --git a/source/mir/util/NullWriter.java b/source/mir/util/NullWriter.java new file mode 100755 index 00000000..8bb9027d --- /dev/null +++ b/source/mir/util/NullWriter.java @@ -0,0 +1,18 @@ +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 diff --git a/source/mircoders/global/MirGlobal.java b/source/mircoders/global/MirGlobal.java new file mode 100755 index 00000000..bd235564 --- /dev/null +++ b/source/mircoders/global/MirGlobal.java @@ -0,0 +1,67 @@ +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")); + } +} diff --git a/source/mircoders/global/ProducerEngine.java b/source/mircoders/global/ProducerEngine.java new file mode 100755 index 00000000..267bd7c9 --- /dev/null +++ b/source/mircoders/global/ProducerEngine.java @@ -0,0 +1,73 @@ +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 + ">
"); + + 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:
"); + 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 diff --git a/source/mircoders/localizer/MirGeneratorLocalizer.java b/source/mircoders/localizer/MirGeneratorLocalizer.java new file mode 100755 index 00000000..b6852bb6 --- /dev/null +++ b/source/mircoders/localizer/MirGeneratorLocalizer.java @@ -0,0 +1,7 @@ +package mircoders.localizer; + +import mir.generator.*; + +public interface MirGeneratorLocalizer { + public Generator makeGenerator(String anIdentifier) throws MirLocalizerException; +} \ No newline at end of file diff --git a/source/mircoders/localizer/MirLocalizer.java b/source/mircoders/localizer/MirLocalizer.java new file mode 100755 index 00000000..8e935b48 --- /dev/null +++ b/source/mircoders/localizer/MirLocalizer.java @@ -0,0 +1,8 @@ +package mircoders.localizer; + +public interface MirLocalizer { + public MirProducerLocalizer producers(); + public MirOpenPostingLocalizer openPostings(); + public MirProducerToolLocalizer producerTool(); + public MirGeneratorLocalizer generators(); +} \ No newline at end of file diff --git a/source/mircoders/localizer/MirLocalizerException.java b/source/mircoders/localizer/MirLocalizerException.java new file mode 100755 index 00000000..9bb04db8 --- /dev/null +++ b/source/mircoders/localizer/MirLocalizerException.java @@ -0,0 +1,11 @@ +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 diff --git a/source/mircoders/localizer/MirOpenPostingLocalizer.java b/source/mircoders/localizer/MirOpenPostingLocalizer.java new file mode 100755 index 00000000..001833e9 --- /dev/null +++ b/source/mircoders/localizer/MirOpenPostingLocalizer.java @@ -0,0 +1,6 @@ +package mircoders.localizer; + +public interface MirOpenPostingLocalizer { + public void afterContentPosting(); + public void afterCommentPosting(); +} diff --git a/source/mircoders/localizer/MirProducerLocalizer.java b/source/mircoders/localizer/MirProducerLocalizer.java new file mode 100755 index 00000000..f6d5422c --- /dev/null +++ b/source/mircoders/localizer/MirProducerLocalizer.java @@ -0,0 +1,7 @@ +package mircoders.localizer; + +import java.util.*; + +public interface MirProducerLocalizer { + public Map factories(); +} diff --git a/source/mircoders/localizer/MirProducerToolLocalizer.java b/source/mircoders/localizer/MirProducerToolLocalizer.java new file mode 100755 index 00000000..3fa3d8c1 --- /dev/null +++ b/source/mircoders/localizer/MirProducerToolLocalizer.java @@ -0,0 +1,4 @@ +package mircoders.localizer; + +public interface MirProducerToolLocalizer { +} diff --git a/source/mircoders/localizer/basic/FreemarkerGeneratorLocalizer.java b/source/mircoders/localizer/basic/FreemarkerGeneratorLocalizer.java new file mode 100755 index 00000000..0af3d6a3 --- /dev/null +++ b/source/mircoders/localizer/basic/FreemarkerGeneratorLocalizer.java @@ -0,0 +1,32 @@ +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 { + } +} + diff --git a/source/mircoders/localizer/basic/MirBasicGeneratorLocalizer.java b/source/mircoders/localizer/basic/MirBasicGeneratorLocalizer.java new file mode 100755 index 00000000..6cde527b --- /dev/null +++ b/source/mircoders/localizer/basic/MirBasicGeneratorLocalizer.java @@ -0,0 +1,14 @@ +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 { + } +} diff --git a/source/mircoders/localizer/basic/MirBasicLocalizer.java b/source/mircoders/localizer/basic/MirBasicLocalizer.java new file mode 100755 index 00000000..9e9acabb --- /dev/null +++ b/source/mircoders/localizer/basic/MirBasicLocalizer.java @@ -0,0 +1,24 @@ +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 diff --git a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java new file mode 100755 index 00000000..87219ddd --- /dev/null +++ b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java @@ -0,0 +1,12 @@ +package mircoders.localizer.basic; + +import mircoders.localizer.*; + +public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer { + + public void afterContentPosting() { + } + + public void afterCommentPosting() { + } +} diff --git a/source/mircoders/localizer/basic/MirBasicProducerLocalizer.java b/source/mircoders/localizer/basic/MirBasicProducerLocalizer.java new file mode 100755 index 00000000..7089b0ed --- /dev/null +++ b/source/mircoders/localizer/basic/MirBasicProducerLocalizer.java @@ -0,0 +1,50 @@ +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"))); + } + }; +} diff --git a/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java b/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java new file mode 100755 index 00000000..a04bff99 --- /dev/null +++ b/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java @@ -0,0 +1,6 @@ +package mircoders.localizer.basic; + +import mircoders.localizer.*; + +public class MirBasicProducerToolLocalizer implements MirProducerToolLocalizer { +} diff --git a/source/mircoders/producer/ContentProducer.java b/source/mircoders/producer/ContentProducer.java new file mode 100755 index 00000000..d25aa8b2 --- /dev/null +++ b/source/mircoders/producer/ContentProducer.java @@ -0,0 +1,135 @@ +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:
"); + aLogger.println("generatorIdentifier = " + generatorIdentifier + "
"); + + 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 + "
"); + aLogger.println("Yo1
"); + + try { + File file = new File(fileName); + FileWriter fileWriter = new FileWriter(file); + PrintWriter printWriter = new PrintWriter(fileWriter); + + aLogger.println("generating: " + fileName + "
"); + + aLogger.println("Yo2
"); + generator.generate(printWriter, generationValues, aLogger); + + aLogger.println("Yo3
"); + printWriter.close(); + fileWriter.close(); + aLogger.println("Yo4
"); + + aLogger.println("Yo5
"); + + content.setProduced(true); + aLogger.println("Yo6
"); + + aLogger.println("done generating: " + fileName + "
"); + } + catch (Exception e) { + aLogger.println("exception while generating " + fileName + ":
"); + aLogger.println(e.getMessage() + "
"); + e.printStackTrace(aLogger); + aLogger.flush(); + } + } + } + catch (Exception e) { + aLogger.println("exception while generating:
"); + aLogger.println(e.getMessage() + "
"); + e.printStackTrace(aLogger); + aLogger.flush(); + } + + aLogger.println("ContentProducer.produce: done
"); + + } + +} + diff --git a/source/mircoders/producer/ContentProducerFactory.java b/source/mircoders/producer/ContentProducerFactory.java new file mode 100755 index 00000000..048b2d65 --- /dev/null +++ b/source/mircoders/producer/ContentProducerFactory.java @@ -0,0 +1,65 @@ +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(); + }; +} + diff --git a/source/mircoders/producer/OldProducerAdapter.java b/source/mircoders/producer/OldProducerAdapter.java new file mode 100755 index 00000000..d3a4742c --- /dev/null +++ b/source/mircoders/producer/OldProducerAdapter.java @@ -0,0 +1,24 @@ +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 diff --git a/source/mircoders/producer/OldProducerAdapterFactory.java b/source/mircoders/producer/OldProducerAdapterFactory.java new file mode 100755 index 00000000..ffb9cdb3 --- /dev/null +++ b/source/mircoders/producer/OldProducerAdapterFactory.java @@ -0,0 +1,25 @@ +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 diff --git a/source/mircoders/producer/ScriptCallProducer.java b/source/mircoders/producer/ScriptCallProducer.java new file mode 100755 index 00000000..dc598a46 --- /dev/null +++ b/source/mircoders/producer/ScriptCallProducer.java @@ -0,0 +1,32 @@ +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 + ":
"); + + try { + process = Runtime.getRuntime().exec(script); + returnValue = process.waitFor(); + aLogger.println("Terminated successfully, return value = " + returnValue + ".
"); + } + catch (Throwable e) { + aLogger.println("Exception has occurred: " + e.getMessage() + ":
"); + e.printStackTrace(aLogger); + throw new ProducerException(e); + } + } +} diff --git a/source/mircoders/producer/ScriptCallProducerFactory.java b/source/mircoders/producer/ScriptCallProducerFactory.java new file mode 100755 index 00000000..b8ae7570 --- /dev/null +++ b/source/mircoders/producer/ScriptCallProducerFactory.java @@ -0,0 +1,30 @@ +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(); + }; +} + diff --git a/source/mircoders/producer/StartPageProducer.java b/source/mircoders/producer/StartPageProducer.java new file mode 100755 index 00000000..8371b00d --- /dev/null +++ b/source/mircoders/producer/StartPageProducer.java @@ -0,0 +1,105 @@ +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:
"); + aLogger.println("generatorIdentifier = " + generatorIdentifier + "
"); + + File file = new File(outputFile); + FileWriter fileWriter = new FileWriter(file); + PrintWriter printWriter = new PrintWriter(fileWriter); + + aLogger.println("generating: " + outputFile + "
"); + generator.generate(printWriter, generationValues, aLogger); + printWriter.close(); + fileWriter.close(); + aLogger.println("done
"); + } + catch (Exception e) { + aLogger.println("exception while generating " + outputFile + ":
"); + aLogger.println(e.getMessage() + "
"); + e.printStackTrace(aLogger); + aLogger.flush(); + } + } +} diff --git a/source/mircoders/producer/StartPageProducerFactory.java b/source/mircoders/producer/StartPageProducerFactory.java new file mode 100755 index 00000000..ad30d67d --- /dev/null +++ b/source/mircoders/producer/StartPageProducerFactory.java @@ -0,0 +1,60 @@ +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(); + }; +} + diff --git a/source/mircoders/servlet/ServletModuleProducer.java b/source/mircoders/servlet/ServletModuleProducer.java index 1e4e0d2c..f9d820b4 100755 --- a/source/mircoders/servlet/ServletModuleProducer.java +++ b/source/mircoders/servlet/ServletModuleProducer.java @@ -10,9 +10,11 @@ import freemarker.template.*; 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 @@ -37,29 +39,48 @@ public class ServletModuleProducer extends ServletModule { 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());