Replace tpce-topology yang by existing ordmodels
[transportpce.git] / networkmodel / src / main / java / org / opendaylight / transportpce / networkmodel / util / LinkIdUtil.java
1 /*
2  * Copyright © 2016 AT&T and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.transportpce.networkmodel.util;
10
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;
13
14
15 public final class LinkIdUtil {
16
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";
23
24     private LinkIdUtil() {
25         // utility class
26     }
27
28     /**
29      * Builds the Link id in format {@link LinkIdUtil#LINK_ID_FORMAT}.
30      *
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}
36      */
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));
39     }
40
41     /**
42      * Builds the OTN Link id in format {@link LinkIdUtil#OTN_LINK_ID_FORMAT}.
43      *
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}
50      */
51     public static LinkId buildOtnLinkId(String srcNode, String srcTp, String destNode, String destTp,
52         String otnPrefix) {
53         return new LinkId(String.format(OTN_LINK_ID_FORMAT, srcNode, srcTp, destNode, destTp, otnPrefix));
54     }
55
56     /**
57      * Builds the opposite {@link LinkId} from the {@link InitRoadmNodesInput}.
58      *
59      * @param input an init link for ROADM nodes
60      * @return opposite {@link LinkId}
61      */
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();
67
68         Object[] params = buildParams(srcNode, srcTp, destNode, destTp, false);
69
70         return new LinkId(String.format(LINK_ID_FORMAT, params));
71     }
72
73     /**
74      * Builds the opposite {@link LinkId} from string descriptors.
75      *
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
81      */
82     public static LinkId getOppositeLinkId(String srcNode, String srcTp, String destNode, String destTp) {
83         return getOppositeLinkId(srcNode, srcTp, destNode, destTp, true);
84     }
85
86     /**
87      * Builds the opposite {@link LinkId} from string descriptors.
88      *
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
94      *
95      * @return LinkId a link identifier
96      */
97     public static LinkId getOppositeLinkId(String srcNode, String srcTp, String destNode, String destTp,
98         boolean checkNode) {
99         Object[] params = buildParams(srcNode, srcTp, destNode, destTp, checkNode);
100         return new LinkId(String.format(LINK_ID_FORMAT, params));
101     }
102
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};
111             } else {
112                 throw new IllegalArgumentException("Dest Termination Point is either RX/TX_RX ! Check TP");
113             }
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};
120             } else {
121                 throw new IllegalArgumentException("Dest Termination Point is either RX/TX_RX ! Check TP");
122             }
123         } else {
124             throw new IllegalArgumentException("SRC Termination Point is either TX/TXRX ! Check TP");
125         }
126         return params;
127     }
128
129     private static boolean checkBidirectional(boolean check, String tp) {
130         return tp.contains(BIDIRECTIONAL) || (check && tp.contains(NETWORK));
131     }
132 }