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.HashSet;
23 import java.util.List;
26 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
27 import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.MaintenanceRPCServiceAPI;
28 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.MaintenanceService;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeInput;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetMaintenanceModeOutputBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.GetRequiredNetworkElementKeysOutputBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeInput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.SetMaintenanceModeOutputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementInput;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.ShowRequiredNetworkElementOutputBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeInput;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.TestMaintenanceModeOutputBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.rev190109.show.required.network.element.output.RequiredNetworkElementBuilder;
41 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
45 public class MaintenanceServiceImpl implements MaintenanceService, MaintenanceRPCServiceAPI, AutoCloseable {
47 private static final Logger LOG = LoggerFactory.getLogger(MaintenanceServiceImpl.class);
49 private final HtDatabaseMaintenance database;
51 public MaintenanceServiceImpl(HtDatabaseMaintenance client) {
53 LOG.info("Create {} start", MaintenanceServiceImpl.class);
55 LOG.info("Create {} finished. DB Service {} started.", MaintenanceServiceImpl.class,
56 client != null ? "sucessfully" : "not");
61 public void createIfNotExists(NodeId nodeId) {
62 database.createIfNotExists(nodeId.getValue());
66 public void deleteIfNotRequired(NodeId nodeId) {
67 database.deleteIfNotRequired(nodeId.getValue());
70 /*-------------------------------------------------
71 * Interface AutoClosable
75 public void close() throws Exception {}
77 /*-------------------------------------------------
78 * Interface MaintenanceRPCServiceAPI
82 public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys() {
83 List<MaintenanceEntity> all = database.getAll();
85 Set<String> mountpointList = new HashSet<>();
86 for (MaintenanceEntity oneOfAll : all) {
87 mountpointList.add(oneOfAll.getNodeId());
90 GetRequiredNetworkElementKeysOutputBuilder outputBuilder = new GetRequiredNetworkElementKeysOutputBuilder();
91 outputBuilder.setMountpointNames(mountpointList);
96 public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input) {
97 ShowRequiredNetworkElementOutputBuilder outputBuilder = new ShowRequiredNetworkElementOutputBuilder();
98 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
99 if (maintenanceMode != null) {
100 RequiredNetworkElementBuilder valueBuilder = new RequiredNetworkElementBuilder();
102 valueBuilder.setMountpointName(maintenanceMode.getNodeId());
104 .setStatus(String.valueOf(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, "", "")));
105 valueBuilder.setDescription("Pretty description here");
106 outputBuilder.setRequiredNetworkElement(valueBuilder.build());
108 LOG.warn("No info in database for {}", input.getMountpointName());
110 return outputBuilder;
114 public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input) {
116 GetMaintenanceModeOutputBuilder outputBuilder;
117 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
118 if (maintenanceMode != null) {
119 outputBuilder = new GetMaintenanceModeOutputBuilder(maintenanceMode);
121 throw new IllegalArgumentException("No info in database for " + input.getMountpointName());
123 return outputBuilder;
127 public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input) {
129 SetMaintenanceModeOutputBuilder outputBuilder = new SetMaintenanceModeOutputBuilder();
130 MaintenanceBuilder mb = new MaintenanceBuilder(input);
131 MaintenanceEntity m = mb.build();
132 database.setMaintenance(m);
133 return outputBuilder;
138 public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input) {
140 StringBuffer resultString = new StringBuffer();
142 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
144 ZonedDateTime now = MaintenanceCalculator.valueOf(input.getTestDate());
146 resultString.append("In database table: ");
147 resultString.append(maintenanceMode != null);
148 resultString.append(" Maintenance active: ");
149 resultString.append(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, input.getObjectIdRef(),
150 input.getProblemName(), now));
151 resultString.append(" at Timestamp: ");
152 resultString.append(now);
153 TestMaintenanceModeOutputBuilder outputBuilder =
154 maintenanceMode != null ? new TestMaintenanceModeOutputBuilder(maintenanceMode)
155 : new TestMaintenanceModeOutputBuilder();
156 outputBuilder.setResultString(resultString.toString());
157 return outputBuilder;
161 /*-------------------------------------------------
162 * Interface MaintenaceService
166 public boolean isONFObjectInMaintenance(NodeId nodeId, String objectIdRef, String problem) {
167 MaintenanceEntity maintenanceMode = database.getMaintenance(nodeId.getValue());
168 boolean res = MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, objectIdRef, problem);
169 LOG.debug("inMaintenance={} for mountpoint/id/problem:{} {} {} Definition: {}", res, nodeId.getValue(),
170 objectIdRef, problem, this);