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