blob: 24518d8a49e97e446fd7a449828f28d73b4f2c78 [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.link.ExternalDomain;
24import org.onosproject.tetopology.management.api.link.LinkProtectionType;
25import org.onosproject.tetopology.management.api.link.NetworkLinkKey;
26import org.onosproject.tetopology.management.api.link.PathElement;
27import org.onosproject.tetopology.management.api.link.TeLink;
28import org.onosproject.tetopology.management.api.link.UnderlayBackupPath;
29import org.onosproject.tetopology.management.api.link.UnderlayPath;
30import org.onosproject.tetopology.management.api.node.TeNetworkTopologyId;
31import org.onosproject.tetopology.management.api.node.TerminationPointKey;
32import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworkId;
33import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NodeId;
34import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
35 .ietfnetworktopology.LinkId;
36import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
37 .ietfnetworktopology.TpId;
38import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
39 .ietfnetworktopology.networks.network.augmentedndnetwork.DefaultLink;
40import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
41 .ietfnetworktopology.networks.network.augmentedndnetwork.DefaultLink.LinkBuilder;
42import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
43 .ietfnetworktopology.networks.network.augmentedndnetwork.Link;
44import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
45 .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultDestination;
46import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
47 .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultSource;
48import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
49 .ietfnetworktopology.networks.network.augmentedndnetwork.link.DefaultSupportingLink;
50import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
51 .ietfnetworktopology.networks.network.augmentedndnetwork.link.Destination
52 .DestinationBuilder;
53import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
54 .ietfnetworktopology.networks.network.augmentedndnetwork.link.Source.SourceBuilder;
55import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
56 .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink;
57import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
58 .ietfnetworktopology.networks.network.augmentedndnetwork.link.SupportingLink
59 .SupportingLinkBuilder;
60import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
61 .ietftetopology.networks.augmentednwnetworks.te.templates.linktemplate
62 .telinkattributes.LinkProtectionTypeEnum;
63import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
64 .ietftetopology.networks.network.link.AugmentedNtLink;
65import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
66 .ietftetopology.networks.network.link.DefaultAugmentedNtLink;
67import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
68 .ietftetopology.networks.network.link.DefaultAugmentedNtLink.AugmentedNtLinkBuilder;
69import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
70 .ietftetopology.networks.network.link.augmentedntlink.DefaultTe;
71import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
72 .ietftetopology.networks.network.link.augmentedntlink.DefaultTe.TeBuilder;
73import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
74 .ietftetopology.networks.network.link.augmentedntlink.te.Config;
75import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
76.ietftetopology.networks.network.link.augmentedntlink.te.Config.ConfigBuilder;
77import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
78 .ietftetopology.networks.network.link.augmentedntlink.te.DefaultConfig;
79import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
80 .ietftetopology.networks.network.link.augmentedntlink.te.DefaultState;
81import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
82 .ietftetopology.networks.network.link.augmentedntlink.te.State;
83import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
84.ietftetopology.networks.network.link.augmentedntlink.te.State.StateBuilder;
85import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
86 .ietftetopology.networks.network.link.augmentedntlink.te.config.DefaultTeLinkAttributes;
87import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
88 .ietftetopology.networks.network.link.augmentedntlink.te.config.TeLinkAttributes;
89import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
90 .ietftetopology.networks.network.link.augmentedntlink.te.config.TeLinkAttributes
91 .TeLinkAttributesBuilder;
92import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
93 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
94 .DefaultExternalDomain;
95import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
96 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
97 .DefaultExternalDomain.ExternalDomainBuilder;
98import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
99 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes.DefaultTeSrlgs;
100import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
101 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes.DefaultUnderlay;
102import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
103 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
104 .DefaultUnreservedBandwidth;
105import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
106 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes.TeSrlgs
107 .TeSrlgsBuilder;
108import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
109 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes.Underlay;
110import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
111 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes.Underlay
112 .UnderlayBuilder;
113import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
114 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
115 .UnreservedBandwidth;
116import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
117 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
118 .UnreservedBandwidth.UnreservedBandwidthBuilder;
119import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
120 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
121 .underlay.DefaultUnderlayBackupPath;
122import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.ietftetopology
123 .networks.network.link.augmentedntlink.te.config.telinkattributes.underlay
124 .DefaultUnderlayBackupPath.UnderlayBackupPathBuilder;
125import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
126 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
127 .underlay.DefaultUnderlayPrimaryPath;
128import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
129 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
130 .underlay.DefaultUnderlayTrailDes.UnderlayTrailDesBuilder;
131import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
132 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
133 .underlay.DefaultUnderlayTrailSrc.UnderlayTrailSrcBuilder;
134import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
135 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
136 .underlay.UnderlayPrimaryPath;
137import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
138 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
139 .underlay.UnderlayPrimaryPath.UnderlayPrimaryPathBuilder;
140import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
141 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
142 .underlay.underlayprimarypath.DefaultPathElement;
143import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.Srlg;
144import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeLinkAccessType;
145import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeNodeId;
146import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTopologyId;
147import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705.ietftetypes.TeTpId;
148import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.types.rev20160705
149 .ietftetypes.telinkaccesstype.TeLinkAccessTypeEnum;
150
151import com.google.common.collect.Lists;
152
153/**
154 * The conversion functions.
155 */
156public final class LinkConverter {
157 private static final String
158 E_NULL_TELINK_UNDERLAY_PATH = "TeSubsystem link underlayPath object cannot be null";
159 private static final String
160 E_NULL_TELINK_DATA = "TeSubsystem teLink data cannot be null";
161 private static final String
162 E_NULL_TELINK = "TeSubsystem teLink object cannot be null";
163 private static final String
164 E_NULL_YANG_TELINK_CONFIG = "YANG telink config object cannot be null";
165 private static final String
166 E_NULL_YANG_TELINK = "YANG Link object cannot be null";
167
168 // no instantiation
169 private LinkConverter() {
170 }
171
172 private static UnderlayBuilder te2YangConfigUnderlayPrimaryPath(
173 UnderlayBuilder yangBuilder,
174 org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath) {
175 UnderlayPrimaryPathBuilder pathBuilder =
176 DefaultUnderlayPrimaryPath.builder();
177 if (tePath.pathElements() != null) {
178 for (PathElement pathElementTe : tePath.pathElements()) {
179 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
180 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
181 .config.telinkattributes.underlay.underlayprimarypath.PathElement
182 .PathElementBuilder pathElementYangBuilder = DefaultPathElement.builder();
183 // FIXME: pathElementTe does not have any getter or
184 // setter at the moment --> pathElementYangBuilder =
185 // pathElementYangBuilder.pathElementId(pathElementTe.getPathElementId());
186 pathBuilder = pathBuilder.addToPathElement(pathElementYangBuilder.build());
187 }
188 }
189 pathBuilder = pathBuilder.networkIdRef(NetworkId.fromString(
190 tePath.ref().getNetworkId().toString()))
191 .teTopologyIdRef(TeTopologyId.fromString(
192 tePath.ref().getTopologyId().topologyId()));
193 return yangBuilder.underlayPrimaryPath(pathBuilder.build());
194 }
195
196 private static UnderlayBuilder te2YangConfigUnderlayBackupPaths(
197 UnderlayBuilder yangBuilder,
198 List<org.onosproject.tetopology.management.api.link.UnderlayBackupPath> tePaths) {
199
200 for (UnderlayBackupPath tePath : tePaths) {
201 UnderlayBackupPathBuilder pathBuilder = DefaultUnderlayBackupPath.builder();
202 pathBuilder = pathBuilder.index(tePath.index());
203 pathBuilder = pathBuilder.networkIdRef(NetworkId.fromString(
204 tePath.ref().getNetworkId().toString()))
205 .teTopologyIdRef(TeTopologyId.fromString(
206 tePath.ref().getTopologyId().topologyId()));
207 for (PathElement backupPathElementTe : tePath.pathElements()) {
208 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
209 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
210 .config.telinkattributes.underlay.underlaybackuppath.PathElement
211 .PathElementBuilder elementBuilder =
212 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
213 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
214 .config.telinkattributes.underlay.underlaybackuppath.DefaultPathElement.builder();
215 // FIXME: backupPathElementTe does not have any
216 // getter or setter at the moment -->
217 // elementBuilder =
218 // elementBuilder.pathElementId(backupPathElementTe.getPathElementId());
219 pathBuilder = pathBuilder.addToPathElement(elementBuilder.build());
220 }
221 yangBuilder = yangBuilder.addToUnderlayBackupPath(pathBuilder.build());
222 }
223
224 return yangBuilder;
225 }
226
227 /**
228 * TE Link underlay path Config object conversion from TE Topology subsystem to YANG.
229 *
230 * @param tePath TE underlay path object
231 * @return Link underlay path Config YANG object
232 */
233 private static Underlay teSubsystem2YangConfigUnderlayPath(UnderlayPath tePath) {
234 checkNotNull(tePath, E_NULL_TELINK_UNDERLAY_PATH);
235 UnderlayBuilder builder =
236 DefaultUnderlay.builder().underlayProtectionType(tePath.protectionType());
237
238 if (tePath.primaryPath() != null) {
239 builder = te2YangConfigUnderlayPrimaryPath(builder, tePath.primaryPath());
240 }
241 if (tePath.trailSrc() != null) {
242 builder = builder.underlayTrailSrc(
243 new UnderlayTrailSrcBuilder()
244 .networkRef(NetworkId.fromString(
245 tePath.trailSrc().networkId().toString()))
246 .nodeRef(NodeId.fromString(
247 tePath.trailSrc().nodeId().toString()))
248 .tpRef(TpId.fromString(
249 tePath.trailSrc().tpId().toString()))
250 .build());
251 }
252 if (tePath.trailDes() != null) {
253 builder = builder.underlayTrailDes(
254 new UnderlayTrailDesBuilder()
255 .networkRef(NetworkId.fromString(
256 tePath.trailDes().networkId().toString()))
257 .nodeRef(NodeId.fromString(
258 tePath.trailDes().nodeId().toString()))
259 .tpRef(TpId.fromString(
260 tePath.trailDes().tpId().toString()))
261 .build());
262 }
263 if (tePath.backupPaths() != null) {
264 builder = te2YangConfigUnderlayBackupPaths(builder, tePath.backupPaths());
265 }
266
267 return builder.build();
268 }
269
270 private static org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
271 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
272 .state.telinkattributes.Underlay.UnderlayBuilder
273 te2YangStateUnderlayPrimaryPath(
274 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
275 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
276 .state.telinkattributes.Underlay.UnderlayBuilder yangBuilder,
277 org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath tePath) {
278 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
279 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
280 .underlay.UnderlayPrimaryPath.UnderlayPrimaryPathBuilder pathBuilder =
281 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
282 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
283 .underlay.DefaultUnderlayPrimaryPath.builder();
284 if (tePath.pathElements() != null) {
285 for (PathElement pathElementTe : tePath.pathElements()) {
286 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
287 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
288 .state.telinkattributes.underlay.underlayprimarypath.PathElement
289 .PathElementBuilder pathElementYangBuilder =
290 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
291 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
292 .state.telinkattributes.underlay.underlayprimarypath.DefaultPathElement
293 .builder();
294 // FIXME: pathElementTe does not have any getter or
295 // setter at the moment --> pathElementYangBuilder =
296 // pathElementYangBuilder.pathElementId(pathElementTe.getPathElementId());
297 pathBuilder = pathBuilder.addToPathElement(pathElementYangBuilder.build());
298 }
299 }
300 pathBuilder = pathBuilder.networkIdRef(NetworkId.fromString(
301 tePath.ref().getNetworkId().toString()))
302 .teTopologyIdRef(TeTopologyId.fromString(
303 tePath.ref().getTopologyId().topologyId()));
304 return yangBuilder.underlayPrimaryPath(pathBuilder.build());
305 }
306
307 private static org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
308 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
309 .state.telinkattributes.Underlay.UnderlayBuilder
310 te2YangStateUnderlayBackupPaths(
311 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
312 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
313 .state.telinkattributes.Underlay.UnderlayBuilder yangBuilder,
314 List<org.onosproject.tetopology.management.api.link.UnderlayBackupPath> tePaths) {
315
316 for (UnderlayBackupPath tePath : tePaths) {
317 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
318 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
319 .underlay.UnderlayBackupPath.UnderlayBackupPathBuilder
320 pathBuilder = org.onosproject.yang.gen.v1.urn.ietf.params.xml
321 .ns.yang.ietf.te.topology.rev20160708.ietftetopology.networks.network.link.augmentedntlink
322 .te.state.telinkattributes.underlay.DefaultUnderlayBackupPath
323 .builder();
324
325 pathBuilder = pathBuilder.index(tePath.index());
326 pathBuilder = pathBuilder.networkIdRef(NetworkId.fromString(
327 tePath.ref().getNetworkId().toString()))
328 .teTopologyIdRef(TeTopologyId.fromString(
329 tePath.ref().getTopologyId().topologyId()));
330 for (PathElement backupPathElementTe : tePath.pathElements()) {
331 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
332 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
333 .state.telinkattributes.underlay.underlaybackuppath.PathElement
334 .PathElementBuilder elementBuilder =
335 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
336 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
337 .state.telinkattributes.underlay.underlaybackuppath.DefaultPathElement.builder();
338 // FIXME: backupPathElementTe does not have any
339 // getter or setter at the moment -->
340 // elementBuilder =
341 // elementBuilder.pathElementId(backupPathElementTe.getPathElementId());
342 pathBuilder = pathBuilder.addToPathElement(elementBuilder.build());
343 }
344 yangBuilder = yangBuilder.addToUnderlayBackupPath(pathBuilder.build());
345 }
346
347 return yangBuilder;
348 }
349
350 /**
351 * TE Link underlay path State object conversion from TE Topology subsystem to YANG.
352 *
353 * @param tePath TE underlay object
354 * @return Link underlay path State YANG object
355 */
356 private static org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
357 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te
358 .state.telinkattributes.Underlay
359 teSubsystem2YangStateUnderlayPath(UnderlayPath tePath) {
360 checkNotNull(tePath, E_NULL_TELINK_UNDERLAY_PATH);
361
362 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
363 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
364 .Underlay.UnderlayBuilder builder =
365 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
366 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
367 .DefaultUnderlay.builder().underlayProtectionType(tePath.protectionType());
368
369 if (tePath.primaryPath() != null) {
370 builder = te2YangStateUnderlayPrimaryPath(builder, tePath.primaryPath());
371
372 }
373 if (tePath.trailSrc() != null) {
374 builder = builder.underlayTrailSrc(
375 new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te
376 .topology.rev20160708.ietftetopology.networks.network.link
377 .augmentedntlink.te.state.telinkattributes.underlay
378 .DefaultUnderlayTrailSrc.UnderlayTrailSrcBuilder()
379 .networkRef(NetworkId.fromString(
380 tePath.trailSrc().networkId().toString()))
381 .nodeRef(NodeId.fromString(
382 tePath.trailSrc().nodeId().toString()))
383 .tpRef(TpId.fromString(
384 tePath.trailSrc().tpId().toString()))
385 .build());
386 }
387 if (tePath.trailDes() != null) {
388 builder = builder.underlayTrailDes(
389 new org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te
390 .topology.rev20160708.ietftetopology.networks.network.link
391 .augmentedntlink.te.state.telinkattributes.underlay
392 .DefaultUnderlayTrailDes.UnderlayTrailDesBuilder()
393 .networkRef(NetworkId.fromString(
394 tePath.trailDes().networkId().toString()))
395 .nodeRef(NodeId.fromString(
396 tePath.trailDes().nodeId().toString()))
397 .tpRef(TpId.fromString(
398 tePath.trailDes().tpId().toString()))
399 .build());
400 }
401 if (tePath.backupPaths() != null) {
402 builder = te2YangStateUnderlayBackupPaths(builder, tePath.backupPaths());
403 }
404
405 return builder.build();
406 }
407
408 /**
409 * TE Link Config object conversion from TE Topology subsystem to YANG.
410 *
411 * @param teLink TE link object
412 * @return TE Link Config YANG object
413 */
414 private static Config teLink2YangConfig(TeLink teLink) {
415 checkNotNull(teLink, E_NULL_TELINK_DATA);
416
417 TeLinkAttributesBuilder attrBuilder = DefaultTeLinkAttributes.builder();
418 if (teLink.linkIndex() != null) {
419 attrBuilder = attrBuilder.linkIndex(teLink.linkIndex());
420 }
421 if (teLink.name() != null) {
422 attrBuilder = attrBuilder.name(teLink.name());
423 }
424 if (teLink.adminStatus() != null) {
425 attrBuilder = attrBuilder
426 .adminStatus(EnumConverter
427 .teSubsystem2YangAdminStatus(teLink
428 .adminStatus()));
429 }
430 if (teLink.accessType() != null) {
431 attrBuilder = attrBuilder
432 .accessType(teSubsystem2YangTeLinkAccess(teLink
433 .accessType()));
434 }
435 if (teLink.linkProtectionType() != null) {
436 attrBuilder = attrBuilder
437 .linkProtectionType(teSubsystem2YangLinkProtectionType(teLink
438 .linkProtectionType()));
439 }
440 if (teLink.maxLinkBandwidth() != null) {
441 attrBuilder = attrBuilder.maxLinkBandwidth(teLink.maxLinkBandwidth());
442 }
443 if (teLink.maxResvLinkBandwidth() != null) {
444 attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth());
445 }
446 attrBuilder = attrBuilder.teDefaultMetric(teLink.teDefaultMetric());
447 if (teLink.teSrlgs() != null) {
448 TeSrlgsBuilder teSrlgsBuilder = DefaultTeSrlgs.builder();
449 for (Long srlgLongVal : teLink.teSrlgs()) {
450 teSrlgsBuilder = teSrlgsBuilder.addToValue(new Srlg(srlgLongVal));
451 }
452 attrBuilder = attrBuilder.teSrlgs(teSrlgsBuilder.build());
453 }
454 attrBuilder = attrBuilder.isAbstract(teLink.isAbstract());
455 if (teLink.underlayPath() != null) {
456 attrBuilder = attrBuilder.underlay(
457 teSubsystem2YangConfigUnderlayPath(teLink.underlayPath()));
458 }
459 if (teLink.externalDomain() != null) {
460 ExternalDomainBuilder edBuilder =
461 DefaultExternalDomain.builder()
462 .plugId(teLink.externalDomain().plugId())
463 .remoteTeLinkTpId(TeTpId.fromString(
464 teLink.externalDomain().remoteTeLinkTpId().toString()))
465 .remoteTeNodeId(TeNodeId.fromString(
466 teLink.externalDomain().remoteTeNodeId().toString()));
467 attrBuilder = attrBuilder.externalDomain(edBuilder.build());
468 }
469
470 if (teLink.unreservedBandwidths() != null) {
471 for (org.onosproject.tetopology.management.api.link.UnreservedBandwidth unResBwTe :
472 teLink.unreservedBandwidths()) {
473 UnreservedBandwidthBuilder urBuilder =
474 DefaultUnreservedBandwidth.builder()
475 .bandwidth(unResBwTe.bandwidth())
476 .priority(unResBwTe.priority());
477 attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
478 }
479 }
480
481 ConfigBuilder yangConfigBuilder = DefaultConfig.builder()
482 .teLinkAttributes(attrBuilder.build());
483 return yangConfigBuilder.build();
484 }
485
486 private static LinkProtectionTypeEnum
487 teSubsystem2YangLinkProtectionType(LinkProtectionType linkProtectionType) {
488 switch (linkProtectionType) {
489 case ENHANCED:
490 return LinkProtectionTypeEnum.ENHANCED;
491 case EXTRA_TRAFFIC:
492 return LinkProtectionTypeEnum.EXTRA_TRAFFIC;
493 case SHARED:
494 return LinkProtectionTypeEnum.SHARED;
495 case UNPROTECTED:
496 return LinkProtectionTypeEnum.UNPROTECTED;
497 case YANGAUTOPREFIX1_FOR_1:
498 return LinkProtectionTypeEnum.YANGAUTOPREFIX1_FOR_1;
499 case YANGAUTOPREFIX1_PLUS_1:
500 return LinkProtectionTypeEnum.YANGAUTOPREFIX1_PLUS_1;
501 default:
502 return null;
503 }
504 }
505
506 private static TeLinkAccessType teSubsystem2YangTeLinkAccess(
507 org.onosproject.tetopology.management.api.link.TeLinkAccessType accessType) {
508 switch (accessType) {
509 case MULTI_ACCESS:
510 return TeLinkAccessType.of(TeLinkAccessTypeEnum.MULTI_ACCESS);
511 case POINT_TO_POINT:
512 return TeLinkAccessType.of(TeLinkAccessTypeEnum.POINT_TO_POINT);
513 default:
514 return null;
515 }
516 }
517
518 /**
519 * TE Link State object conversion from TE Topology subsystem to YANG.
520 *
521 * @param teLink TE link object
522 * @return TE Link State YANG object
523 */
524 private static State teLink2YangState(TeLink teLink) {
525 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
526 .ietftetopology.networks.network.link.augmentedntlink.te.state.TeLinkAttributes
527 .TeLinkAttributesBuilder attrBuilder =
528 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
529 .ietftetopology.networks.network.link.augmentedntlink.te.state.DefaultTeLinkAttributes
530 .builder()
531 .teDefaultMetric(teLink.teDefaultMetric())
532 .isAbstract(teLink.isAbstract());
533 if (teLink.linkIndex() != null) {
534 attrBuilder = attrBuilder.linkIndex(teLink.linkIndex());
535 }
536 if (teLink.name() != null) {
537 attrBuilder = attrBuilder.name(teLink.name());
538 }
539 if (teLink.adminStatus() != null) {
540 attrBuilder = attrBuilder
541 .adminStatus(EnumConverter
542 .teSubsystem2YangAdminStatus(teLink
543 .adminStatus()));
544 }
545 if (teLink.accessType() != null) {
546 attrBuilder = attrBuilder
547 .accessType(teSubsystem2YangTeLinkAccess(teLink
548 .accessType()));
549 }
550 if (teLink.linkProtectionType() != null) {
551 attrBuilder = attrBuilder
552 .linkProtectionType(teSubsystem2YangStateLinkProtectionType(teLink
553 .linkProtectionType()));
554 }
555 if (teLink.maxLinkBandwidth() != null) {
556 attrBuilder = attrBuilder.maxLinkBandwidth(teLink.maxLinkBandwidth());
557 }
558 if (teLink.maxResvLinkBandwidth() != null) {
559 attrBuilder = attrBuilder.maxResvLinkBandwidth(teLink.maxResvLinkBandwidth());
560 }
561 if (teLink.teSrlgs() != null) {
562 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
563 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
564 .TeSrlgs.TeSrlgsBuilder srlgsBuilder =
565 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
566 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
567 .DefaultTeSrlgs.builder();
568 for (Long srlgLongVal : teLink.teSrlgs()) {
569 srlgsBuilder = srlgsBuilder.addToValue(new Srlg(srlgLongVal));
570 }
571 attrBuilder = attrBuilder.teSrlgs(srlgsBuilder.build());
572 }
573 if (teLink.underlayPath() != null) {
574 attrBuilder = attrBuilder.underlay(teSubsystem2YangStateUnderlayPath(teLink.underlayPath()));
575 }
576 if (teLink.externalDomain() != null) {
577 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
578 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
579 .ExternalDomain.ExternalDomainBuilder edBuilder =
580 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
581 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
582 .DefaultExternalDomain.builder()
583 .plugId(teLink.externalDomain().plugId())
584 .remoteTeLinkTpId(TeTpId.fromString(
585 teLink.externalDomain().remoteTeLinkTpId().toString()))
586 .remoteTeNodeId(TeNodeId.fromString(
587 teLink.externalDomain().remoteTeNodeId().toString()));
588 attrBuilder = attrBuilder.externalDomain(edBuilder.build());
589 }
590 if (teLink.unreservedBandwidths() != null) {
591 for (org.onosproject.tetopology.management.api.link.UnreservedBandwidth unResBwTe :
592 teLink.unreservedBandwidths()) {
593 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
594 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
595 .UnreservedBandwidth.UnreservedBandwidthBuilder urBuilder =
596 org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
597 .ietftetopology.networks.network.link.augmentedntlink.te.state.telinkattributes
598 .DefaultUnreservedBandwidth.builder()
599 .bandwidth(unResBwTe.bandwidth())
600 .priority(unResBwTe.priority());
601 attrBuilder = attrBuilder.addToUnreservedBandwidth(urBuilder.build());
602 }
603 }
604
605 StateBuilder yangStateBuilder = DefaultState.builder()
606 .teLinkAttributes(attrBuilder.build());
607 if (teLink.opStatus() != null) {
608 yangStateBuilder = yangStateBuilder
609 .operStatus(EnumConverter
610 .teSubsystem2YangOperStatus(teLink
611 .opStatus()));
612 }
613
614 return yangStateBuilder.build();
615 }
616
617 private static org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
618 rev20160708.ietftetopology.networks.network.link.augmentedntlink.te.state.informationsourceentry.
619 LinkProtectionTypeEnum teSubsystem2YangStateLinkProtectionType(LinkProtectionType linkProtectionType) {
620 switch (linkProtectionType) {
621 case ENHANCED:
622 return org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
623 rev20160708.ietftetopology.networks.network.link.augmentedntlink.te.state.informationsourceentry.
624 LinkProtectionTypeEnum.ENHANCED;
625 case EXTRA_TRAFFIC:
626 return org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
627 rev20160708.ietftetopology.networks.network.link.augmentedntlink.te.state.informationsourceentry.
628 LinkProtectionTypeEnum.EXTRA_TRAFFIC;
629 case SHARED:
630 return org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
631 rev20160708.ietftetopology.networks.network.link.augmentedntlink.te.state.informationsourceentry.
632 LinkProtectionTypeEnum.SHARED;
633 case UNPROTECTED:
634 return org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
635 rev20160708.ietftetopology.networks.network.link.augmentedntlink.te.state.informationsourceentry.
636 LinkProtectionTypeEnum.UNPROTECTED;
637 case YANGAUTOPREFIX1_FOR_1:
638 return org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
639 rev20160708.ietftetopology.networks.network.link.augmentedntlink.te.state.informationsourceentry.
640 LinkProtectionTypeEnum.YANGAUTOPREFIX1_FOR_1;
641 case YANGAUTOPREFIX1_PLUS_1:
642 return org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.
643 rev20160708.ietftetopology.networks.network.link.augmentedntlink.te.state.informationsourceentry.
644 LinkProtectionTypeEnum.YANGAUTOPREFIX1_PLUS_1;
645 default:
646 return null;
647 }
648 }
649
650 /**
651 * Link object conversion from TE Topology subsystem to YANG.
652 *
653 * @param teLink TE subsystem link object
654 * @return YANG link object
655 */
656 public static Link teSubsystem2YangLink(
657 org.onosproject.tetopology.management.api.link.NetworkLink teLink) {
658 checkNotNull(teLink, E_NULL_TELINK);
659
660 LinkId linkId = LinkId.fromString(teLink.linkId().toString());
661 LinkBuilder builder = DefaultLink.builder().linkId(linkId);
662 if (teLink.getSupportingLinkIds() != null) {
663 List<SupportingLink> slinks = Lists.newArrayList();
664 SupportingLinkBuilder spLinkBuilder = DefaultSupportingLink.builder();
665 for (NetworkLinkKey linkKey : teLink.getSupportingLinkIds()) {
666 slinks.add(spLinkBuilder.networkRef(NetworkId.fromString(
667 linkKey.networkId().toString()))
668 .linkRef(LinkId.fromString(
669 linkKey.linkId().toString()))
670 .build());
671 }
672 builder = builder.supportingLink(slinks);
673 }
674 if (teLink.getSource() != null) {
675 SourceBuilder sourceBuilder = DefaultSource
676 .builder()
677 .sourceNode(NodeId.fromString(
678 teLink.getSource().nodeId().toString()))
679 .sourceTp(TpId.fromString(
680 teLink.getSource().tpId().toString()));
681 builder = builder.source(sourceBuilder.build());
682 }
683 if (teLink.getDestination() != null) {
684 DestinationBuilder destBuilder = DefaultDestination
685 .builder()
686 .destNode(NodeId.fromString(
687 teLink.getDestination().nodeId().toString()))
688 .destTp(TpId.fromString(
689 teLink.getDestination().tpId().toString()));
690 builder = builder.destination(destBuilder.build());
691 }
692
693 if (teLink.getTe() != null) {
694 TeLink teData = teLink.getTe();
695 TeBuilder yangTeBuilder = DefaultTe.builder()
696 .config(teLink2YangConfig(teData))
697 .state(teLink2YangState(teData));
698 AugmentedNtLinkBuilder linkAugmentBuilder =
699 DefaultAugmentedNtLink.builder()
700 .te(yangTeBuilder.build());
701 builder.addYangAugmentedInfo(linkAugmentBuilder.build(), AugmentedNtLink.class);
702 }
703
704 return builder.build();
705 }
706
707 private static org.onosproject.tetopology.management.api.link.UnderlayPath
708 yang2TeSubsystemUnderlayPrimaryPath(
709 org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay,
710 UnderlayPrimaryPath yangpath) {
711 org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath teUnderlayPrimaryPath =
712 new org.onosproject.tetopology.management.api.link.UnderlayPrimaryPath();
713 teUnderlayPrimaryPath.setRef(new TeNetworkTopologyId(KeyId.keyId(
714 yangpath.networkIdRef().toString()),
715 new org.onosproject.tetopology.management.api.TeTopologyId(
716 yangpath.providerIdRef().uint32(),
717 yangpath.clientIdRef().uint32(),
718 yangpath.teTopologyIdRef().toString())));
719
720 List<PathElement> pathElementList = Lists.newArrayList();
721 for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
722 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
723 .underlay.underlayprimarypath.PathElement pathElementConfigYang :
724 yangpath.pathElement()) {
725 //PathElement tePathElement = new PathElement();
726 // FIXME: tePathElement does not have any getter
727 // or setter at the moment -->
728 // tePathElement.set...
729 // TODO: construct the tePathElement object
730 // properly using pathElementConfigYang
731 //pathElementList.add(tePathElement);
732 }
733 teUnderlayPrimaryPath.setPathElement(pathElementList);
734 teUnderlay.setPrimaryPath(teUnderlayPrimaryPath);
735
736 return teUnderlay;
737 }
738
739 private static org.onosproject.tetopology.management.api.link.UnderlayPath
740 yang2TeSubsystemUnderlayBackupPaths(
741 org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay,
742 List<org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te
743 .topology.rev20160708.ietftetopology.networks.network.link
744 .augmentedntlink.te.config.telinkattributes.underlay
745 .UnderlayBackupPath> yangpaths) {
746 List<UnderlayBackupPath> underlayBackupPathsList = Lists.newArrayList();
747 for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
748 .ietftetopology.networks.network.link.augmentedntlink.te.config.telinkattributes
749 .underlay.UnderlayBackupPath yangConfig : yangpaths) {
750 UnderlayBackupPath ubp = new UnderlayBackupPath();
751 ubp.setIndex(yangConfig.index());
752 ubp.setRef(new TeNetworkTopologyId(KeyId.keyId(yangConfig.networkIdRef().toString()),
753 new org.onosproject.tetopology.management.api.TeTopologyId(
754 yangConfig.providerIdRef().uint32(),
755 yangConfig.clientIdRef().uint32(),
756 yangConfig.teTopologyIdRef().toString()
757 )));
758 List<PathElement> backupPathElementList = Lists.newArrayList();
759 for (org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology
760 .rev20160708.ietftetopology.networks.network.link.augmentedntlink.te.config
761 .telinkattributes.underlay.underlaybackuppath.PathElement
762 pathElementBackupYang : yangConfig.pathElement()) {
763 //PathElement tePathElementBackup = new PathElement();
764 // FIXME: tePathElement does not have any
765 // getter or setter at the moment -->
766 // tePathElement.set...
767 // TODO: construct the tePathElement object
768 // properly using pathElementBackupYang
769 //backupPathElementList.add(tePathElementBackup);
770 }
771 ubp.setPathElement(backupPathElementList);
772 }
773 teUnderlay.setBackupPath(underlayBackupPathsList);
774
775 return teUnderlay;
776 }
777
778 /**
779 * TE Link underlay path Config object conversion from YANG to TE Topology subsystem.
780 *
781 * @param yangLinkAtrr YANG link Config YANG object
782 * @return teSubsystem TE underlay path object
783 */
784 private static org.onosproject.tetopology.management.api.link.UnderlayPath
785 yang2TeSubsystemUnderlayPath(TeLinkAttributes yangLinkAtrr) {
786 checkNotNull(yangLinkAtrr, E_NULL_YANG_TELINK_CONFIG);
787
788 org.onosproject.tetopology.management.api.link.UnderlayPath teUnderlay =
789 new org.onosproject.tetopology.management.api.link.UnderlayPath();
790
791 teUnderlay.setProtectionType(yangLinkAtrr.underlay().underlayProtectionType());
792
793 if (yangLinkAtrr.underlay().underlayPrimaryPath() != null) {
794 teUnderlay = yang2TeSubsystemUnderlayPrimaryPath(teUnderlay,
795 yangLinkAtrr.underlay().underlayPrimaryPath());
796 }
797
798 if (yangLinkAtrr.underlay().underlayBackupPath() != null) {
799 teUnderlay = yang2TeSubsystemUnderlayBackupPaths(teUnderlay,
800 yangLinkAtrr.underlay().underlayBackupPath());
801 }
802
803 if (yangLinkAtrr.underlay().underlayTrailSrc() != null) {
804 teUnderlay.setTrailSrc(new TerminationPointKey(
805 KeyId.keyId(yangLinkAtrr.underlay().underlayTrailSrc()
806 .networkRef().uri().toString()),
807 KeyId.keyId(yangLinkAtrr.underlay().underlayTrailSrc()
808 .nodeRef().uri().toString()),
809 KeyId.keyId(yangLinkAtrr.underlay().underlayTrailSrc()
810 .tpRef().uri().toString())));
811 }
812
813 if (yangLinkAtrr.underlay().underlayTrailDes() != null) {
814 teUnderlay.setTrailDes(new TerminationPointKey(
815 KeyId.keyId(yangLinkAtrr.underlay().underlayTrailDes()
816 .networkRef().uri().toString()),
817 KeyId.keyId(yangLinkAtrr.underlay().underlayTrailDes()
818 .nodeRef().uri().toString()),
819 KeyId.keyId(yangLinkAtrr.underlay().underlayTrailDes()
820 .tpRef().uri().toString())));
821 }
822
823 return teUnderlay;
824 }
825
826 private static TeLink yang2TeLinkAttributes(TeLinkAttributes yangLinkAtrr,
827 State opState) {
828 TeLink te = new TeLink(yangLinkAtrr.linkIndex());
829 if (yangLinkAtrr.name() != null) {
830 te.setName(yangLinkAtrr.name());
831 }
832 if (yangLinkAtrr.adminStatus() != null) {
833 te.setAdminStatus(EnumConverter.yang2TeSubsystemAdminStatus(
834 yangLinkAtrr.adminStatus()));
835 }
836 if (opState != null && opState.operStatus() != null) {
837 te.setOpStatus(EnumConverter.yang2TeSubsystemOpStatus(
838 opState.operStatus()));
839 }
840 if (yangLinkAtrr.accessType() != null) {
841 te.setAccessType(yang2TeSubsystemAccessType(
842 yangLinkAtrr.accessType()));
843 }
844 if (yangLinkAtrr.linkProtectionType() != null) {
845 te.setLinkProtectionType(yang2TeSubsystemLinkProtectionType(
846 yangLinkAtrr.linkProtectionType()));
847 }
848 if (yangLinkAtrr.maxLinkBandwidth() != null) {
849 te.setMaxLinkBandwidth(yangLinkAtrr.maxLinkBandwidth());
850 }
851 if (yangLinkAtrr.maxResvLinkBandwidth() != null) {
852 te.setMaxResvLinkBandwidth(yangLinkAtrr.maxResvLinkBandwidth());
853 }
854 te.setTeDefaultMetric(yangLinkAtrr.teDefaultMetric());
855 te.setIsAbstract(yangLinkAtrr.isAbstract());
856 if (yangLinkAtrr.teSrlgs() != null) {
857 List<Long> srlgs = Lists.newArrayList();
858 for (Srlg srlgConfigYang : yangLinkAtrr.teSrlgs().value()) {
859 srlgs.add(srlgConfigYang.uint32());
860 }
861 te.setTeSrlgs(srlgs);
862 }
863 if (yangLinkAtrr.externalDomain() != null) {
864 te.setExternalDomain(new ExternalDomain(
865 KeyId.keyId(yangLinkAtrr.externalDomain()
866 .remoteTeNodeId().toString()),
867 KeyId.keyId(yangLinkAtrr.externalDomain()
868 .remoteTeLinkTpId().toString()),
869 yangLinkAtrr.externalDomain().plugId()));
870 }
871 if (yangLinkAtrr.underlay() != null) {
872 te.setUnderlayPath(yang2TeSubsystemUnderlayPath(yangLinkAtrr));
873 }
874 if (yangLinkAtrr.unreservedBandwidth() != null) {
875 List<org.onosproject.tetopology.management.api.link.UnreservedBandwidth>
876 unreservedBandwidths = Lists.newArrayList();
877 for (UnreservedBandwidth urBwYang : yangLinkAtrr.unreservedBandwidth()) {
878 org.onosproject.tetopology.management.api.link.UnreservedBandwidth unResBw =
879 new org.onosproject.tetopology.management.api.link.UnreservedBandwidth(
880 urBwYang.priority(),
881 urBwYang.bandwidth());
882 unreservedBandwidths.add(unResBw);
883 }
884 te.setUnreservedBandwidths(unreservedBandwidths);
885 }
886 return te;
887 }
888
889 private static LinkProtectionType
890 yang2TeSubsystemLinkProtectionType(LinkProtectionTypeEnum linkProtectionType) {
891 switch (linkProtectionType) {
892 case ENHANCED:
893 return LinkProtectionType.ENHANCED;
894 case EXTRA_TRAFFIC:
895 return LinkProtectionType.EXTRA_TRAFFIC;
896 case SHARED:
897 return LinkProtectionType.SHARED;
898 case UNPROTECTED:
899 return LinkProtectionType.UNPROTECTED;
900 case YANGAUTOPREFIX1_FOR_1:
901 return LinkProtectionType.YANGAUTOPREFIX1_FOR_1;
902 case YANGAUTOPREFIX1_PLUS_1:
903 return LinkProtectionType.YANGAUTOPREFIX1_PLUS_1;
904 default:
905 return null;
906 }
907 }
908
909 private static org.onosproject.tetopology.management.api.link.TeLinkAccessType
910 yang2TeSubsystemAccessType(TeLinkAccessType accessType) {
911 switch (accessType.enumeration()) {
912 case MULTI_ACCESS:
913 return org.onosproject.tetopology.management.api.link.TeLinkAccessType.MULTI_ACCESS;
914 case POINT_TO_POINT:
915 return org.onosproject.tetopology.management.api.link.TeLinkAccessType.POINT_TO_POINT;
916 default:
917 return null;
918 }
919 }
920
921 /**
922 * Link object conversion from YANG to TE Topology subsystem.
923 *
924 * @param yangLink YANG link object
925 * @param networkId YANG networkId object
926 * @return TE subsystem link object
927 */
928 public static org.onosproject.tetopology.management.api.link.NetworkLink
929 yang2TeSubsystemLink(Link yangLink, NetworkId networkId) {
930 checkNotNull(yangLink, E_NULL_YANG_TELINK);
931
932 org.onosproject.tetopology.management.api.link.DefaultNetworkLink link =
933 new org.onosproject.tetopology.management.api.link.DefaultNetworkLink(
934 KeyId.keyId(yangLink.linkId().uri().toString()));
935
936 if (yangLink.supportingLink() != null) {
937 List<NetworkLinkKey> spLinkIds = Lists.newArrayList();
938 for (SupportingLink yangSpLink : yangLink.supportingLink()) {
939 NetworkLinkKey linkKey = new NetworkLinkKey(KeyId.keyId(yangSpLink.networkRef().uri().toString()),
940 KeyId.keyId(yangSpLink.linkRef().uri().toString()));
941 spLinkIds.add(linkKey);
942 }
943 link.setSupportingLinkIds(spLinkIds);
944 }
945
946 if (yangLink.source() != null) {
947 TerminationPointKey source = new TerminationPointKey(
948 KeyId.keyId(networkId.uri().toString()),
949 KeyId.keyId(yangLink.source().sourceNode().uri().toString()),
950 KeyId.keyId(yangLink.source().sourceTp().uri().toString()));
951 link.setSource(source);
952 }
953
954 if (yangLink.destination() != null) {
955 TerminationPointKey destination = new TerminationPointKey(
956 KeyId.keyId(networkId.uri().toString()),
957 KeyId.keyId(yangLink.destination().destNode().uri().toString()),
958 KeyId.keyId(yangLink.destination().destTp().uri().toString()));
959 link.setDestination(destination);
960 }
961
962 if (yangLink.yangAugmentedInfoMap() != null && !yangLink.yangAugmentedInfoMap().isEmpty()) {
963
964 AugmentedNtLink yangLinkAugment =
965 (AugmentedNtLink) yangLink.yangAugmentedInfo(AugmentedNtLink.class);
966 if (yangLinkAugment != null &&
967 yangLinkAugment.te() != null &&
968 yangLinkAugment.te().config() != null) {
969 TeLinkAttributes yangLinkAtrr =
970 yangLinkAugment.te().config().teLinkAttributes();
971 if (yangLinkAtrr != null && yangLinkAtrr.linkIndex() != null) {
972 TeLink te = yang2TeLinkAttributes(yangLinkAtrr, yangLinkAugment.te().state());
973 link.setTe(te);
974 }
975 }
976 }
977 return link;
978 }
979
980}