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.adl.interfaces;
25
26 import static org.objectweb.fractal.adl.NodeUtil.castNodeError;
27 import static org.objectweb.fractal.adl.types.TypeInterfaceUtil.isClient;
28
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.Map;
32
33 import org.objectweb.fractal.adl.ADLException;
34 import org.objectweb.fractal.adl.ComponentVisitor;
35 import org.objectweb.fractal.adl.Node;
36 import org.objectweb.fractal.adl.components.ComponentContainer;
37 import org.objectweb.fractal.adl.interfaces.Interface;
38 import org.objectweb.fractal.adl.interfaces.InterfaceContainer;
39 import org.objectweb.fractal.adl.types.TypeInterface;
40 import org.objectweb.fractal.api.Component;
41 import org.objectweb.fractal.api.factory.InstantiationException;
42 import org.objectweb.fractal.task.core.AbstractTaskFactoryUser;
43 import org.objectweb.fractal.task.core.TaskException;
44
45
46
47
48
49 public abstract class AbstractClientInterfaceVisitor
50 extends
51 AbstractTaskFactoryUser implements ComponentVisitor {
52
53
54
55
56
57
58
59
60
61
62
63 protected abstract Component createTask(ComponentContainer container,
64 List<TypeInterface> clientInterfaces) throws ADLException, TaskException;
65
66
67
68
69
70
71
72
73
74
75 public Component visit(final List<Node> path,
76 final ComponentContainer container, final Map<Object, Object> context)
77 throws ADLException, TaskException {
78 final List<TypeInterface> clientInterfaces = new ArrayList<TypeInterface>();
79 if (container instanceof InterfaceContainer) {
80 for (final Interface itf : ((InterfaceContainer) container)
81 .getInterfaces()) {
82 if (isClient(itf))
83 clientInterfaces.add(castNodeError(itf, TypeInterface.class));
84 }
85 }
86 return createTask(container, clientInterfaces);
87 }
88
89 }