merge of localization branch into HEAD. mh and zap
[mir.git] / source / mircoders / localizer / basic / MirBasicProducerLocalizer.java
1 package mircoders.localizer.basic;
2
3 import java.util.*;
4 import java.io.*;
5 import mir.producer.*;
6 import mir.generator.*;
7 import mir.producer.reader.*;
8 import mir.misc.*;
9 import mir.util.*;
10 import mir.entity.adapter.*;
11 import mircoders.global.*;
12 import mircoders.global.*;
13 import mircoders.localizer.*;
14 import mircoders.producer.reader.*;
15 import mircoders.producer.*;
16
17 public class MirBasicProducerLocalizer implements MirProducerLocalizer {
18   private Map producerFactories;
19   protected FileMonitor fileMonitor;
20   protected EntityAdapterModel model;
21   protected Generator.GeneratorLibrary generatorLibrary;
22   protected WriterEngine writerEngine;
23
24   protected static Logfile logger = Logfile.getInstance( MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Mir.Localizer.Logfile"));
25
26   public MirBasicProducerLocalizer() {
27
28     try {
29       producerFactories = new HashMap();
30       model = MirGlobal.localizer().dataModel().adapterModel();
31       generatorLibrary = MirGlobal.localizer().generators().makeGeneratorLibrary();
32       writerEngine = MirGlobal.localizer().generators().makeWriterEngine();
33     }
34     catch (Throwable t) {
35       logger.printError("MirBasicProducerLocalizer(): Exception "+t.getMessage());
36       model = new EntityAdapterModel();
37     }
38   }
39
40   public Map factories() throws MirLocalizerException {
41     if (fileMonitor==null || producerFactories == null || fileMonitor.hasChanged()) {
42       try {
43         Map newProducers = new HashMap();
44         FileMonitor newFileMonitor = new FileMonitor();
45         setupFactories(newProducers, newFileMonitor);
46
47         producerFactories = newProducers;
48         fileMonitor = newFileMonitor;
49       }
50       catch (Throwable t) {
51         logger.printError("MirBasicProducerLocalizer.factories(): Unable to setup factories: "+t.getMessage());
52       }
53     }
54
55     return producerFactories;
56   };
57
58   protected void setupContentFactory(CompositeProducerNode aProducerNode) {
59   }
60
61   protected void setupStartPageFactory(CompositeProducerNode aProducerNode) {
62   }
63
64   protected void setupSynchronizationFactory(CompositeProducerNode aProducerNode) {
65     if(MirGlobal.getConfigBooleanProperty("Rsync")){
66       aProducerNode.addSubNode(
67         new ScriptCallingProducerNode(MirGlobal.getConfigProperty("Rsync.Script.Path"))
68       );
69     }
70   }
71
72   protected void setupStaticFactory(CompositeProducerNode aProducerNode) {
73   }
74
75   protected void setupTopicsFactory(CompositeProducerNode aProducerNode) {
76   }
77
78   protected void setupProducerNodeBuilderLibrary(ProducerNodeBuilderLibrary aLibrary) {
79     DefaultProducerNodeBuilders.registerBuilders(aLibrary, model, generatorLibrary, writerEngine);
80     SupplementalProducerNodeBuilders.registerBuilders(aLibrary, model);
81   }
82
83   protected void setupFactories(Map aFactoriesMap, FileMonitor aFileMonitor) throws MirLocalizerException, MirLocalizerFailure {
84     ProducerConfigReader reader;
85     ProducerNodeBuilderLibrary library = new ProducerNodeBuilderLibrary();
86     setupProducerNodeBuilderLibrary(library);
87     List usedFiles = new Vector();
88
89     aFileMonitor.clear();
90     reader = new ProducerConfigReader();
91     reader.parseFile(MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Mir.Localizer.ProducerConfigFile"), library, aFactoriesMap, usedFiles);
92
93     Iterator i = usedFiles.iterator();
94     while (i.hasNext())
95       aFileMonitor.addFile((File) i.next());
96
97     setupFactories(aFactoriesMap);
98   }
99
100   protected void setupFactories(Map aFactoriesMap ) throws MirLocalizerException, MirLocalizerFailure {
101     CompositeProducerNode node;
102
103     try {
104       node = new CompositeProducerNode();
105       setupContentFactory( node );
106       if (node.getNrSubNodes()>0)
107         aFactoriesMap.put("content", new NodedProducerFactory(node));
108
109       node = new CompositeProducerNode();
110       setupStartPageFactory( node );
111       if (node.getNrSubNodes()>0)
112         aFactoriesMap.put("startpage", new NodedProducerFactory(node));
113
114       node = new CompositeProducerNode();
115       setupSynchronizationFactory( node );
116       if (node.getNrSubNodes()>0)
117         aFactoriesMap.put("synchronization", new NodedProducerFactory(node));
118
119       node = new CompositeProducerNode();
120       setupStaticFactory( node );
121       if (node.getNrSubNodes()>0)
122         aFactoriesMap.put("static", new NodedProducerFactory(node));
123
124       node = new CompositeProducerNode();
125       setupTopicsFactory( node );
126       if (node.getNrSubNodes()>0)
127         aFactoriesMap.put("topics", new NodedProducerFactory(node));
128
129       aFactoriesMap.put("media",
130                    new CompositeProducerFactory( new ProducerFactory[] {
131                       new OldProducerAdapterFactory(new ProducerImages()),
132                       new OldProducerAdapterFactory(new ProducerAudio()),
133                       new OldProducerAdapterFactory(new ProducerVideo()),
134                       new OldProducerAdapterFactory(new ProducerOther())
135                   } )
136       );
137     }
138     catch (Exception e) {
139       throw new MirLocalizerFailure(e);
140     }
141   };
142 }