2 * Copyright © 2016 AT&T 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.networkmodel.util;
11 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInput;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
15 public final class LinkIdUtil {
17 private static final String NETWORK = "-NETWORK";
18 private static final String TRANSMIT = "-TX";
19 private static final String RECEIVE = "-RX";
20 private static final String BIDIRECTIONAL = "-TXRX";
21 private static final String LINK_ID_FORMAT = "%1$s-%2$sto%3$s-%4$s";
22 private static final String OTN_LINK_ID_FORMAT = "%5$s-%1$s-%2$sto%3$s-%4$s";
24 private LinkIdUtil() {
29 * Builds the Link id in format {@link LinkIdUtil#LINK_ID_FORMAT}.
31 * @param srcNode source node id string
32 * @param srcTp source termination point
33 * @param destNode destination node id
34 * @param destTp destination termination point
35 * @return {@link LinkId}
37 public static LinkId buildLinkId(String srcNode, String srcTp, String destNode, String destTp) {
38 return new LinkId(String.format(LINK_ID_FORMAT, srcNode, srcTp, destNode, destTp));
42 * Builds the OTN Link id in format {@link LinkIdUtil#OTN_LINK_ID_FORMAT}.
44 * @param srcNode source node id string
45 * @param srcTp source termination point
46 * @param destNode destination node id
47 * @param destTp destination termination point
48 * @param otnPrefix otn link type prefix
49 * @return {@link LinkId}
51 public static LinkId buildOtnLinkId(String srcNode, String srcTp, String destNode, String destTp,
53 return new LinkId(String.format(OTN_LINK_ID_FORMAT, srcNode, srcTp, destNode, destTp, otnPrefix));
57 * Builds the opposite {@link LinkId} from the {@link InitRoadmNodesInput}.
59 * @param input an init link for ROADM nodes
60 * @return opposite {@link LinkId}
62 public static LinkId getRdm2RdmOppositeLinkId(InitRoadmNodesInput input) {
63 String srcNode = new StringBuilder(input.getRdmANode()).append("-DEG").append(input.getDegANum()).toString();
64 String srcTp = input.getTerminationPointA();
65 String destNode = new StringBuilder(input.getRdmZNode()).append("-DEG").append(input.getDegZNum()).toString();
66 String destTp = input.getTerminationPointZ();
68 Object[] params = buildParams(srcNode, srcTp, destNode, destTp, false);
70 return new LinkId(String.format(LINK_ID_FORMAT, params));
74 * Builds the opposite {@link LinkId} from string descriptors.
76 * @param srcNode a source node
77 * @param srcTp a source termination point
78 * @param destNode a destination node
79 * @param destTp a destination termination point
80 * @return LinkId a link identifier
82 public static LinkId getOppositeLinkId(String srcNode, String srcTp, String destNode, String destTp) {
83 return getOppositeLinkId(srcNode, srcTp, destNode, destTp, true);
87 * Builds the opposite {@link LinkId} from string descriptors.
89 * @param srcNode a source node
90 * @param srcTp a source termination point
91 * @param destNode a destination node
92 * @param destTp a destination termination point
93 * @param checkNode boolean to check node
95 * @return LinkId a link identifier
97 public static LinkId getOppositeLinkId(String srcNode, String srcTp, String destNode, String destTp,
99 Object[] params = buildParams(srcNode, srcTp, destNode, destTp, checkNode);
100 return new LinkId(String.format(LINK_ID_FORMAT, params));
103 private static Object[] buildParams(String srcNode, String srcTp, String destNode, String destTp,
104 boolean checkForNetwork) {
105 Object[] params = null;
106 if (checkBidirectional(checkForNetwork, srcTp)) {
107 if (checkBidirectional(checkForNetwork, destTp)) {
108 params = new Object[] {destNode, destTp, srcNode, srcTp};
109 } else if (destTp.contains(RECEIVE)) {
110 params = new Object[] {destNode, destTp.replace("RX", "TX"), srcNode, srcTp};
112 throw new IllegalArgumentException("Dest Termination Point is either RX/TX_RX ! Check TP");
114 } else if (srcTp.contains(TRANSMIT)) {
115 String replacedSrcTp = srcTp.replace("TX", "RX");
116 if (checkBidirectional(checkForNetwork, destTp)) {
117 params = new Object[] {destNode, destTp, srcNode, replacedSrcTp};
118 } else if (destTp.contains(RECEIVE)) {
119 params = new Object[] {destNode, destTp.replace("RX", "TX"), srcNode, replacedSrcTp};
121 throw new IllegalArgumentException("Dest Termination Point is either RX/TX_RX ! Check TP");
124 throw new IllegalArgumentException("SRC Termination Point is either TX/TXRX ! Check TP");
129 private static boolean checkBidirectional(boolean check, String tp) {
130 return tp.contains(BIDIRECTIONAL) || (check && tp.contains(NETWORK));