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==========================================================================
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 org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
24 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceRPCServiceAPI;
25 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.MaintenanceService;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceEntity;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.show.required.network.element.output.RequiredNetworkElementBuilder;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
41 public class MaintenanceServiceImpl implements MaintenanceService, MaintenanceRPCServiceAPI, AutoCloseable {
43 private static final Logger LOG = LoggerFactory.getLogger(MaintenanceServiceImpl.class);
45 private final HtDatabaseMaintenance database;
47 public MaintenanceServiceImpl(HtDatabaseMaintenance client) {
49 LOG.info("Create {} start", MaintenanceServiceImpl.class);
51 LOG.info("Create {} finished. DB Service {} started.", MaintenanceServiceImpl.class, client != null ? "sucessfully" : "not" );
56 public void createIfNotExists(String mountPointNodeName) {
57 database.createIfNotExists(mountPointNodeName);
61 public void deleteIfNotRequired(String mountPointNodeName) {
62 database.deleteIfNotRequired(mountPointNodeName);
65 /*-------------------------------------------------
66 * Interface AutoClosable
70 public void close() throws Exception {
73 /*-------------------------------------------------
74 * Interface MaintenanceRPCServiceAPI
78 public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys() {
79 List<MaintenanceEntity> all = database.getAll();
81 List<String> mountpointList = new ArrayList<>();
82 for (MaintenanceEntity oneOfAll : all) {
83 mountpointList.add(oneOfAll.getNodeId());
86 GetRequiredNetworkElementKeysOutputBuilder outputBuilder = new GetRequiredNetworkElementKeysOutputBuilder();
87 outputBuilder.setMountpointNames(mountpointList);
92 public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input) {
93 ShowRequiredNetworkElementOutputBuilder outputBuilder = new ShowRequiredNetworkElementOutputBuilder();
94 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
95 if (maintenanceMode != null) {
96 RequiredNetworkElementBuilder valueBuilder = new RequiredNetworkElementBuilder();
98 valueBuilder.setMountpointName(maintenanceMode.getNodeId());
99 valueBuilder.setStatus(String.valueOf(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, "","")));
100 valueBuilder.setDescription("Pretty description here");
101 outputBuilder.setRequiredNetworkElement(valueBuilder.build());
103 LOG.warn("No info in database for {}",input.getMountpointName());
105 return outputBuilder;
109 public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input) {
111 GetMaintenanceModeOutputBuilder outputBuilder;
112 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
113 if (maintenanceMode != null) {
114 outputBuilder = new GetMaintenanceModeOutputBuilder(maintenanceMode);
116 throw new IllegalArgumentException("No info in database for "+input.getMountpointName());
118 return outputBuilder;
122 public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input) {
124 SetMaintenanceModeOutputBuilder outputBuilder = new SetMaintenanceModeOutputBuilder();
125 MaintenanceBuilder mb = new MaintenanceBuilder(input);
126 MaintenanceEntity m = mb.build();
127 database.setMaintenance(m);
128 return outputBuilder;
133 public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input) {
135 StringBuffer resultString = new StringBuffer();
137 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
139 ZonedDateTime now = MaintenanceCalculator.valueOf(input.getTestDate());
141 resultString.append("In database table: ");
142 resultString.append(maintenanceMode != null);
143 resultString.append(" Maintenance active: ");
144 resultString.append(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, input.getObjectIdRef(),
145 input.getProblemName(), now));
146 resultString.append(" at Timestamp: ");
147 resultString.append(now);
148 TestMaintenanceModeOutputBuilder outputBuilder = maintenanceMode != null
149 ? new TestMaintenanceModeOutputBuilder(maintenanceMode)
150 : new TestMaintenanceModeOutputBuilder();
151 outputBuilder.setResultString(resultString.toString());
152 return outputBuilder;
156 /*-------------------------------------------------
157 * Interface MaintenaceService
161 public boolean isONFObjectInMaintenance(String mountpointReference, String objectIdRef, String problem) {
162 MaintenanceEntity maintenanceMode = database.getMaintenance(mountpointReference);
163 boolean res = MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, objectIdRef, problem);
164 LOG.debug("inMaintenance={} for mountpoint/id/problem:{} {} {} Definition: {}",res, mountpointReference, objectIdRef, problem, this );