merge of localization branch into HEAD. mh and zap
[mir.git] / source / mir / producer / GeneratingProducerNode.java
1 package mir.producer;
2
3 import java.util.*;
4 import java.io.*;
5 import mir.util.*;
6 import mir.producer.*;
7 import mir.generator.*;
8
9 public class GeneratingProducerNode implements ProducerNode {
10   private String generatorExpression;
11   private String destinationExpression;
12   private String parametersExpression;
13   private Generator.GeneratorLibrary generatorLibrary;
14   private WriterEngine writerEngine;
15
16   public GeneratingProducerNode(Generator.GeneratorLibrary aGeneratorLibrary, WriterEngine aWriterEngine, String aGenerator, String aDestination, String aParameters) {
17     generatorExpression=aGenerator;
18     destinationExpression=aDestination;
19     parametersExpression=aParameters;
20     generatorLibrary = aGeneratorLibrary;
21     writerEngine = aWriterEngine;
22   }
23
24   public GeneratingProducerNode(Generator.GeneratorLibrary aGeneratorLibrary, WriterEngine aWriterEngine, String aGenerator, String aDestination) {
25     this(aGeneratorLibrary, aWriterEngine, aGenerator, aDestination, "");
26   }
27
28   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
29     Generator generator;
30     Object writer;
31     String generatorIdentifier;
32     String destinationIdentifier;
33     String parameters;
34
35     long startTime;
36     long endTime;
37
38     startTime = System.currentTimeMillis();
39     try {
40       destinationIdentifier = ParameterExpander.expandExpression( aValueMap, destinationExpression );
41       generatorIdentifier = ParameterExpander.expandExpression( aValueMap, generatorExpression );
42       parameters = ParameterExpander.expandExpression( aValueMap, parametersExpression );
43
44       aLogger.println("Generating " + generatorIdentifier + " into " + destinationIdentifier + " using parameters " + parameters);
45       aLogger.flush();
46
47       writer = writerEngine.openWriter( destinationIdentifier, parameters );
48       generator = generatorLibrary.makeGenerator( generatorIdentifier );
49       generator.generate(writer, aValueMap, aLogger);
50       writerEngine.closeWriter( writer );
51     }
52     catch (Throwable t) {
53       aLogger.println("  error while generating: " + t.getClass().getName() + ": " + t.getMessage());
54       t.printStackTrace(aLogger);
55       aLogger.flush();
56     }
57     endTime = System.currentTimeMillis();
58
59     aLogger.println("  Time: " + (endTime-startTime) + " ms");
60     aLogger.flush();
61   }
62
63   public Set buildVerbSet() {
64     return new HashSet();
65   }
66 }