e04e109cda97dd5d3e435c26b99e4bfc6ca6dbf1
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2021 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
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
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
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=========================================================
22  *
23  */
24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data;
25
26 import java.io.IOException;
27 import java.sql.ResultSet;
28 import java.sql.SQLException;
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.concurrent.TimeUnit;
32 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
33 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBConfig;
34 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.entity.HtDatabaseEventsService;
35 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.entity.HtDatabaseMaintenanceService;
36 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.rpctypehelper.QueryResult;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriter;
38 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriterUserdata;
39 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBStatusReader;
40 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.DeleteQuery;
41 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
42 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DatabaseDataProvider;
43 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
44 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMediatorserver;
45 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager;
46 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.InventoryTreeProvider;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInput;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceOutputBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInput;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerOutputBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateNetworkElementConnectionOutputBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInput;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceOutputBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInput;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerOutputBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInput;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionOutputBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EntityInput;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MediatorServerEntity;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadCmlogListOutputBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListOutputBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListOutputBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutputBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutputBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutputBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryDeviceListOutputBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutputBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutputBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListOutputBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListOutputBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mDeviceListOutputBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mListOutputBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mLtpListOutputBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hDeviceListOutputBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hListOutputBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hLtpListOutputBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadStatusOutputBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInput;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceOutputBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInput;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerOutputBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionOutputBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Filter;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.Data;
91 import org.slf4j.Logger;
92 import org.slf4j.LoggerFactory;
93
94 public class SqlDBDataProvider extends HtDatabaseEventsService implements DatabaseDataProvider {
95
96     private static final Logger LOG = LoggerFactory.getLogger(SqlDBDataProvider.class);
97
98     private static final String EXCEPTION_UNABLE_TO_WRITE_IN_DATABASE = "unable to write data to database";
99     private static final String EXCEPTION_UNABLE_TO_UPDATE_IN_DATABASE = "unable to update data in database";
100     private static final String EXCEPTION_UNABLE_TO_REMOVE_FROM_DATABASE = "unable to remove data from database";
101
102     private final HtDatabaseMediatorserver dbMediatorServerService;
103     private final HtDatabaseMaintenance dbMaintenanceService;
104     private final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.Data> mediatorserverRW;
105     private final SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.Data> maintenanceRW;
106     private final SqlDBStatusReader readStatus;
107     private final HtUserdataManager usermanager;
108     private final InventoryTreeProvider inventoryTreeProvider;
109     private final String guicutthroughOverride;
110
111     public SqlDBReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.Data> getMaintenanceReaderWriter() {
112         return this.maintenanceRW;
113     }
114
115     public SqlDBReaderWriter<Data> getMediatorServerReaderWriter() {
116         return this.mediatorserverRW;
117     }
118
119     public SqlDBDataProvider(SqlDBConfig config, String guicutthroughOverride) {
120         this(config, true, guicutthroughOverride);
121     }
122
123     public SqlDBDataProvider(SqlDBConfig config, boolean initControllerId, String guicutthroughOverride) {
124         super(config);
125         this.guicutthroughOverride = guicutthroughOverride;
126
127         this.mediatorserverRW = new SqlDBReaderWriter<>(this.dbClient, Entity.MediatorServer, config.getDbSuffix(),
128                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.Data.class,
129                 this.controllerId).setWriteInterface(MediatorServerEntity.class);
130
131         this.maintenanceRW = new SqlDBReaderWriter<>(this.dbClient, Entity.Maintenancemode, config.getDbSuffix(),
132                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.Data.class,
133                 this.controllerId).setWriteInterface(MaintenanceEntity.class);
134
135         this.readStatus = new SqlDBStatusReader(this.dbClient, this.controllerId);
136
137         this.dbMediatorServerService = new HtDatabaseMediatorserver() {
138
139             @Override
140             public List<MediatorServerEntity> getAll() {
141                 return SqlDBDataProvider.this.mediatorserverRW.readAll(MediatorServerEntity.class);
142             }
143         };
144         this.dbMaintenanceService = new HtDatabaseMaintenanceService(this);
145         this.usermanager = new HtUserdataManagerImpl(
146                 new SqlDBReaderWriterUserdata(this.dbClient, Entity.Userdata, config.getDbSuffix()));
147         if (initControllerId) {
148             try {
149                 this.setControllerId();
150             } catch (SQLException e) {
151                 LOG.warn("problem setting controllerId: ", e);
152             }
153         }
154         this.inventoryTreeProvider = new SqlDbInventoryTreeProvider(this.dbClient, this.getControllerId());
155
156     }
157
158     /*-------------------------
159      * Provide access to model API
160      */
161
162     @Override
163     public ReadFaultcurrentListOutputBuilder readFaultCurrentList(EntityInput input) {
164
165         ReadFaultcurrentListOutputBuilder outputBuilder = new ReadFaultcurrentListOutputBuilder();
166
167         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.Data> result =
168                 this.eventRWFaultCurrent.getData(input);
169         outputBuilder.setData(result.getResult());
170         outputBuilder.setPagination(
171                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultcurrent.list.output.PaginationBuilder(
172                         result.getPagination()).build());
173         return outputBuilder;
174     }
175
176     @Override
177     public ReadFaultlogListOutputBuilder readFaultLogList(EntityInput input) {
178         ReadFaultlogListOutputBuilder outputBuilder = new ReadFaultlogListOutputBuilder();
179         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.Data> result =
180                 this.eventRWFaultLog.getData(input);
181         outputBuilder.setData(result.getResult());
182         outputBuilder.setPagination(
183                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.faultlog.list.output.PaginationBuilder(
184                         result.getPagination()).build());
185         return outputBuilder;
186     }
187
188     @Override
189     public ReadCmlogListOutputBuilder readCMLogList(EntityInput input) {
190         ReadCmlogListOutputBuilder outputBuilder = new ReadCmlogListOutputBuilder();
191         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.cmlog.list.output.Data> result =
192                 this.eventRWCMLog.getData(input);
193         outputBuilder.setData(result.getResult());
194         outputBuilder.setPagination(
195                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.cmlog.list.output.PaginationBuilder(
196                         result.getPagination()).build());
197         return outputBuilder;
198     }
199
200     @Override
201     public ReadMaintenanceListOutputBuilder readMaintenanceList(EntityInput input) {
202         ReadMaintenanceListOutputBuilder outputBuilder = new ReadMaintenanceListOutputBuilder();
203         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.Data> result =
204                 this.maintenanceRW.getData(input);
205         outputBuilder.setData(result.getResult());
206         outputBuilder.setPagination(
207                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.maintenance.list.output.PaginationBuilder(
208                         result.getPagination()).build());
209         return outputBuilder;
210     }
211
212     @Override
213     public ReadMediatorServerListOutputBuilder readMediatorServerList(EntityInput input) {
214
215         ReadMediatorServerListOutputBuilder outputBuilder = new ReadMediatorServerListOutputBuilder();
216         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.Data> result =
217                 this.mediatorserverRW.getData(input);
218         outputBuilder.setData(result.getResult());
219         outputBuilder.setPagination(
220                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.mediator.server.list.output.PaginationBuilder(
221                         result.getPagination()).build());
222         return outputBuilder;
223     }
224
225     @Override
226     public ReadNetworkElementConnectionListOutputBuilder readNetworkElementConnectionList(EntityInput input) {
227         ReadNetworkElementConnectionListOutputBuilder outputBuilder =
228                 new ReadNetworkElementConnectionListOutputBuilder();
229         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data> result =
230                 this.networkelementConnectionRW.getData(input);
231         outputBuilder.setData(result.getResult());
232         outputBuilder.setPagination(
233                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.PaginationBuilder(
234                         result.getPagination()).build());
235         return outputBuilder;
236     }
237
238     @Override
239     public ReadInventoryListOutputBuilder readInventoryList(EntityInput input) {
240         ReadInventoryListOutputBuilder outputBuilder = new ReadInventoryListOutputBuilder();
241         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.Data> result =
242                 this.equipmentRW.getData(input);
243         outputBuilder.setData(result.getResult());
244         outputBuilder.setPagination(
245                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.list.output.PaginationBuilder(
246                         result.getPagination()).build());
247         return outputBuilder;
248     }
249
250     @Override
251     public ReadInventoryDeviceListOutputBuilder readInventoryDeviceList(EntityInput input) {
252         ReadInventoryDeviceListOutputBuilder outputBuilder = new ReadInventoryDeviceListOutputBuilder();
253         QueryResult<String> result = this.equipmentRW.getDataDeviceList(input);
254         outputBuilder.setPagination(
255                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.inventory.device.list.output.PaginationBuilder(
256                         result.getPagination()).build());
257         outputBuilder.setData(result.getResultSet());
258         return outputBuilder;
259     }
260
261     @Override
262     public ReadConnectionlogListOutputBuilder readConnectionlogList(EntityInput input) {
263         ReadConnectionlogListOutputBuilder outputBuilder = new ReadConnectionlogListOutputBuilder();
264         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.Data> result =
265                 this.connectionlogRW.getData(input);
266         outputBuilder.setData(result.getResult());
267         outputBuilder.setPagination(
268                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.connectionlog.list.output.PaginationBuilder(
269                         result.getPagination()).build());
270         return outputBuilder;
271     }
272
273     @Override
274     public ReadEventlogListOutputBuilder readEventlogList(EntityInput input) throws IOException {
275         ReadEventlogListOutputBuilder outputBuilder = new ReadEventlogListOutputBuilder();
276         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.Data> result =
277                 this.eventlogRW.getData(input);
278         outputBuilder.setData(result.getResult());
279         outputBuilder.setPagination(
280                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.eventlog.list.output.PaginationBuilder(
281                         result.getPagination()).build());
282         return outputBuilder;
283     }
284
285     @Override
286     public ReadPmdata15mListOutputBuilder readPmdata15mList(EntityInput input) {
287         ReadPmdata15mListOutputBuilder outputBuilder = new ReadPmdata15mListOutputBuilder();
288         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.Data> result =
289                 this.pm15mRW.getData(input);
290         LOG.debug("Read data: readPmdata15mList: {}", result);
291         outputBuilder.setData(result.getResult());
292         outputBuilder.setPagination(
293                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.list.output.PaginationBuilder(
294                         result.getPagination()).build());
295         return outputBuilder;
296     }
297
298     @Override
299     public ReadPmdata24hListOutputBuilder readPmdata24hList(EntityInput input) {
300         ReadPmdata24hListOutputBuilder outputBuilder = new ReadPmdata24hListOutputBuilder();
301         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.Data> result =
302                 this.pm24hRW.getData(input);
303         outputBuilder.setData(result.getResult());
304         outputBuilder.setPagination(
305                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.list.output.PaginationBuilder(
306                         result.getPagination()).build());
307         return outputBuilder;
308     }
309
310     @Override
311     public ReadPmdata15mLtpListOutputBuilder readPmdata15mLtpList(EntityInput input) throws IOException {
312         ReadPmdata15mLtpListOutputBuilder outputBuilder = new ReadPmdata15mLtpListOutputBuilder();
313         QueryResult<String> result = this.pm15mRW.getDataLtpList(input);
314         outputBuilder.setPagination(
315                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.ltp.list.output.PaginationBuilder(
316                         result.getPagination()).build());
317         outputBuilder.setData(result.getResultSet());
318         return outputBuilder;
319     }
320
321     @Override
322     public ReadPmdata15mDeviceListOutputBuilder readPmdata15mDeviceList(EntityInput input) throws IOException {
323         ReadPmdata15mDeviceListOutputBuilder outputBuilder = new ReadPmdata15mDeviceListOutputBuilder();
324         QueryResult<String> result = this.pm15mRW.getDataDeviceList(input);
325         outputBuilder.setPagination(
326                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._15m.device.list.output.PaginationBuilder(
327                         result.getPagination()).build());
328         outputBuilder.setData(result.getResultSet());
329         return outputBuilder;
330     }
331
332     @Override
333     public ReadPmdata24hLtpListOutputBuilder readPmdata24hLtpList(EntityInput input) throws IOException {
334
335         QueryResult<String> result = this.pm24hRW.getDataLtpList(input);
336
337         ReadPmdata24hLtpListOutputBuilder outputBuilder = new ReadPmdata24hLtpListOutputBuilder();
338         new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.ltp.list.output.PaginationBuilder();
339         outputBuilder.setPagination(
340                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.ltp.list.output.PaginationBuilder(
341                         result.getPagination()).build());
342         outputBuilder.setData(result.getResultSet());
343         return outputBuilder;
344     }
345
346     @Override
347     public ReadPmdata24hDeviceListOutputBuilder readPmdata24hDeviceList(EntityInput input) throws IOException {
348
349         QueryResult<String> result = pm24hRW.getDataDeviceList(input);
350
351         ReadPmdata24hDeviceListOutputBuilder outputBuilder = new ReadPmdata24hDeviceListOutputBuilder();
352         outputBuilder.setPagination(
353                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.pmdata._24h.device.list.output.PaginationBuilder(
354                         result.getPagination()).build());
355         outputBuilder.setData(result.getResultSet());
356         return outputBuilder;
357     }
358
359     @Override
360     public ReadStatusOutputBuilder readStatus(EntityInput input) throws IOException {
361         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.status.output.Data> result =
362                 readStatus.getDataStatus(input);
363
364         ReadStatusOutputBuilder outputBuilder = new ReadStatusOutputBuilder();
365         outputBuilder.setData(result.getResult());
366         return outputBuilder;
367     }
368
369     @Override
370     public CreateNetworkElementConnectionOutputBuilder createNetworkElementConnection(
371             NetworkElementConnectionEntity input) throws IOException {
372         String id = this.networkelementConnectionRW.updateOrInsert(input, input.getNodeId());
373         if (id == null) {
374             throw new IOException(EXCEPTION_UNABLE_TO_WRITE_IN_DATABASE);
375         }
376         CreateNetworkElementConnectionOutputBuilder builder = new CreateNetworkElementConnectionOutputBuilder();
377         builder.setId(id).setNodeId(input.getNodeId()).setHost(input.getHost()).setPort(input.getPort())
378                 .setUsername(input.getUsername()).setPassword(input.getPassword()).setIsRequired(input.getIsRequired())
379                 .setCoreModelCapability(input.getCoreModelCapability()).setDeviceType(input.getDeviceType());
380         return builder;
381     }
382
383     @Override
384     public UpdateNetworkElementConnectionOutputBuilder updateNetworkElementConnection(
385             UpdateNetworkElementConnectionInput input) throws IOException {
386         String id = this.networkelementConnectionRW.update(input, input.getId());
387         if (id == null) {
388             throw new IOException(EXCEPTION_UNABLE_TO_UPDATE_IN_DATABASE);
389         }
390         UpdateNetworkElementConnectionOutputBuilder builder = new UpdateNetworkElementConnectionOutputBuilder();
391         builder.setId(id).setNodeId(input.getNodeId()).setHost(input.getHost()).setPort(input.getPort())
392                 .setUsername(input.getUsername()).setPassword(input.getPassword())
393                 .setCoreModelCapability(input.getCoreModelCapability()).setDeviceType(input.getDeviceType());
394         return builder;
395     }
396
397     @Override
398     public DeleteNetworkElementConnectionOutputBuilder deleteNetworkElementConnection(
399             DeleteNetworkElementConnectionInput input) throws IOException {
400         boolean removed = this.networkelementConnectionRW.remove(input.getId()) > 0;
401         if (!removed) {
402             throw new IOException(EXCEPTION_UNABLE_TO_REMOVE_FROM_DATABASE);
403         }
404         return new DeleteNetworkElementConnectionOutputBuilder();
405     }
406
407     @Override
408     public DeleteMediatorServerOutputBuilder deleteMediatorServer(DeleteMediatorServerInput input) throws IOException {
409         boolean removed = this.mediatorserverRW.remove(input.getId()) > 0;
410         if (!removed) {
411             throw new IOException(EXCEPTION_UNABLE_TO_REMOVE_FROM_DATABASE);
412         }
413         return new DeleteMediatorServerOutputBuilder();
414     }
415
416     @Override
417     public DeleteMaintenanceOutputBuilder deleteMaintenance(DeleteMaintenanceInput input) throws IOException {
418         boolean removed = this.maintenanceRW.remove(input.getId()) > 0;
419         if (!removed) {
420             throw new IOException(EXCEPTION_UNABLE_TO_REMOVE_FROM_DATABASE);
421         }
422         return new DeleteMaintenanceOutputBuilder();
423     }
424
425     @Override
426     public UpdateMaintenanceOutputBuilder updateMaintenance(UpdateMaintenanceInput input) throws IOException {
427         if (input.getId() == null) {
428             throw new IOException("please give the id for updating entry");
429         }
430         String id = this.maintenanceRW.update(input, input.getId());
431         if (id == null) {
432             throw new IOException(EXCEPTION_UNABLE_TO_UPDATE_IN_DATABASE);
433         }
434         UpdateMaintenanceOutputBuilder builder = new UpdateMaintenanceOutputBuilder(input).setId(id);
435         return builder;
436     }
437
438     @Override
439     public UpdateMediatorServerOutputBuilder updateMediatorServer(UpdateMediatorServerInput input) throws IOException {
440         if (input.getId() == null) {
441             throw new IOException("please give the id for updating entry");
442         }
443         String id = this.mediatorserverRW.update(input, input.getId());
444         if (id == null) {
445             throw new IOException(EXCEPTION_UNABLE_TO_UPDATE_IN_DATABASE);
446         }
447         UpdateMediatorServerOutputBuilder builder = new UpdateMediatorServerOutputBuilder();
448         builder.setId(id).setName(input.getName()).setUrl(input.getUrl());
449         return builder;
450     }
451
452     @Override
453     public CreateMaintenanceOutputBuilder createMaintenance(CreateMaintenanceInput input) throws IOException {
454         String id = this.maintenanceRW.write(input, input.getNodeId());
455         if (id == null) {
456             throw new IOException(EXCEPTION_UNABLE_TO_WRITE_IN_DATABASE);
457         }
458         CreateMaintenanceOutputBuilder builder = new CreateMaintenanceOutputBuilder(input).setId(id);
459         return builder;
460     }
461
462     @Override
463     public CreateMediatorServerOutputBuilder createMediatorServer(CreateMediatorServerInput input) throws IOException {
464         String id = this.mediatorserverRW.write(input, null);
465
466         if (id == null) {
467             throw new IOException(EXCEPTION_UNABLE_TO_WRITE_IN_DATABASE);
468         }
469         CreateMediatorServerOutputBuilder builder = new CreateMediatorServerOutputBuilder();
470         builder.setId(id).setName(input.getName()).setUrl(input.getUrl());
471         return builder;
472     }
473
474     @Override
475     public ReadGuiCutThroughEntryOutputBuilder readGuiCutThroughEntry(EntityInput input) {
476         ReadGuiCutThroughEntryOutputBuilder outputBuilder = new ReadGuiCutThroughEntryOutputBuilder();
477         QueryResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data> result =
478                 this.guicutthroughRW.getData(input);
479
480         if (!guicutthroughOverride.isEmpty()) {
481             List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data> gcData =
482                     result.getResult();
483             List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data> updatedGcData =
484                     new ArrayList<>();
485             for (int i = 0; i < gcData.size(); i++) {
486                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.Data gcDataItem =
487                         gcData.get(i);
488                 Guicutthrough gcItem =
489                         new GuicutthroughBuilder().setId(gcDataItem.getId()).setName(gcDataItem.getName())
490                                 .setWeburi(guicutthroughOverride + "/" + gcDataItem.getId()).build();
491                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.DataBuilder gcDataBuilder =
492                         new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.DataBuilder(
493                                 gcItem);
494                 updatedGcData.add(gcDataBuilder.build());
495             }
496             outputBuilder.setData(updatedGcData);
497         } else {
498             outputBuilder.setData(result.getResult());
499         }
500         outputBuilder.setPagination(
501                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.gui.cut.through.entry.output.PaginationBuilder()
502                         .build());
503         return outputBuilder;
504     }
505
506     @Override
507     public boolean waitForYellowDatabaseStatus(long timeout, TimeUnit unit) {
508         return true;
509     }
510
511     @Override
512     public DataProvider getDataProvider() {
513         return this;
514     }
515
516     @Override
517     public HtDatabaseMaintenance getHtDatabaseMaintenance() {
518         return this.dbMaintenanceService;
519     }
520
521     @Override
522     public HtDatabaseMediatorserver getHtDatabaseMediatorServer() {
523         return this.dbMediatorServerService;
524     }
525
526     public boolean delete(Entity e, List<Filter> filters) throws SQLException {
527         DeleteQuery query = new DeleteQuery(e, filters);
528         return this.dbClient.write(query.toSql());
529
530     }
531
532     public SqlDBClient getDBService() {
533         return this.dbClient;
534     }
535
536     public boolean setControllerId() throws SQLException {
537         if (this.controllerId == null) {
538             return true;
539         }
540         LOG.info("set controllerId {}", this.controllerId);
541         String query = String.format("SELECT * FROM `%s` WHERE `id`='%s'", this.controllerTableName, this.controllerId);
542         LOG.trace(query);
543         ResultSet data = this.dbClient.read(query);
544
545         if (data == null || !data.next()) {
546             query = String.format("INSERT INTO `%s` (`id`,`desc`) VALUES ('%s','%s')", this.controllerTableName,
547                     this.controllerId, "");
548             LOG.trace(query);
549             try {
550                 if (data != null) {
551                     data.close();
552                 }
553             } catch (SQLException ignore) {
554             }
555             return this.dbClient.write(query);
556         } else {
557             this.controllerId = data.getString(0);
558             LOG.trace("controllerId already set");
559         }
560         return true;
561     }
562
563     public void waitForDatabaseReady(int i, TimeUnit unit) {
564         this.dbClient.waitForYellowStatus(unit.convert(i, TimeUnit.MILLISECONDS));
565     }
566
567     public String getControllerId() {
568         return this.controllerId;
569     }
570
571     @Override
572     public HtUserdataManager getUserManager() {
573         return this.usermanager;
574     }
575
576     @Override
577     public InventoryTreeProvider getInventoryTreeProvider() {
578         return this.inventoryTreeProvider;
579     }
580
581 }