1
2
3
4
5
6
7 package gov.nasa.pds.tools.dict;
8
9 import gov.nasa.pds.tools.dict.parser.DictionaryParser;
10
11 import java.io.File;
12 import java.io.FileWriter;
13 import java.io.BufferedWriter;
14 import java.io.IOException;
15 import java.net.URL;
16 import java.util.Iterator;
17 import java.util.List;
18 import java.util.Map;
19
20 /***
21 * @author pramirez
22 * @version $Revision$
23 *
24 */
25 public class DictionaryWriter implements DictionaryTokens {
26 public static void writeDictionary(Dictionary dictionary, File file) throws IOException {
27 BufferedWriter writer = new BufferedWriter(new FileWriter(file));
28 writer.write(dictionary.getInformation());
29 Map definitions = dictionary.getDefinitions();
30 writer.write("OBJECT = ALIAS_LIST\n");
31 writer.write(" OBJECT_ALIAS_SEQUENCE = (");
32 for (Iterator i = definitions.values().iterator(); i.hasNext();) {
33 Definition definition = (Definition) i.next();
34 if (definition instanceof ObjectDefinition && definition.getAliases().size() > 0) {
35 writer.write("\n (");
36 for (Iterator a = definition.getAliases().iterator(); a.hasNext();) {
37 writer.write("'" + a.next().toString() + "',");
38 }
39 writer.write("'" + definition.getIdentifier() + "')");
40 }
41 }
42 writer.write(")\n");
43 writer.write(" ELEMENT_ALIAS_SEQUENCE = (");
44 for (Iterator i = definitions.values().iterator(); i.hasNext();) {
45 Definition definition = (Definition) i.next();
46 if (definition instanceof ElementDefinition && definition.getAliases().size() > 0) {
47 for (Iterator a = definition.getAliases().iterator(); a.hasNext();) {
48 Alias alias = (Alias) a.next();
49 writer.write("\n (");
50 writer.write("'" + alias.getIdentifier().toString() + "',");
51 writer.write("'" + alias.getContext() + "',");
52 writer.write("'" + definition.getIdentifier() + "')");
53 }
54 }
55 }
56 writer.write(")\n");
57 writer.write("END_OBJECT = ALIAS_LIST\n");
58 writer.write("END\n");
59 writer.write("OBJECT = UNIT_LIST\n");
60 writer.write(" UNIT_SEQUENCE = (");
61 Map units = dictionary.getUnits();
62 for (Iterator i = units.keySet().iterator(); i.hasNext();) {
63 String unit = (String) i.next();
64 writer.write("\n (");
65 for (Iterator u = ((List) units.get(unit)).iterator(); u.hasNext();) {
66 writer.write("'" + u.next().toString() + "'");
67 if (u.hasNext())
68 writer.write(",");
69 }
70 writer.write(")");
71 }
72 writer.write(")\n");
73 writer.write("END_OBJECT = UNIT_LIST\n");
74 writer.write("END\n");
75
76 writeObjectDefinitions(dictionary, writer);
77 writeGroupDefinitions(dictionary, writer);
78 writeElementDefinitions(dictionary, writer);
79
80 writer.close();
81 }
82
83 private static void writeObjectDefinitions(Dictionary dictionary, BufferedWriter writer) throws IOException {
84 for (Iterator i = dictionary.getDefinitions().values().iterator(); i.hasNext();) {
85 Definition definition = (Definition) i.next();
86 if (definition instanceof ObjectDefinition) {
87 ObjectDefinition object = (ObjectDefinition) definition;
88 if (object.getObjectType().equals(OBJECT_TYPE_SPECIFIC)) {
89 writer.write("OBJECT = SPECIFIC_OBJECT_DEFINITION\n");
90 } else {
91 writer.write("OBJECT = GENERIC_OBJECT_DEFINITION\n");
92 }
93
94 writer.write(" NAME = " + object.getIdentifier() + "\n");
95 writer.write(" STATUS_TYPE = " + object.getStatusType() + "\n");
96 writer.write(" DESCRIPTION = \"" + object.getDescription() + "\"\n");
97 if (object.getRequiredElements().size() > 0) {
98 writer.write(" REQUIRED_ELEMENT_SET = {");
99 for (Iterator re = object.getRequiredElements().iterator(); re.hasNext();) {
100 writer.write("\n " + re.next().toString());
101 if (re.hasNext())
102 writer.write(",");
103 }
104
105 writer.write("}\n");
106 }
107 if (object.getOptionalElements().size() > 0) {
108 writer.write(" OPTIONAL_ELEMENT_SET = {");
109 for (Iterator oe = object.getOptionalElements().iterator(); oe.hasNext();) {
110 writer.write("\n " + oe.next().toString());
111 if (oe.hasNext())
112 writer.write(",");
113 }
114 writer.write("}\n");
115 }
116 if (object.getRequiredObjects().size() > 0) {
117 writer.write(" REQUIRED_OBJECT_SET = {");
118 for (Iterator ro = object.getRequiredObjects().iterator(); ro.hasNext();) {
119 writer.write("\n " + ro.next().toString());
120 if (ro.hasNext())
121 writer.write(",");
122 }
123 writer.write("}\n");
124 }
125 if (object.getOptionalObjects().size() > 0) {
126 writer.write(" OPTIONAL_OBJECT_SET = {");
127 for (Iterator oo = object.getOptionalObjects().iterator(); oo.hasNext();) {
128 writer.write("\n " + oo.next().toString());
129 if (oo.hasNext())
130 writer.write(",");
131 }
132 writer.write("}\n");
133 }
134 writer.write(" OBJECT_TYPE = " + object.getObjectType() +"\n");
135
136 if (object.getObjectType().equals(OBJECT_TYPE_SPECIFIC)) {
137 writer.write("END_OBJECT = SPECIFIC_OBJECT_DEFINITION\n");
138 } else {
139 writer.write("END_OBJECT = GENERIC_OBJECT_DEFINITION\n");
140 }
141 writer.write("END\n");
142 }
143 }
144 }
145
146 private static void writeGroupDefinitions(Dictionary dictionary, BufferedWriter writer) throws IOException {
147 for (Iterator i = dictionary.getDefinitions().values().iterator(); i.hasNext();) {
148 Definition definition = (Definition) i.next();
149 if (definition instanceof GroupDefinition) {
150 GroupDefinition group = (GroupDefinition) definition;
151 if (group.getObjectType().equals(OBJECT_TYPE_SPECIFIC_GROUP)) {
152 writer.write("OBJECT = SPECIFIC_OBJECT_DEFINITION\n");
153 } else {
154 writer.write("OBJECT = GENERIC_OBJECT_DEFINITION\n");
155 }
156
157 writer.write(" NAME = " + group.getIdentifier() + "\n");
158 writer.write(" STATUS_TYPE = " + group.getStatusType() + "\n");
159 writer.write(" DESCRIPTION = \"" + group.getDescription() + "\"\n");
160 if (group.getRequiredElements().size() > 0) {
161 writer.write(" REQUIRED_ELEMENT_SET = {");
162 for (Iterator re = group.getRequiredElements().iterator(); re.hasNext();) {
163 writer.write("\n " + re.next().toString());
164 if (re.hasNext())
165 writer.write(",");
166 }
167
168 writer.write("}\n");
169 }
170 if (group.getOptionalElements().size() > 0) {
171 writer.write(" OPTIONAL_ELEMENT_SET = {");
172 for (Iterator oe = group.getOptionalElements().iterator(); oe.hasNext();) {
173 writer.write("\n " + oe.next().toString());
174 if (oe.hasNext())
175 writer.write(",");
176 }
177 writer.write("}\n");
178 }
179 writer.write(" OBJECT_TYPE = " + group.getObjectType() +"\n");
180
181 if (group.getObjectType().equals(OBJECT_TYPE_SPECIFIC_GROUP)) {
182 writer.write("END_OBJECT = SPECIFIC_OBJECT_DEFINITION\n");
183 } else {
184 writer.write("END_OBJECT = GENERIC_OBJECT_DEFINITION\n");
185 }
186 writer.write("END\n");
187 }
188 }
189 }
190
191 private static void writeElementDefinitions(Dictionary dictionary, BufferedWriter writer) throws IOException {
192 for (Iterator i = dictionary.getDefinitions().values().iterator(); i.hasNext();) {
193 Definition definition = (Definition) i.next();
194 if (definition instanceof ElementDefinition) {
195 ElementDefinition element = (ElementDefinition) definition;
196 writer.write("OBJECT = ELEMENT_DEFINITION\n");
197 writer.write(" NAME = " + element.getIdentifier() + "\n");
198 writer.write(" STATUS_TYPE = " + element.getStatusType() + "\n");
199 writer.write(" GENERAL_DATA_TYPE = " + element.getDataType() + "\n");
200 writer.write(" UNIT_ID = '" + element.getUnitId() + "'\n");
201 if (element.getValueType().equals(NOT_APPLICABLE))
202 writer.write(" STANDARD_VALUE_TYPE = 'N/A'\n");
203 else
204 writer.write(" STANDARD_VALUE_TYPE = " + element.getValueType() + "\n");
205 if (element.getMinimum() != null)
206 writer.write(" MINIMUM = " + element.getMinimum().toString() + "\n");
207 if (element.getMaximum() != null)
208 writer.write(" MAXIMUM = " + element.getMaximum().toString() + "\n");
209 if (element.getMinLength() != 0)
210 writer.write(" MINIMUM_LENGTH = " + element.getMinLength() + "\n");
211 if (element.getMaxLength() != Integer.MAX_VALUE)
212 writer.write(" MAXIMUM_LENGTH = " + element.getMaxLength() + "\n");
213 writer.write(" DESCRIPTION = \"" + element.getDescription() + "\"\n");
214 if (element.getValues().size() > 0) {
215 writer.write(" STANDARD_VALUE_SET = {");
216 for (Iterator v = element.getValues().iterator(); v.hasNext();) {
217 writer.write("\n \"" + v.next().toString() + "\"");
218 if (v.hasNext())
219 writer.write(",");
220 }
221 writer.write("}\n");
222 }
223 writer.write("END_OBJECT = ELEMENT_DEFINITION\n");
224 writer.write("END\n");
225 }
226 }
227 }
228
229 public static void main(String [] args) throws Exception {
230 Dictionary dictionary = DictionaryParser.parse(new URL(args[0]), true);
231 writeDictionary(dictionary, new File("dictionary.out"));
232 }
233 }