Some small things like, reorganizing imports, accessing static variables
[mir.git] / source / mircoders / localizer / basic / MirBasicProducerLocalizer.java
1 /*
2  * Copyright (C) 2001, 2002  The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with the com.oreilly.servlet library, any library
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24  * the above that use the same license as the above), and distribute linked
25  * combinations including the two.  You must obey the GNU General Public
26  * License in all respects for all of the code used other than the above
27  * mentioned libraries.  If you modify this file, you may extend this exception
28  * to your version of the file, but you are not obligated to do so.  If you do
29  * not wish to do so, delete this exception statement from your version.
30  */
31
32 package mircoders.localizer.basic;
33
34 import java.io.File;
35 import java.util.HashMap;
36 import java.util.Iterator;
37 import java.util.List;
38 import java.util.Map;
39 import java.util.Vector;
40
41 import mir.entity.adapter.EntityAdapterModel;
42 import mir.generator.Generator;
43 import mir.generator.WriterEngine;
44 import mir.log.LoggerWrapper;
45 import mir.producer.ProducerFactory;
46 import mir.producer.reader.DefaultProducerNodeBuilders;
47 import mir.producer.reader.ProducerConfigReader;
48 import mir.producer.reader.ProducerNodeBuilderLibrary;
49 import mir.util.FileMonitor;
50 import mircoders.global.MirGlobal;
51 import mircoders.global.ProducerEngine;
52 import mircoders.localizer.MirLocalizerExc;
53 import mircoders.localizer.MirLocalizerFailure;
54 import mircoders.localizer.MirProducerLocalizer;
55 import mircoders.producer.reader.SupplementalProducerNodeBuilders;
56
57 public class MirBasicProducerLocalizer implements MirProducerLocalizer {
58   private List producerFactories;
59   private Map nameToFactory;
60   private List allNewProducerTasks;
61
62   protected FileMonitor fileMonitor;
63   protected EntityAdapterModel model;
64   protected Generator.GeneratorLibrary generatorLibrary;
65   protected WriterEngine writerEngine;
66
67   protected LoggerWrapper logger;
68
69   public MirBasicProducerLocalizer() {
70     try {
71       logger = new LoggerWrapper("Localizer.Basic.Producer");
72
73       String allNewProducers = MirGlobal.getConfigProperty("Mir.Localizer.Producer.AllNewProducers");
74       allNewProducerTasks = ProducerEngine.ProducerTask.parseProducerTaskList(allNewProducers);
75
76       producerFactories = new Vector();
77       model = MirGlobal.localizer().dataModel().adapterModel();
78       generatorLibrary = MirGlobal.localizer().generators().makeProducerGeneratorLibrary();
79       writerEngine = MirGlobal.localizer().generators().makeWriterEngine();
80       nameToFactory = new HashMap();
81     }
82     catch (Throwable t) {
83       logger.error("MirBasicProducerLocalizer(): Exception "+t.getMessage());
84       model = new EntityAdapterModel();
85     }
86   }
87
88   public List factories() throws MirLocalizerExc {
89     if (fileMonitor==null || producerFactories == null || fileMonitor.hasChanged()) {
90       try {
91         List newProducers = new Vector();
92         FileMonitor newFileMonitor = new FileMonitor();
93         setupFactories(newProducers, newFileMonitor);
94
95         producerFactories = newProducers;
96         fileMonitor = newFileMonitor;
97         logger.info("MirBasicProducerLocalizer.factories(): successfully setup factories");
98
99         nameToFactory.clear();
100         Iterator i = producerFactories.iterator();
101         while (i.hasNext()) {
102           ProducerFactory factory = (ProducerFactory) i.next();
103           nameToFactory.put(factory.getName(), factory);
104         }
105       }
106       catch (Throwable t) {
107         logger.error("MirBasicProducerLocalizer.factories(): Unable to setup factories: "+t.getMessage());
108       }
109     }
110
111     return producerFactories;
112   };
113
114   protected void setupProducerNodeBuilderLibrary(ProducerNodeBuilderLibrary aLibrary) throws MirLocalizerFailure {
115     try {
116       DefaultProducerNodeBuilders.registerBuilders(
117           aLibrary, model, generatorLibrary, writerEngine,
118           MirGlobal.getConfigProperty("Home"), MirGlobal.getConfigProperty("Producer.StorageRoot"));
119       SupplementalProducerNodeBuilders.registerBuilders(aLibrary, model);
120     }
121     catch (Throwable t) {
122       throw new MirLocalizerFailure(t.getMessage(), t);
123     }
124   }
125
126   protected void setupFactories(List aFactories, FileMonitor aFileMonitor) throws MirLocalizerExc, MirLocalizerFailure {
127     ProducerConfigReader reader;
128     ProducerNodeBuilderLibrary library = new ProducerNodeBuilderLibrary();
129     setupProducerNodeBuilderLibrary(library);
130     List usedFiles = new Vector();
131     Iterator i;
132
133     aFileMonitor.clear();
134     reader = new ProducerConfigReader();
135     reader.parseFile(MirGlobal.getConfigProperty("Home") + File.separatorChar + MirGlobal.getConfigProperty("Mir.Localizer.ProducerConfigFile"), library, aFactories, usedFiles);
136
137     i = usedFiles.iterator();
138     while (i.hasNext())
139       aFileMonitor.addFile((File) i.next());
140   }
141
142   public void produceAllNew() {
143     MirGlobal.producerEngine().addTasks(allNewProducerTasks);
144   };
145
146   public ProducerFactory getFactoryForName(String aName) {
147     try {
148       factories();
149     }
150     catch (Throwable t) {
151     }
152
153     return (ProducerFactory) nameToFactory.get(aName);
154   }
155 }