55d94c9f235ad4c941d12f0fb4a6325833dad5b0
[ccsdk/features.git] /
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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
15  * the License.
16  * ============LICENSE_END==========================================================================
17  */
18 package org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.impl;
19
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;
40
41 public class MaintenanceServiceImpl implements MaintenanceService, MaintenanceRPCServiceAPI, AutoCloseable {
42
43     private static final Logger LOG = LoggerFactory.getLogger(MaintenanceServiceImpl.class);
44
45     private final HtDatabaseMaintenance database;
46
47     public MaintenanceServiceImpl(HtDatabaseMaintenance client) {
48
49         LOG.info("Create {} start", MaintenanceServiceImpl.class);
50         database = client;
51         LOG.info("Create {} finished. DB Service {} started.", MaintenanceServiceImpl.class,
52                 client != null ? "sucessfully" : "not");
53
54     }
55
56     @Override
57     public void createIfNotExists(String mountPointNodeName) {
58         database.createIfNotExists(mountPointNodeName);
59     }
60
61     @Override
62     public void deleteIfNotRequired(String mountPointNodeName) {
63         database.deleteIfNotRequired(mountPointNodeName);
64     }
65
66     /*-------------------------------------------------
67      * Interface AutoClosable
68      */
69
70     @Override
71     public void close() throws Exception {}
72
73     /*-------------------------------------------------
74      * Interface MaintenanceRPCServiceAPI
75      */
76
77     @Override
78     public GetRequiredNetworkElementKeysOutputBuilder getRequiredNetworkElementKeys() {
79         List<MaintenanceEntity> all = database.getAll();
80
81         List<String> mountpointList = new ArrayList<>();
82         for (MaintenanceEntity oneOfAll : all) {
83             mountpointList.add(oneOfAll.getNodeId());
84
85         }
86         GetRequiredNetworkElementKeysOutputBuilder outputBuilder = new GetRequiredNetworkElementKeysOutputBuilder();
87         outputBuilder.setMountpointNames(mountpointList);
88         return outputBuilder;
89     }
90
91     @Override
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();
97
98             valueBuilder.setMountpointName(maintenanceMode.getNodeId());
99             valueBuilder
100                     .setStatus(String.valueOf(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, "", "")));
101             valueBuilder.setDescription("Pretty description here");
102             outputBuilder.setRequiredNetworkElement(valueBuilder.build());
103         } else {
104             LOG.warn("No info in database for {}", input.getMountpointName());
105         }
106         return outputBuilder;
107     }
108
109     @Override
110     public GetMaintenanceModeOutputBuilder getMaintenanceMode(GetMaintenanceModeInput input) {
111
112         GetMaintenanceModeOutputBuilder outputBuilder;
113         MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
114         if (maintenanceMode != null) {
115             outputBuilder = new GetMaintenanceModeOutputBuilder(maintenanceMode);
116         } else {
117             throw new IllegalArgumentException("No info in database for " + input.getMountpointName());
118         }
119         return outputBuilder;
120     }
121
122     @Override
123     public SetMaintenanceModeOutputBuilder setMaintenanceMode(SetMaintenanceModeInput input) {
124
125         SetMaintenanceModeOutputBuilder outputBuilder = new SetMaintenanceModeOutputBuilder();
126         MaintenanceBuilder mb = new MaintenanceBuilder(input);
127         MaintenanceEntity m = mb.build();
128         database.setMaintenance(m);
129         return outputBuilder;
130
131     }
132
133     @Override
134     public TestMaintenanceModeOutputBuilder testMaintenanceMode(TestMaintenanceModeInput input) {
135
136         StringBuffer resultString = new StringBuffer();
137
138         MaintenanceEntity maintenanceMode = database.getMaintenance(input.getMountpointName());
139
140         ZonedDateTime now = MaintenanceCalculator.valueOf(input.getTestDate());
141
142         resultString.append("In database table: ");
143         resultString.append(maintenanceMode != null);
144         resultString.append(" Maintenance active: ");
145         resultString.append(MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, input.getObjectIdRef(),
146                 input.getProblemName(), now));
147         resultString.append(" at Timestamp: ");
148         resultString.append(now);
149         TestMaintenanceModeOutputBuilder outputBuilder =
150                 maintenanceMode != null ? new TestMaintenanceModeOutputBuilder(maintenanceMode)
151                         : new TestMaintenanceModeOutputBuilder();
152         outputBuilder.setResultString(resultString.toString());
153         return outputBuilder;
154
155     }
156
157     /*-------------------------------------------------
158      * Interface MaintenaceService
159      */
160
161     @Override
162     public boolean isONFObjectInMaintenance(String mountpointReference, String objectIdRef, String problem) {
163         MaintenanceEntity maintenanceMode = database.getMaintenance(mountpointReference);
164         boolean res = MaintenanceCalculator.isONFObjectInMaintenance(maintenanceMode, objectIdRef, problem);
165         LOG.debug("inMaintenance={} for mountpoint/id/problem:{} {} {} Definition: {}", res, mountpointReference,
166                 objectIdRef, problem, this);
167         return res;
168     }
169
170 }