1 package de.fhdw.wtf.generator.database.tasks;
2
3 import java.util.Iterator;
4
5 import de.fhdw.wtf.common.ast.Model;
6 import de.fhdw.wtf.common.ast.type.Type;
7 import de.fhdw.wtf.common.exception.generation.NoTypeIdSetException;
8 import de.fhdw.wtf.common.exception.walker.TaskException;
9 import de.fhdw.wtf.common.task.TaskExecutor;
10 import de.fhdw.wtf.generator.database.generation.InitialGenerator;
11 import de.fhdw.wtf.persistence.exception.PersistenceException;
12 import de.fhdw.wtf.walker.walker.HelperUtils;
13 import de.fhdw.wtf.walker.walker.SimpleWalkerTaskForTypes;
14
15
16
17
18
19 public class SpecializationGenerationTask extends SimpleWalkerTaskForTypes {
20
21
22
23
24
25
26
27
28
29
30
31 public SpecializationGenerationTask(final Model m, final TaskExecutor man, final InitialGenerator generator) {
32 super(m, man);
33 this.generator = generator;
34 }
35
36
37
38
39 private final InitialGenerator generator;
40
41 @Override
42 public void handleType(final Type c) throws TaskException {
43 final Iterator<Type> i = c.getSuperTypes().iterator();
44 while (i.hasNext()) {
45 final Type current = i.next();
46 Type superType;
47 try {
48 superType = HelperUtils.getReferencedType(current);
49 this.generator.createSpecialisation(superType.getTypeId().getId(), c.getTypeId().getId());
50 this.generator.getClassFacade().finalizeSpecialization();
51 } catch (final PersistenceException | NoTypeIdSetException e) {
52 throw new TaskException(e.getMessage());
53 }
54 }
55 }
56
57 @Override
58 public void finalizeTask() throws TaskException {
59 try {
60 this.generator.getClassFacade().finalizeSpecialization();
61 } catch (final PersistenceException e) {
62 throw new TaskException(e);
63 }
64 }
65
66 @Override
67 public void beginTask() throws TaskException {
68
69 }
70 }