generatingProducerNode now has an encoding parameter
[mir.git] / source / mircoders / producer / GeneratingProducerNode.java
1 package mircoders.producer;
2
3 import java.util.*;
4 import java.io.*;
5 import mir.util.*;
6 import mir.producer.*;
7 import mir.generator.*;
8 import mircoders.global.*;
9 import mircoders.localizer.*;
10
11 public class GeneratingProducerNode implements ProducerNode {
12   private String generatorExpression;
13   private String destinationExpression;
14   private String encodingExpression;
15
16   public GeneratingProducerNode(String aGenerator, String aDestination, String anEncoding) {
17     generatorExpression=aGenerator;
18     destinationExpression=aDestination;
19     encodingExpression=anEncoding;
20   }
21   public GeneratingProducerNode(String aGenerator, String aDestination) {
22     this(aGenerator, aDestination, "");
23   }
24
25   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
26     Generator generator;
27     PrintWriter printWriter;
28     String generatorIdentifier;
29     String destinationIdentifier;
30     String encodingIdentifier;
31
32     long startTime;
33     long endTime;
34
35     startTime = System.currentTimeMillis();
36     try {
37       destinationIdentifier = ParameterExpander.expandExpression( aValueMap, destinationExpression );
38       generatorIdentifier = ParameterExpander.expandExpression( aValueMap, generatorExpression );
39       encodingIdentifier = ParameterExpander.expandExpression( aValueMap, encodingExpression );
40
41       aLogger.println("Generating " + generatorIdentifier + " into " + destinationIdentifier + " using encoding " + encodingIdentifier);
42       aLogger.flush();
43       printWriter = MirGlobal.localizer().producerAssistant().openWriter( destinationIdentifier, encodingIdentifier);
44       generator = MirGlobal.localizer().generators().makeGenerator( generatorIdentifier );
45       generator.generate(printWriter, aValueMap, aLogger);
46       MirGlobal.localizer().producerAssistant().closeWriter( printWriter );
47     }
48     catch (Throwable t) {
49       aLogger.println("  error while generating: " + t.getMessage());
50       aLogger.flush();
51     }
52     endTime = System.currentTimeMillis();
53
54     aLogger.println("  Time: " + (endTime-startTime) + " ms<br>");
55     aLogger.flush();
56   }
57
58   public Set buildVerbSet() {
59     return new HashSet();
60   }
61 }