View Javadoc

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   * @author Jimmy
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  	 * @param dependencyType
30  	 * @param dependencies might be {@link IToken} implementations or {@link IComponent} implementations
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  }