2 * Copyright © 2018 Orange Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.transportpce.renderer.utils;
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.Collections;
13 import java.util.HashMap;
14 import java.util.List;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInputBuilder;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
19 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInputBuilder;
20 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
21 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.PathDescription;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.PathDescriptionBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.ServiceAEndBuilder;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.ServiceZEndBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyTHz;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ConnectionType;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.port.PortBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat;
30 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
31 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
33 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
34 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
35 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
36 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
37 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
38 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToABuilder;
39 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
40 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Link;
42 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.LinkBuilder;
43 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Node;
44 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.NodeBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
46 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder;
48 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeaderBuilder;
50 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.optical.renderer.nodes.Nodes;
51 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.optical.renderer.nodes.NodesBuilder;
52 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.optical.renderer.nodes.NodesKey;
53 import org.opendaylight.yangtools.yang.common.Uint32;
56 public final class ServiceDataUtils {
58 private ServiceDataUtils() {
62 public static Nodes createNode(String nodeId, String srcTp, String dstTp) {
63 return new NodesBuilder().setNodeId(nodeId).withKey(new NodesKey(nodeId)).setSrcTp(srcTp)
64 .setDestTp(dstTp).build();
67 public static ServicePathInput buildServicePathInputs(List<Nodes> nodes) {
68 ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder();
69 servicePathInputBuilder.setNodes(nodes);
70 servicePathInputBuilder.setServiceName("Service 1").setWaveNumber(Uint32.valueOf(20));
71 return servicePathInputBuilder.build();
74 public static ServicePathInput buildServicePathInputs() {
75 ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder();
76 List<Nodes> nodes = new ArrayList<>();
77 nodes.add(ServiceDataUtils.createNode("node1", "src", "dst"));
78 servicePathInputBuilder.setNodes(nodes);
79 servicePathInputBuilder.setServiceName("Service 1").setWaveNumber(Uint32.valueOf(20));
80 return servicePathInputBuilder.build();
83 public static RendererRollbackInput buildRendererRollbackInput() {
84 RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
85 rendererRollbackInputBuilder.setNodeInterface(Map.of());
86 return rendererRollbackInputBuilder.build();
89 public static ServiceImplementationRequestInput buildServiceImplementationRequestInputTerminationPointResource(
91 ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder()
92 .setServiceName("service 1").setPathDescription(createPathDescriptionTerminationPointResource(tpId))
93 .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build())
94 .setServiceAEnd(getServiceAEndBuild(tpId).build())
95 .setServiceZEnd(getServiceZEndBuild(tpId).build())
96 .setConnectionType(ConnectionType.Service);
97 return builder.build();
100 /*public static ServiceImplementationRequestInput buildServiceImplementationRequestInputInvalidResource() {
101 ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder()
102 .setServiceName("service 1").setPathDescription(createPathDescriptionInvalidResource())
103 .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build())
104 .setServiceAEnd(getServiceAEndBuild().build())
105 .setServiceZEnd(getServiceZEndBuild().build());
106 return builder.build();
109 public static ServiceImplementationRequestInput buildServiceImplementationRequestInputLinkResource() {
110 ServiceImplementationRequestInputBuilder builder = new ServiceImplementationRequestInputBuilder()
111 .setServiceName("service 1").setPathDescription(createPathDescriptionLinkResource())
112 .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build())
113 .setServiceAEnd(getServiceAEndBuild().build())
114 .setServiceZEnd(getServiceZEndBuild().build());
115 return builder.build();
118 private static PathDescription createPathDescriptionInvalidResource() {
119 Map<AToZKey,AToZ> atoZMap = new HashMap<>();
120 Node node = new NodeBuilder().setNodeId("XPONDER-1-2").build();
121 AToZ atoZ = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder()
122 .setResource(node).build()).build();
123 atoZMap.put(atoZ.key(),atoZ);
124 AToZDirection atozDirection = new AToZDirectionBuilder()
125 .setRate(Uint32.valueOf(20))
126 .setAToZWavelengthNumber(Uint32.valueOf(32))
129 Map<ZToAKey,ZToA> ztoAMap = new HashMap<>();
130 ZToA ztoA = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder()
131 .setResource(node).build()).build();
132 ztoAMap.put(ztoA.key(),ztoA);
133 ZToADirection ztoaDirection = new ZToADirectionBuilder()
134 .setRate(Uint32.valueOf(20))
135 .setZToAWavelengthNumber(Uint32.valueOf(20))
138 PathDescriptionBuilder builder = new PathDescriptionBuilder()
139 .setAToZDirection(atozDirection)
140 .setZToADirection(ztoaDirection);
141 return builder.build();
144 public static PathDescription createPathDescriptionTerminationPointResource(String tpId) {
145 Map<AToZKey,AToZ> atoZMap = new HashMap<>();
146 TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder();
147 List<String> nodeIds = Arrays.asList("XPONDER-1-2", "XPONDER-2-3");
149 for (String nodeId : nodeIds) {
150 for (String otherNodeId : nodeIds) {
151 TerminationPoint terminationPoint = terminationPointBuilder
152 .setTpNodeId(nodeId + '-'
154 .setTpId(tpId).build();
155 AToZ atoZ = new AToZBuilder().setId(atozId.toString())
156 .withKey(new AToZKey(atozId.toString())).setResource(new ResourceBuilder()
157 .setResource(terminationPoint).build()).build();
159 atoZMap.put(atoZ.key(),atoZ);
163 AToZDirection atozDirection = new AToZDirectionBuilder()
164 .setRate(Uint32.valueOf(20))
165 .setAToZWavelengthNumber(Uint32.valueOf(20))
166 .setAToZMinFrequency(FrequencyTHz.getDefaultInstance("196.125"))
167 .setAToZMaxFrequency(FrequencyTHz.getDefaultInstance("196.075"))
171 Collections.reverse(nodeIds);
172 Map<ZToAKey,ZToA> ztoAMap = new HashMap<>();
174 for (String nodeId : nodeIds) {
175 for (String otherNodeId : nodeIds) {
176 TerminationPoint terminationPoint = terminationPointBuilder
177 .setTpNodeId(nodeId + '-'
179 .setTpId(tpId).build();
180 ZToA ztoA = new ZToABuilder().setId(ztoaId.toString())
181 .withKey(new ZToAKey(ztoaId.toString())).setResource(new ResourceBuilder()
182 .setResource(terminationPoint).build()).build();
184 ztoAMap.put(ztoA.key(),ztoA);
187 ZToADirection ztoaDirection = new ZToADirectionBuilder()
188 .setRate(Uint32.valueOf(20))
189 .setZToAWavelengthNumber(Uint32.valueOf(20))
190 .setZToAMinFrequency(FrequencyTHz.getDefaultInstance("196.125"))
191 .setZToAMaxFrequency(FrequencyTHz.getDefaultInstance("196.075"))
194 PathDescriptionBuilder builder = new PathDescriptionBuilder()
195 .setAToZDirection(atozDirection)
196 .setZToADirection(ztoaDirection);
197 return builder.build();
200 private static PathDescription createPathDescriptionLinkResource() {
201 Map<AToZKey,AToZ> atoZMap = new HashMap<>();
202 Link link1 = new LinkBuilder().setLinkId("link 1").build();
203 Link link2 = new LinkBuilder().setLinkId("link 2").build();
204 AToZ atoZ = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder()
205 .setResource(link1).build()).build();
206 AToZ atoZ2 = new AToZBuilder().setId("1").withKey(new AToZKey("1")).setResource(new ResourceBuilder()
207 .setResource(link2).build()).build();
208 atoZMap.put(atoZ.key(),atoZ);
209 atoZMap.put(atoZ2.key(),atoZ2);
210 AToZDirection atozDirection = new AToZDirectionBuilder()
211 .setRate(Uint32.valueOf(20))
212 .setAToZWavelengthNumber(Uint32.valueOf(20))
215 Map<ZToAKey,ZToA> ztoAMap = new HashMap<>();
216 ZToA ztoA = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder()
217 .setResource(link1).build()).build();
218 ZToA ztoA2 = new ZToABuilder().setId("1").withKey(new ZToAKey("1")).setResource(new ResourceBuilder()
219 .setResource(link2).build()).build();
220 ztoAMap.put(ztoA.key(),ztoA);
221 ztoAMap.put(ztoA2.key(),ztoA2);
222 ZToADirection ztoaDirection = new ZToADirectionBuilder()
223 .setRate(Uint32.valueOf(20))
224 .setZToAWavelengthNumber(Uint32.valueOf(20))
227 PathDescriptionBuilder builder = new PathDescriptionBuilder()
228 .setAToZDirection(atozDirection)
229 .setZToADirection(ztoaDirection);
230 return builder.build();
233 public static ServiceAEndBuilder getServiceAEndBuild(String tpId) {
234 return new ServiceAEndBuilder()
235 .setClli("clli").setServiceFormat(ServiceFormat.OC)
236 .setServiceRate(Uint32.valueOf(1)).setNodeId("XPONDER-1-2-"
239 new TxDirectionBuilder()
240 .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
241 .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
242 .setPortSubSlot("port subslot").setPortType("port type").build())
245 new RxDirectionBuilder()
246 .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
247 .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
248 .setPortSubSlot("port subslot").setPortType("port type").build())
250 .setServiceRate(Uint32.valueOf(100))
251 .setServiceFormat(ServiceFormat.Ethernet);
254 public static ServiceZEndBuilder getServiceZEndBuild(String tpId) {
255 return new ServiceZEndBuilder()
256 .setClli("clli").setServiceFormat(ServiceFormat.OC)
257 .setServiceRate(Uint32.valueOf(1)).setNodeId("XPONDER-2-3-"
260 new TxDirectionBuilder()
261 .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
262 .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
263 .setPortSubSlot("port subslot").setPortType("port type").build())
266 new RxDirectionBuilder()
267 .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
268 .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
269 .setPortSubSlot("port subslot").setPortType("port type").build())