source: proto/pabloj/trunk/src/applicationGenerator/templating/MemoryTemplate.java @ 2952

Last change on this file since 2952 was 2952, checked in by ksherdy, 6 years ago

Restructed PabloJ compile to provide clear separation between PabloS and PabloB.

File size: 3.0 KB
Line 
1package applicationGenerator.templating;
2
3import java.io.PrintStream;
4import java.util.ArrayList;
5import java.util.HashMap;
6import java.util.List;
7import java.util.Map;
8
9public class MemoryTemplate implements Template {
10        private class Segment {
11                private final boolean isVar;
12                private final String value;
13                public Segment(boolean isVar, String value) {
14                        this.isVar = isVar;
15                        this.value = value;
16                }
17                public boolean isVar() {
18                        return isVar;
19                }
20                public String value() {
21                        return value;
22                }
23        }
24
25        private List<Segment> segments;
26        private Map<String, String>     substitutions;
27        private final String name;
28       
29       
30        ////////////////////////////////////////////////////////////////
31        // construction: use constructor,
32        //              follow with addString and addVar calls 
33       
34        public MemoryTemplate(String name) {
35                this.name = name;
36                segments = new ArrayList<Segment>();
37                clear();
38        }
39        public void addString(String string) {
40                Segment segment = new Segment(false, string);
41                segments.add(segment);
42        }
43        public void addVar(String Var) {
44                Segment segment = new Segment(true, Var.intern());
45                segments.add(segment);
46        }
47
48       
49        ////////////////////////////////////////////////////////////////
50        // set and clear Var values
51       
52        @Override
53        public void set(String name, String value) {
54                substitutions.put(name, value);         
55        }
56        @Override
57        public void clear() {
58                substitutions = new HashMap<String, String>(); 
59        }
60
61        ////////////////////////////////////////////////////////////////
62        // printing
63
64        @Override
65        public void print(PrintStream out) {
66                if(isFullyDefined()) {
67                        printToStream(out);
68                }
69        }
70        private void printToStream(PrintStream out) {
71                for(Segment segment: segments) {
72                        print(out, segment);
73                }
74        }
75        private void print(PrintStream out, Segment segment) {
76                String string = stringFor(segment);
77                out.print(string);
78        }
79        private String stringFor(Segment segment) {
80                if(segment.isVar()) {
81                        return substitutions.get(segment.value());
82                }
83                return segment.value();
84        }
85       
86       
87        ////////////////////////////////////////////////////////////////
88        // check that all Vars are defined.
89
90        private boolean isFullyDefined() {
91                boolean result = true;
92                for(Segment segment: segments) {
93                        result &= isDefined(segment);
94                }
95                return result;
96        }
97        private boolean isDefined(Segment segment) {
98                if(segment.isVar()) {
99                        String Var = segment.value();
100                        return isDefined(Var);
101                }
102                return true;
103        }
104        private boolean isDefined(String Var) {
105                if(!substitutions.containsKey(Var)) {
106                        missingValueError(Var);
107                        return false;
108                }
109                return true;
110        }
111       
112       
113        ////////////////////////////////////////////////////////////////
114        // error reporting
115       
116        private void missingValueError(String Var) {
117                //logError("Template error: Var " + Var + " missing value in template " + name + ".");
118            System.err.println("Template error: Var " + Var + " missing value in template " + name + ".");
119        }
120//      private void logError(String message) {
121//              ScatterLogger log = ScatterLogger.getLogger("template");
122//              log.severe(message);
123//      }
124}
Note: See TracBrowser for help on using the repository browser.