init Renderer code for OTN Services
[transportpce.git] / renderer / src / main / java / org / opendaylight / transportpce / renderer / provisiondevice / OtnDeviceRendererServiceImpl.java
1 /*
2  * Copyright © 2019 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 package org.opendaylight.transportpce.renderer.provisiondevice;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.Optional;
13 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
14 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
15 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathInput;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutput;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev200128.OtnServicePathOutputBuilder;
19 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterface;
20 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterfaceBuilder;
21 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.node.interfaces.NodeInterfaceKey;
22 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev200128.otn.renderer.input.Nodes;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 public class OtnDeviceRendererServiceImpl implements OtnDeviceRendererService {
27     private static final Logger LOG = LoggerFactory.getLogger(OtnDeviceRendererServiceImpl.class);
28     private final OpenRoadmInterfaceFactory openRoadmInterfaceFactory;
29     private final CrossConnect crossConnect;
30
31     public OtnDeviceRendererServiceImpl(OpenRoadmInterfaceFactory openRoadmInterfaceFactory,
32         CrossConnect crossConnect) {
33         this.openRoadmInterfaceFactory = openRoadmInterfaceFactory;
34         this.crossConnect = crossConnect;
35     }
36
37     @Override
38     public OtnServicePathOutput setupOtnServicePath(OtnServicePathInput input) {
39         boolean success = true;
40         List<NodeInterface> nodeInterfaces = new ArrayList<>();
41         List<String> results = new ArrayList<>();
42         if (input.getServiceType().equals("Ethernet")) {
43             try {
44                 nodeInterfaces = createInterface(input);
45             }
46             catch (OpenRoadmInterfaceException e) {
47                 //handle exception
48                 LOG.warn("Set up service path failed");
49                 success = false;
50             }
51         }
52         if (success) {
53             for (NodeInterface nodeInterface: nodeInterfaces) {
54                 results.add("Otn Service path was set up successfully for node :" + nodeInterface.getNodeId());
55             }
56         }
57         OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder()
58             .setSuccess(success)
59             .setNodeInterface(nodeInterfaces)
60             .setResult(String.join("\n", results));
61         return otnServicePathOutputBuilder.build();
62     }
63
64     @Override
65     public OtnServicePathOutput deleteOtnServicePath(OtnServicePathInput input) {
66         OtnServicePathOutputBuilder otnServicePathOutputBuilder = new OtnServicePathOutputBuilder()
67             .setResult("deleteServicePath was called");
68         return otnServicePathOutputBuilder.build();
69     }
70
71     private List<NodeInterface> createInterface(OtnServicePathInput input) throws OpenRoadmInterfaceException {
72         List<NodeInterface> nodeInterfaces = new ArrayList<>();
73         if (input.getServiceRate().equals("1G")) {
74             for (Nodes node: input.getNodes()) {
75                 //check if the node is mounted or not?
76                 List<String> createdEthInterfaces = new ArrayList<>();
77                 List<String> createdOduInterfaces = new ArrayList<>();
78                 createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth1GInterface(node.getNodeId(),
79                     node.getClientTp()));
80                 LOG.info("created ethernet interface");
81                 createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(),
82                     node.getClientTp(), input.getServiceName(),"07", false, input.getTribPortNumber(),
83                     input.getTribSlot())); //suppporting interface?, payload ?
84                 LOG.info("Created odu interface client side");
85                 createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu0Interface(node.getNodeId(),
86                     node.getNetworkTp(), input.getServiceName(),"07", true, input.getTribPortNumber(),
87                     input.getTribSlot()));
88                 LOG.info("created odu inteface network side");
89
90                     //implement cross connect
91                 Optional<String> connectionNameOpt = postCrossConnect(createdOduInterfaces, node);
92                 List<String> createdConnections = new ArrayList<>();
93                 createdConnections.add(connectionNameOpt.get());
94                 LOG.info("Created cross connects");
95                 NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder()
96                     .withKey(new NodeInterfaceKey(node.getNodeId()))
97                     .setNodeId(node.getNodeId())
98                     .setConnectionId(createdConnections)
99                     .setEthInterfaceId(createdEthInterfaces)
100                     .setOduInterfaceId(createdOduInterfaces);
101                 nodeInterfaces.add(nodeInterfaceBuilder.build());
102             }
103         }
104         else if (input.getServiceRate().equals("10G")) {
105             // implementing ODU2e for now
106
107             for (Nodes node: input.getNodes()) {
108                 //check if the node is mounted or not?
109                 List<String> createdEthInterfaces = new ArrayList<>();
110                 List<String> createdOduInterfaces = new ArrayList<>();
111                 createdEthInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmEth10GInterface(node.getNodeId(),
112                     node.getClientTp()));
113                 createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
114                     node.getClientTp(), input.getServiceName(),"03", false)); //suppporting interface?, payload ?
115                 createdOduInterfaces.add(openRoadmInterfaceFactory.createOpenRoadmOdu2eInterface(node.getNodeId(),
116                     node.getNetworkTp(), input.getServiceName(),"03" , true));// supporting interface? payload ?
117
118                 //implement cross connect
119                 Optional<String> connectionNameOpt = postCrossConnect(createdOduInterfaces, node);
120                 List<String> createdConnections = new ArrayList<>();
121                 createdConnections.add(connectionNameOpt.get());
122                 LOG.info("Created cross connects");
123                 NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
124                 nodeInterfaceBuilder.withKey(new NodeInterfaceKey(node.getNodeId()))
125                     .setNodeId(node.getNodeId())
126                     .setConnectionId(createdConnections)
127                     .setEthInterfaceId(createdEthInterfaces)
128                     .setOduInterfaceId(createdOduInterfaces);
129                 nodeInterfaces.add(nodeInterfaceBuilder.build());
130             }
131         }
132         return nodeInterfaces;
133     }
134
135     private Optional<String> postCrossConnect(List<String> createdOduInterfaces, Nodes node)
136         throws OpenRoadmInterfaceException {
137         return this.crossConnect.postOtnCrossConnect(createdOduInterfaces,node);
138     }
139 }