1 /*******************************************************************************
2 * ============LICENSE_START========================================================================
3 * ONAP : ccsdk feature sdnr wt
4 * =================================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6 * =================================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software distributed under the License
13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14 * or implied. See the License for the specific language governing permissions and limitations under
16 * ============LICENSE_END==========================================================================
17 ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.impl;
20 import java.time.ZonedDateTime;
21 import java.util.ArrayList;
22 import java.util.List;
23 import javax.annotation.Nonnull;
24 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsBaseRequireNetworkElement;
25 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDataBaseReaderAndWriter;
26 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseClientAbstract;
27 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode;
28 import org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl.IndexMwtnService;
29 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceRPCServiceAPI;
30 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceService;
31 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceFilter;
32 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceFilterDefinition;
33 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceMode;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.show.required.network.element.output.RequiredNetworkElementBuilder;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
47 public class MaintenanceServiceImpl implements MaintenanceService, MaintenanceRPCServiceAPI, AutoCloseable {
49 private static final Logger LOG = LoggerFactory.getLogger(MaintenanceServiceImpl.class);
52 * Use the Client Index
54 private HtDataBaseReaderAndWriter<EsMaintenanceMode> maintenanceRW;
55 private HtDataBaseReaderAndWriter<EsBaseRequireNetworkElement> requiredNeRW;
57 public MaintenanceServiceImpl(HtDatabaseClientAbstract client) {
59 LOG.info("Create {} start", MaintenanceServiceImpl.class);
62 // Create control structure
63 maintenanceRW = new HtDataBaseReaderAndWriter<>(client, EsMaintenanceMode.ESDATATYPENAME, EsMaintenanceMode.class);
64 requiredNeRW = new HtDataBaseReaderAndWriter<>(client, EsBaseRequireNetworkElement.ESDATATYPENAME, EsBaseRequireNetworkElement.class);
66 } catch (Exception e) {
67 LOG.error("Can not start database client. Exception: {}", e.getMessage());
69 LOG.info("Create {} finished. DB Service {} started.", MaintenanceServiceImpl.class, client != null ? "sucessfully" : "not" );
73 public MaintenanceServiceImpl(HtDatabaseNode database) {
74 this(getDatabaseClient(database));
77 private static HtDatabaseClientAbstract getDatabaseClient(HtDatabaseNode database) {
78 return new HtDatabaseClientAbstract(IndexMwtnService.INDEX,database);
82 * Get existing object for mountpoint to manage maintenance mode
83 * @return Object with configuration
85 private @Nonnull EsMaintenanceMode getMaintenance(String mountpointId)
87 EsMaintenanceMode deviceMaintenanceMode = null;
88 if (maintenanceRW != null) {
89 deviceMaintenanceMode = maintenanceRW.doRead(mountpointId);
92 return deviceMaintenanceMode == null ? EsMaintenanceMode.getNotInMaintenance() : deviceMaintenanceMode;
95 * Check in required ne if entry exists for mountpointNodeName
96 * @param mountPointNodeName
99 private boolean isRequireNe(String mountPointNodeName) {
100 EsBaseRequireNetworkElement ne=null;
101 if( requiredNeRW!=null)
103 LOG.debug("searching for entry in required-networkelement for "+mountPointNodeName);
104 ne = requiredNeRW.doRead(mountPointNodeName);
106 LOG.warn("cannot read db. no db reader writer initialized");
110 public EsMaintenanceMode createIfNotExists(String mountpointId)
112 EsMaintenanceMode deviceMaintenanceMode = null;
113 if (maintenanceRW != null)
115 deviceMaintenanceMode = maintenanceRW.doRead(mountpointId);
116 if(deviceMaintenanceMode==null)
118 LOG.debug("creating empty maintenance object in database");
119 deviceMaintenanceMode=new EsMaintenanceMode(mountpointId);
120 EsMaintenanceFilter filter = new EsMaintenanceFilter();
121 filter.setDescription("");
122 filter.setStart(null);
124 EsMaintenanceFilterDefinition definition=new EsMaintenanceFilterDefinition();
125 definition.setObjectIdRef("");
126 definition.setProblem("");
127 filter.setDefinition(definition);
128 deviceMaintenanceMode.addFilter(filter );
129 maintenanceRW.doWrite(deviceMaintenanceMode);
131 LOG.debug("maintenance object already exists in database");
134 LOG.warn("cannot create maintenance obj. db reader/writer is null");
137 return deviceMaintenanceMode;
139 public void deleteIfNotRequired(String mountPointNodeName) {
141 if(!this.isRequireNe(mountPointNodeName))
143 EsMaintenanceMode deviceMaintenanceMode = new EsMaintenanceMode(mountPointNodeName);
144 if (maintenanceRW != null)
146 LOG.debug("removing maintenance object in database for "+mountPointNodeName);
147 maintenanceRW.doRemove(deviceMaintenanceMode);
149 LOG.warn("cannot create maintenance obj. db reader/writer is null");
157 /*-------------------------------------------------
158 * Interface AutoClosable
162 public void close() throws Exception {
165 /*-------------------------------------------------
166 * Interface MaintenanceRPCServiceAPI
170 public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys() {
171 GetRequiredNetworkElementKeysOutputBuilder outputBuilder = new GetRequiredNetworkElementKeysOutputBuilder();
172 List<EsMaintenanceMode> all = maintenanceRW != null ? maintenanceRW.doReadAll() : new ArrayList<>();
173 List<String> mountpointList = new ArrayList<>();
174 for (EsMaintenanceMode oneOfAll : all) {
175 mountpointList.add(oneOfAll.getEsId());
178 outputBuilder.setMountpointNames(mountpointList);
179 return outputBuilder;
183 public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input) {
184 ShowRequiredNetworkElementOutputBuilder outputBuilder = new ShowRequiredNetworkElementOutputBuilder();
185 EsMaintenanceMode maintenanceMode = new EsMaintenanceMode(input.getMountpointName());
186 if (maintenanceRW != null) {
187 maintenanceMode = maintenanceRW.doRead(maintenanceMode);
189 if (maintenanceMode != null) {
190 RequiredNetworkElementBuilder valueBuilder = new RequiredNetworkElementBuilder();
192 valueBuilder.setMountpointName(maintenanceMode.getNode());
193 valueBuilder.setStatus(String.valueOf(maintenanceMode.isONFObjectInMaintenance("","")));
194 valueBuilder.setDescription("Pretty description here");
195 outputBuilder.setRequiredNetworkElement(valueBuilder.build());
197 LOG.warn("No info in database for {}",input.getMountpointName());
199 return outputBuilder;
203 public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input) {
204 EsMaintenanceMode maintenanceMode = null;
205 GetMaintenanceModeOutputBuilder outputBuilder;
206 if (maintenanceRW != null) {
207 maintenanceMode = maintenanceRW.doRead(input.getMountpointName());
209 if (maintenanceMode != null) {
210 outputBuilder = new GetMaintenanceModeOutputBuilder(maintenanceMode);
212 throw new IllegalArgumentException("No info in database for "+input.getMountpointName());
214 return outputBuilder;
218 public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input) {
220 SetMaintenanceModeOutputBuilder outputBuilder = new SetMaintenanceModeOutputBuilder();
221 if (maintenanceRW != null) {
222 EsMaintenanceMode m = new EsMaintenanceMode(input);
223 if (maintenanceRW.doWrite(m) == null) {
224 throw new IllegalArgumentException("Problem writing to database: "+input.getMountpointName());
226 outputBuilder = new SetMaintenanceModeOutputBuilder(m);
227 LOG.info("Wrote maintenance object {}", m.toString());
229 return outputBuilder;
233 public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input) {
235 StringBuffer resultString = new StringBuffer();
237 EsMaintenanceMode maintenanceMode = getMaintenance(input.getMountpointName());
239 TestMaintenanceModeOutputBuilder outputBuilder = new TestMaintenanceModeOutputBuilder(maintenanceMode);
241 ZonedDateTime now = EsMaintenanceFilter.valueOf(input.getTestDate());
243 resultString.append("In database table: ");
244 resultString.append(!(EsMaintenanceMode.getNotInMaintenance() == maintenanceMode));
245 resultString.append(" Maintenance active: ");
246 resultString.append(maintenanceMode.isONFObjectInMaintenance(input.getObjectIdRef(), input.getProblemName(), now));
247 resultString.append(" at Timestamp: ");
248 resultString.append(now);
250 outputBuilder.setResultString(resultString.toString());
252 return outputBuilder;
255 /*-------------------------------------------------
256 * Interface MaintenaceService
260 public boolean isONFObjectInMaintenance(String mountpointReference, String objectIdRef, String problem) {
261 EsMaintenanceMode maintenanceMode = getMaintenance(mountpointReference);
262 boolean res = maintenanceMode.isONFObjectInMaintenance(objectIdRef, problem);
263 LOG.debug("inMaintenance={} for mountpoint/id/problem:{} {} {} Definition: {}",res, mountpointReference, objectIdRef, problem, this );