1 17 package org.eclipse.emf.importer.rose.parser; 18 19 import java.io.BufferedWriter ; 20 import java.io.FileWriter ; 21 import java.util.List ; 22 23 24 27 public class RoseWriter extends RoseComponent 28 { 29 public static final String PROGRESS = "ROSE_WRITE_PROGRESS"; 30 31 protected BufferedWriter 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 fileName, RoseNode versionTree, RoseNode modelTree) throws Exception 42 { 43 try 44 { 45 buffWriter = new BufferedWriter (new FileWriter (fileName)); 46 } 47 catch (Exception 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 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 e) 105 { 106 throw e; 107 } 108 } 109 110 private void writeExpr(RoseNode tree) throws Exception 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 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 e) 148 { 149 throw e; 150 } 151 } 152 153 private void writeList(RoseNode tree) throws Exception 154 { 155 try 156 { 157 String key = tree.getKey(); 158 if (!key.equals("collection")) 159 { 160 justIndex++; 161 buffWriter.write("(list "); 162 buffWriter.write(tree.getValue()); 163 } 164 List 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 e) 195 { 196 throw e; 197 } 198 } 199 200 public void writeObject(RoseNode tree) throws Exception 201 { 202 try 203 { 204 justIndex++; 205 206 buffWriter.write("(object "); 207 buffWriter.write(tree.getValue()); 208 209 List 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 e) 219 { 220 throw e; 222 } 223 } 224 225 public void writeValue(RoseNode tree) throws Exception 226 { 227 try 228 { 229 justIndex++; 230 231 buffWriter.write("(value "); 232 buffWriter.write(tree.getValue()); 233 234 List 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 e) 244 { 245 throw e; 247 } 248 } 249 250 public void writePair(RoseNode node) throws Exception 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 e) 263 { 264 throw e; 266 } 267 } 268 } 269 | Popular Tags |