5ff7a5dec50c939cf3892bc96cf8025f745dce9b
[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
19 package org.onap.ccsdk.features.sdnr.wt.dataprovider.data;
20
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;
38
39 public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance {
40
41     private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseMaintenanceService.class);
42
43     private final EsDataObjectReaderWriter2<MaintenanceEntity> maintenanceRW;
44     private final EsDataObjectReaderWriter2<NetworkElementConnectionEntity> requiredNeRW;
45
46     HtDatabaseMaintenanceService(@NonNull HtDatabaseClient client) throws ClassNotFoundException {
47         HtAssert.nonnull(client);
48
49         // Create control structure
50         maintenanceRW = new EsDataObjectReaderWriter2<>(client, Entity.Maintenancemode, MaintenanceEntity.class,
51                 MaintenanceBuilder.class).setEsIdAttributeName("_id");
52
53         requiredNeRW = new EsDataObjectReaderWriter2<>(client, Entity.NetworkelementConnection,
54                 NetworkElementConnectionEntity.class, NetworkElementConnectionBuilder.class)
55                         .setEsIdAttributeName("_id");
56
57     }
58
59     /**
60      * Get existing object for mountpoint to manage maintenance mode
61      * @return Object with configuration
62      */
63     @Override
64     @Nullable
65     public MaintenanceEntity getMaintenance(@Nullable String mountpointId) {
66         MaintenanceEntity deviceMaintenanceMode = null;
67         if (maintenanceRW != null && mountpointId != null) {
68             deviceMaintenanceMode = maintenanceRW.read(mountpointId);
69         }
70         return deviceMaintenanceMode;
71     }
72
73     @Override
74     public
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());
79             }
80            LOG.info("Wrote maintenance object {}", m.toString());
81         }
82         return m;
83     }
84
85     @Override
86     public
87     List<MaintenanceEntity> getAll() {
88         return maintenanceRW != null ? maintenanceRW.doReadAll().getHits() : new ArrayList<>();
89     }
90
91     @Override
92     public
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);
101             } else {
102                 LOG.debug("maintenance object already exists in database");
103             }
104         } else {
105             LOG.warn("cannot create maintenance obj. db reader/writer is null");
106         }
107         return deviceMaintenanceMode;
108     }
109
110     @Override
111     public
112     void deleteIfNotRequired(String mountPointNodeName) {
113
114         if (!this.isRequireNe(mountPointNodeName)) {
115             if (maintenanceRW != null) {
116                 LOG.debug("removing maintenance object in database for " + mountPointNodeName);
117                 maintenanceRW.remove(mountPointNodeName);
118             } else {
119                 LOG.warn("cannot create maintenance obj. db reader/writer is null");
120             }
121         }
122
123
124     }
125
126     /**
127      * Provide default maintenanceinformation for a device
128      * @param mountpointId nodeId of device
129      * @return default data
130      */
131     static private MaintenanceEntity getDefaultMaintenance(String mountpointId) {
132
133         DateAndTime now = NetconfTimeStampImpl.getConverter().getTimeStamp();
134
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);
142         // Reference to all
143         deviceMaintenanceModeBuilder.setObjectIdRef("");
144         deviceMaintenanceModeBuilder.setProblem("");
145         deviceMaintenanceModeBuilder.setActive(false);
146
147         return deviceMaintenanceModeBuilder.build();
148    }
149
150     // -- Private
151     /**
152      * Check in required ne if entry exists for mountpointNodeName
153      *
154      * @param mountPointNodeName
155      * @return
156      */
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);
163         } else {
164             LOG.warn("cannot read db. no db reader writer initialized");
165         }
166         if (ne != null && ne.isIsRequired() != null) {
167             return ne.isIsRequired();
168         } else {
169             return false;
170         }
171     }
172
173 }