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 ******************************************************************************/
19 package org.onap.ccsdk.features.sdnr.wt.dataprovider.data;
21 import java.util.ArrayList;
22 import java.util.List;
23 import org.eclipse.jdt.annotation.NonNull;
24 import org.eclipse.jdt.annotation.Nullable;
25 import org.onap.ccsdk.features.sdnr.wt.common.HtAssert;
26 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
27 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.EsDataObjectReaderWriter2;
28 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
29 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Entity;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceEntity;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
39 public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance {
41 private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseMaintenanceService.class);
43 private final EsDataObjectReaderWriter2<MaintenanceEntity> maintenanceRW;
44 private final EsDataObjectReaderWriter2<NetworkElementConnectionEntity> requiredNeRW;
46 HtDatabaseMaintenanceService(@NonNull HtDatabaseClient client) throws ClassNotFoundException {
47 HtAssert.nonnull(client);
49 // Create control structure
50 maintenanceRW = new EsDataObjectReaderWriter2<>(client, Entity.Maintenancemode, MaintenanceEntity.class,
51 MaintenanceBuilder.class).setEsIdAttributeName("_id");
53 requiredNeRW = new EsDataObjectReaderWriter2<>(client, Entity.NetworkelementConnection,
54 NetworkElementConnectionEntity.class, NetworkElementConnectionBuilder.class)
55 .setEsIdAttributeName("_id");
60 * Get existing object for mountpoint to manage maintenance mode
61 * @return Object with configuration
65 public MaintenanceEntity getMaintenance(@Nullable String mountpointId) {
66 MaintenanceEntity deviceMaintenanceMode = null;
67 if (maintenanceRW != null && mountpointId != null) {
68 deviceMaintenanceMode = maintenanceRW.read(mountpointId);
70 return deviceMaintenanceMode;
75 MaintenanceEntity setMaintenance(MaintenanceEntity m) {
76 if (maintenanceRW != null) {
77 if (maintenanceRW.write(m, m.getNodeId() ) == null) {
78 throw new IllegalArgumentException("Problem writing to database: "+m.getId());
80 LOG.info("Wrote maintenance object {}", m.toString());
87 List<MaintenanceEntity> getAll() {
88 return maintenanceRW != null ? maintenanceRW.doReadAll().getHits() : new ArrayList<>();
93 MaintenanceEntity createIfNotExists(String mountpointId) {
94 MaintenanceEntity deviceMaintenanceMode = null;
95 if (maintenanceRW != null) {
96 deviceMaintenanceMode = maintenanceRW.read(mountpointId);
97 if (deviceMaintenanceMode == null) {
98 LOG.debug("creating empty maintenance object in database");
99 deviceMaintenanceMode = getDefaultMaintenance(mountpointId);
100 maintenanceRW.write(deviceMaintenanceMode, mountpointId);
102 LOG.debug("maintenance object already exists in database");
105 LOG.warn("cannot create maintenance obj. db reader/writer is null");
107 return deviceMaintenanceMode;
112 void deleteIfNotRequired(String mountPointNodeName) {
114 if (!this.isRequireNe(mountPointNodeName)) {
115 if (maintenanceRW != null) {
116 LOG.debug("removing maintenance object in database for " + mountPointNodeName);
117 maintenanceRW.remove(mountPointNodeName);
119 LOG.warn("cannot create maintenance obj. db reader/writer is null");
127 * Provide default maintenanceinformation for a device
128 * @param mountpointId nodeId of device
129 * @return default data
131 static private MaintenanceEntity getDefaultMaintenance(String mountpointId) {
133 DateAndTime now = NetconfTimeStampImpl.getConverter().getTimeStamp();
135 MaintenanceBuilder deviceMaintenanceModeBuilder = new MaintenanceBuilder();
136 deviceMaintenanceModeBuilder.setNodeId(mountpointId).setId(mountpointId);
137 // Use time from mountpoint creation
138 deviceMaintenanceModeBuilder.setDescription("");
139 // Use time from mountpoint creation
140 deviceMaintenanceModeBuilder.setStart(now);
141 deviceMaintenanceModeBuilder.setEnd(now);
143 deviceMaintenanceModeBuilder.setObjectIdRef("");
144 deviceMaintenanceModeBuilder.setProblem("");
145 deviceMaintenanceModeBuilder.setActive(false);
147 return deviceMaintenanceModeBuilder.build();
152 * Check in required ne if entry exists for mountpointNodeName
154 * @param mountPointNodeName
157 @SuppressWarnings("null")
158 private boolean isRequireNe(String mountPointNodeName) {
159 NetworkElementConnectionEntity ne = null;
160 if (requiredNeRW != null) {
161 LOG.debug("searching for entry in required-networkelement for " + mountPointNodeName);
162 ne = requiredNeRW.read(mountPointNodeName);
164 LOG.warn("cannot read db. no db reader writer initialized");
166 if (ne != null && ne.isIsRequired() != null) {
167 return ne.isIsRequired();