2 * Copyright © 2017 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
8 package org.opendaylight.transportpce.renderer;
10 import java.util.ArrayList;
11 import java.util.Iterator;
12 import java.util.List;
14 import java.util.TreeMap;
15 import java.util.concurrent.Future;
17 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.configuration.response.common.ConfigurationResponseCommon;
18 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.configuration.response.common.ConfigurationResponseCommonBuilder;
19 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceDeleteInput;
20 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.PathDescription;
21 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZ;
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.pce.resource.resource.resource.TerminationPoint;
24 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceDeleteOutput;
25 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceDeleteOutputBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestInput;
27 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestOutput;
28 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestOutputBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.renderer.input.Nodes;
30 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.renderer.input.NodesBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.olm.renderer.input.NodesKey;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupInput;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupInputBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathInput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.renderer.rev170228.ServicePathInputBuilder;
36 import org.opendaylight.yangtools.yang.common.RpcResult;
37 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
41 public final class ModelMappingUtils {
43 private static final Logger LOG = LoggerFactory.getLogger(ModelMappingUtils.class);
44 private static final String TERMINATION_POINT = "TerminationPoint";
46 private ModelMappingUtils() {
49 public static ServicePowerSetupInput createServicePowerSetupInput(List<Nodes> olmList,
50 ServiceImplementationRequestInput input) {
51 ServicePowerSetupInputBuilder olmSetupBldr = new ServicePowerSetupInputBuilder();
52 olmSetupBldr.setNodes(olmList);
53 olmSetupBldr.setWaveNumber(input.getPathDescription().getAToZDirection().getAToZWavelengthNumber());
54 return olmSetupBldr.build();
57 public static ServiceImplementationRequestOutput createServiceImplResponse(String responseCode, String message) {
58 ServiceImplementationRequestOutputBuilder outputBldr = new ServiceImplementationRequestOutputBuilder();
59 outputBldr.setConfigurationResponseCommon(createCommonResponse(responseCode, message));
60 return outputBldr.build();
63 public static ServiceDeleteOutput createServiceDeleteResponse(String responseCode, String message) {
64 ServiceDeleteOutputBuilder outputBldr = new ServiceDeleteOutputBuilder();
65 outputBldr.setConfigurationResponseCommon(createCommonResponse(responseCode, message));
66 return outputBldr.build();
69 public static ConfigurationResponseCommon createCommonResponse(String responseCode, String message) {
70 ConfigurationResponseCommonBuilder cmBldr = new ConfigurationResponseCommonBuilder();
71 cmBldr.setResponseMessage(message);
72 cmBldr.setResponseCode(responseCode);
73 return cmBldr.build();
76 public static Future<RpcResult<ServiceImplementationRequestOutput>>
77 createRpcResponse(ServiceImplementationRequestOutput payload) {
78 return RpcResultBuilder.success(payload).buildFuture();
81 public static ServicePathInputData rendererCreateServiceInputAToZ(String serviceName,
82 PathDescription pathDescription) {
83 ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder();
84 servicePathInputBuilder.setServiceName(serviceName);
85 NodeLists nodeLists = getNodesListAToZ(pathDescription.getAToZDirection().getAToZ().iterator());
86 servicePathInputBuilder.setServiceName(serviceName);
87 servicePathInputBuilder.setOperation(ServicePathInput.Operation.Create);
88 servicePathInputBuilder.setWaveNumber(new Long(pathDescription.getAToZDirection().getAToZWavelengthNumber()));
89 servicePathInputBuilder.setNodes(nodeLists.getList());
90 return new ServicePathInputData(servicePathInputBuilder.build(), nodeLists);
93 public static ServicePathInputData rendererCreateServiceInputZToA(String serviceName,
94 PathDescription pathDescription) {
95 ServicePathInputBuilder servicePathInputBuilder = new ServicePathInputBuilder();
96 NodeLists nodeLists = getNodesListZtoA(pathDescription.getZToADirection().getZToA().iterator());
97 servicePathInputBuilder.setOperation(ServicePathInput.Operation.Create);
98 servicePathInputBuilder.setServiceName(serviceName);
99 servicePathInputBuilder.setWaveNumber(new Long(pathDescription.getZToADirection().getZToAWavelengthNumber()));
100 servicePathInputBuilder.setNodes(nodeLists.getList());
101 return new ServicePathInputData(servicePathInputBuilder.build(), nodeLists);
104 public static ServicePathInput rendererDeleteServiceInput(String serviceName,
105 ServiceDeleteInput serviceDeleteInput) {
106 ServicePathInputBuilder servicePathInput = new ServicePathInputBuilder();
107 servicePathInput.setServiceName(serviceName);
108 //TODO: finish model-model mapping
109 return servicePathInput.build();
112 public static NodeLists getNodesListZtoA(Iterator<ZToA> iterator) {
113 Map<Integer, NodeIdPair> treeMap = new TreeMap<>();
114 List<Nodes> olmList = new ArrayList<>();
115 List<Nodes> list = new ArrayList<>();
121 while (iterator.hasNext()) {
122 ZToA pathDesObj = iterator.next();
123 resourceType = pathDesObj.getResource().getResource().getImplementedInterface().getSimpleName();
124 LOG.info("Inside AtoZ {}", resourceType);
127 if (TERMINATION_POINT.equals(resourceType)) {
128 tp = (TerminationPoint) pathDesObj.getResource().getResource();
129 LOG.info(" TP is {} {}", tp.getTerminationPointIdentifier().getTpId(),
130 tp.getTerminationPointIdentifier().getNodeId());
131 tpID = tp.getTerminationPointIdentifier().getTpId();
132 nodeID = tp.getTerminationPointIdentifier().getNodeId();
133 sortId = pathDesObj.getId();
135 //TODO: do not rely on ID to be in certain format
136 if (tpID.contains("CTP") || tpID.contains("CP")) {
139 if (!tpID.contains("TTP") && !tpID.contains("PP") && !tpID.contains("NETWORK")
140 && !tpID.contains("CLIENT")) {
144 int[] pos = findTheLongestSubstring(nodeID, tpID);
145 //TODO: do not rely on nodeId to be integer
146 int id = Integer.parseInt(sortId);
147 treeMap.put(id, new NodeIdPair(nodeID.substring(0, pos[0] - 1), tpID));
148 } else if (resourceType.equals("Link")) {
149 LOG.info("The type is link");
151 LOG.info("The type is not indentified: {}", resourceType);
153 } catch (IllegalArgumentException | SecurityException e) {
154 // TODO Auto-generated catch block
155 LOG.error("Dont find the getResource method", e);
161 for (NodeIdPair values : treeMap.values()) {
163 srcID = values.getTpID();
164 } else if (desID == null) {
165 desID = values.getTpID();
166 NodesBuilder nb = new NodesBuilder();
167 nb.setKey(new NodesKey(values.getNodeID()));
170 list.add(nb.build());
172 NodesBuilder olmNb = new NodesBuilder();
173 olmNb.setNodeId(values.getNodeID());
174 olmNb.setDestTp(desID);
175 olmNb.setSrcTp(srcID);
176 olmList.add(olmNb.build());
180 LOG.warn("both, the source and destination id are null!");
183 return new NodeLists(olmList, list);
186 public static NodeLists getNodesListAToZ(Iterator<AToZ> iterator) {
187 Map<Integer, NodeIdPair> treeMap = new TreeMap<>();
188 List<Nodes> list = new ArrayList<>();
189 List<Nodes> olmList = new ArrayList<>();
196 while (iterator.hasNext()) {
197 AToZ pathDesObj = iterator.next();
198 resourceType = pathDesObj.getResource().getResource().getImplementedInterface().getSimpleName();
199 LOG.info("Inside AtoZ {}", resourceType);
201 if (TERMINATION_POINT.equals(resourceType)) {
202 tp = (TerminationPoint) pathDesObj.getResource().getResource();
203 LOG.info(" TP is {} {}", tp.getTerminationPointIdentifier().getTpId(),
204 tp.getTerminationPointIdentifier().getNodeId());
205 tpID = tp.getTerminationPointIdentifier().getTpId();
206 nodeID = tp.getTerminationPointIdentifier().getNodeId();
207 sortId = pathDesObj.getId();
209 //TODO: do not rely on ID to be in certain format
210 if (tpID.contains("CTP") || tpID.contains("CP")) {
213 if (!tpID.contains("TTP") && !tpID.contains("PP") && !tpID.contains("NETWORK")
214 && !tpID.contains("CLIENT")) {
218 int[] pos = findTheLongestSubstring(nodeID, tpID);
219 //TODO: do not rely on nodeId to be integer
220 int id = Integer.parseInt(sortId);
221 treeMap.put(id, new NodeIdPair(nodeID.substring(0, pos[0] - 1), tpID));
222 } else if (resourceType.equals("Link")) {
223 LOG.info("The type is link");
225 LOG.info("The type is not indentified: {}", resourceType);
227 } catch (IllegalArgumentException | SecurityException e) {
228 //TODO: Auto-generated catch block
229 LOG.error("Dont find the getResource method", e);
235 for (NodeIdPair values : treeMap.values()) {
237 srcID = values.getTpID();
238 } else if (desID == null) {
239 desID = values.getTpID();
240 NodesBuilder nb = new NodesBuilder();
241 nb.setKey(new NodesKey(values.getNodeID()));
244 list.add(nb.build());
246 NodesBuilder olmNb = new NodesBuilder();
247 olmNb.setNodeId(values.getNodeID());
248 olmNb.setDestTp(desID);
249 olmNb.setSrcTp(srcID);
250 olmList.add(olmNb.build());
254 LOG.warn("both, the source and destination id are null!");
257 return new NodeLists(olmList, list);
260 public static int[] findTheLongestSubstring(String s1, String s2) {
261 if (s1 == null || s2 == null) {
264 int[][] dp = new int[s1.length() + 1][s2.length() + 1];
267 for (int i = 1; i < dp.length; i++) {
268 for (int j = 1; j < dp[0].length; j++) {
269 char ch1 = s1.charAt(i - 1);
270 char ch2 = s2.charAt(j - 1);
272 dp[i][j] = dp[i - 1][j - 1] + 1;
273 if (dp[i][j] >= maxLen) {
280 return new int[] { endPos - maxLen, endPos };