yet another rewrite of the producers...
[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
15   public GeneratingProducerNode(String aGenerator, String aDestination) {
16     generatorExpression=aGenerator;
17     destinationExpression=aDestination;
18   }
19
20   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
21     Generator generator;
22     PrintWriter printWriter;
23     String generatorIdentifier;
24     String destinationIdentifier;
25
26     try {
27       destinationIdentifier = ParameterExpander.expandExpression( aValueMap, destinationExpression );
28       generatorIdentifier = ParameterExpander.expandExpression( aValueMap, generatorExpression );
29
30       aLogger.println("Generating " + generatorIdentifier + " into " + destinationIdentifier);
31       printWriter = MirGlobal.localizer().producerTool().openWriter( destinationIdentifier );
32       generator = MirGlobal.localizer().generators().makeGenerator( generatorIdentifier );
33       generator.generate(printWriter, aValueMap, aLogger);
34       MirGlobal.localizer().producerTool().closeWriter( printWriter );
35       aLogger.println("Done generating");
36     }
37     catch (Throwable t) {
38       aLogger.println("Error while generating: " + t.getMessage());
39       t.printStackTrace(aLogger);
40
41       throw new ProducerFailure(t.getMessage(), t);
42     }
43
44   }
45
46   public Set buildVerbSet() {
47     return new HashSet();
48   }
49 }