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
9 package org.opendaylight.transportpce.pce;
11 import java.util.ArrayList;
12 import java.util.HashMap;
13 import java.util.List;
16 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Node1;
17 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.TerminationPoint1;
18 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmNodeType;
19 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmTpType;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.Node;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
25 public class PceNode {
28 private static final Logger LOG = LoggerFactory.getLogger(PceCalculation.class);
30 ////////////////////////// NODES ///////////////////////////
34 private boolean valid = true;
36 private final Node node;
37 private final NodeId nodeId;
38 private final OpenroadmNodeType nodeType;
40 // wavelength calculation per node type
41 private List<Long> availableWLindex = new ArrayList<Long>();
42 private List<String> usedXpndrNWTps = new ArrayList<String>();
44 private List<PceLink> outgoingLinks = new ArrayList<PceLink>();
46 private Map<String, String> clientPerNwTp = new HashMap<String, String>();
48 public PceNode(Node node, OpenroadmNodeType nodeType, NodeId nodeId) {
51 this.nodeType = nodeType;
53 if ((node == null) || (nodeId == null) || (nodeType == null)) {
54 LOG.error("PceNode: one of parameters is not populated : nodeId, node type");
59 public void initWLlist() {
61 availableWLindex.clear();
67 Node1 node1 = node.getAugmentation(Node1.class);
71 List<org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
72 .AvailableWavelengths> srgAvailableWL = node1.getSrgAttributes().getAvailableWavelengths();
74 if (srgAvailableWL == null) {
76 LOG.error("initWLlist: SRG AvailableWavelengths is empty for node {}", this.toString());
80 for (org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
81 .AvailableWavelengths awl : srgAvailableWL) {
82 availableWLindex.add(awl.getIndex());
83 LOG.debug("initWLlist: SRG next = {} in {}" , awl.getIndex() , this.toString());
89 List<org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes
90 .AvailableWavelengths> degAvailableWL = node1.getDegreeAttributes().getAvailableWavelengths();
92 if (degAvailableWL == null) {
94 LOG.error("initWLlist: DEG AvailableWavelengths is empty for node {}", this.toString());
98 for (org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev170929.degree.node.attributes
99 .AvailableWavelengths awl : degAvailableWL) {
100 availableWLindex.add(awl.getIndex());
101 LOG.debug("initWLlist: DEGREE next = {} in {}", awl.getIndex(), this.toString());
109 for (long i = 1; i <= 96; i++) {
110 availableWLindex.add(i);
116 LOG.error("initWLlist: unsupported node type {} in node {}" , nodeType, this.toString());
120 if (availableWLindex.size() == 0) {
121 LOG.debug("initWLlist: There are no available wavelengths in node {}", this.toString());
124 LOG.debug("initWLlist: availableWLindex size = {} in {}" , availableWLindex.size(), this.toString());
129 public void initXndrTps() {
135 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1 nodeTp =
136 node.getAugmentation(
137 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class);
139 List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node
140 .TerminationPoint> allTps = nodeTp.getTerminationPoint();
142 if (allTps == null) {
144 LOG.error("initXndrTps: XPONDER TerminationPoint list is empty for node {}", this.toString());
150 for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.node
151 .TerminationPoint tp : allTps) {
153 TerminationPoint1 tp1 = tp.getAugmentation(TerminationPoint1.class);
155 if (tp1.getTpType() == OpenroadmTpType.XPONDERNETWORK) {
157 if (tp1.getXpdrNetworkAttributes().getWavelength() != null) {
158 usedXpndrNWTps.add(tp.getTpId().getValue());
159 LOG.debug("initWLlist: XPONDER tp = {} is used", tp.getTpId().getValue());
164 // find Client of this network TP
165 String client = tp1.getXpdrNetworkAttributes().getTailEquipmentId();
166 if ((client.equals("")) || (client == null)) {
167 LOG.error("initXndrTps: XPONDER {} NW TP doesn't have defined Client {}",
168 this.toString(),tp.getTpId().getValue());
171 clientPerNwTp.put(tp.getTpId().getValue(), client);
176 LOG.error("initXndrTps: XPONDER doesn't have available wavelengths for node {}", this.toString());
183 public boolean checkTP(String tp) {
184 if (usedXpndrNWTps.contains(tp)) {
190 public boolean checkWL(long index) {
191 if (availableWLindex.contains(index)) {
197 public boolean isValid() {
201 public List<Long> getAvailableWLs() {
202 return availableWLindex;
205 public void addOutgoingLink(PceLink outLink) {
206 this.outgoingLinks.add(outLink);
209 public List<PceLink> getOutgoingLinks() {
210 return outgoingLinks;
213 public String getClient(String tp) {
214 return clientPerNwTp.get(tp);
218 public String toString() {
219 return "PceNode type=" + nodeType + " ID=" + nodeId.getValue();