1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.objectweb.fractal.cecilia.composite.c.components;
25
26 import static org.objectweb.fractal.api.type.TypeFactory.OPTIONAL;
27
28 import java.util.List;
29 import java.util.Map;
30
31 import org.objectweb.fractal.adl.ADLException;
32 import org.objectweb.fractal.adl.ComponentVisitor;
33 import org.objectweb.fractal.adl.Node;
34 import org.objectweb.fractal.adl.components.ComponentContainer;
35 import org.objectweb.fractal.api.Component;
36 import org.objectweb.fractal.cecilia.adl.AbstractDefinitionTask;
37 import org.objectweb.fractal.cecilia.adl.SourceCodeProvider;
38 import org.objectweb.fractal.cecilia.adl.file.CodeWriter;
39 import org.objectweb.fractal.task.core.AbstractTaskFactoryUser;
40 import org.objectweb.fractal.task.core.TaskException;
41 import org.objectweb.fractal.task.core.primitive.annotations.ClientInterface;
42 import org.objectweb.fractal.task.core.primitive.annotations.ServerInterface;
43 import org.objectweb.fractal.task.core.primitive.annotations.ServerInterfaces;
44 import org.objectweb.fractal.task.core.primitive.annotations.TaskParameters;
45
46
47
48
49 public class ComponentDefinitionVisitor extends AbstractTaskFactoryUser
50 implements
51 ComponentVisitor {
52
53
54
55
56
57
58
59
60
61 public Component visit(final List<Node> path,
62 final ComponentContainer container, final Map<Object, Object> context)
63 throws ADLException, TaskException {
64 return taskFactoryItf.newPrimitiveTask(new ComponentDefinitionTask(),
65 container);
66 }
67
68
69
70
71
72
73
74
75
76 @TaskParameters("componentNode")
77 @ServerInterfaces(@ServerInterface(name = "component-definition-provider", signature = SourceCodeProvider.class, record = "role:componentDefinition, id:%", parameters = "componentNode"))
78 public static class ComponentDefinitionTask extends AbstractDefinitionTask {
79
80
81
82
83
84
85 @ClientInterface(name = "interface-definition-provider", contingency = OPTIONAL, record = "role:interfaceDefinition, id:%", parameters = "componentNode")
86 public SourceCodeProvider interfaceDefinitionsProviderItf;
87
88
89
90
91 @Override
92 protected String processSourceCode() throws Exception {
93 final CodeWriter cw = new CodeWriter("Composite Definition Builder");
94 cw.append("#define IN_CECILIA_MECHANISM").endl();
95 cw.append("#include <fractal/api/defaultComposite.h>").endl();
96
97 if (interfaceDefinitionsProviderItf != null)
98 cw.appendln(interfaceDefinitionsProviderItf.getSourceCode()).endl();
99
100 cw.endl();
101 return cw.toString();
102 }
103 }
104 }