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();