1 package de.fhdw.wtf.generator.writer.tasks;
2
3 import java.io.File;
4
5 import de.fhdw.wtf.common.exception.walker.CyclicDependencyException;
6 import de.fhdw.wtf.common.exception.walker.TaskException;
7 import de.fhdw.wtf.common.task.DependencyTask;
8 import de.fhdw.wtf.common.task.TaskExecutor;
9 import de.fhdw.wtf.generator.java.generatorModel.GenAnyType;
10 import de.fhdw.wtf.generator.java.generatorModel.GenAspect;
11 import de.fhdw.wtf.generator.java.generatorModel.GenClassClass;
12 import de.fhdw.wtf.generator.java.generatorModel.GenException;
13 import de.fhdw.wtf.generator.java.generatorModel.GenExternalClassClass;
14 import de.fhdw.wtf.generator.java.generatorModel.GenExternalInterfaceClass;
15 import de.fhdw.wtf.generator.java.generatorModel.GenInterfaceClass;
16 import de.fhdw.wtf.generator.java.generatorModel.GenInterfaceWithClassImplClass;
17 import de.fhdw.wtf.generator.java.generatorModel.GenJavaException;
18 import de.fhdw.wtf.generator.java.generatorModel.GenOperation;
19 import de.fhdw.wtf.generator.java.generatorModel.GenSimpleInterfaceClass;
20 import de.fhdw.wtf.generator.java.generatorModel.GenUserClass;
21 import de.fhdw.wtf.generator.java.generatorModel.GeneratorModel;
22 import de.fhdw.wtf.generator.java.visitor.GenClassClassVisitor;
23 import de.fhdw.wtf.generator.java.visitor.GenInterfaceClassVisitor;
24 import de.fhdw.wtf.generator.java.walker.SimpleGeneratorModelWalkerTask;
25 import de.fhdw.wtf.generator.writer.writer.ExceptionFileWriter;
26 import de.fhdw.wtf.generator.writer.writer.FileHeaderWriter;
27 import de.fhdw.wtf.generator.writer.writer.JavaAspectClassFileWriter;
28 import de.fhdw.wtf.generator.writer.writer.JavaClassFileWriter;
29 import de.fhdw.wtf.generator.writer.writer.JavaInterfaceClassFileWriter;
30
31
32
33
34
35
36 public class FileWriterTask extends SimpleGeneratorModelWalkerTask {
37
38 private final JavaInterfaceClassFileWriter interfaceWriter;
39 private final JavaClassFileWriter classWriter;
40 private final JavaAspectClassFileWriter aspectWriter;
41 private final ExceptionFileWriter exceptionWriter;
42
43 private final File rootDir;
44
45 public FileWriterTask(final TaskExecutor taskmanager,
46 final GeneratorModel model,
47 final String rootDir,
48 final DependencyTask clipper) {
49 super(taskmanager, model);
50 this.interfaceWriter = new JavaInterfaceClassFileWriter(true);
51 this.classWriter = new JavaClassFileWriter(true);
52 this.aspectWriter = new JavaAspectClassFileWriter(true);
53 this.exceptionWriter = new ExceptionFileWriter(true);
54 this.rootDir = new File(rootDir);
55
56 try {
57 this.addDependency(clipper);
58 } catch (final CyclicDependencyException e) {
59
60 e.printStackTrace();
61 throw new Error("Dependency tasks are cyclic in FileWriterTask.");
62 }
63 }
64
65
66
67
68 @Override
69 public void handleClassClass(final GenClassClass cc) throws TaskException {
70 cc.accept(new GenClassClassVisitor() {
71 @Override
72 public void handle(final GenAspect aspect) {
73 final FileHeaderWriter writer = new FileHeaderWriter(FileWriterTask.this.aspectWriter);
74 writer.writeGenClass(aspect, FileWriterTask.this.rootDir);
75 }
76
77 @Override
78 public void handle(final GenUserClass userclass) {
79 final FileHeaderWriter writer = new FileHeaderWriter(FileWriterTask.this.classWriter);
80 writer.writeGenClass(userclass, FileWriterTask.this.rootDir);
81 }
82
83 @Override
84 public void handle(final GenJavaException javaE) {
85
86 }
87
88 @Override
89 public void handle(final GenAnyType anyType) {
90
91 }
92
93 @Override
94 public void handle(final GenException exceptionClass) {
95 final FileHeaderWriter headerWriter = new FileHeaderWriter(FileWriterTask.this.exceptionWriter);
96 headerWriter.writeGenClass(exceptionClass, FileWriterTask.this.rootDir);
97 }
98
99 @Override
100 public void handle(final GenExternalClassClass externalClass) {
101
102 }
103 });
104 }
105
106
107
108
109 @Override
110 public void handleInterfaceClass(final GenInterfaceClass ic) throws TaskException {
111 ic.accept(new GenInterfaceClassVisitor() {
112
113 @Override
114 public void handle(final GenInterfaceWithClassImplClass interfaceWithImplClass) {
115
116 final FileHeaderWriter writer = new FileHeaderWriter(FileWriterTask.this.interfaceWriter);
117 writer.writeGenClass(interfaceWithImplClass, FileWriterTask.this.rootDir);
118
119 final FileHeaderWriter classWriter = new FileHeaderWriter(FileWriterTask.this.classWriter);
120 classWriter.writeGenClass(interfaceWithImplClass.getClassRepresentation(), FileWriterTask.this.rootDir);
121
122 }
123
124 @Override
125 public void handle(final GenSimpleInterfaceClass simpleInterface) {
126
127 final FileHeaderWriter writer = new FileHeaderWriter(FileWriterTask.this.interfaceWriter);
128 writer.writeGenClass(simpleInterface, FileWriterTask.this.rootDir);
129 }
130
131 @Override
132 public void handle(final GenExternalInterfaceClass iface) {
133
134 }
135 });
136 }
137
138 @Override
139 public void finalizeTask() throws TaskException {
140
141 }
142
143 @Override
144 public String toString() {
145 return "Filewriting";
146 }
147
148 @Override
149 public void handleOperation(final GenOperation o) throws TaskException {
150
151 }
152 }