Edge filter implemented for explicitly connecting required interfaces.
[utils] / system / general / src / main / java / org / wamblee / system / graph / component / ConnectExternalProvidedProvidedFilter.java
1 /*
2  * Copyright 2008 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.system.graph.component;
17
18 import org.wamblee.system.graph.Edge;
19 import org.wamblee.system.graph.EdgeFilter;
20 import org.wamblee.system.graph.EdgeSelector;
21 import org.wamblee.system.graph.Node;
22
23 /**
24  * Filter used to explicitly connect required and provided interfaces within a
25  * container.
26  * 
27  * @author Erik Brakkee
28  * 
29  */
30 public class ConnectExternalProvidedProvidedFilter implements EdgeFilter {
31
32     private String _externalProvided;
33     private String _component;
34     private String _provided;
35
36     public ConnectExternalProvidedProvidedFilter(String aExternalProvided, String aComponent,
37             String aProvided) {
38         _externalProvided = aExternalProvided; 
39         _component = aComponent; 
40         _provided = aProvided; 
41         if ( _externalProvided == null ) { 
42             throw new IllegalArgumentException("External provided interface name must be specified."); 
43         }
44         if ( _component == null ) { 
45             throw new IllegalArgumentException("Component name must be specified");
46         }
47         if ( _provided == null ) { 
48             throw new IllegalArgumentException("Provided interface name of internal component must be specified");
49         }
50     }
51
52     @Override
53     public boolean isViolated(Edge aEdge) {
54         if (aEdge.getFrom() instanceof ExternalProvidedInterfaceNode
55                 && aEdge.getTo() instanceof ProvidedInterfaceNode) {
56             return isViolated((ExternalProvidedInterfaceNode) aEdge.getFrom(),
57                     (ProvidedInterfaceNode) aEdge.getTo());
58         }
59         return false;
60     }
61
62     private boolean isViolated(ExternalProvidedInterfaceNode aFrom,
63             ProvidedInterfaceNode aTo) {
64         if ( !aFrom.getName().equals(_externalProvided)) { 
65             return false; // wrong provided interface.
66         }
67         if ( aTo.getComponent().getName().equals(_component) && 
68                aTo.getProvided().getName().equals(_provided) ) { 
69             return false; // ok 
70         }
71         return true; 
72     }
73 }