Skip to content

Package: FactoryTransformer$1

FactoryTransformer$1

nameinstructionbranchcomplexitylinemethod
handle(GenExternalInterfaceClass)
M: 1 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
handle(GenInterfaceWithClassImplClass)
M: 0 C: 20
100%
M: 2 C: 2
50%
M: 2 C: 1
33%
M: 0 C: 4
100%
M: 0 C: 1
100%
handle(GenSimpleInterfaceClass)
M: 0 C: 1
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
{...}
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: package de.fhdw.wtf.generator.transformer.transformers.classTransformer;
2:
3: import java.util.List;
4: import java.util.Vector;
5:
6: import de.fhdw.wtf.common.exception.walker.CyclicDependencyException;
7: import de.fhdw.wtf.common.exception.walker.TaskException;
8: import de.fhdw.wtf.common.task.DependencyTask;
9: import de.fhdw.wtf.common.task.TaskExecutor;
10: import de.fhdw.wtf.facade.PackageConstants;
11: import de.fhdw.wtf.generator.java.generatorModel.GenClass;
12: import de.fhdw.wtf.generator.java.generatorModel.GenClassClass;
13: import de.fhdw.wtf.generator.java.generatorModel.GenClassModifier;
14: import de.fhdw.wtf.generator.java.generatorModel.GenComment;
15: import de.fhdw.wtf.generator.java.generatorModel.GenException;
16: import de.fhdw.wtf.generator.java.generatorModel.GenExternalClassClass;
17: import de.fhdw.wtf.generator.java.generatorModel.GenExternalInterfaceClass;
18: import de.fhdw.wtf.generator.java.generatorModel.GenInterfaceClass;
19: import de.fhdw.wtf.generator.java.generatorModel.GenInterfaceWithClassImplClass;
20: import de.fhdw.wtf.generator.java.generatorModel.GenJavaAttribute;
21: import de.fhdw.wtf.generator.java.generatorModel.GenJavaOperation;
22: import de.fhdw.wtf.generator.java.generatorModel.GenOperation;
23: import de.fhdw.wtf.generator.java.generatorModel.GenOperationModifier;
24: import de.fhdw.wtf.generator.java.generatorModel.GenPackage;
25: import de.fhdw.wtf.generator.java.generatorModel.GenParameter;
26: import de.fhdw.wtf.generator.java.generatorModel.GenSimpleInterfaceClass;
27: import de.fhdw.wtf.generator.java.generatorModel.GenUnqualifiedPackage;
28: import de.fhdw.wtf.generator.java.generatorModel.GenUserClass;
29: import de.fhdw.wtf.generator.java.generatorModel.GenVisibility;
30: import de.fhdw.wtf.generator.java.generatorModel.GeneratorModel;
31: import de.fhdw.wtf.generator.java.visitor.GenInterfaceClassVisitorException;
32: import de.fhdw.wtf.generator.java.walker.SimpleGeneratorModelWalkerTask;
33:
34: /**
35: * Generates the FactoryClass for every concrete class of the wtf model.
36: */
37: public class FactoryTransformer extends SimpleGeneratorModelWalkerTask {
38:         
39:         private static final String DEFAULT_PARAMETER_VALUE = "null";
40:         private final GenClassClass userObjectFactory;
41:         
42:         /**
43:          * Creates a new {@link FactoryTransformer}. Initializes the UserObjectFactory class as superclass<br>
44:          * for all Factorys
45:          *
46:          * @param taskmanager
47:          * @param javaGeneratorModel
48:          * @param inheritanceTransformer
49:          */
50:         public FactoryTransformer(final TaskExecutor taskmanager,
51:                         final GeneratorModel javaGeneratorModel,
52:                         final DependencyTask inheritanceTransformer) {
53:                 super(taskmanager, javaGeneratorModel);
54:                 final GenPackage packag = GenUnqualifiedPackage.create("de");
55:                 final GenPackage packag1 = packag.addName("fhdw");
56:                 final GenPackage packag2 = packag1.addName("wtf");
57:                 final GenPackage packag3 = packag2.addName("context");
58:                 final GenPackage packag4 = packag3.addName("model");
59:                 final GenUserClass userClass =
60:                                 GenUserClass.create(
61:                                                 "UserObjectFactory",
62:                                                 new Vector<GenJavaOperation>(),
63:                                                 new Vector<GenInterfaceClass>(),
64:                                                 new Vector<GenJavaAttribute>(),
65:                                                 new Vector<GenClassModifier>(),
66:                                                 new Vector<GenJavaOperation>(),
67:                                                 null,
68:                                                 packag4,
69:                                                 GenComment.create(""),
70:                                                 "");
71:                 this.userObjectFactory = userClass;
72:                 
73:                 try {
74:                         this.addDependency(inheritanceTransformer);
75:                 } catch (final CyclicDependencyException e) {
76:                         // should not happen
77:                         e.printStackTrace();
78:                         throw new Error("Dependency tasks are cyclic in FactoryTransformer.");
79:                 }
80:         }
81:         
82:         @Override
83:         public void finalizeTask() throws TaskException {
84:                 // nothing to do
85:         }
86:         
87:         @Override
88:         public void handleClassClass(final GenClassClass cc) throws TaskException {
89:                 if (!cc.getModifieres().contains(GenClassModifier.ABSTRACT)
90:                                 && (cc.getFullyQualifiedTypeName().startsWith("generated.model.") || cc.getFullyQualifiedTypeName()
91:                                                 .startsWith("generated.products."))) {
92:                         FactoryTransformer.this.generateFactory(cc, cc);
93:                 }
94:         }
95:         
96:         /**
97:          * Creates the Factory for the current {@link GenInterfaceWithClassImplClass} with its createSpecificUserType
98:          * operation.
99:          */
100:         @Override
101:         public void handleInterfaceClass(final GenInterfaceClass ic) throws TaskException {
102:                 ic.accept(new GenInterfaceClassVisitorException<TaskException>() {
103:                         
104:                         @Override
105:                         public void handle(final GenSimpleInterfaceClass simpleInterface) throws TaskException {
106:                                 // nothing to do
107:                         }
108:                         
109:                         @Override
110:                         public void handle(final GenInterfaceWithClassImplClass iwc) throws TaskException {
111:                                 final GenClassClass cc = iwc.getClassRepresentation();
112:•                                if (!cc.getModifieres().contains(GenClassModifier.ABSTRACT)
113:                                                 && cc.getFullyQualifiedTypeName().startsWith("generated.model.")) {
114:                                         FactoryTransformer.this.generateFactory(iwc, iwc.getClassRepresentation());
115:                                 }
116:                         }
117:                         
118:                         @Override
119:                         public void handle(final GenExternalInterfaceClass iface) {
120:                                 // nothing to do
121:                         }
122:                 });
123:         }
124:         
125:         /**
126:          * Creates the Factory for some class.
127:          *
128:          * @param iface
129:          * The interface class.
130:          * @param impl
131:          * The implementation class. May be equal to {@link iface}.
132:          */
133:         private void generateFactory(final GenClass iface, final GenClassClass impl) {
134:                 final GenUserClass factory =
135:                                 GenUserClass.create(
136:                                                 iface.getName() + "Factory",
137:                                                 new Vector<GenJavaOperation>(),
138:                                                 new Vector<GenInterfaceClass>(),
139:                                                 new Vector<GenJavaAttribute>(),
140:                                                 new Vector<GenClassModifier>(),
141:                                                 new Vector<GenJavaOperation>(),
142:                                                 this.userObjectFactory,
143:                                                 PackageConstants.FACTORY_PACKAGE,
144:                                                 GenComment.createFromPlainText("Comment", false),
145:                                                 "");
146:                 final List<GenParameter> parameters = new Vector<>();
147:                 parameters.add(GenParameter.create(
148:                                 OperationAttributeTransformer.LOAD_CONSTRUCTOR_PARAM_NAME,
149:                                 GenExternalClassClass.getInstance(OperationAttributeTransformer.LOAD_CONSTRUCTOR_PARAM_TYPE)));
150:                 final GenJavaOperation createSpecificUserType =
151:                                 GenJavaOperation.create(
152:                                                 "createSpecificUserType",
153:                                                 GenVisibility.PROTECTED,
154:                                                 parameters,
155:                                                 new Vector<GenException>(),
156:                                                 "return new " + impl.getFullyQualifiedTypeNameWithGenericArguments() + "("
157:                                                                 + OperationAttributeTransformer.LOAD_CONSTRUCTOR_PARAM_NAME + ");",
158:                                                 GenExternalInterfaceClass.getInstance("de.fhdw.wtf.context.model.IAnyType"),
159:                                                 new Vector<GenOperationModifier>(),
160:                                                 GenComment.create("@Override"));
161:                 factory.addOperation(createSpecificUserType);
162:                 // factory.getImports().add(GenAnyType.getInstance());
163:                 this.getGeneratorModel().addNonAstClass(factory);
164:         }
165:         
166:         @Override
167:         public String toString() {
168:                 return "Modelclass factory generation";
169:         }
170:         
171:         @Override
172:         public void handleOperation(final GenOperation o) throws TaskException {
173:                 // nothing to do
174:         }
175: }