Merge "Removed `which` dependency, now using proper shell builtin."
[controller.git] / opendaylight / md-sal / compatibility / inventory-topology-compatibility / src / main / java / org / opendaylight / controller / md / compatibility / topologymanager / CompatibleTopologyManager.java
1 /**
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.md.compatibility.topologymanager;
9
10 import java.util.HashMap;
11 import java.util.List;
12 import java.util.Map;
13 import java.util.Set;
14
15 import org.opendaylight.controller.md.sal.binding.util.TypeSafeDataReader;
16 import org.opendaylight.controller.sal.core.ConstructionException;
17 import org.opendaylight.controller.sal.core.Edge;
18 import org.opendaylight.controller.sal.core.Host;
19 import org.opendaylight.controller.sal.core.NodeConnector;
20 import org.opendaylight.controller.sal.core.Property;
21 import org.opendaylight.controller.sal.core.UpdateType;
22 import org.opendaylight.controller.sal.utils.Status;
23 import org.opendaylight.controller.topologymanager.ITopologyManager;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
25 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
28 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
29 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31
32 import com.google.common.base.Predicate;
33 import com.google.common.collect.FluentIterable;
34
35 @SuppressWarnings("all")
36 public class CompatibleTopologyManager extends ConfigurableLinkManager implements ITopologyManager {
37     private AdSalTopologyMapping topologyMapping;
38     private TypeSafeDataReader dataReader;
39
40     public TypeSafeDataReader getDataReader() {
41         return dataReader;
42     }
43
44     public void setDataReader(final TypeSafeDataReader dataReader) {
45         this.dataReader = dataReader;
46     }
47
48     public AdSalTopologyMapping getTopologyMapping() {
49         return topologyMapping;
50     }
51
52     public void setTopologyMapping(final AdSalTopologyMapping topologyMapping) {
53         this.topologyMapping = topologyMapping;
54     }
55
56     @Override
57     public Map<Edge,Set<Property>> getEdges() {
58         final Topology topology = getDataReader().readOperationalData(topologyMapping.getTopologyPath());
59         return this.topologyMapping.toEdgePropertiesMap(topology.getLink());
60     }
61
62     @Override
63     public Map<org.opendaylight.controller.sal.core.Node, Set<Edge>> getNodeEdges() {
64         final Topology topology = getDataReader().readOperationalData(topologyMapping.getTopologyPath());
65         final HashMap<org.opendaylight.controller.sal.core.Node, Set<Edge>> ret = new HashMap<>();
66         for (final Node node : topology.getNode()) {
67             try {
68                 ret.put(topologyMapping.toAdNode(node), topologyMapping.toEdges(
69                         FluentIterable.from(topology.getLink()).filter(new Predicate<Link>() {
70                             @Override
71                             public boolean apply(final Link input) {
72                                 final NodeId nodeId = node.getNodeId();
73                                 if (nodeId.equals(input.getSource().getSourceNode())) {
74                                     return true;
75                                 }
76                                 if (nodeId.equals(input.getDestination().getDestNode())) {
77                                     return true;
78                                 }
79
80                                 return false;
81                             }
82                         })));
83             } catch (ConstructionException e) {
84                 throw new IllegalStateException(String.format("Failed to construct node for {}", node), e);
85             }
86         }
87         return ret;
88     }
89
90     /**
91      * Returns true if point is connected to link
92      */
93     private boolean isInternal(final TerminationPoint point) {
94         final Topology topology = getDataReader().readConfigurationData(topologyMapping.getTopologyPath());
95         final TpId tpId = point.getKey().getTpId();
96         return FluentIterable.from(topology.getLink()).anyMatch(new Predicate<Link>() {
97             @Override
98             public boolean apply(final Link input) {
99                 if (tpId.equals(input.getSource().getSourceTp())) {
100                     return true;
101                 }
102                 if (tpId.equals(input.getDestination().getDestTp())) {
103                     return true;
104                 }
105                 return false;
106             }
107         });
108     }
109
110     @Override
111     public Set<NodeConnector> getNodeConnectorWithHost() {
112         return null;
113     }
114
115     @Override
116     public Host getHostAttachedToNodeConnector(final NodeConnector p) {
117         final InstanceIdentifier<TerminationPoint> tpPath = topologyMapping.toTerminationPoint(p);
118         throw new UnsupportedOperationException("TODO: auto-generated method stub");
119     }
120
121     @Override
122     public List<Host> getHostsAttachedToNodeConnector(final NodeConnector p) {
123         final Topology topology = getDataReader().readOperationalData(topologyMapping.getTopologyPath());
124         throw new UnsupportedOperationException("Hosts not mapped yet");
125     }
126
127     @Override
128     public Map<org.opendaylight.controller.sal.core.Node, Set<NodeConnector>> getNodesWithNodeConnectorHost() {
129         throw new UnsupportedOperationException("TODO: auto-generated method stub");
130     }
131
132     @Override
133     public boolean isInternal(final NodeConnector p) {
134         final TerminationPoint connector = getDataReader()
135                 .readConfigurationData(topologyMapping.toTerminationPoint(p));
136         return this.isInternal(connector);
137     }
138
139     @Override
140     public void updateHostLink(final NodeConnector p, final Host h, final UpdateType t, final Set<Property> props) {
141         // Update app defined topology
142     }
143
144     @Override
145     public Status saveConfig() {
146         // FIXME: commit configuration
147         return null;
148     }
149 }