clean api pom
[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 java.text.MessageFormat;
12 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInput;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId;
14
15
16 public final class LinkIdUtil {
17
18     private static final String NETWORK = "-NETWORK";
19     private static final String TRANSMIT = "-TX";
20     private static final String RECEIVE = "-RX";
21     private static final String BIDIRECTIONAL = "-TXRX";
22     private static final MessageFormat LINK_ID_FORMAT = new MessageFormat("{0}-{1}to{2}-{3}");
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(LINK_ID_FORMAT
39                 .format(new Object[] {srcNode, srcTp, destNode, destTp}, new StringBuffer(), null).toString());
40     }
41
42     /**
43      * Builds the opposite {@link LinkId} from the {@link InitRoadmNodesInput}.
44      *
45      * @param input an init link for ROADM nodes
46      * @return opposite {@link LinkId}
47      */
48     public static LinkId getRdm2RdmOppositeLinkId(InitRoadmNodesInput input) {
49         String srcNode = new StringBuilder(input.getRdmANode()).append("-DEG").append(input.getDegANum()).toString();
50         String srcTp = input.getTerminationPointA();
51         String destNode = new StringBuilder(input.getRdmZNode()).append("-DEG").append(input.getDegZNum()).toString();
52         String destTp = input.getTerminationPointZ();
53
54         Object[] params = buildParams(srcNode, srcTp, destNode, destTp, false);
55
56         return new LinkId(LINK_ID_FORMAT.format(params, new StringBuffer(), null).toString());
57     }
58
59     /**
60      * Builds the opposite {@link LinkId} from string descriptors.
61      *
62      * @param srcNode a source node
63      * @param srcTp a source termination point
64      * @param destNode a destination node
65      * @param destTp a destination termination point
66      * @return LinkId a link identifier
67      */
68     public static LinkId getOppositeLinkId(String srcNode, String srcTp, String destNode, String destTp) {
69         return getOppositeLinkId(srcNode, srcTp, destNode, destTp, true);
70     }
71
72     /**
73      * Builds the opposite {@link LinkId} from string descriptors.
74      *
75      * @param srcNode a source node
76      * @param srcTp a source termination point
77      * @param destNode a destination node
78      * @param destTp a destination termination point
79      * @param checkNode boolean to check node
80      *
81      * @return LinkId a link identifier
82      */
83     public static LinkId getOppositeLinkId(String srcNode, String srcTp, String destNode, String destTp,
84         boolean checkNode) {
85         Object[] params = buildParams(srcNode, srcTp, destNode, destTp, checkNode);
86         return new LinkId(LINK_ID_FORMAT.format(params, new StringBuffer(), null).toString());
87     }
88
89     private static Object[] buildParams(String srcNode, String srcTp, String destNode, String destTp,
90             boolean checkForNetwork) {
91         Object[] params = null;
92         if (checkBidirectional(checkForNetwork, srcTp)) {
93             if (checkBidirectional(checkForNetwork, destTp)) {
94                 params = new Object[] {destNode, destTp, srcNode, srcTp};
95             } else if (destTp.contains(RECEIVE)) {
96                 params = new Object[] {destNode, destTp.replace("RX", "TX"), srcNode, srcTp};
97             } else {
98                 throw new IllegalArgumentException("Dest Termination Point is either RX/TX_RX ! Check TP");
99             }
100         } else if (srcTp.contains(TRANSMIT)) {
101             String replacedSrcTp = srcTp.replace("TX", "RX");
102             if (checkBidirectional(checkForNetwork, destTp)) {
103                 params = new Object[] {destNode, destTp, srcNode, replacedSrcTp};
104             } else if (destTp.contains(RECEIVE)) {
105                 params = new Object[] {destNode, destTp.replace("RX", "TX"), srcNode, replacedSrcTp};
106             } else {
107                 throw new IllegalArgumentException("Dest Termination Point is either RX/TX_RX ! Check TP");
108             }
109         } else {
110             throw new IllegalArgumentException("SRC Termination Point is either TX/TXRX ! Check TP");
111         }
112         return params;
113     }
114
115     private static boolean checkBidirectional(boolean check, String tp) {
116         return tp.contains(BIDIRECTIONAL) || (check && tp.contains(NETWORK));
117     }
118 }