View Javadoc

1   //Copyright (c) 2005, California Institute of Technology.
2   //ALL RIGHTS RESERVED. U.S. Government sponsorship acknowledged.
3   //
4   // $Id$ 
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 }