-/*
- * Copyright (C) 2001, 2002 The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with any library licensed under the Apache Software License,
- * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
- * (or with modified versions of the above that use the same license as the above),
- * and distribute linked combinations including the two. You must obey the
- * GNU General Public License in all respects for all of the code used other than
- * the above mentioned libraries. If you modify this file, you may extend this
- * exception to your version of the file, but you are not obligated to do so.
- * If you do not wish to do so, delete this exception statement from your version.
- */
-package mircoders.localizer.basic;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import mir.entity.adapter.EntityAdapterModel;
-import mir.generator.Generator;
-import mir.generator.WriterEngine;
-import mir.log.LoggerWrapper;
-import mir.producer.ProducerFactory;
-import mir.producer.reader.DefaultProducerNodeBuilders;
-import mir.producer.reader.ProducerConfigReader;
-import mir.producer.reader.ProducerNodeBuilderLibrary;
-import mir.util.FileMonitor;
-import mircoders.global.MirGlobal;
-import mircoders.global.ProducerEngine;
-import mircoders.localizer.MirLocalizerExc;
-import mircoders.localizer.MirLocalizerFailure;
-import mircoders.localizer.MirProducerLocalizer;
-import mircoders.producer.reader.SupplementalProducerNodeBuilders;
-
-public class MirBasicProducerLocalizer implements MirProducerLocalizer {
- private List producerFactories;
- private Map nameToFactory;
- private List allNewProducerTasks;
-
- protected FileMonitor fileMonitor;
- protected EntityAdapterModel model;
- protected Generator.GeneratorLibrary generatorLibrary;
- protected WriterEngine writerEngine;
-
- protected LoggerWrapper logger;
-
- public MirBasicProducerLocalizer() {
- try {
- logger = new LoggerWrapper("Localizer.Basic.Producer");
-
- String allNewProducers = MirGlobal.config().getString("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.error("MirBasicProducerLocalizer(): Exception "+t.getMessage());
- model = new EntityAdapterModel();
- }
- }
-
- public List factories() throws MirLocalizerExc {
- if (fileMonitor==null || producerFactories == null || fileMonitor.hasChanged()) {
- try {
- List newProducers = new Vector();
- FileMonitor newFileMonitor = new FileMonitor();
- setupFactories(newProducers, newFileMonitor);
-
- producerFactories = newProducers;
- fileMonitor = newFileMonitor;
- logger.info("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.error("MirBasicProducerLocalizer.factories(): Unable to setup factories: "+t.getMessage());
- t.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE));
- }
- }
-
- return producerFactories;
- };
-
- protected void setupProducerNodeBuilderLibrary(ProducerNodeBuilderLibrary aLibrary) throws MirLocalizerFailure {
- try {
- DefaultProducerNodeBuilders.registerBuilders(
- aLibrary, model, generatorLibrary, writerEngine,
- MirGlobal.config().getString("Home"), MirGlobal.config().getString("Producer.StorageRoot"));
- SupplementalProducerNodeBuilders.registerBuilders(aLibrary, model);
- }
- catch (Throwable t) {
- throw new MirLocalizerFailure(t.getMessage(), t);
- }
- }
-
- protected void setupFactories(List aFactories, FileMonitor aFileMonitor) throws MirLocalizerExc, MirLocalizerFailure {
- ProducerConfigReader reader;
- ProducerNodeBuilderLibrary library = new ProducerNodeBuilderLibrary();
- setupProducerNodeBuilderLibrary(library);
- List usedFiles = new Vector();
- Iterator i;
-
- aFileMonitor.clear();
- reader = new ProducerConfigReader();
- reader.parseFile(MirGlobal.config().getString("Home") + File.separatorChar + MirGlobal.config().getString("Mir.Localizer.ProducerConfigFile"), library, aFactories, usedFiles);
-
- i = usedFiles.iterator();
- while (i.hasNext())
- aFileMonitor.addFile((File) i.next());
- }
-
- public void produceAllNew() {
- MirGlobal.producerEngine().addTasks(allNewProducerTasks);
- };
-
- public ProducerFactory getFactoryForName(String aName) {
- try {
- factories();
- }
- catch (Throwable t) {
- }
-
- return (ProducerFactory) nameToFactory.get(aName);
- }
-}
+/*\r
+ * Copyright (C) 2001, 2002 The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with any library licensed under the Apache Software License,\r
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library\r
+ * (or with modified versions of the above that use the same license as the above),\r
+ * and distribute linked combinations including the two. You must obey the\r
+ * GNU General Public License in all respects for all of the code used other than\r
+ * the above mentioned libraries. If you modify this file, you may extend this\r
+ * exception to your version of the file, but you are not obligated to do so.\r
+ * If you do not wish to do so, delete this exception statement from your version.\r
+ */\r
+package mircoders.localizer.basic;\r
+\r
+import java.io.File;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Vector;\r
+\r
+import mir.entity.adapter.EntityAdapterModel;\r
+import mir.generator.Generator;\r
+import mir.generator.WriterEngine;\r
+import mir.log.LoggerWrapper;\r
+import mir.producer.ProducerFactory;\r
+import mir.producer.reader.DefaultProducerNodeBuilders;\r
+import mir.producer.reader.ProducerConfigReader;\r
+import mir.producer.reader.ProducerNodeBuilderLibrary;\r
+import mir.util.*;\r
+import mircoders.global.MirGlobal;\r
+import mircoders.global.ProducerEngine;\r
+import mircoders.localizer.MirLocalizerExc;\r
+import mircoders.localizer.MirLocalizerFailure;\r
+import mircoders.localizer.MirProducerLocalizer;\r
+import mircoders.producer.reader.SupplementalProducerNodeBuilders;\r
+\r
+public class MirBasicProducerLocalizer implements MirProducerLocalizer {\r
+ private List producerFactories;\r
+ private Map nameToFactory;\r
+\r
+ private Map producerRecipes;\r
+ private List producerRecipeNames;\r
+\r
+ protected FileMonitor fileMonitor;\r
+ protected EntityAdapterModel model;\r
+ protected Generator.GeneratorLibrary generatorLibrary;\r
+ protected WriterEngine writerEngine;\r
+\r
+ protected LoggerWrapper logger;\r
+\r
+ public MirBasicProducerLocalizer() {\r
+ try {\r
+ logger = new LoggerWrapper("Localizer.Basic.Producer");\r
+\r
+ producerRecipes = new HashMap();\r
+ producerRecipeNames = new Vector();\r
+\r
+ String[] recipes = MirGlobal.config().getStringArray("Mir.Localizer.Producer.ProducerRecipes");\r
+ for (int i = 0; i<recipes.length; i++) {\r
+ try {\r
+ List parts = StringRoutines.separateString(recipes[i], "=");\r
+ if (parts.size() == 2) {\r
+ producerRecipes.put(parts.get(0), ProducerEngine.ProducerTask.parseProducerTaskList( (String) parts.get(1)));\r
+ producerRecipeNames.add(parts.get(0));\r
+ }\r
+ else {\r
+ throw new Exception("'=' expected");\r
+ }\r
+ }\r
+ catch (Throwable t) {\r
+ logger.error("Error while processing producer recipe '" + recipes[i] + "': " + t.toString());\r
+ }\r
+ }\r
+\r
+ // for backward compatibility:\r
+ String allNewProducers = MirGlobal.config().getString("Mir.Localizer.Producer.AllNewProducers");\r
+ if (allNewProducers!=null && allNewProducers.length()>0) {\r
+ producerRecipes.put("allnew", ProducerEngine.ProducerTask.parseProducerTaskList(allNewProducers));\r
+ producerRecipeNames.add("allnew");\r
+ }\r
+\r
+ producerFactories = new Vector();\r
+ model = MirGlobal.localizer().dataModel().adapterModel();\r
+ generatorLibrary = MirGlobal.localizer().generators().makeProducerGeneratorLibrary();\r
+ writerEngine = MirGlobal.localizer().generators().makeWriterEngine();\r
+ nameToFactory = new HashMap();\r
+ }\r
+ catch (Throwable t) {\r
+ logger.error("MirBasicProducerLocalizer(): Exception "+t.getMessage());\r
+ model = new EntityAdapterModel();\r
+ }\r
+ }\r
+\r
+ public List getRecipeNames() throws MirLocalizerExc, MirLocalizerFailure {\r
+ return producerRecipeNames;\r
+ }\r
+\r
+ public void produceRecipe(String aName) throws MirLocalizerExc, MirLocalizerFailure {\r
+ if (producerRecipes.containsKey(aName))\r
+ MirGlobal.producerEngine().addTasks((List) producerRecipes.get(aName));\r
+ else\r
+ throw new MirLocalizerExc("Unknown recipe name: " + aName);\r
+ }\r
+\r
+ public List factories() throws MirLocalizerExc {\r
+ if (fileMonitor==null || producerFactories == null || fileMonitor.hasChanged()) {\r
+ try {\r
+ List newProducers = new Vector();\r
+ FileMonitor newFileMonitor = new FileMonitor();\r
+ setupFactories(newProducers, newFileMonitor);\r
+\r
+ producerFactories = newProducers;\r
+ fileMonitor = newFileMonitor;\r
+ logger.info("MirBasicProducerLocalizer.factories(): successfully setup factories");\r
+\r
+ nameToFactory.clear();\r
+ Iterator i = producerFactories.iterator();\r
+ while (i.hasNext()) {\r
+ ProducerFactory factory = (ProducerFactory) i.next();\r
+ nameToFactory.put(factory.getName(), factory);\r
+ }\r
+ }\r
+ catch (Throwable t) {\r
+ logger.error("MirBasicProducerLocalizer.factories(): Unable to setup factories: "+t.getMessage());\r
+ t.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE));\r
+ }\r
+ }\r
+\r
+ return producerFactories;\r
+ };\r
+\r
+ protected void setupProducerNodeBuilderLibrary(ProducerNodeBuilderLibrary aLibrary) throws MirLocalizerFailure {\r
+ try {\r
+ DefaultProducerNodeBuilders.registerBuilders(\r
+ aLibrary, model, generatorLibrary, writerEngine,\r
+ MirGlobal.config().getString("Home"), MirGlobal.config().getString("Producer.StorageRoot"));\r
+ SupplementalProducerNodeBuilders.registerBuilders(aLibrary, model);\r
+ }\r
+ catch (Throwable t) {\r
+ throw new MirLocalizerFailure(t.getMessage(), t);\r
+ }\r
+ }\r
+\r
+ protected void setupFactories(List aFactories, FileMonitor aFileMonitor) throws MirLocalizerExc, MirLocalizerFailure {\r
+ ProducerConfigReader reader;\r
+ ProducerNodeBuilderLibrary library = new ProducerNodeBuilderLibrary();\r
+ setupProducerNodeBuilderLibrary(library);\r
+ List usedFiles = new Vector();\r
+ Iterator i;\r
+\r
+ aFileMonitor.clear();\r
+ reader = new ProducerConfigReader();\r
+ reader.parseFile(MirGlobal.config().getString("Home") + File.separatorChar + MirGlobal.config().getString("Mir.Localizer.ProducerConfigFile"), library, aFactories, usedFiles);\r
+\r
+ i = usedFiles.iterator();\r
+ while (i.hasNext())\r
+ aFileMonitor.addFile((File) i.next());\r
+ }\r
+\r
+ public ProducerFactory getFactoryForName(String aName) {\r
+ try {\r
+ factories();\r
+ }\r
+ catch (Throwable t) {\r
+ }\r
+\r
+ return (ProducerFactory) nameToFactory.get(aName);\r
+ }\r
+}\r