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;
24 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
25 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceRPCServiceAPI;
26 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceService;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceEntity;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.show.required.network.element.output.RequiredNetworkElementBuilder;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
42 public class MaintenanceServiceImpl implements MaintenanceService, MaintenanceRPCServiceAPI, AutoCloseable {
44 private static final Logger LOG = LoggerFactory.getLogger(MaintenanceServiceImpl.class);
46 private final HtDatabaseMaintenanceService database;
48 public MaintenanceServiceImpl(HtDatabaseClient client) throws ClassNotFoundException {
50 LOG.info("Create {} start", MaintenanceServiceImpl.class);
51 database = new HtDatabaseMaintenanceService(client);
52 LOG.info("Create {} finished. DB Service {} started.", MaintenanceServiceImpl.class, client != null ? "sucessfully" : "not" );
56 public void createIfNotExists(String mountPointNodeName) {
57 database.createIfNotExists(mountPointNodeName);
60 public void deleteIfNotRequired(String mountPointNodeName) {
61 database.deleteIfNotRequired(mountPointNodeName);
64 /*-------------------------------------------------
65 * Interface AutoClosable
69 public void close() throws Exception {
72 /*-------------------------------------------------
73 * Interface MaintenanceRPCServiceAPI
77 public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys() {
78 List<MaintenanceEntity> all = database.getAll();
80 List<String> mountpointList = new ArrayList<>();
81 for (MaintenanceEntity oneOfAll : all) {
82 mountpointList.add(oneOfAll.getNodeId());
85 GetRequiredNetworkElementKeysOutputBuilder outputBuilder = new GetRequiredNetworkElementKeysOutputBuilder();
86 outputBuilder.setMountpointNames(mountpointList);
91 public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input) {
92 ShowRequiredNetworkElementOutputBuilder outputBuilder = new ShowRequiredNetworkElementOutputBuilder();
93 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
94 if (maintenanceMode != null) {
95 RequiredNetworkElementBuilder valueBuilder = new RequiredNetworkElementBuilder();
97 valueBuilder.setMountpointName(maintenanceMode.getNodeId());
98 valueBuilder.setStatus(String.valueOf(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, "","")));
99 valueBuilder.setDescription("Pretty description here");
100 outputBuilder.setRequiredNetworkElement(valueBuilder.build());
102 LOG.warn("No info in database for {}",input.getMountpointName());
104 return outputBuilder;
108 public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input) {
110 GetMaintenanceModeOutputBuilder outputBuilder;
111 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
112 if (maintenanceMode != null) {
113 outputBuilder = new GetMaintenanceModeOutputBuilder(maintenanceMode);
115 throw new IllegalArgumentException("No info in database for "+input.getMountpointName());
117 return outputBuilder;
121 public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input) {
123 SetMaintenanceModeOutputBuilder outputBuilder = new SetMaintenanceModeOutputBuilder();
124 MaintenanceBuilder mb = new MaintenanceBuilder(input);
125 MaintenanceEntity m = mb.build();
126 database.setMaintenance(m);
127 return outputBuilder;
132 public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input) {
134 StringBuffer resultString = new StringBuffer();
136 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
138 ZonedDateTime now = MaintenanceCalculator.valueOf(input.getTestDate());
140 resultString.append("In database table: ");
141 resultString.append(maintenanceMode != null);
142 resultString.append(" Maintenance active: ");
143 resultString.append(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, input.getObjectIdRef(),
144 input.getProblemName(), now));
145 resultString.append(" at Timestamp: ");
146 resultString.append(now);
147 TestMaintenanceModeOutputBuilder outputBuilder = maintenanceMode != null
148 ? new TestMaintenanceModeOutputBuilder(maintenanceMode)
149 : new TestMaintenanceModeOutputBuilder();
150 outputBuilder.setResultString(resultString.toString());
151 return outputBuilder;
155 /*-------------------------------------------------
156 * Interface MaintenaceService
160 public boolean isONFObjectInMaintenance(String mountpointReference, String objectIdRef, String problem) {
161 MaintenanceEntity maintenanceMode = database.getMaintenance(mountpointReference);
162 boolean res = MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, objectIdRef, problem);
163 LOG.debug("inMaintenance={} for mountpoint/id/problem:{} {} {} Definition: {}",res, mountpointReference, objectIdRef, problem, this );