X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fgraph%2Fcomponent%2FConnectRequiredExternallyRequiredEdgeFilter.java;fp=system%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fgraph%2Fcomponent%2FConnectRequiredExternallyRequiredEdgeFilter.java;h=598608c511b5cd3f00a2de345d54f8f61a833a4f;hb=1a7fade8cf8581099c9cd8edd0bf617979ec1857;hp=0000000000000000000000000000000000000000;hpb=102eebeba2200f9bb2d8523bdfe7ace4ff663628;p=utils diff --git a/system/general/src/main/java/org/wamblee/system/graph/component/ConnectRequiredExternallyRequiredEdgeFilter.java b/system/general/src/main/java/org/wamblee/system/graph/component/ConnectRequiredExternallyRequiredEdgeFilter.java new file mode 100644 index 00000000..598608c5 --- /dev/null +++ b/system/general/src/main/java/org/wamblee/system/graph/component/ConnectRequiredExternallyRequiredEdgeFilter.java @@ -0,0 +1,76 @@ +/* + * Copyright 2008 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.wamblee.system.graph.component; + +import org.wamblee.system.graph.Edge; +import org.wamblee.system.graph.EdgeFilter; +import org.wamblee.system.graph.EdgeSelector; +import org.wamblee.system.graph.Node; + +/** + * Filter used to explicitly connect required and provided interfaces within a + * container. + * + * @author Erik Brakkee + * + */ +public class ConnectRequiredExternallyRequiredEdgeFilter implements EdgeFilter { + + private String _client; + private String _required; + private String _externalRequired; + + public ConnectRequiredExternallyRequiredEdgeFilter(String aClient, String aRequired, + String aExternalRequired) { + _client = aClient; + _required = aRequired; + _externalRequired = aExternalRequired; + if ( _client == null ) { + throw new IllegalArgumentException("Client component must be specified"); + } + if ( _required == null ) { + throw new IllegalArgumentException("Required interface must be specified"); + } + if ( _externalRequired == null ) { + throw new IllegalArgumentException("External required interface must be specified"); + } + } + + @Override + public boolean isViolated(Edge aEdge) { + if (aEdge.getFrom() instanceof RequiredInterfaceNode + && aEdge.getTo() instanceof ExternalRequiredInterfaceNode) { + return isViolated((RequiredInterfaceNode) aEdge.getFrom(), + (ExternalRequiredInterfaceNode) aEdge.getTo()); + } + return false; + } + + private boolean isViolated(RequiredInterfaceNode aFrom, + ExternalRequiredInterfaceNode aTo) { + if ( !aFrom.getComponent().getName().equals(_client)) { + return false; // wrong component. + } + if ( !(_required == null || aFrom.getRequired().getName().equals(_required))) { + return false; // wrong interface + } + if ( !aTo.getRequired().getName().equals(_externalRequired)) { + return true; // wrong externally required interface. + } + + return false; + } +}