2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Update Copyright (C) 2021 Samsung Electronics Intellectual Property. All rights reserved.
9 * =================================================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ============LICENSE_END=========================================================
24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.impl;
26 import com.google.common.util.concurrent.ListenableFuture;
27 import java.io.IOException;
28 import java.io.PrintWriter;
29 import java.io.StringWriter;
31 import java.util.Optional;
33 import java.util.concurrent.ExecutionException;
34 import java.util.concurrent.TimeUnit;
35 import java.util.stream.Collectors;
36 import org.eclipse.jdt.annotation.NonNull;
37 import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
38 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
39 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.impl.ElasticSearchDataProvider;
40 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.nodb.NoDbDatabaseDataProvider;
41 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
42 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.MsServlet;
43 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
44 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DatabaseDataProvider;
45 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
46 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager;
47 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEsConfig;
48 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.InventoryTreeProvider;
49 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.SdnrDbType;
50 import org.onap.ccsdk.features.sdnr.wt.yang.mapper.YangToolsMapperHelper;
51 import org.opendaylight.mdsal.binding.api.DataBroker;
52 import org.opendaylight.mdsal.binding.api.ReadTransaction;
53 import org.opendaylight.mdsal.binding.api.RpcProviderService;
54 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.Keystore;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredential;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredentialKey;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInput;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceOutput;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInput;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerOutput;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateNetworkElementConnectionInput;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateNetworkElementConnectionOutput;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DataProviderService;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInput;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceOutput;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInput;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerOutput;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInput;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionOutput;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadCmlogListInput;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadCmlogListOutput;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListInput;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListOutput;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListInput;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListOutput;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListInput;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutput;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListInput;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutput;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryInput;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutput;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryDeviceListInput;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryDeviceListOutput;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListInput;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutput;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListInput;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutput;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListInput;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListOutput;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListInput;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListOutput;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mDeviceListInput;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mDeviceListOutput;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mListInput;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mListOutput;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mLtpListInput;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mLtpListOutput;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hDeviceListInput;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hDeviceListOutput;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hListInput;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hListOutput;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hLtpListInput;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hLtpListOutput;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadStatusInput;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadStatusOutput;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadTlsKeyEntryInput;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadTlsKeyEntryOutput;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadTlsKeyEntryOutputBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInput;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceOutput;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInput;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerOutput;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionOutput;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.tls.key.entry.output.Pagination;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.tls.key.entry.output.PaginationBuilder;
118 import org.opendaylight.yangtools.concepts.ObjectRegistration;
119 import org.opendaylight.yangtools.yang.binding.DataObject;
120 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
121 import org.opendaylight.yangtools.yang.common.ErrorType;
122 import org.opendaylight.yangtools.yang.common.RpcResult;
123 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
124 import org.opendaylight.yangtools.yang.common.Uint32;
125 import org.opendaylight.yangtools.yang.common.Uint64;
126 import org.slf4j.Logger;
127 import org.slf4j.LoggerFactory;
129 public class DataProviderServiceImpl implements DataProviderService, AutoCloseable {
131 private static final Logger LOG = LoggerFactory.getLogger(DataProviderServiceImpl.class);
132 public static final String CONFIGURATIONFILE = "etc/dataprovider.properties";
133 private static final long DATABASE_TIMEOUT_MS = 120 * 1000L;
134 private static final @NonNull InstanceIdentifier<Keystore> KEYSTORE_IIF = InstanceIdentifier.create(Keystore.class);
135 private static final Pagination EMPTY_PAGINATION = new PaginationBuilder().setSize(Uint32.valueOf(20))
136 .setTotal(Uint64.valueOf(0)).setPage(Uint64.valueOf(1)).build();
137 private static final long DEFAULT_PAGESIZE = 20;
138 private static final long DEFAULT_PAGE = 1;
140 private final ObjectRegistration<@NonNull DataProviderServiceImpl> rpcReg;
141 private final DatabaseDataProvider dataProvider;
142 private final ConfigurationFileRepresentation configuration;
143 private final DataProviderConfig dbConfig;
144 private final DataBroker dataBroker;
145 private final MsServlet mediatorServerServlet;
147 public DataProviderServiceImpl(final RpcProviderService rpcProviderService, MsServlet mediatorServerServlet,
148 DataBroker dataBroker) throws Exception {
149 this.configuration = new ConfigurationFileRepresentation(CONFIGURATIONFILE);
150 this.dbConfig = new DataProviderConfig(configuration);
151 this.dataBroker = dataBroker;
152 this.mediatorServerServlet = mediatorServerServlet;
153 if(this.dbConfig.isEnabled()) {
154 if (this.dbConfig.getDbType() == SdnrDbType.ELASTICSEARCH) {
155 this.dataProvider = new ElasticSearchDataProvider(this.dbConfig.getEsConfig());
157 this.dataProvider = new SqlDBDataProvider(this.dbConfig.getMariadbConfig());
161 this.dataProvider = new NoDbDatabaseDataProvider();
163 this.dataProvider.waitForYellowDatabaseStatus(DATABASE_TIMEOUT_MS, TimeUnit.MILLISECONDS);
164 mediatorServerServlet.setDataProvider(this.dataProvider.getHtDatabaseMediatorServer());
165 // Register ourselves as the REST API RPC implementation
166 LOG.info("Register RPC Service {}", DataProviderServiceImpl.class.getSimpleName());
167 this.rpcReg = rpcProviderService.registerRpcImplementation(DataProviderService.class, this);
171 private void sendResyncCallbackToApiGateway() {
172 this.mediatorServerServlet.triggerReloadSync();
176 * @return dataProvider
178 public DataProvider getDataProvider() {
179 return dataProvider.getDataProvider();
182 public HtDatabaseClient getRawClient() {
183 return this.dataProvider.getRawClient();
187 * @return data provider for Maintenance()
189 public HtDatabaseMaintenance getHtDatabaseMaintenance() {
190 return dataProvider.getHtDatabaseMaintenance();
194 * @return configuration object
196 public IEsConfig getEsConfig() {
197 return dbConfig.getEsConfig();
202 public void close() throws Exception {
203 LOG.info("Close RPC Service");
204 if (rpcReg != null) {
210 public ListenableFuture<RpcResult<ReadFaultcurrentListOutput>> readFaultcurrentList(
211 ReadFaultcurrentListInput input) {
212 LOG.debug("RPC Request: readFaultCurrentList with input {}", input);
213 RpcResultBuilder<ReadFaultcurrentListOutput> result =
214 read(() -> DataProviderServiceImpl.this.dataProvider.readFaultCurrentList(input));
215 return result.buildFuture();
219 public ListenableFuture<RpcResult<ReadFaultlogListOutput>> readFaultlogList(ReadFaultlogListInput input) {
220 LOG.debug("RPC Request: readFaultlogList with input {}", input);
221 RpcResultBuilder<ReadFaultlogListOutput> result =
222 read(() -> DataProviderServiceImpl.this.dataProvider.readFaultLogList(input));
223 return result.buildFuture();
227 public ListenableFuture<RpcResult<ReadCmlogListOutput>> readCmlogList(ReadCmlogListInput input) {
228 LOG.debug("RPC Request: readCMlogList with input {}", input);
229 RpcResultBuilder<ReadCmlogListOutput> result =
230 read(() -> DataProviderServiceImpl.this.dataProvider.readCMLogList(input));
231 return result.buildFuture();
235 public ListenableFuture<RpcResult<ReadMaintenanceListOutput>> readMaintenanceList(ReadMaintenanceListInput input) {
236 LOG.debug("RPC Request: readMaintenanceList with input {}", input);
237 RpcResultBuilder<ReadMaintenanceListOutput> result =
238 read(() -> DataProviderServiceImpl.this.dataProvider.readMaintenanceList(input));
239 return result.buildFuture();
243 public ListenableFuture<RpcResult<ReadMediatorServerListOutput>> readMediatorServerList(
244 ReadMediatorServerListInput input) {
245 LOG.debug("RPC Request: readMediatorServerList with input {}", input);
246 RpcResultBuilder<ReadMediatorServerListOutput> result =
247 read(() -> DataProviderServiceImpl.this.dataProvider.readMediatorServerList(input));
248 return result.buildFuture();
252 public ListenableFuture<RpcResult<ReadNetworkElementConnectionListOutput>> readNetworkElementConnectionList(
253 ReadNetworkElementConnectionListInput input) {
254 LOG.debug("RPC Request: readNetworkElementConnectionList with input {}", input);
255 RpcResultBuilder<ReadNetworkElementConnectionListOutput> result =
256 read(() -> DataProviderServiceImpl.this.dataProvider.readNetworkElementConnectionList(input));
257 return result.buildFuture();
262 public ListenableFuture<RpcResult<ReadPmdata15mListOutput>> readPmdata15mList(ReadPmdata15mListInput input) {
263 LOG.debug("RPC Request: readPmdata15mList with input {}", input);
264 RpcResultBuilder<ReadPmdata15mListOutput> result =
265 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mList(input));
266 return result.buildFuture();
271 public ListenableFuture<RpcResult<ReadPmdata24hListOutput>> readPmdata24hList(ReadPmdata24hListInput input) {
272 LOG.debug("RPC Request: readPmdata24hList with input {}", input);
273 RpcResultBuilder<ReadPmdata24hListOutput> result =
274 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hList(input));
275 return result.buildFuture();
280 public ListenableFuture<RpcResult<ReadStatusOutput>> readStatus(ReadStatusInput input) {
281 LOG.debug("RPC Request: readStatusEntityList with input {}", input);
282 RpcResultBuilder<ReadStatusOutput> result =
283 read(() -> DataProviderServiceImpl.this.dataProvider.readStatus(input));
284 return result.buildFuture();
289 public ListenableFuture<RpcResult<ReadInventoryListOutput>> readInventoryList(ReadInventoryListInput input) {
290 LOG.debug("RPC Request: readInventoryList with input {}", input);
291 RpcResultBuilder<ReadInventoryListOutput> result =
292 read(() -> DataProviderServiceImpl.this.dataProvider.readInventoryList(input));
293 return result.buildFuture();
297 public ListenableFuture<RpcResult<ReadInventoryDeviceListOutput>> readInventoryDeviceList(
298 ReadInventoryDeviceListInput input) {
299 LOG.debug("RPC Request: readInventoryDeviceList with input {}", input);
300 RpcResultBuilder<ReadInventoryDeviceListOutput> result =
301 read(() -> DataProviderServiceImpl.this.dataProvider.readInventoryDeviceList(input));
302 return result.buildFuture();
306 public ListenableFuture<RpcResult<ReadPmdata15mLtpListOutput>> readPmdata15mLtpList(
307 ReadPmdata15mLtpListInput input) {
308 LOG.debug("RPC Request: readPmdata15mLtpList with input {}", input);
309 RpcResultBuilder<ReadPmdata15mLtpListOutput> result =
310 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mLtpList(input));
311 return result.buildFuture();
315 public ListenableFuture<RpcResult<ReadPmdata15mDeviceListOutput>> readPmdata15mDeviceList(
316 ReadPmdata15mDeviceListInput input) {
317 LOG.debug("RPC Request: readPmdata15mDeviceList with input {}", input);
318 RpcResultBuilder<ReadPmdata15mDeviceListOutput> result =
319 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mDeviceList(input));
320 return result.buildFuture();
324 public ListenableFuture<RpcResult<ReadPmdata24hLtpListOutput>> readPmdata24hLtpList(
325 ReadPmdata24hLtpListInput input) {
326 LOG.debug("RPC Request: readPmdata24hLtpList with input {}", input);
327 RpcResultBuilder<ReadPmdata24hLtpListOutput> result =
328 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hLtpList(input));
329 return result.buildFuture();
333 public ListenableFuture<RpcResult<ReadPmdata24hDeviceListOutput>> readPmdata24hDeviceList(
334 ReadPmdata24hDeviceListInput input) {
335 LOG.debug("RPC Request: readPmdata24hDeviceList with input {}", input);
336 RpcResultBuilder<ReadPmdata24hDeviceListOutput> result =
337 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hDeviceList(input));
338 return result.buildFuture();
342 public ListenableFuture<RpcResult<ReadConnectionlogListOutput>> readConnectionlogList(
343 ReadConnectionlogListInput input) {
344 LOG.debug("RPC Request: readConnectionlogList with input {}", input);
345 RpcResultBuilder<ReadConnectionlogListOutput> result =
346 read(() -> DataProviderServiceImpl.this.dataProvider.readConnectionlogList(input));
347 return result.buildFuture();
351 public ListenableFuture<RpcResult<CreateNetworkElementConnectionOutput>> createNetworkElementConnection(
352 CreateNetworkElementConnectionInput input) {
353 LOG.debug("RPC Request: createNetworkElementConnection with input {}", input);
354 RpcResultBuilder<CreateNetworkElementConnectionOutput> result =
355 read(() -> DataProviderServiceImpl.this.dataProvider.createNetworkElementConnection(input));
356 return result.buildFuture();
360 public ListenableFuture<RpcResult<UpdateNetworkElementConnectionOutput>> updateNetworkElementConnection(
361 UpdateNetworkElementConnectionInput input) {
362 LOG.debug("RPC Request: updateNetworkElementConnection with input {}", input);
363 RpcResultBuilder<UpdateNetworkElementConnectionOutput> result =
364 read(() -> DataProviderServiceImpl.this.dataProvider.updateNetworkElementConnection(input));
365 return result.buildFuture();
369 public ListenableFuture<RpcResult<DeleteNetworkElementConnectionOutput>> deleteNetworkElementConnection(
370 DeleteNetworkElementConnectionInput input) {
371 LOG.debug("RPC Request: deleteNetworkElementConnection with input {}", input);
372 RpcResultBuilder<DeleteNetworkElementConnectionOutput> result =
373 read(() -> DataProviderServiceImpl.this.dataProvider.deleteNetworkElementConnection(input));
374 return result.buildFuture();
378 public ListenableFuture<RpcResult<DeleteMediatorServerOutput>> deleteMediatorServer(
379 DeleteMediatorServerInput input) {
380 LOG.debug("RPC Request: deleteMediatorServer with input {}", input);
381 RpcResultBuilder<DeleteMediatorServerOutput> result =
382 read(() -> DataProviderServiceImpl.this.dataProvider.deleteMediatorServer(input));
383 this.sendResyncCallbackToApiGateway();
384 return result.buildFuture();
388 public ListenableFuture<RpcResult<CreateMediatorServerOutput>> createMediatorServer(
389 CreateMediatorServerInput input) {
390 LOG.debug("RPC Request: createMediatorServer with input {}", input);
391 RpcResultBuilder<CreateMediatorServerOutput> result =
392 read(() -> DataProviderServiceImpl.this.dataProvider.createMediatorServer(input));
393 this.sendResyncCallbackToApiGateway();
394 return result.buildFuture();
398 public ListenableFuture<RpcResult<CreateMaintenanceOutput>> createMaintenance(CreateMaintenanceInput input) {
399 LOG.debug("RPC Request: createMaintenance with input {}", input);
400 RpcResultBuilder<CreateMaintenanceOutput> result =
401 read(() -> DataProviderServiceImpl.this.dataProvider.createMaintenance(input));
402 return result.buildFuture();
406 public ListenableFuture<RpcResult<DeleteMaintenanceOutput>> deleteMaintenance(DeleteMaintenanceInput input) {
407 LOG.debug("RPC Request: deleteMaintenance with input {}", input);
408 RpcResultBuilder<DeleteMaintenanceOutput> result =
409 read(() -> DataProviderServiceImpl.this.dataProvider.deleteMaintenance(input));
410 return result.buildFuture();
414 public ListenableFuture<RpcResult<UpdateMediatorServerOutput>> updateMediatorServer(
415 UpdateMediatorServerInput input) {
416 LOG.debug("RPC Request: updateMediatorServer with input {}", input);
417 RpcResultBuilder<UpdateMediatorServerOutput> result =
418 read(() -> DataProviderServiceImpl.this.dataProvider.updateMediatorServer(input));
419 this.sendResyncCallbackToApiGateway();
420 return result.buildFuture();
424 public ListenableFuture<RpcResult<UpdateMaintenanceOutput>> updateMaintenance(UpdateMaintenanceInput input) {
425 LOG.debug("RPC Request: updateMaintenance with input {}", input);
426 RpcResultBuilder<UpdateMaintenanceOutput> result =
427 read(() -> DataProviderServiceImpl.this.dataProvider.updateMaintenance(input));
428 return result.buildFuture();
432 public ListenableFuture<RpcResult<ReadEventlogListOutput>> readEventlogList(ReadEventlogListInput input) {
433 LOG.debug("RPC Request: readEventlogList with input {}", input);
434 RpcResultBuilder<ReadEventlogListOutput> result =
435 read(() -> DataProviderServiceImpl.this.dataProvider.readEventlogList(input));
436 return result.buildFuture();
440 public ListenableFuture<RpcResult<ReadGuiCutThroughEntryOutput>> readGuiCutThroughEntry(
441 ReadGuiCutThroughEntryInput input) {
442 LOG.debug("RPC Request: getGuiCutThroughEntry with input {}", input);
443 RpcResultBuilder<ReadGuiCutThroughEntryOutput> result =
444 read(() -> DataProviderServiceImpl.this.dataProvider.readGuiCutThroughEntry(input));
445 return result.buildFuture();
449 public ListenableFuture<RpcResult<ReadTlsKeyEntryOutput>> readTlsKeyEntry(ReadTlsKeyEntryInput input) {
450 LOG.debug("RPC Request: readTlsKeyEntry with input {}", input);
451 RpcResultBuilder<ReadTlsKeyEntryOutput> result = read(() -> DataProviderServiceImpl.this.readTlsKeys(input));
452 return result.buildFuture();
455 // -- private classes and functions
457 private ReadTlsKeyEntryOutputBuilder readTlsKeys(ReadTlsKeyEntryInput input) {
458 Optional<Keystore> result = Optional.empty();
459 // The implicite close is not handled correctly by underlaying opendaylight netconf service
460 ReadTransaction transaction = this.dataBroker.newReadOnlyTransaction();
462 result = transaction.read(LogicalDatastoreType.CONFIGURATION, KEYSTORE_IIF).get();
463 } catch (ExecutionException e) {
464 LOG.warn("problem reading netconf-keystore: ", e);
466 } catch (InterruptedException e) {
467 LOG.warn("Interrupted!", e);
468 // Restore interrupted state...
469 Thread.currentThread().interrupt();
471 ReadTlsKeyEntryOutputBuilder output = new ReadTlsKeyEntryOutputBuilder();
472 if (result.isEmpty()) {
473 return output.setData(Set.of()).setPagination(EMPTY_PAGINATION);
475 Map<KeyCredentialKey, KeyCredential> keyCredential = result.get().getKeyCredential();
476 if (keyCredential == null) {
477 return output.setData(Set.of()).setPagination(EMPTY_PAGINATION);
479 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Pagination pagination =
480 input.getPagination();
481 long pageNum = pagination == null ? DEFAULT_PAGE
482 : pagination.getPage() == null ? DEFAULT_PAGE : pagination.getPage().longValue();
483 long size = pagination == null ? DEFAULT_PAGESIZE
484 : pagination.getSize() == null ? DEFAULT_PAGESIZE : pagination.getSize().longValue();
485 long from = pageNum > 0 ? (pageNum - 1) * size : 0;
486 output.setData(keyCredential.keySet().stream().skip(from).limit(size).map(e -> e.getKeyId())
487 .collect(Collectors.toSet()));
488 output.setPagination(new PaginationBuilder().setPage(Uint64.valueOf(pageNum))
489 .setSize(Uint32.valueOf(output.getData().size())).setTotal(Uint64.valueOf(keyCredential.size()))
494 private static String assembleExceptionMessage(Exception e) {
495 StringWriter sw = new StringWriter();
496 PrintWriter pw = new PrintWriter(sw);
497 e.printStackTrace(pw);
499 StringBuffer buf = new StringBuffer();
500 buf.append("Exception: ");
501 buf.append(sw.toString());
502 return buf.toString();
505 public InventoryTreeProvider getInventoryTreeProvider() {
506 return this.dataProvider.getInventoryTreeProvider();
509 private interface GetEntityInput<O extends DataObject,B> {
510 B get() throws IOException;
513 private static <O extends DataObject, B> RpcResultBuilder<O> read(
514 GetEntityInput<O,B> inputgetter) {
515 RpcResultBuilder<O> result;
517 B outputBuilder = inputgetter.get();
518 result = RpcResultBuilder.success(YangToolsMapperHelper.callBuild(outputBuilder));
519 } catch (Exception e) {
520 LOG.info("Exception", e);
521 result = RpcResultBuilder.failed();
522 result.withError(ErrorType.APPLICATION, assembleExceptionMessage(e));
528 public HtUserdataManager getHtDatabaseUserManager() {
529 return this.dataProvider.getUserManager();