View Javadoc

1   // Copyright 2006-2008, by the California Institute of 
2   // Technology. ALL RIGHTS RESERVED. United States Government 
3   // Sponsorship acknowledged. Any commercial use must be negotiated with 
4   // the Office of Technology Transfer at the California Institute of 
5   // Technology.
6   //
7   // This software may be subject to U.S. export control laws. By 
8   // accepting this software, the user agrees to comply with all 
9   // applicable U.S. export laws and regulations. User has the 
10  // responsibility to obtain export licenses, or other export authority 
11  // as may be required before exporting such information to foreign 
12  // countries or providing access to foreign persons.
13  //
14  // $Id: DictionaryWriter.java 3461 2008-08-07 17:43:26Z pramirez $ 
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 }