2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.entity;
24 import java.util.ArrayList;
25 import java.util.List;
26 import org.eclipse.jdt.annotation.NonNull;
27 import org.eclipse.jdt.annotation.Nullable;
28 import org.onap.ccsdk.features.sdnr.wt.common.HtAssert;
29 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
30 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.EsDataObjectReaderWriter2;
31 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
32 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
42 public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance {
44 private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseMaintenanceService.class);
46 private final EsDataObjectReaderWriter2<MaintenanceEntity> maintenanceRW;
47 private final EsDataObjectReaderWriter2<NetworkElementConnectionEntity> requiredNeRW;
49 public HtDatabaseMaintenanceService(@NonNull HtDatabaseClient client) throws ClassNotFoundException {
50 HtAssert.nonnull(client);
52 // Create control structure
53 maintenanceRW = new EsDataObjectReaderWriter2<>(client, Entity.Maintenancemode, MaintenanceEntity.class,
54 MaintenanceBuilder.class, true).setEsIdAttributeName("_id");
56 requiredNeRW = new EsDataObjectReaderWriter2<>(client, Entity.NetworkelementConnection,
57 NetworkElementConnectionEntity.class, NetworkElementConnectionBuilder.class, true)
58 .setEsIdAttributeName("_id");
63 * Get existing object for mountpoint to manage maintenance mode
65 * @return Object with configuration
69 public MaintenanceEntity getMaintenance(@Nullable String mountpointId) {
70 MaintenanceEntity deviceMaintenanceMode = null;
71 if (maintenanceRW != null && mountpointId != null) {
72 deviceMaintenanceMode = maintenanceRW.read(mountpointId);
74 return deviceMaintenanceMode;
78 public MaintenanceEntity setMaintenance(MaintenanceEntity m) {
79 if (maintenanceRW != null) {
80 if (maintenanceRW.write(m, m.getNodeId()) == null) {
81 throw new IllegalArgumentException("Problem writing to database: " + m.getId());
83 LOG.info("Wrote maintenance object {}", m.toString());
89 public List<MaintenanceEntity> getAll() {
90 return maintenanceRW != null ? maintenanceRW.doReadAll().getHits() : new ArrayList<>();
94 public MaintenanceEntity createIfNotExists(String mountpointId) {
95 MaintenanceEntity deviceMaintenanceMode = null;
96 if (maintenanceRW != null) {
97 deviceMaintenanceMode = maintenanceRW.read(mountpointId);
98 if (deviceMaintenanceMode == null) {
99 LOG.debug("creating empty maintenance object in database");
100 deviceMaintenanceMode = getDefaultMaintenance(mountpointId);
101 maintenanceRW.write(deviceMaintenanceMode, mountpointId);
103 LOG.debug("maintenance object already exists in database");
106 LOG.warn("cannot create maintenance obj. db reader/writer is null");
108 return deviceMaintenanceMode;
112 public 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
129 * @param mountpointId nodeId of device
130 * @return default data
132 static private MaintenanceEntity getDefaultMaintenance(String mountpointId) {
134 DateAndTime now = NetconfTimeStampImpl.getConverter().getTimeStamp();
136 MaintenanceBuilder deviceMaintenanceModeBuilder = new MaintenanceBuilder();
137 deviceMaintenanceModeBuilder.setNodeId(mountpointId).setId(mountpointId);
138 // Use time from mountpoint creation
139 deviceMaintenanceModeBuilder.setDescription("");
140 // Use time from mountpoint creation
141 deviceMaintenanceModeBuilder.setStart(now);
142 deviceMaintenanceModeBuilder.setEnd(now);
143 deviceMaintenanceModeBuilder.setActive(false);
146 //consistent to UI input to null/not empty string
147 //deviceMaintenanceModeBuilder.setObjectIdRef("");
148 //deviceMaintenanceModeBuilder.setProblem("");
150 return deviceMaintenanceModeBuilder.build();
155 * Check in required ne if entry exists for mountpointNodeName
157 * @param mountPointNodeName
160 @SuppressWarnings("null")
161 private boolean isRequireNe(String mountPointNodeName) {
162 NetworkElementConnectionEntity ne = null;
163 if (requiredNeRW != null) {
164 LOG.debug("searching for entry in required-networkelement for " + mountPointNodeName);
165 ne = requiredNeRW.read(mountPointNodeName);
167 LOG.warn("cannot read db. no db reader writer initialized");
169 if (ne != null && ne.requireIsRequired() != null) {
170 return ne.requireIsRequired();