2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.impl;
24 import com.google.common.util.concurrent.ListenableFuture;
25 import java.io.IOException;
26 import java.io.PrintWriter;
27 import java.io.StringWriter;
28 import java.util.Arrays;
30 import java.util.Optional;
31 import java.util.concurrent.ExecutionException;
32 import java.util.concurrent.TimeUnit;
33 import java.util.stream.Collectors;
34 import org.eclipse.jdt.annotation.NonNull;
35 import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
36 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.DatabaseDataProvider;
38 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.impl.ElasticSearchDataProvider;
39 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.impl.HtUserdataManagerImpl;
40 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
41 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.MsServlet;
42 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
43 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
44 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager;
45 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.IEsConfig;
46 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.SdnrDbType;
47 import org.opendaylight.mdsal.binding.api.DataBroker;
48 import org.opendaylight.mdsal.binding.api.RpcProviderService;
49 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.Keystore;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredential;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredentialKey;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInput;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceOutput;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInput;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerOutput;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateNetworkElementConnectionInput;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateNetworkElementConnectionOutput;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DataProviderService;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInput;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceOutput;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInput;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerOutput;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInput;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionOutput;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListInput;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListOutput;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListInput;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListOutput;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListInput;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutput;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListInput;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutput;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryInput;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutput;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListInput;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutput;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListInput;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutput;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListInput;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListOutput;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListInput;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListOutput;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mDeviceListInput;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mDeviceListOutput;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mListInput;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mListOutput;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mLtpListInput;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mLtpListOutput;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hDeviceListInput;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hDeviceListOutput;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hListInput;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hListOutput;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hLtpListInput;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hLtpListOutput;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadStatusInput;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadStatusOutput;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInput;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceOutput;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInput;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerOutput;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionOutput;
104 import org.opendaylight.yangtools.concepts.Builder;
105 import org.opendaylight.yangtools.concepts.ObjectRegistration;
106 import org.opendaylight.yangtools.yang.binding.DataObject;
107 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
108 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
109 import org.opendaylight.yangtools.yang.common.RpcResult;
110 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
111 import org.opendaylight.yangtools.yang.common.Uint32;
112 import org.opendaylight.yangtools.yang.common.Uint64;
113 import org.slf4j.Logger;
114 import org.slf4j.LoggerFactory;
116 public class DataProviderServiceImpl implements DataProviderService, AutoCloseable {
118 private static final Logger LOG = LoggerFactory.getLogger(DataProviderServiceImpl.class);
119 public static final String CONFIGURATIONFILE = "etc/dataprovider.properties";
120 private static final long DATABASE_TIMEOUT_MS = 120 * 1000L;
121 private static final @NonNull InstanceIdentifier<Keystore> KEYSTORE_IIF = InstanceIdentifier.create(Keystore.class);
122 private static final long DEFAULT_PAGESIZE = 20;
123 private static final long DEFAULT_PAGE = 1;
125 private final ObjectRegistration<@NonNull DataProviderServiceImpl> rpcReg;
126 private final DatabaseDataProvider dataProvider;
127 private final ConfigurationFileRepresentation configuration;
128 private final DataProviderConfig dbConfig;
129 private final HtUserdataManager dbUserManager;
130 private final DataBroker dataBroker;
131 private final MsServlet mediatorServerServlet;
132 public DataProviderServiceImpl(final RpcProviderService rpcProviderService, MsServlet mediatorServerServlet,
133 DataBroker dataBroker) throws Exception {
134 this.configuration = new ConfigurationFileRepresentation(CONFIGURATIONFILE);
135 this.dbConfig = new DataProviderConfig(configuration);
136 this.dataBroker = dataBroker;
137 this.mediatorServerServlet = mediatorServerServlet;
138 if (this.dbConfig.getDbType() == SdnrDbType.ELASTICSEARCH) {
139 this.dataProvider = new ElasticSearchDataProvider(this.dbConfig.getEsConfig());
141 this.dataProvider = new SqlDBDataProvider(this.dbConfig.getMariadbConfig());
143 this.dataProvider.waitForYellowDatabaseStatus(DATABASE_TIMEOUT_MS, TimeUnit.MILLISECONDS);
144 mediatorServerServlet.setDataProvider(this.dataProvider.getHtDatabaseMediatorServer());
145 this.dbUserManager = new HtUserdataManagerImpl(this.dataProvider.getRawClient());
146 // Register ourselves as the REST API RPC implementation
147 LOG.info("Register RPC Service " + DataProviderServiceImpl.class.getSimpleName());
148 this.rpcReg = rpcProviderService.registerRpcImplementation(DataProviderService.class, this);
151 private void sendResyncCallbackToApiGateway() {
152 this.mediatorServerServlet.triggerReloadSync();
156 * @return dataProvider
158 public DataProvider getDataProvider() {
159 return dataProvider.getDataProvider();
162 public HtDatabaseClient getRawClient() {
163 return this.dataProvider.getRawClient();
167 * @return data provider for Maintenance()
169 public HtDatabaseMaintenance getHtDatabaseMaintenance() {
170 return dataProvider.getHtDatabaseMaintenance();
174 * @return configuration object
176 public IEsConfig getEsConfig() {
177 return dbConfig.getEsConfig();
182 public void close() throws Exception {
183 LOG.info("Close RPC Service");
184 if (rpcReg != null) {
190 public ListenableFuture<RpcResult<ReadFaultcurrentListOutput>> readFaultcurrentList(
191 ReadFaultcurrentListInput input) {
192 LOG.debug("RPC Request: readFaultCurrentList with input {}", input);
193 RpcResultBuilder<ReadFaultcurrentListOutput> result =
194 read(() -> DataProviderServiceImpl.this.dataProvider.readFaultCurrentList(input));
195 return result.buildFuture();
199 public ListenableFuture<RpcResult<ReadFaultlogListOutput>> readFaultlogList(ReadFaultlogListInput input) {
200 LOG.debug("RPC Request: readFaultlogList with input {}", input);
201 RpcResultBuilder<ReadFaultlogListOutput> result =
202 read(() -> DataProviderServiceImpl.this.dataProvider.readFaultLogList(input));
203 return result.buildFuture();
207 public ListenableFuture<RpcResult<ReadMaintenanceListOutput>> readMaintenanceList(ReadMaintenanceListInput input) {
208 LOG.debug("RPC Request: readMaintenanceList with input {}", input);
209 RpcResultBuilder<ReadMaintenanceListOutput> result =
210 read(() -> DataProviderServiceImpl.this.dataProvider.readMaintenanceList(input));
211 return result.buildFuture();
215 public ListenableFuture<RpcResult<ReadMediatorServerListOutput>> readMediatorServerList(
216 ReadMediatorServerListInput input) {
217 LOG.debug("RPC Request: readMediatorServerList with input {}", input);
218 RpcResultBuilder<ReadMediatorServerListOutput> result =
219 read(() -> DataProviderServiceImpl.this.dataProvider.readMediatorServerList(input));
220 return result.buildFuture();
224 public ListenableFuture<RpcResult<ReadNetworkElementConnectionListOutput>> readNetworkElementConnectionList(
225 ReadNetworkElementConnectionListInput input) {
226 LOG.debug("RPC Request: readNetworkElementConnectionList with input {}", input);
227 RpcResultBuilder<ReadNetworkElementConnectionListOutput> result =
228 read(() -> DataProviderServiceImpl.this.dataProvider.readNetworkElementConnectionList(input));
229 return result.buildFuture();
234 public ListenableFuture<RpcResult<ReadPmdata15mListOutput>> readPmdata15mList(ReadPmdata15mListInput input) {
235 LOG.debug("RPC Request: readPmdata15mList with input {}", input);
236 RpcResultBuilder<ReadPmdata15mListOutput> result =
237 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mList(input));
238 return result.buildFuture();
243 public ListenableFuture<RpcResult<ReadPmdata24hListOutput>> readPmdata24hList(ReadPmdata24hListInput input) {
244 LOG.debug("RPC Request: readPmdata24hList with input {}", input);
245 RpcResultBuilder<ReadPmdata24hListOutput> result =
246 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hList(input));
247 return result.buildFuture();
252 public ListenableFuture<RpcResult<ReadStatusOutput>> readStatus(ReadStatusInput input) {
253 LOG.debug("RPC Request: readStatusEntityList with input {}", input);
254 RpcResultBuilder<ReadStatusOutput> result = read(() -> DataProviderServiceImpl.this.dataProvider.readStatus());
255 return result.buildFuture();
260 public ListenableFuture<RpcResult<ReadInventoryListOutput>> readInventoryList(ReadInventoryListInput input) {
261 LOG.debug("RPC Request: readInventoryList with input {}", input);
262 RpcResultBuilder<ReadInventoryListOutput> result =
263 read(() -> DataProviderServiceImpl.this.dataProvider.readInventoryList(input));
264 return result.buildFuture();
268 public ListenableFuture<RpcResult<ReadPmdata15mLtpListOutput>> readPmdata15mLtpList(
269 ReadPmdata15mLtpListInput input) {
270 LOG.debug("RPC Request: readPmdata15mLtpList with input {}", input);
271 RpcResultBuilder<ReadPmdata15mLtpListOutput> result =
272 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mLtpList(input));
273 return result.buildFuture();
277 public ListenableFuture<RpcResult<ReadPmdata15mDeviceListOutput>> readPmdata15mDeviceList(
278 ReadPmdata15mDeviceListInput input) {
279 LOG.debug("RPC Request: readPmdata15mDeviceList with input {}", input);
280 RpcResultBuilder<ReadPmdata15mDeviceListOutput> result =
281 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata15mDeviceList(input));
282 return result.buildFuture();
286 public ListenableFuture<RpcResult<ReadPmdata24hLtpListOutput>> readPmdata24hLtpList(
287 ReadPmdata24hLtpListInput input) {
288 LOG.debug("RPC Request: readPmdata24hLtpList with input {}", input);
289 RpcResultBuilder<ReadPmdata24hLtpListOutput> result =
290 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hLtpList(input));
291 return result.buildFuture();
295 public ListenableFuture<RpcResult<ReadPmdata24hDeviceListOutput>> readPmdata24hDeviceList(
296 ReadPmdata24hDeviceListInput input) {
297 LOG.debug("RPC Request: readPmdata24hDeviceList with input {}", input);
298 RpcResultBuilder<ReadPmdata24hDeviceListOutput> result =
299 read(() -> DataProviderServiceImpl.this.dataProvider.readPmdata24hDeviceList(input));
300 return result.buildFuture();
304 public ListenableFuture<RpcResult<ReadConnectionlogListOutput>> readConnectionlogList(
305 ReadConnectionlogListInput input) {
306 LOG.debug("RPC Request: readConnectionlogList with input {}", input);
307 RpcResultBuilder<ReadConnectionlogListOutput> result =
308 read(() -> DataProviderServiceImpl.this.dataProvider.readConnectionlogList(input));
309 return result.buildFuture();
313 public ListenableFuture<RpcResult<CreateNetworkElementConnectionOutput>> createNetworkElementConnection(
314 CreateNetworkElementConnectionInput input) {
315 LOG.debug("RPC Request: createNetworkElementConnection with input {}", input);
316 RpcResultBuilder<CreateNetworkElementConnectionOutput> result =
317 read(() -> DataProviderServiceImpl.this.dataProvider.createNetworkElementConnection(input));
318 return result.buildFuture();
322 public ListenableFuture<RpcResult<UpdateNetworkElementConnectionOutput>> updateNetworkElementConnection(
323 UpdateNetworkElementConnectionInput input) {
324 LOG.debug("RPC Request: updateNetworkElementConnection with input {}", input);
325 RpcResultBuilder<UpdateNetworkElementConnectionOutput> result =
326 read(() -> DataProviderServiceImpl.this.dataProvider.updateNetworkElementConnection(input));
327 return result.buildFuture();
331 public ListenableFuture<RpcResult<DeleteNetworkElementConnectionOutput>> deleteNetworkElementConnection(
332 DeleteNetworkElementConnectionInput input) {
333 LOG.debug("RPC Request: deleteNetworkElementConnection with input {}", input);
334 RpcResultBuilder<DeleteNetworkElementConnectionOutput> result =
335 read(() -> DataProviderServiceImpl.this.dataProvider.deleteNetworkElementConnection(input));
336 return result.buildFuture();
340 public ListenableFuture<RpcResult<DeleteMediatorServerOutput>> deleteMediatorServer(
341 DeleteMediatorServerInput input) {
342 LOG.debug("RPC Request: deleteMediatorServer with input {}", input);
343 RpcResultBuilder<DeleteMediatorServerOutput> result =
344 read(() -> DataProviderServiceImpl.this.dataProvider.deleteMediatorServer(input));
345 this.sendResyncCallbackToApiGateway();
346 return result.buildFuture();
350 public ListenableFuture<RpcResult<CreateMediatorServerOutput>> createMediatorServer(
351 CreateMediatorServerInput input) {
352 LOG.debug("RPC Request: createMediatorServer with input {}", input);
353 RpcResultBuilder<CreateMediatorServerOutput> result =
354 read(() -> DataProviderServiceImpl.this.dataProvider.createMediatorServer(input));
355 this.sendResyncCallbackToApiGateway();
356 return result.buildFuture();
360 public ListenableFuture<RpcResult<CreateMaintenanceOutput>> createMaintenance(CreateMaintenanceInput input) {
361 LOG.debug("RPC Request: createMaintenance with input {}", input);
362 RpcResultBuilder<CreateMaintenanceOutput> result =
363 read(() -> DataProviderServiceImpl.this.dataProvider.createMaintenance(input));
364 return result.buildFuture();
368 public ListenableFuture<RpcResult<DeleteMaintenanceOutput>> deleteMaintenance(DeleteMaintenanceInput input) {
369 LOG.debug("RPC Request: deleteMaintenance with input {}", input);
370 RpcResultBuilder<DeleteMaintenanceOutput> result =
371 read(() -> DataProviderServiceImpl.this.dataProvider.deleteMaintenance(input));
372 return result.buildFuture();
376 public ListenableFuture<RpcResult<UpdateMediatorServerOutput>> updateMediatorServer(
377 UpdateMediatorServerInput input) {
378 LOG.debug("RPC Request: updateMediatorServer with input {}", input);
379 RpcResultBuilder<UpdateMediatorServerOutput> result =
380 read(() -> DataProviderServiceImpl.this.dataProvider.updateMediatorServer(input));
381 this.sendResyncCallbackToApiGateway();
382 return result.buildFuture();
386 public ListenableFuture<RpcResult<UpdateMaintenanceOutput>> updateMaintenance(UpdateMaintenanceInput input) {
387 LOG.debug("RPC Request: updateMaintenance with input {}", input);
388 RpcResultBuilder<UpdateMaintenanceOutput> result =
389 read(() -> DataProviderServiceImpl.this.dataProvider.updateMaintenance(input));
390 return result.buildFuture();
394 public ListenableFuture<RpcResult<ReadEventlogListOutput>> readEventlogList(ReadEventlogListInput input) {
395 LOG.debug("RPC Request: readEventlogList with input {}", input);
396 RpcResultBuilder<ReadEventlogListOutput> result =
397 read(() -> DataProviderServiceImpl.this.dataProvider.readEventlogList(input));
398 return result.buildFuture();
402 public ListenableFuture<RpcResult<ReadGuiCutThroughEntryOutput>> readGuiCutThroughEntry(
403 ReadGuiCutThroughEntryInput input) {
404 LOG.debug("RPC Request: getGuiCutThroughEntry with input {}", input);
405 RpcResultBuilder<ReadGuiCutThroughEntryOutput> result =
406 read(() -> DataProviderServiceImpl.this.dataProvider.readGuiCutThroughEntry(input));
407 return result.buildFuture();
410 private static String assembleExceptionMessage(Exception e) {
411 StringWriter sw = new StringWriter();
412 PrintWriter pw = new PrintWriter(sw);
413 e.printStackTrace(pw);
415 StringBuffer buf = new StringBuffer();
416 buf.append("Exception: ");
417 buf.append(sw.toString());
418 return buf.toString();
421 private interface GetEntityInput<O extends DataObject> {
422 Builder<O> get() throws IOException;
425 private static <O extends DataObject, I extends DataObject> RpcResultBuilder<O> read(
426 GetEntityInput<O> inputgetter) {
427 RpcResultBuilder<O> result;
429 Builder<O> outputBuilder = inputgetter.get();
430 result = RpcResultBuilder.success(outputBuilder);
431 } catch (Exception e) {
432 LOG.info("Exception", e);
433 result = RpcResultBuilder.failed();
434 result.withError(ErrorType.APPLICATION, assembleExceptionMessage(e));
439 public HtUserdataManager getHtDatabaseUserManager() {
440 return this.dbUserManager;