2 * Copyright © 2017 AT&T, 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.pce;
10 import com.google.common.collect.ImmutableList;
12 import java.util.ArrayList;
13 import java.util.List;
16 import org.opendaylight.transportpce.common.ResponseCodes;
17 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.AToZDirectionBuilder;
18 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ZToADirectionBuilder;
19 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZ;
20 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZBuilder;
21 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZKey;
22 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToA;
23 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToABuilder;
24 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToAKey;
25 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.Resource;
26 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.ResourceBuilder;
27 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.LinkBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.NodeBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.TerminationPoint;
30 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.TerminationPointBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.link.LinkIdentifierBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.node.NodeIdentifierBuilder;
33 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.resource.resource.termination.point.TerminationPointIdentifierBuilder;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
38 public class PcePathDescription {
40 private static final Logger LOG = LoggerFactory.getLogger(PceCalculation.class);
42 private List<PceLink> pathAtoZ = null;
45 public PceResult getReturnStructure() {
49 private Map<LinkId, PceLink> allPceLinks = null;
51 private List<PceLink> pathZtoA = null;
53 public PcePathDescription(List<PceLink> pathAtoZ, Map<LinkId, PceLink> allPceLinks, PceResult rc) {
55 this.allPceLinks = allPceLinks;
56 this.pathAtoZ = pathAtoZ;
60 public PceResult buildDescriptions() {
61 LOG.info("In buildDescriptions: AtoZ {}", pathAtoZ.toString());
62 List<AToZ> atozList = new ArrayList<AToZ>();
63 if (pathAtoZ == null) {
64 rc.setRC(ResponseCodes.RESPONSE_FAILED);
65 LOG.error("In buildDescriptions: there is empty AtoZ path");
69 buildAtoZ(atozList, pathAtoZ);
71 rc.setAtoZDirection(new AToZDirectionBuilder().setRate(rc.getRate())
72 .setAToZWavelengthNumber(rc.getResultWavelength()).setAToZ(atozList).build());
74 pathZtoA = ImmutableList.copyOf(pathAtoZ).reverse();
75 LOG.info("In buildDescriptions: ZtoA {}", pathZtoA.toString());
77 List<ZToA> ztoaList = new ArrayList<ZToA>();
78 if (pathZtoA == null) {
79 rc.setRC(ResponseCodes.RESPONSE_FAILED);
80 LOG.error("In buildDescriptions: there is empty ZtoA path");
83 buildZtoA(ztoaList, pathZtoA);
85 rc.setZtoADirection(new ZToADirectionBuilder().setRate(rc.getRate())
86 .setZToAWavelengthNumber(rc.getResultWavelength()).setZToA(ztoaList).build());
91 private void buildAtoZ(List<AToZ> etoeList, List<PceLink> path) {
94 PceLink lastLink = null;
95 AToZ lastResource = null;
97 // build A side Client TP
98 String tpName = path.get(0).getClient();
99 String xname = path.get(0).getSourceId().getValue();
100 TerminationPoint stp = new TerminationPointBuilder()
101 .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder()
102 .setNodeId(xname).setTpId(tpName).build())
105 AToZKey clientKey = new AToZKey(index.toString());
106 Resource clientResource = new ResourceBuilder().setResource(stp).build();
107 AToZ firstResource = new AToZBuilder().setId(tpName).setKey(clientKey).setResource(clientResource).build();
108 etoeList.add(firstResource);
112 for (PceLink pcelink : path) {
114 String srcName = pcelink.getSourceId().getValue();
117 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce
118 .resource.resource.resource.Node sourceNode = new NodeBuilder()
119 .setNodeIdentifier(new NodeIdentifierBuilder().setNodeId(srcName).build())
123 AToZKey sourceKey = new AToZKey(index.toString());
124 Resource nodeResource1 = new ResourceBuilder().setResource(sourceNode).build();
125 AToZ srcResource = new AToZBuilder().setId(srcName).setKey(sourceKey).setResource(nodeResource1).build();
127 etoeList.add(srcResource);
130 tpName = pcelink.getSourceTP().toString();
131 stp = new TerminationPointBuilder()
132 .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder()
133 .setNodeId(srcName).setTpId(tpName).build())
137 AToZKey srcTPKey = new AToZKey(index.toString());// tpName);
138 Resource tpResource1 = new ResourceBuilder().setResource(stp).build();
139 AToZ stpResource = new AToZBuilder().setId(tpName).setKey(srcTPKey).setResource(tpResource1).build();
141 etoeList.add(stpResource);
143 String linkName = pcelink.getLinkId().getValue();
145 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce
146 .resource.resource.resource.Link atozLink = new LinkBuilder()
147 .setLinkIdentifier(new LinkIdentifierBuilder().setLinkId(linkName).build())
151 AToZKey linkKey = new AToZKey(index.toString());
152 Resource nodeResource2 = new ResourceBuilder().setResource(atozLink).build();
153 AToZ linkResource = new AToZBuilder().setId(linkName).setKey(linkKey).setResource(nodeResource2).build();
155 etoeList.add(linkResource);
157 String destName = pcelink.getDestId().getValue();
159 tpName = pcelink.getDestTP().toString();
160 TerminationPoint dtp = new TerminationPointBuilder()
161 .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder()
162 .setNodeId(destName).setTpId(tpName).build())
166 AToZKey destTPKey = new AToZKey(index.toString());
167 Resource tpResource2 = new ResourceBuilder().setResource(dtp).build();
168 AToZ ttpResource = new AToZBuilder().setId(tpName).setKey(destTPKey).setResource(tpResource2).build();
170 etoeList.add(ttpResource);
172 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce
173 .resource.resource.resource.Node targetNode = new NodeBuilder()
174 .setNodeIdentifier(new NodeIdentifierBuilder().setNodeId(destName).build())
178 AToZKey targetKey = new AToZKey(index.toString());
179 Resource nodeResource3 = new ResourceBuilder().setResource(targetNode).build();
180 lastResource = new AToZBuilder().setId(destName).setKey(targetKey).setResource(nodeResource3).build();
185 etoeList.add(lastResource);
187 // build Z side Client TP
188 tpName = lastLink.getClient();
189 xname = lastLink.getDestId().getValue();
190 stp = new TerminationPointBuilder()
191 .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder()
192 .setNodeId(xname).setTpId(tpName).build())
197 clientKey = new AToZKey(index.toString());
198 clientResource = new ResourceBuilder().setResource(stp).build();
199 lastResource = new AToZBuilder().setId(tpName).setKey(clientKey).setResource(clientResource).build();
200 etoeList.add(lastResource);
204 private void buildZtoA(List<ZToA> etoelist, List<PceLink> path) {
206 PceLink lastLink = null;
207 ZToA lastResource = null;
209 // build Z size Client TP
210 PceLink pcelink = allPceLinks.get(path.get(0).getOppositeLink());
211 String tpName = pcelink.getClient();
212 String xname = pcelink.getSourceId().getValue();
213 TerminationPoint stp = new TerminationPointBuilder()
214 .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder()
215 .setNodeId(xname).setTpId(tpName).build())
218 ZToAKey clientKey = new ZToAKey(index.toString());
219 Resource clientResource = new ResourceBuilder().setResource(stp).build();
220 ZToA firstResource = new ZToABuilder().setId(tpName).setKey(clientKey).setResource(clientResource).build();
221 etoelist.add(firstResource);
224 for (PceLink pcelinkAtoZ : path) {
226 pcelink = allPceLinks.get(pcelinkAtoZ.getOppositeLink());
227 LOG.debug("link to oppsite: {} to {}", pcelinkAtoZ.toString(), pcelink.toString());
229 String srcName = pcelink.getSourceId().getValue();
233 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce
234 .resource.resource.resource.Node sourceNode = new NodeBuilder()
235 .setNodeIdentifier(new NodeIdentifierBuilder().setNodeId(srcName).build()).build();
240 ZToAKey sourceKey = new ZToAKey(index.toString());
241 Resource nodeResource1 = new ResourceBuilder().setResource(sourceNode).build();
242 ZToA srcResource = new ZToABuilder().setId(srcName).setKey(sourceKey).setResource(nodeResource1).build();
244 etoelist.add(srcResource);
247 tpName = pcelink.getSourceTP().toString();
248 stp = new TerminationPointBuilder()
249 .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder()
250 .setNodeId(srcName).setTpId(tpName).build())
254 ZToAKey srcTPKey = new ZToAKey(index.toString());
255 Resource tpResource1 = new ResourceBuilder().setResource(stp).build();
256 ZToA stpResource = new ZToABuilder().setId(tpName).setKey(srcTPKey).setResource(tpResource1).build();
258 etoelist.add(stpResource);
260 String linkName = pcelink.getLinkId().getValue();
262 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce
263 .resource.resource.resource.Link ztoaLink = new LinkBuilder()
264 .setLinkIdentifier(new LinkIdentifierBuilder().setLinkId(linkName).build()).build();
267 ZToAKey linkKey = new ZToAKey(index.toString());
268 Resource nodeResource2 = new ResourceBuilder().setResource(ztoaLink).build();
269 ZToA linkResource = new ZToABuilder().setId(linkName).setKey(linkKey).setResource(nodeResource2).build();
271 etoelist.add(linkResource);
273 String destName = pcelink.getDestId().getValue();
275 tpName = pcelink.getDestTP().toString();
276 TerminationPoint ttp = new TerminationPointBuilder()
277 .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder()
278 .setNodeId(destName).setTpId(tpName).build())
282 ZToAKey destTPKey = new ZToAKey(index.toString());
283 Resource tpResource2 = new ResourceBuilder().setResource(ttp).build();
284 ZToA ttpResource = new ZToABuilder().setId(tpName).setKey(destTPKey).setResource(tpResource2).build();
286 etoelist.add(ttpResource);
289 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce
290 .resource.resource.resource.Node targetNode = new NodeBuilder()
291 .setNodeIdentifier(new NodeIdentifierBuilder().setNodeId(destName).build()).build();
293 ZToAKey targetKey = new ZToAKey(index.toString());
294 Resource nodeResource3 = new ResourceBuilder().setResource(targetNode).build();
295 lastResource = new ZToABuilder().setId(destName).setKey(targetKey).setResource(nodeResource3).build();
299 etoelist.add(lastResource);
301 // build Z side Client TP
302 tpName = lastLink.getClient();
303 xname = lastLink.getDestId().getValue();
304 stp = new TerminationPointBuilder()
305 .setTerminationPointIdentifier(new TerminationPointIdentifierBuilder()
306 .setNodeId(xname).setTpId(tpName).build())
311 clientKey = new ZToAKey(index.toString());
312 clientResource = new ResourceBuilder().setResource(stp).build();
313 lastResource = new ZToABuilder().setId(tpName).setKey(clientKey).setResource(clientResource).build();
314 etoelist.add(lastResource);