KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > emf > importer > rose > parser > RoseWriter


1 /**
2  * <copyright>
3  *
4  * Copyright (c) 2002-2004 IBM Corporation and others.
5  * All rights reserved. This program and the accompanying materials
6  * are made available under the terms of the Eclipse Public License v1.0
7  * which accompanies this distribution, and is available at
8  * http://www.eclipse.org/legal/epl-v10.html
9  *
10  * Contributors:
11  * IBM - Initial API and implementation
12  *
13  * </copyright>
14  *
15  * $Id: RoseWriter.java,v 1.3 2005/06/12 13:36:38 emerks Exp $
16  */

17 package org.eclipse.emf.importer.rose.parser;
18
19 import java.io.BufferedWriter JavaDoc;
20 import java.io.FileWriter JavaDoc;
21 import java.util.List JavaDoc;
22
23
24 /**
25  * Creates a Rose file from Rose Tree.
26  */

27 public class RoseWriter extends RoseComponent
28 {
29   public static final String JavaDoc PROGRESS = "ROSE_WRITE_PROGRESS";
30
31   protected BufferedWriter JavaDoc buffWriter;
32   protected RoseNode versionTree;
33   protected RoseNode modelTree;
34   protected int justIndex;
35
36   protected int lower = 0;
37   protected int upper = 100;
38   protected int oldValue;
39   protected int progressIncrement = 10;
40
41   public RoseWriter(String JavaDoc fileName, RoseNode versionTree, RoseNode modelTree) throws Exception JavaDoc
42   {
43     try
44     {
45       buffWriter = new BufferedWriter JavaDoc(new FileWriter JavaDoc(fileName));
46     }
47     catch (Exception JavaDoc e)
48     {
49       throw e;
50     }
51     this.versionTree = versionTree;
52     this.modelTree = modelTree;
53   }
54
55   public void setProgressIncrement(int progressIncrement)
56   {
57     this.progressIncrement = progressIncrement;
58   }
59
60   public void setLower(int lower)
61   {
62     this.lower = lower;
63     oldValue = lower;
64   }
65
66   public int getLower()
67   {
68     return lower;
69   }
70
71   public void setUpper(int upper)
72   {
73     this.upper = upper;
74   }
75
76   public int getUpper()
77   {
78     return upper;
79   }
80
81   public void write() throws Exception JavaDoc
82   {
83     if (buffWriter == null)
84       return;
85     try
86     {
87       oldValue = lower;
88       justIndex = 0;
89       buffWriter.newLine();
90       writeObject(versionTree);
91       buffWriter.newLine();
92       buffWriter.newLine();
93       if (modelTree.getRoseNodeType() == RoseNode.OBJECT)
94       {
95         writeObject(modelTree);
96       }
97       else
98       {
99         writeList(modelTree);
100       }
101       buffWriter.newLine();
102       buffWriter.close();
103     }
104     catch (Exception JavaDoc e)
105     {
106       throw e;
107     }
108   }
109
110   private void writeExpr(RoseNode tree) throws Exception JavaDoc
111   {
112     try
113     {
114       if (tree.getRoseNodeType() == RoseNode.STRING)
115       {
116         buffWriter.write('\t');
117         buffWriter.write(tree.getValue());
118       }
119       else if (tree.getRoseNodeType() == RoseNode.STRING_SEQ)
120       {
121         List JavaDoc nodes = tree.getNodes();
122         for (int i = 0; i < nodes.size(); i++)
123         {
124           RoseNode node = (RoseNode)nodes.get(i);
125           buffWriter.newLine();
126           buffWriter.write('|');
127           buffWriter.write(node.getValue());
128         }
129         buffWriter.newLine();
130       }
131       else if (tree.getRoseNodeType() == RoseNode.LIST)
132       {
133         buffWriter.write(' ');
134         writeList(tree);
135       }
136       else if (tree.getRoseNodeType() == RoseNode.OBJECT)
137       {
138         buffWriter.write(' ');
139         writeObject(tree);
140       }
141       else if (tree.getRoseNodeType() == RoseNode.VALUE)
142       {
143         buffWriter.write('\t');
144         writeValue(tree);
145       }
146     }
147     catch (Exception JavaDoc e)
148     {
149       throw e;
150     }
151   }
152
153   private void writeList(RoseNode tree) throws Exception JavaDoc
154   {
155     try
156     {
157       String JavaDoc key = tree.getKey();
158       if (!key.equals("collection"))
159       {
160         justIndex++;
161         buffWriter.write("(list ");
162         buffWriter.write(tree.getValue());
163       }
164       List JavaDoc nodes = tree.getNodes();
165
166       for (int j = 0; j < nodes.size(); j++)
167       {
168         RoseNode node = (RoseNode)nodes.get(j);
169         buffWriter.newLine();
170         for (int i = 0; i < justIndex; i++)
171         {
172           buffWriter.write('\t');
173         }
174         if (node.getRoseNodeType() == RoseNode.OBJECT)
175         {
176           writeObject(node);
177         }
178         else if (node.getRoseNodeType() == RoseNode.STRING)
179         {
180           buffWriter.write(node.getValue());
181         }
182         else
183         {
184           System.out.println("!!!!! error in writeLists !!!!! " + node.getRoseNodeType());
185           System.exit(0);
186         }
187       }
188       if (!key.equals("collection"))
189       {
190         buffWriter.write(')');
191         justIndex--;
192       }
193     }
194     catch (Exception JavaDoc e)
195     {
196       throw e;
197     }
198   }
199
200   public void writeObject(RoseNode tree) throws Exception JavaDoc
201   {
202     try
203     {
204       justIndex++;
205
206       buffWriter.write("(object ");
207       buffWriter.write(tree.getValue());
208
209       List JavaDoc nodes = tree.getNodes();
210       for (int i = 0; i < nodes.size(); i++)
211       {
212         RoseNode node = (RoseNode)nodes.get(i);
213         writePair(node);
214       }
215       buffWriter.write(')');
216       justIndex--;
217     }
218     catch (Exception JavaDoc e)
219     {
220       // System.out.println("RoseWriter - exception: "+ e.toString());
221
throw e;
222     }
223   }
224
225   public void writeValue(RoseNode tree) throws Exception JavaDoc
226   {
227     try
228     {
229       justIndex++;
230
231       buffWriter.write("(value ");
232       buffWriter.write(tree.getValue());
233
234       List JavaDoc nodes = tree.getNodes();
235       for (int i = 0; i < nodes.size(); i++)
236       {
237         RoseNode node = (RoseNode)nodes.get(i);
238         writeExpr(node);
239       }
240       buffWriter.write(')');
241       justIndex--;
242     }
243     catch (Exception JavaDoc e)
244     {
245       // System.out.println("RoseWriter - exception: "+ e.toString());
246
throw e;
247     }
248   }
249
250   public void writePair(RoseNode node) throws Exception JavaDoc
251   {
252     try
253     {
254       buffWriter.newLine();
255       for (int i = 0; i < justIndex; i++)
256       {
257         buffWriter.write('\t');
258       }
259       buffWriter.write(node.getKey());
260       writeExpr(node);
261     }
262     catch (Exception JavaDoc e)
263     {
264       // System.out.println("RoseWriter - exception: "+ e.toString());
265
throw e;
266     }
267   }
268 }
269
Popular Tags