01c316a0c161e847c015a2bd0d0ab919503c75dd
[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
21
22 /**
23  * Filter used to explicitly connect required and provided interfaces
24  * within a container.
25  *
26  * @author Erik Brakkee
27  */
28 public class ConnectExternalProvidedProvidedFilter implements EdgeFilter {
29     /**
30      * DOCUMENT ME!
31      */
32     private String externalProvided;
33
34     /**
35      * DOCUMENT ME!
36      */
37     private String component;
38
39     /**
40      * DOCUMENT ME!
41      */
42     private String provided;
43
44     /**
45      * Creates a new ConnectExternalProvidedProvidedFilter object.
46      *
47      * @param aExternalProvided DOCUMENT ME!
48      * @param aComponent DOCUMENT ME!
49      * @param aProvided DOCUMENT ME!
50      */
51     public ConnectExternalProvidedProvidedFilter(String aExternalProvided,
52         String aComponent, String aProvided) {
53         externalProvided     = aExternalProvided;
54         component            = aComponent;
55         provided             = aProvided;
56
57         if (externalProvided == null) {
58             throw new IllegalArgumentException(
59                 "External provided interface name must be specified.");
60         }
61
62         if (component == null) {
63             throw new IllegalArgumentException(
64                 "Component name must be specified");
65         }
66
67         if (provided == null) {
68             throw new IllegalArgumentException(
69                 "Provided interface name of internal component must be specified");
70         }
71     }
72
73     /**
74      * DOCUMENT ME!
75      *
76      * @param aEdge DOCUMENT ME!
77      *
78      * @return DOCUMENT ME!
79      */
80     @Override
81     public boolean isViolated(Edge aEdge) {
82         if (aEdge.getFrom() instanceof ExternalProvidedInterfaceNode
83                 && aEdge.getTo() instanceof ProvidedInterfaceNode) {
84             return isViolated((ExternalProvidedInterfaceNode) aEdge.getFrom(),
85                 (ProvidedInterfaceNode) aEdge.getTo());
86         }
87
88         return false;
89     }
90
91     /**
92      * DOCUMENT ME!
93      *
94      * @param aFrom DOCUMENT ME!
95      * @param aTo DOCUMENT ME!
96      *
97      * @return DOCUMENT ME!
98      */
99     private boolean isViolated(ExternalProvidedInterfaceNode aFrom,
100         ProvidedInterfaceNode aTo) {
101         if (!aFrom.getName().equals(externalProvided)) {
102             return false; // wrong provided interface.
103         }
104
105         if (aTo.getComponent().getName().equals(component)
106                 && aTo.getProvided().getName().equals(provided)) {
107             return false; // ok 
108         }
109
110         return true;
111     }
112 }