1 package cz.cuni.amis.pogamut.base.component.controller;
2
3 import java.util.HashSet;
4 import java.util.Set;
5
6 import cz.cuni.amis.pogamut.base.component.IComponent;
7 import cz.cuni.amis.utils.NullCheck;
8 import cz.cuni.amis.utils.token.IToken;
9
10
11
12
13 public class ComponentDependencies {
14
15 Set<IToken> tokenDependencies = new HashSet<IToken>();
16
17 private ComponentDependencyType type;
18
19 public ComponentDependencies() {
20 this(ComponentDependencyType.STARTS_WITH);
21 }
22
23 public ComponentDependencies(ComponentDependencyType dependencyType) {
24 this.type = dependencyType;
25 NullCheck.check(this.type, "dependencyType");
26 }
27
28
29
30
31
32 public ComponentDependencies(ComponentDependencyType dependencyType, Object... dependencies) {
33 this.type = dependencyType;
34 NullCheck.check(this.type, "dependencyType");
35 NullCheck.check(dependencies, "dependencies");
36 for (int i = 0; i < dependencies.length; ++i) {
37 NullCheck.check(dependencies[i], "dependencies[" + i + "]");
38 if (dependencies[i] instanceof IToken) {
39 add((IToken)dependencies[i]);
40 } else
41 if (dependencies[i] instanceof IComponent) {
42 if (((IComponent)dependencies[i]).getComponentId() == null) {
43 throw new IllegalArgumentException("dependencies[" + i + "].getComponentId() is null");
44 }
45 add((IComponent)dependencies[i]);
46 } else {
47 throw new IllegalArgumentException("dependencies[" + i + "] is not IToken nor IComponent");
48 }
49 }
50 }
51
52 public ComponentDependencies(ComponentDependencies dependencies) {
53 NullCheck.check(dependencies, "dependencies");
54 this.type = dependencies.type;
55 for (IToken token : dependencies.tokenDependencies) {
56 tokenDependencies.add(token);
57 }
58 }
59
60 public ComponentDependencies add(IToken token) {
61 NullCheck.check(token, "token");
62 tokenDependencies.add(token);
63 return this;
64 }
65
66 public ComponentDependencies add(IComponent component) {
67 NullCheck.check(component, "component");
68 NullCheck.check(component.getComponentId(), "'component's id'");
69 tokenDependencies.add(component.getComponentId());
70 return this;
71 }
72
73 public IToken[] getDependencies() {
74 return tokenDependencies.toArray(new IToken[0]);
75 }
76
77 public boolean isDependency(IToken token) {
78 return tokenDependencies.contains(token);
79 }
80
81 public boolean isDependency(IComponent component) {
82 return isDependency(component.getComponentId());
83 }
84
85 public ComponentDependencyType getType() {
86 return type;
87 }
88
89 public int getCount() {
90 return tokenDependencies.size();
91 }
92
93 public String toString() {
94 return "ComponentDependencies";
95 }
96
97 }