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                  if (object.getIdentifier().indexOf(":") == -1)
95                      writer.write("  NAME = " + object.getIdentifier() + "\n");
96                  else
97                  	writer.write("  NAME = \"" + object.getIdentifier() + "\"\n");
98                  writer.write("  STATUS_TYPE = " + object.getStatusType() + "\n");
99                  writer.write("  DESCRIPTION = \"" + object.getDescription() + "\"\n");
100                 if (object.getRequiredElements().size() > 0) {
101                     writer.write("  REQUIRED_ELEMENT_SET = {");
102                     for (Iterator re = object.getRequiredElements().iterator(); re.hasNext();) {
103                         writer.write("\n     " + re.next().toString());
104                         if (re.hasNext())
105                             writer.write(",");
106                     }
107                 
108                     writer.write("}\n");
109                 }
110                 if (object.getOptionalElements().size() > 0) {
111                 writer.write("  OPTIONAL_ELEMENT_SET = {");
112                     for (Iterator oe = object.getOptionalElements().iterator(); oe.hasNext();) {
113                         writer.write("\n     " + oe.next().toString());
114                         if (oe.hasNext())
115                             writer.write(",");
116                     }
117                     writer.write("}\n");
118                 }
119                 if (object.getRequiredObjects().size() > 0) {
120                     writer.write("  REQUIRED_OBJECT_SET = {");
121                     for (Iterator ro = object.getRequiredObjects().iterator(); ro.hasNext();) {
122                         writer.write("\n     " + ro.next().toString());
123                         if (ro.hasNext())
124                             writer.write(",");
125                     }
126                     writer.write("}\n");
127                 }
128                 if (object.getOptionalObjects().size() > 0) {
129                 writer.write("  OPTIONAL_OBJECT_SET = {");
130                     for (Iterator oo = object.getOptionalObjects().iterator(); oo.hasNext();) {
131                         writer.write("\n     " + oo.next().toString());
132                         if (oo.hasNext())
133                             writer.write(",");
134                     }
135                     writer.write("}\n");
136                 }
137                 writer.write("  OBJECT_TYPE = " + object.getObjectType() +"\n");
138                 
139                 if (object.getObjectType().equals(OBJECT_TYPE_SPECIFIC)) {
140                     writer.write("END_OBJECT = SPECIFIC_OBJECT_DEFINITION\n");
141                 } else {
142                     writer.write("END_OBJECT = GENERIC_OBJECT_DEFINITION\n");
143                 }
144                 writer.write("END\n");
145             }
146         }
147     }
148     
149     private static void writeGroupDefinitions(Dictionary dictionary, BufferedWriter writer) throws IOException {
150         for (Iterator i = dictionary.getDefinitions().values().iterator(); i.hasNext();) {
151             Definition definition = (Definition) i.next();
152             if (definition instanceof GroupDefinition) {
153                 GroupDefinition group = (GroupDefinition) definition;
154                 if (group.getObjectType().equals(OBJECT_TYPE_SPECIFIC_GROUP)) {
155                     writer.write("OBJECT = SPECIFIC_OBJECT_DEFINITION\n");
156                 } else {
157                     writer.write("OBJECT = GENERIC_OBJECT_DEFINITION\n");
158                 }
159                 
160                 if (group.getIdentifier().indexOf(":") == -1)
161                     writer.write("  NAME = " + group.getIdentifier() + "\n");
162                 else
163                 	writer.write("  NAME = \"" + group.getIdentifier() + "\"\n");
164                 writer.write("  STATUS_TYPE = " + group.getStatusType() + "\n");
165                 writer.write("  DESCRIPTION = \"" + group.getDescription() + "\"\n");
166                 if (group.getRequiredElements().size() > 0) {
167                     writer.write("  REQUIRED_ELEMENT_SET = {");
168                     for (Iterator re = group.getRequiredElements().iterator(); re.hasNext();) {
169                         writer.write("\n     " + re.next().toString());
170                         if (re.hasNext())
171                             writer.write(",");
172                     }
173                 
174                     writer.write("}\n");
175                 }
176                 if (group.getOptionalElements().size() > 0) {
177                 writer.write("  OPTIONAL_ELEMENT_SET = {");
178                     for (Iterator oe = group.getOptionalElements().iterator(); oe.hasNext();) {
179                         writer.write("\n     " + oe.next().toString());
180                         if (oe.hasNext())
181                             writer.write(",");
182                     }
183                     writer.write("}\n");
184                 }
185                 writer.write("  OBJECT_TYPE = " + group.getObjectType() +"\n");
186                 
187                 if (group.getObjectType().equals(OBJECT_TYPE_SPECIFIC_GROUP)) {
188                     writer.write("END_OBJECT = SPECIFIC_OBJECT_DEFINITION\n");
189                 } else {
190                     writer.write("END_OBJECT = GENERIC_OBJECT_DEFINITION\n");
191                 }
192                 writer.write("END\n");
193             }
194         }
195     }
196     
197     private static void writeElementDefinitions(Dictionary dictionary, BufferedWriter writer) throws IOException {
198         for (Iterator i = dictionary.getDefinitions().values().iterator(); i.hasNext();) {
199             Definition definition = (Definition) i.next();
200             if (definition instanceof ElementDefinition) {
201                 ElementDefinition element = (ElementDefinition) definition;
202                 writer.write("OBJECT = ELEMENT_DEFINITION\n");
203                 if (element.getIdentifier().indexOf(":") == -1)
204                     writer.write("  NAME = " + element.getIdentifier() + "\n");
205                 else
206                 	writer.write("  NAME = \"" + element.getIdentifier() + "\"\n");
207                 writer.write("  STATUS_TYPE = " + element.getStatusType() + "\n");
208                 writer.write("  GENERAL_DATA_TYPE = " + element.getDataType() + "\n");
209                 writer.write("  UNIT_ID = '" + element.getUnitId() + "'\n");
210                 if (element.getValueType().equals(NOT_APPLICABLE))
211                     writer.write("  STANDARD_VALUE_TYPE = 'N/A'\n");
212                 else
213                     writer.write("  STANDARD_VALUE_TYPE = " + element.getValueType() + "\n");
214                 if (element.getMinimum() != null)
215                     writer.write("  MINIMUM = " + element.getMinimum().toString() + "\n");
216                 if (element.getMaximum() != null)
217                     writer.write("  MAXIMUM = " + element.getMaximum().toString() + "\n");
218                 if (element.getMinLength() != 0)
219                     writer.write("  MINIMUM_LENGTH = " + element.getMinLength() + "\n");
220                 if (element.getMaxLength() != Integer.MAX_VALUE)
221                     writer.write("  MAXIMUM_LENGTH = " + element.getMaxLength() + "\n");
222                 writer.write("  DESCRIPTION = \"" + element.getDescription() + "\"\n");
223                 if (element.getValues().size() > 0) {
224                     writer.write("  STANDARD_VALUE_SET = {");
225                     for (Iterator v = element.getValues().iterator(); v.hasNext();) {
226                         writer.write("\n     \"" + v.next().toString() + "\"");
227                         if (v.hasNext())
228                             writer.write(",");
229                     }
230                     writer.write("}\n");
231                 }
232                 writer.write("END_OBJECT = ELEMENT_DEFINITION\n");
233                 writer.write("END\n");
234             }
235         }
236     }
237     
238     public static void main(String [] args) throws Exception {
239         Dictionary dictionary = DictionaryParser.parse(new URL(args[0]), true);
240         writeDictionary(dictionary, new File("dictionary.out"));
241     }
242 }