blob: 2598781bdfbde5f713db6737ebc0bb429ca2f389 [file] [log] [blame]
hirokif4ed5212018-05-26 22:39:38 -07001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.odtn.internal;
18
19import java.util.List;
20import java.util.stream.Collectors;
21import org.onosproject.config.DynamicConfigService;
22import org.onosproject.odtn.TapiResolver;
23import org.onosproject.odtn.utils.tapi.TapiNepPair;
24import org.onosproject.odtn.utils.tapi.TapiConnectionHandler;
25import org.onosproject.odtn.utils.tapi.TapiConnectivityServiceHandler;
26import org.onosproject.odtn.utils.tapi.TapiContextHandler;
27import org.onosproject.odtn.utils.tapi.TapiCreateConnectivityInputHandler;
28import org.onosproject.odtn.utils.tapi.TapiCreateConnectivityOutputHandler;
29import org.onosproject.odtn.utils.tapi.TapiDeleteConnectivityInputHandler;
30import org.onosproject.odtn.utils.tapi.TapiDeleteConnectivityOutputHandler;
31import org.onosproject.odtn.utils.tapi.TapiGetConnectivityDetailsInputHandler;
32import org.onosproject.odtn.utils.tapi.TapiGetConnectivityDetailsOutputHandler;
33import org.onosproject.odtn.utils.tapi.TapiGetConnectivityListOutputHandler;
34import org.onosproject.odtn.utils.tapi.TapiNepRef;
35import org.onosproject.odtn.utils.tapi.TapiObjectHandler;
36import org.onosproject.odtn.utils.tapi.TapiSepHandler;
37import org.onosproject.yang.gen.v1.tapicommon.rev20180307.tapicommon.Uuid;
38import org.onosproject.yang.gen.v1.tapiconnectivity.rev20180307.TapiConnectivityService;
39import org.onosproject.yang.gen.v1.tapiconnectivity.rev20180307.tapiconnectivity.connectivitycontext.DefaultConnectivityService;
40import org.onosproject.yang.model.ModelConverter;
41import org.onosproject.yang.model.RpcInput;
42import org.onosproject.yang.model.RpcOutput;
43
44import org.slf4j.Logger;
45import org.slf4j.LoggerFactory;
46
47import static org.onlab.osgi.DefaultServiceDirectory.getService;
48
49
50/**
51 * DCS-dependent tapi-connectivity yang RPCs implementation.
52 */
53public class DcsBasedTapiConnectivityRpc implements TapiConnectivityService {
54
55 private final Logger log = LoggerFactory.getLogger(getClass());
56
57 protected DynamicConfigService dcs;
58 protected ModelConverter modelConverter;
59 protected TapiResolver resolver;
60
61 public void init() {
62 dcs = getService(DynamicConfigService.class);
63 modelConverter = getService(ModelConverter.class);
64 resolver = getService(TapiResolver.class);
65 }
66
67 /**
68 * Service interface of createConnectivityService.
69 *
70 * @param inputVar input of service interface createConnectivityService
71 * @return output of service interface createConnectivityService
72 */
73 @Override
74 public RpcOutput createConnectivityService(RpcInput inputVar) {
75
76 try {
77 TapiCreateConnectivityInputHandler input = new TapiCreateConnectivityInputHandler();
78 input.setRpcInput(inputVar);
79 // TODO validation check
80 log.info("input SIPs: {}", input.getSips());
81
82 List<TapiNepRef> nepRefs = input.getSips().stream()
83 .map(sipId -> resolver.getNepRef(sipId))
84 .collect(Collectors.toList());
85 // for test
86// Map<String, String> filter = new HashMap<>();
87// filter.put(ODTN_PORT_TYPE, OdtnDeviceDescriptionDiscovery.OdtnPortType.CLIENT.value());
88// List<TapiNepRef> nepRefs = resolver.getNepRefs(filter);
89
90 // setup connections
91 TapiNepPair neps = TapiNepPair.create(nepRefs.get(0), nepRefs.get(1));
92 DcsBasedTapiConnectionManager connectionManager = DcsBasedTapiConnectionManager.create();
93 connectionManager.createConnection(neps);
94
95 // setup connectivity service
96 TapiConnectivityServiceHandler connectivityServiceHandler = TapiConnectivityServiceHandler.create();
97 connectivityServiceHandler.addConnection(connectionManager.getConnectionHandler().getModelObject().uuid());
98 neps.stream()
99 .map(nepRef -> TapiSepHandler.create().setSip(nepRef.getSipId()))
100 .forEach(sepBuilder -> {
101 connectivityServiceHandler.addSep(sepBuilder.getModelObject());
102 });
103
104 // build
105 connectionManager.apply();
106 connectivityServiceHandler.add();
107
108 // output
109 TapiCreateConnectivityOutputHandler output = TapiCreateConnectivityOutputHandler.create()
110 .addService(connectivityServiceHandler.getModelObject());
111 return new RpcOutput(RpcOutput.Status.RPC_SUCCESS, output.getDataNode());
112
113 } catch (Throwable e) {
114 log.error("Error:", e);
115 return new RpcOutput(RpcOutput.Status.RPC_FAILURE, null);
116 }
117
118 }
119
120
121 /**
122 * Service interface of deleteConnectivityService.
123 *
124 * @param inputVar input of service interface deleteConnectivityService
125 * @return output of service interface deleteConnectivityService
126 */
127 @Override
128 public RpcOutput deleteConnectivityService(RpcInput inputVar) {
129
130 try {
131 TapiDeleteConnectivityInputHandler input = new TapiDeleteConnectivityInputHandler();
132 input.setRpcInput(inputVar);
133 log.info("input serviceId: {}", input.getId());
134
135 TapiConnectivityServiceHandler serviceHandler = TapiConnectivityServiceHandler.create();
136 serviceHandler.setId(input.getId());
137
138 DefaultConnectivityService service = serviceHandler.read();
139
140 service.connection().stream().forEach(connection -> {
141 TapiConnectionHandler connectionHandler = TapiConnectionHandler.create();
142 connectionHandler.setId(Uuid.fromString(connection.connectionId().toString()));
143 DcsBasedTapiConnectionManager manager = DcsBasedTapiConnectionManager.create();
144 manager.deleteConnection(connectionHandler);
145 manager.apply();
146 });
147 serviceHandler.remove();
148
149 TapiDeleteConnectivityOutputHandler output = TapiDeleteConnectivityOutputHandler.create()
150 .addService(serviceHandler.getModelObject());
151
152 return new RpcOutput(RpcOutput.Status.RPC_SUCCESS, output.getDataNode());
153 } catch (Throwable e) {
154 log.error("Error:", e);
155 return new RpcOutput(RpcOutput.Status.RPC_FAILURE, null);
156 }
157 }
158
159 /**
160 * Service interface of updateConnectivityService.
161 *
162 * @param inputVar input of service interface updateConnectivityService
163 * @return output of service interface updateConnectivityService
164 */
165 @Override
166 public RpcOutput updateConnectivityService(RpcInput inputVar) {
167 log.error("Not implemented");
168 return new RpcOutput(RpcOutput.Status.RPC_FAILURE, null);
169
170 }
171
172 /**
173 * Service interface of getConnectivityServiceList.
174 *
175 * @param inputVar input of service interface getConnectivityServiceList
176 * @return output of service interface getConnectivityServiceList
177 */
178 @Override
179 public RpcOutput getConnectivityServiceList(RpcInput inputVar) {
180
181 try {
182 TapiGetConnectivityListOutputHandler output = TapiGetConnectivityListOutputHandler.create();
183 log.info("get list called");
184
185 TapiContextHandler handler = TapiContextHandler.create();
186 handler.read();
187 log.info("model : {}", handler.getModelObject());
188 log.info("conserv : {}", handler.getConnectivityServices());
189
190 handler.getConnectivityServices().stream()
191 .map(TapiObjectHandler::getModelObject)
192 .forEach(output::addService);
193
194 return new RpcOutput(RpcOutput.Status.RPC_SUCCESS, output.getDataNode());
195
196 } catch (Throwable e) {
197 log.error("Error:", e);
198 return new RpcOutput(RpcOutput.Status.RPC_FAILURE, null);
199 }
200 }
201
202
203 /**
204 * Service interface of getConnectivityServiceDetails.
205 *
206 * @param inputVar input of service interface getConnectivityServiceDetails
207 * @return output of service interface getConnectivityServiceDetails
208 */
209 @Override
210 public RpcOutput getConnectivityServiceDetails(RpcInput inputVar) {
211
212 try {
213 TapiGetConnectivityDetailsInputHandler input = new TapiGetConnectivityDetailsInputHandler();
214 input.setRpcInput(inputVar);
215 log.info("input serviceId: {}", input.getId());
216
217 TapiConnectivityServiceHandler handler = TapiConnectivityServiceHandler.create();
218 handler.setId(input.getId());
219 handler.read();
220
221 TapiGetConnectivityDetailsOutputHandler output = TapiGetConnectivityDetailsOutputHandler.create()
222 .addService(handler.getModelObject());
223
224 return new RpcOutput(RpcOutput.Status.RPC_SUCCESS, output.getDataNode());
225
226 } catch (Throwable e) {
227 return new RpcOutput(RpcOutput.Status.RPC_FAILURE, null);
228 }
229
230 }
231
232 /**
233 * Service interface of getConnectionDetails.
234 *
235 * @param inputVar input of service interface getConnectionDetails
236 * @return output of service interface getConnectionDetails
237 */
238 @Override
239 public RpcOutput getConnectionDetails(RpcInput inputVar) {
240 log.error("Not implemented");
241 return new RpcOutput(RpcOutput.Status.RPC_FAILURE, null);
242 }
243
244}