blob: 0af2b13409898530d2745d748fe432651d91f4d2 [file] [log] [blame]
Yixiao Chen39828a62016-09-14 14:37:06 -04001/*
2 * Copyright 2016 Open Networking Laboratory
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 */
16package org.onosproject.teyang.utils.topology;
17
18import static com.google.common.base.Preconditions.checkNotNull;
19
20import java.util.List;
21
22import org.onosproject.tetopology.management.api.KeyId;
23import org.onosproject.tetopology.management.api.node.InterfaceSwitchingCapability;
24import org.onosproject.tetopology.management.api.node.NetworkNodeKey;
25import org.onosproject.tetopology.management.api.node.TeNetworkTopologyId;
26import org.onosproject.tetopology.management.api.node.TeNode;
27import org.onosproject.tetopology.management.api.node.TerminationCapability;
28import org.onosproject.tetopology.management.api.node.TerminationPoint;
29import org.onosproject.tetopology.management.api.node.TerminationPointKey;
30import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev20130715.ietfinettypes.DomainName;
31import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworkId;
32import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NodeId;
33import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
34 .ietfnetwork.networks.network.DefaultNode;
35import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
36 .ietfnetwork.networks.network.Node;
37import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
38 .ietfnetwork.networks.network.node.DefaultSupportingNode;
39import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208
40 .ietfnetwork.networks.network.node.SupportingNode;
41import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
42 .ietfnetworktopology.TpId;
43import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
44 .ietfnetworktopology.networks.network.node.AugmentedNdNode;
45import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
46 .ietfnetworktopology.networks.network.node.DefaultAugmentedNdNode;
47import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
48 .ietftetopology.networks.network.node.AugmentedNwNode;
49import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
50 .ietftetopology.networks.network.node.DefaultAugmentedNwNode;
51import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
52 .ietftetopology.networks.network.node.augmentednwnode.DefaultTe;
53import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
54 .ietftetopology.networks.network.node.augmentednwnode.DefaultTe.TeBuilder;
55import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
56 .ietftetopology.networks.network.node.augmentednwnode.Te;
57import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
58 .ietftetopology.networks.network.node.augmentednwnode.te.Config;
59import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
60 .ietftetopology.networks.network.node.augmentednwnode.te.DefaultConfig;
61import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
62 .ietftetopology.networks.network.node.augmentednwnode.te.DefaultState;
63import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
64 .ietftetopology.networks.network.node.augmentednwnode.te.DefaultTunnelTerminationPoint;
65import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
66 .ietftetopology.networks.network.node.augmentednwnode.te.State;
67import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
68 .ietftetopology.networks.network.node.augmentednwnode.te.TunnelTerminationPoint;
69import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
70 .ietftetopology.networks.network.node.augmentednwnode.te.config.DefaultTeNodeAttributes;
71import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
72 .ietftetopology.networks.network.node.augmentednwnode.te.config.TeNodeAttributes;
73import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
74 .ietftetopology.networks.network.node.augmentednwnode.te.config.tenodeattributes.ConnectivityMatrix;
75import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
76 .ietftetopology.networks.network.node.augmentednwnode.te.config.tenodeattributes
77 .DefaultConnectivityMatrix;
78import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
79 .ietftetopology.networks.network.node.augmentednwnode.te.config.tenodeattributes.DefaultUnderlayTopology;
80import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
81 .ietftetopology.networks.network.node.augmentednwnode.te.config.tenodeattributes.UnderlayTopology;
82import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
83 .ietftetopology.networks.network.node.augmentednwnode.te.config.tenodeattributes
84 .connectivitymatrix.DefaultFrom;
85import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
86 .ietftetopology.networks.network.node.augmentednwnode.te.config.tenodeattributes
87 .connectivitymatrix.DefaultTo;
88import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
89 .ietftetopology.networks.network.node.augmentednwnode.te.tunnelterminationpoint
90 .config.DefaultTerminationCapability;
91import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId;
92import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyId;
93
94import com.google.common.collect.Lists;
95
96/**
97 * Node conversion functions.
98 */
99public final class NodeConverter {
100
101 private static final String E_NULL_TE_SUBSYSTEM_TE_NODE = "TeSubsystem teNode object cannot be null";
102 private static final String E_NULL_TE_SUBSYSTEM_TE_TUNNEL_TP = "TeSubsystem teTunnelTp object cannot be null";
103 private static final String E_NULL_TE_SUBSYSTEM_NODE = "TeSubsystem ndoe object cannot be null";
104 private static final String E_NULL_YANG_NODE = "Yang node object cannot be null";
105
106 // no instantiation
107 private NodeConverter() {
108 }
109
110 /**
111 * TE Node Config object conversion from TE Topology subsystem to YANG.
112 *
113 * @param teSubsystemTeNode TE node object
114 * @return TE Node Config YANG object
115 */
116 private static Config teNode2YangConfig(TeNode teSubsystemTeNode) {
117 checkNotNull(teSubsystemTeNode, E_NULL_TE_SUBSYSTEM_TE_NODE);
118
119 TeNodeAttributes.TeNodeAttributesBuilder teNodeAttributesConfigBuilder =
120 DefaultTeNodeAttributes.builder()
121 .isAbstract(teSubsystemTeNode.isAbstract());
122 if (teSubsystemTeNode.adminStatus() != null) {
123 teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
124 .adminStatus(EnumConverter
125 .teSubsystem2YangAdminStatus(teSubsystemTeNode
126 .adminStatus()));
127 }
128
129 if (teSubsystemTeNode.name() != null) {
130 teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
131 .name(DomainName.fromString(teSubsystemTeNode.name()));
132 }
133
134 if (teSubsystemTeNode.underlayTopology() != null) {
135 teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
136 .underlayTopology(teNode2YangUnderlayConfig(teSubsystemTeNode.underlayTopology()));
137 }
138
139 if (teSubsystemTeNode.connectivityMatrices() != null) {
140 ConnectivityMatrix.ConnectivityMatrixBuilder connectivityMatrixConfigBuilder =
141 DefaultConnectivityMatrix.builder();
142 for (org.onosproject.tetopology.management.api.node.ConnectivityMatrix teCm : teSubsystemTeNode.
143 connectivityMatrices()) {
144 connectivityMatrixConfigBuilder = connectivityMatrixConfigBuilder
145 .id(teCm.id())
146 .isAllowed(teCm.isAllowed())
147 .from(new DefaultFrom.FromBuilder()
148 .tpRef(TpId.fromString(teCm.from().tpId()
149 .toString()))
150 .build())
151 .to(new DefaultTo.ToBuilder()
152 .tpRef(TpId.fromString(teCm.to().tpId()
153 .toString()))
154 .build());
155 teNodeAttributesConfigBuilder = teNodeAttributesConfigBuilder
156 .addToConnectivityMatrix(connectivityMatrixConfigBuilder
157 .build());
158 }
159 }
160
161
162 Config.ConfigBuilder yangConfigBuilder = DefaultConfig.builder();
163 yangConfigBuilder = yangConfigBuilder.teNodeAttributes(teNodeAttributesConfigBuilder.build());
164
165 return yangConfigBuilder.build();
166 }
167
168 private static UnderlayTopology teNode2YangUnderlayConfig(TeNetworkTopologyId underlayTopology) {
169 UnderlayTopology.UnderlayTopologyBuilder underlayConfigBuilder = DefaultUnderlayTopology
170 .builder()
171 .networkIdRef(NetworkId.fromString(underlayTopology.getNetworkId().toString()))
172 .teTopologyIdRef(TeTopologyId
173 .fromString(underlayTopology
174 .getTopologyId().topologyId()));
175 return underlayConfigBuilder.build();
176 }
177
178 /**
179 * TE Node State object conversion from TE Topology subsystem to YANG.
180 *
181 * @param teSubsystemTeNode TE node object
182 * @return TE Node State YANG object
183 */
184 private static State teNode2YangState(TeNode teSubsystemTeNode) {
185 checkNotNull(teSubsystemTeNode, E_NULL_TE_SUBSYSTEM_TE_NODE);
186
187 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
188 .networks.network.node.augmentednwnode.te.state.TeNodeAttributes
189 .TeNodeAttributesBuilder teNodeAttributesStateBuilder =
190 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
191 .networks.network.node.augmentednwnode.te.state.DefaultTeNodeAttributes.builder()
192 .isAbstract(teSubsystemTeNode.isAbstract());
193
194 if (teSubsystemTeNode.adminStatus() != null) {
195 teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
196 .adminStatus(EnumConverter
197 .teSubsystem2YangAdminStatus(teSubsystemTeNode
198 .adminStatus()));
199 }
200
201 if (teSubsystemTeNode.name() != null) {
202 teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
203 .name(DomainName.fromString(teSubsystemTeNode.name()));
204 }
205
206 if (teSubsystemTeNode.underlayTopology() != null) {
207 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
208 .networks.network.node.augmentednwnode.te.state.tenodeattributes.UnderlayTopology.
209 UnderlayTopologyBuilder underlayStateBuilder =
210 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
211 .networks.network.node.augmentednwnode.te.state.tenodeattributes.DefaultUnderlayTopology
212 .builder();
213 underlayStateBuilder = underlayStateBuilder
214 .networkIdRef(NetworkId.fromString(teSubsystemTeNode
215 .underlayTopology().getNetworkId().toString()))
216 .teTopologyIdRef(TeTopologyId.fromString(teSubsystemTeNode
217 .underlayTopology().getTopologyId().topologyId()));
218 teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
219 .underlayTopology(underlayStateBuilder.build());
220 }
221
222 if (teSubsystemTeNode.connectivityMatrices() != null) {
223 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
224 .networks.network.node.augmentednwnode.te.state.tenodeattributes.ConnectivityMatrix
225 .ConnectivityMatrixBuilder
226 connectivityMatrixStateBuilder = org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
227 .te.topology.rev20160708.ietftetopology.networks.network.node.augmentednwnode
228 .te.state.tenodeattributes.DefaultConnectivityMatrix
229 .builder();
230 for (org.onosproject.tetopology.management.api.node.ConnectivityMatrix teCm : teSubsystemTeNode
231 .connectivityMatrices()) {
232 connectivityMatrixStateBuilder = connectivityMatrixStateBuilder
233 .id(teCm.id())
234 .isAllowed(teCm.isAllowed())
235 .from(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
236 .rev20160708.ietftetopology.networks.network.node.augmentednwnode.te.state
237 .tenodeattributes.connectivitymatrix.DefaultFrom.FromBuilder()
238 .tpRef(TpId.fromString(teCm.from().tpId()
239 .toString()))
240 .build())
241 .to(new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
242 .rev20160708.ietftetopology.networks.network.node.augmentednwnode.te.state
243 .tenodeattributes.connectivitymatrix.DefaultTo.ToBuilder()
244 .tpRef(TpId.fromString(teCm.to().tpId()
245 .toString()))
246 .build());
247 teNodeAttributesStateBuilder = teNodeAttributesStateBuilder
248 .addToConnectivityMatrix(connectivityMatrixStateBuilder
249 .build());
250 }
251 }
252
253 State.StateBuilder yangStateBuilder = DefaultState.builder();
254 yangStateBuilder = yangStateBuilder.teNodeAttributes(teNodeAttributesStateBuilder.build());
255
256 if (teSubsystemTeNode.opStatus() != null) {
257 yangStateBuilder = yangStateBuilder.operStatus(EnumConverter
258 .teSubsystem2YangOperStatus(teSubsystemTeNode
259 .opStatus()));
260 }
261
262 return yangStateBuilder.build();
263 }
264
265 /**
266 * TE Node TunnelTerminationPoint object conversion from TE Topology subsystem to YANG.
267 *
268 * @param teTunnelTp TE TunnelTerminationPoint object
269 * @return TunnelTerminationPoint YANG object
270 */
271 private static TunnelTerminationPoint teSubsystem2YangTtp(
272 org.onosproject.tetopology.management.api.node.TunnelTerminationPoint teTunnelTp) {
273 checkNotNull(teTunnelTp, E_NULL_TE_SUBSYSTEM_TE_TUNNEL_TP);
274
275 TunnelTerminationPoint.TunnelTerminationPointBuilder tunnelTpBuilder =
276 DefaultTunnelTerminationPoint.builder().tunnelTpId(teTunnelTp.getTunnelTpId());
277
278 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
279 .ietftetopology.networks.network.node.augmentednwnode.te.tunnelterminationpoint
280 .Config.ConfigBuilder ttpConfigBuilder =
281 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
282 .ietftetopology.networks.network.node.augmentednwnode.te.tunnelterminationpoint
283 .DefaultConfig.builder();
284 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
285 .ietftetopology.networks.network.node.augmentednwnode.te.tunnelterminationpoint
286 .State.StateBuilder ttpStateBuilder =
287 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
288 .ietftetopology.networks.network.node.augmentednwnode.te.tunnelterminationpoint
289 .DefaultState.builder();
290
291 if (Long.valueOf(teTunnelTp.getInterLayerLockId()) != null) {
292 ttpConfigBuilder = ttpConfigBuilder.interLayerLockId(teTunnelTp.getInterLayerLockId());
293 ttpStateBuilder = ttpStateBuilder.interLayerLockId(teTunnelTp.getInterLayerLockId());
294 }
295
296 if (teTunnelTp.getSwitchingCapabilities() != null) {
297 // FIXME: switchingCapabilities is a list in
298 // teSubsystem, but is not a list in yang. how to handle
299 // this?
300 for (InterfaceSwitchingCapability iscTe : teTunnelTp.getSwitchingCapabilities()) {
301 // ttpConfigBuilder =
302 // ttpConfigBuilder.switchingCapability(switchingCapability)
303 // ttpStateBuilder =
304 // ttpStateBuilder.switchingCapability(switchingCapability)
305 }
306 }
307
308 if (teTunnelTp.getTerminationCapabilities() != null) {
309 for (TerminationCapability tcap : teTunnelTp.getTerminationCapabilities()) {
310 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
311 .ietftetopology.networks.network.node.augmentednwnode.te.tunnelterminationpoint.config
312 .TerminationCapability.TerminationCapabilityBuilder
313 tcapConfigBuilder = DefaultTerminationCapability.builder();
314 // FIXME: at this moment, tcap does not have any getter or setter.
315 // add the following getLinkTpId possibly other attributes to Core data structure
316 // tcapConfigBuilder =
317 // tcapConfigBuilder.linkTp(TpId.fromString(tcap.getLinkTpId.toString()));
318 ttpConfigBuilder = ttpConfigBuilder.addToTerminationCapability(tcapConfigBuilder.build());
319
320 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
321 .ietftetopology.networks.network.node.augmentednwnode.te.tunnelterminationpoint.state
322 .TerminationCapability.TerminationCapabilityBuilder tcapStateBuilder =
323 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
324 .ietftetopology.networks.network.node.augmentednwnode.te.tunnelterminationpoint.state
325 .DefaultTerminationCapability.builder();
326 // FIXME: at this moment, tcap does not have any getter or setter.
327 // add the following getLinkTpId possibly other attributes to Core data structure
328 // tcapConfigBuilder =
329 // tcapConfigBuilder.linkTp(TpId.fromString(tcap.getLinkTpId.toString()));
330 ttpStateBuilder = ttpStateBuilder.addToTerminationCapability(tcapStateBuilder.build());
331 }
332 }
333
334 tunnelTpBuilder = tunnelTpBuilder.config(ttpConfigBuilder.build())
335 .state(ttpStateBuilder.build());
336
337 return tunnelTpBuilder.build();
338 }
339
340 /**
341 * Node object conversion from TE Topology subsystem to YANG.
342 *
343 * @param teSubsystem TE subsystem node object
344 * @return YANG node object
345 */
346 public static Node teSubsystem2YangNode(org.onosproject.tetopology.management.api.node.NetworkNode teSubsystem) {
347 checkNotNull(teSubsystem, E_NULL_TE_SUBSYSTEM_NODE);
348
349 NodeId nodeId = NodeId.fromString(teSubsystem.nodeId().toString());
350 Node.NodeBuilder builder = DefaultNode.builder().nodeId(nodeId);
351
352 if (teSubsystem.getSupportingNodeIds() != null) {
353 List<SupportingNode> sNodes = Lists.newArrayList();
354 SupportingNode.SupportingNodeBuilder spNodeBuilder = DefaultSupportingNode
355 .builder();
356 for (NetworkNodeKey nodeKey : teSubsystem.getSupportingNodeIds()) {
357 sNodes.add(spNodeBuilder
358 .networkRef(NetworkId
359 .fromString(nodeKey.networkId().toString()))
360 .nodeRef(NodeId.fromString(nodeKey.nodeId().toString()))
361 .build());
362 }
363 builder = builder.supportingNode(sNodes);
364 }
365
366 if (teSubsystem.getTerminationPoints() != null) {
367 AugmentedNdNode.AugmentedNdNodeBuilder tpAugmentBuilder = DefaultAugmentedNdNode
368 .builder();
369 List<TerminationPoint> teSubsystemTeTp = teSubsystem
370 .getTerminationPoints();
371 for (TerminationPoint teTp : teSubsystemTeTp) {
372 tpAugmentBuilder.addToTerminationPoint(TerminationPointConverter
373 .teSubsystem2YangTerminationPoint(teTp));
374 }
375 builder.addYangAugmentedInfo(tpAugmentBuilder.build(),
376 AugmentedNdNode.class);
377 }
378
379 if (teSubsystem.getTe() != null) {
380 AugmentedNwNode.AugmentedNwNodeBuilder nodeAugmentBuilder = DefaultAugmentedNwNode
381 .builder();
382
383 TeNode teSubsystemTeNode = teSubsystem.getTe();
384
385 TeBuilder yangTeBuilder = DefaultTe.builder();
386
387 if (teSubsystemTeNode.teNodeId() != null) {
388 yangTeBuilder = yangTeBuilder.teNodeId(TeNodeId
389 .fromString(teSubsystemTeNode.teNodeId().toString()));
390 }
391
392 // Set configuration data
393 // Set state data
394 yangTeBuilder = yangTeBuilder.config(teNode2YangConfig(teSubsystemTeNode))
395 .state(teNode2YangState(teSubsystemTeNode));
396
397 if (teSubsystemTeNode.tunnelTerminationPoints() != null) {
398 for (org.onosproject.tetopology.management.api.node.TunnelTerminationPoint
399 teTunnelTp : teSubsystemTeNode.tunnelTerminationPoints()) {
400 yangTeBuilder = yangTeBuilder.addToTunnelTerminationPoint(teSubsystem2YangTtp(teTunnelTp));
401 }
402 }
403
404 nodeAugmentBuilder = nodeAugmentBuilder.te(yangTeBuilder.build());
405 builder.addYangAugmentedInfo(nodeAugmentBuilder.build(),
406 AugmentedNwNode.class);
407 }
408 return builder.build();
409 }
410
411 /**
412 * Node object conversion from YANG to TE Topology subsystem.
413 *
414 * @param yangNode YANG node object
415 * @param yangNetworkId YANG networkId object
416 * @return TE subsystem node object
417 */
418 public static org.onosproject.tetopology.management.api.node.NetworkNode
419 yang2TeSubsystemNode(Node yangNode, NetworkId yangNetworkId) {
420 checkNotNull(yangNode, E_NULL_YANG_NODE);
421
422 org.onosproject.tetopology.management.api.node.DefaultNetworkNode node =
423 new org.onosproject.tetopology.management.api.node.DefaultNetworkNode(
424 KeyId.keyId(yangNode.nodeId().uri().string()));
425
426 if (yangNode.supportingNode() != null) {
427 List<NetworkNodeKey> spNodes = Lists.newArrayList();
428 for (SupportingNode yangSpNode : yangNode.supportingNode()) {
429 NetworkNodeKey nodeKey = new NetworkNodeKey(KeyId.keyId(yangSpNode.nodeRef().uri().toString()),
430 KeyId.keyId(yangSpNode.networkRef().uri().toString()));
431 spNodes.add(nodeKey);
432 }
433 node.setSupportingNodeIds(spNodes);
434 }
435
436 if (yangNode.yangAugmentedInfoMap() != null
437 && !yangNode.yangAugmentedInfoMap().isEmpty()) {
438
439 AugmentedNdNode yangTpNodeAugment = (AugmentedNdNode) yangNode
440 .yangAugmentedInfo(AugmentedNdNode.class);
441 if (yang2TeSubsystemTpNodeAugment(yangTpNodeAugment) != null) {
442 node.setTerminationPoints(yang2TeSubsystemTpNodeAugment(yangTpNodeAugment));
443 }
444
445 AugmentedNwNode yangNodeAugment = (AugmentedNwNode) yangNode
446 .yangAugmentedInfo(AugmentedNwNode.class);
447 if (yangNodeAugment != null && yangNodeAugment.te() != null && yangNodeAugment.te().teNodeId() != null) {
448 Te yangNodeAugTe = yangNodeAugment.te();
449 TeNode teNode = yang2TeSubsystemNodeAugment(yangNodeAugTe, yangNetworkId, yangNode.nodeId());
450 node.setTe(teNode);
451 }
452 }
453
454 return node;
455 }
456
457 private static TeNode yang2TeSubsystemNodeConnectivityMatrix(TeNode teNode,
458 String networkId, String nodeId, List<ConnectivityMatrix> yangMatrix) {
459 List<org.onosproject.tetopology.management.api.node.ConnectivityMatrix> teCmList =
460 Lists.newArrayList();
461 for (ConnectivityMatrix cmYang : yangMatrix) {
462 Long id = cmYang.id();
463 TerminationPointKey from = new TerminationPointKey(
464 KeyId.keyId(networkId),
465 KeyId.keyId(nodeId),
466 KeyId.keyId(cmYang.from().tpRef().uri().toString()));
467 TerminationPointKey to = new TerminationPointKey(
468 KeyId.keyId(networkId),
469 KeyId.keyId(nodeId),
470 KeyId.keyId(cmYang.to().tpRef().uri().toString()));
471 boolean isAllowed = cmYang.isAllowed();
472 org.onosproject.tetopology.management.api.node.ConnectivityMatrix cmTe =
473 new org.onosproject.tetopology.management.api.node.ConnectivityMatrix(
474 id, from, to, isAllowed);
475 teCmList.add(cmTe);
476 }
477 teNode.setConnectivityMatrices(teCmList);
478 return teNode;
479 }
480
481 private static TeNode yang2TeSubsystemNodeUnderlayTopology(TeNode teNode,
482 UnderlayTopology ut) {
483 TeNetworkTopologyId underlayTopology =
484 new TeNetworkTopologyId(KeyId.keyId(ut.networkIdRef().uri().toString()),
485 new org.onosproject.tetopology.management.api.TeTopologyId(
486 ut.providerIdRef().uint32(),
487 ut.clientIdRef().uint32(),
488 ut.teTopologyIdRef().toString()));
489 teNode.setUnderlayTopology(underlayTopology);
490 return teNode;
491 }
492
493 private static TeNode yang2TeSubsystemTtp(TeNode teNode,
494 List<TunnelTerminationPoint> ttps) {
495 List<org.onosproject.tetopology.management.api.node.TunnelTerminationPoint> ttpTeList =
496 Lists.newArrayList();
497 for (TunnelTerminationPoint ttpYang : ttps) {
498 org.onosproject.tetopology.management.api.node.TunnelTerminationPoint ttpTe =
499 new org.onosproject.tetopology.management.api.node.TunnelTerminationPoint(
500 ttpYang.tunnelTpId());
501 ttpTe.setInterLayerLockId(ttpYang.config().interLayerLockId());
502 // FIXME: go through
503 // ttpYang.config().switchingCapability() and populate
504 // ttpTe.setSwitchingCapabilities(switchingCapabilities);
505 // FIXME: go through
506 // ttpYang.config().terminationCapability() and populate
507 // ttpTe.setTerminationCapability(terminationCapability);
508 ttpTeList.add(ttpTe);
509 }
510 teNode.setTunnelTerminationPoints(ttpTeList);
511
512 return teNode;
513 }
514
515 private static TeNode yang2TeSubsystemNodeAugment(Te yangNodeAugTe,
516 NetworkId yangNetworkId, NodeId yangNodeId) {
517 TeNode teNode = new TeNode(yangNodeAugTe.teNodeId().toString());
518 Config ynodeAugCfg = yangNodeAugTe.config();
519 if (ynodeAugCfg != null) {
520 TeNodeAttributes teNodeAttr = ynodeAugCfg.teNodeAttributes();
521 if (teNodeAttr != null) {
522 teNode.setAbstract(teNodeAttr.isAbstract());
523
524 if (teNodeAttr.adminStatus() != null) {
525 teNode.setAdminStatus(EnumConverter.yang2TeSubsystemAdminStatus(
526 ynodeAugCfg.teNodeAttributes().adminStatus()));
527 }
528
529 if (yangNodeAugTe.state() != null &&
530 yangNodeAugTe.state().operStatus() != null) {
531 teNode.setOpStatus(EnumConverter.yang2TeSubsystemOpStatus(
532 yangNodeAugTe.state().operStatus()));
533 }
534
535 if (teNodeAttr.connectivityMatrix() != null) {
536 teNode = yang2TeSubsystemNodeConnectivityMatrix(teNode,
537 yangNetworkId.uri().toString(),
538 yangNodeId.uri().toString(),
539 teNodeAttr.connectivityMatrix());
540 }
541
542 if (teNodeAttr.underlayTopology() != null) {
543 teNode = yang2TeSubsystemNodeUnderlayTopology(teNode,
544 teNodeAttr.underlayTopology());
545 }
546 }
547 }
548
549 if (yangNodeAugTe.tunnelTerminationPoint() != null) {
550 teNode = yang2TeSubsystemTtp(teNode, yangNodeAugTe.tunnelTerminationPoint());
551 }
552 return teNode;
553 }
554
555 private static List<TerminationPoint> yang2TeSubsystemTpNodeAugment(AugmentedNdNode yangTpNodeAugment) {
556 if (yangTpNodeAugment.terminationPoint() != null) {
557 List<TerminationPoint> teTpList = Lists.newArrayList();
558 for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology
559 .rev20151208.ietfnetworktopology.networks.network.node.augmentedndnode.TerminationPoint
560 yangTpnode : yangTpNodeAugment.terminationPoint()) {
561 teTpList.add(TerminationPointConverter.yang2teSubsystemTerminationPoint(yangTpnode));
562 }
563 return teTpList;
564 }
565 return null;
566 }
567}