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.rev201110.MaintenanceBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.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.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
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 HtDatabaseMaintenance database;
48 public MaintenanceServiceImpl(HtDatabaseMaintenance client) {
50 LOG.info("Create {} start", MaintenanceServiceImpl.class);
52 LOG.info("Create {} finished. DB Service {} started.", MaintenanceServiceImpl.class,
53 client != null ? "sucessfully" : "not");
58 public void createIfNotExists(NodeId nodeId) {
59 database.createIfNotExists(nodeId.getValue());
63 public void deleteIfNotRequired(NodeId nodeId) {
64 database.deleteIfNotRequired(nodeId.getValue());
67 /*-------------------------------------------------
68 * Interface AutoClosable
72 public void close() throws Exception {}
74 /*-------------------------------------------------
75 * Interface MaintenanceRPCServiceAPI
79 public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys() {
80 List<MaintenanceEntity> all = database.getAll();
82 List<String> mountpointList = new ArrayList<>();
83 for (MaintenanceEntity oneOfAll : all) {
84 mountpointList.add(oneOfAll.getNodeId());
87 GetRequiredNetworkElementKeysOutputBuilder outputBuilder = new GetRequiredNetworkElementKeysOutputBuilder();
88 outputBuilder.setMountpointNames(mountpointList);
93 public ShowRequiredNetworkElementOutputBuilder showRequiredNetworkElement(ShowRequiredNetworkElementInput input) {
94 ShowRequiredNetworkElementOutputBuilder outputBuilder = new ShowRequiredNetworkElementOutputBuilder();
95 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
96 if (maintenanceMode != null) {
97 RequiredNetworkElementBuilder valueBuilder = new RequiredNetworkElementBuilder();
99 valueBuilder.setMountpointName(maintenanceMode.getNodeId());
101 .setStatus(String.valueOf(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, "", "")));
102 valueBuilder.setDescription("Pretty description here");
103 outputBuilder.setRequiredNetworkElement(valueBuilder.build());
105 LOG.warn("No info in database for {}", input.getMountpointName());
107 return outputBuilder;
111 public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input) {
113 GetMaintenanceModeOutputBuilder outputBuilder;
114 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
115 if (maintenanceMode != null) {
116 outputBuilder = new GetMaintenanceModeOutputBuilder(maintenanceMode);
118 throw new IllegalArgumentException("No info in database for " + input.getMountpointName());
120 return outputBuilder;
124 public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input) {
126 SetMaintenanceModeOutputBuilder outputBuilder = new SetMaintenanceModeOutputBuilder();
127 MaintenanceBuilder mb = new MaintenanceBuilder(input);
128 MaintenanceEntity m = mb.build();
129 database.setMaintenance(m);
130 return outputBuilder;
135 public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input) {
137 StringBuffer resultString = new StringBuffer();
139 MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
141 ZonedDateTime now = MaintenanceCalculator.valueOf(input.getTestDate());
143 resultString.append("In database table: ");
144 resultString.append(maintenanceMode != null);
145 resultString.append(" Maintenance active: ");
146 resultString.append(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, input.getObjectIdRef(),
147 input.getProblemName(), now));
148 resultString.append(" at Timestamp: ");
149 resultString.append(now);
150 TestMaintenanceModeOutputBuilder outputBuilder =
151 maintenanceMode != null ? new TestMaintenanceModeOutputBuilder(maintenanceMode)
152 : new TestMaintenanceModeOutputBuilder();
153 outputBuilder.setResultString(resultString.toString());
154 return outputBuilder;
158 /*-------------------------------------------------
159 * Interface MaintenaceService
163 public boolean isONFObjectInMaintenance(NodeId nodeId, String objectIdRef, String problem) {
164 MaintenanceEntity maintenanceMode = database.getMaintenance(nodeId.getValue());
165 boolean res = MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, objectIdRef, problem);
166 LOG.debug("inMaintenance={} for mountpoint/id/problem:{} {} {} Definition: {}", res, nodeId.getValue(),
167 objectIdRef, problem, this);