b38042762daad3bd6cbbb7b01c7261c358ea31a3
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
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
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  *
21  */
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.entity;
23
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;
41
42 @Deprecated
43 public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance {
44
45     private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseMaintenanceService.class);
46
47     private final EsDataObjectReaderWriter2<MaintenanceEntity> maintenanceRW;
48     private final EsDataObjectReaderWriter2<NetworkElementConnectionEntity> requiredNeRW;
49
50     public HtDatabaseMaintenanceService(@NonNull HtDatabaseClient client) throws ClassNotFoundException {
51         HtAssert.nonnull(client);
52
53         // Create control structure
54         maintenanceRW = new EsDataObjectReaderWriter2<>(client, Entity.Maintenancemode, MaintenanceEntity.class,
55                 MaintenanceBuilder.class, true).setEsIdAttributeName("_id");
56
57         requiredNeRW = new EsDataObjectReaderWriter2<>(client, Entity.NetworkelementConnection,
58                 NetworkElementConnectionEntity.class, NetworkElementConnectionBuilder.class, true)
59                         .setEsIdAttributeName("_id");
60
61     }
62
63     /**
64      * Get existing object for mountpoint to manage maintenance mode
65      *
66      * @return Object with configuration
67      */
68     @Override
69     @Nullable
70     public MaintenanceEntity getMaintenance(@Nullable String mountpointId) {
71         MaintenanceEntity deviceMaintenanceMode = null;
72         if (maintenanceRW != null && mountpointId != null) {
73             deviceMaintenanceMode = maintenanceRW.read(mountpointId);
74         }
75         return deviceMaintenanceMode;
76     }
77
78     @Override
79     public MaintenanceEntity setMaintenance(MaintenanceEntity m) {
80         if (maintenanceRW != null) {
81             if (maintenanceRW.write(m, m.getNodeId()) == null) {
82                 throw new IllegalArgumentException("Problem writing to database: " + m.getId());
83             }
84             LOG.debug("Wrote maintenance object {}", m.toString());
85         }
86         return m;
87     }
88
89     @Override
90     public List<MaintenanceEntity> getAll() {
91         return maintenanceRW != null ? maintenanceRW.doReadAll().getHits() : new ArrayList<>();
92     }
93
94     @Override
95     public MaintenanceEntity createIfNotExists(String mountpointId) {
96         MaintenanceEntity deviceMaintenanceMode = null;
97         if (maintenanceRW != null) {
98             deviceMaintenanceMode = maintenanceRW.read(mountpointId);
99             if (deviceMaintenanceMode == null) {
100                 LOG.debug("creating empty maintenance object in database");
101                 deviceMaintenanceMode = getDefaultMaintenance(mountpointId);
102                 maintenanceRW.write(deviceMaintenanceMode, mountpointId);
103             } else {
104                 LOG.debug("maintenance object already exists in database");
105             }
106         } else {
107             LOG.warn("cannot create maintenance obj. db reader/writer is null");
108         }
109         return deviceMaintenanceMode;
110     }
111
112     @Override
113     public void deleteIfNotRequired(String mountPointNodeName) {
114
115         if (!this.isRequireNe(mountPointNodeName)) {
116             if (maintenanceRW != null) {
117                 LOG.debug("removing maintenance object in database for " + mountPointNodeName);
118                 maintenanceRW.remove(mountPointNodeName);
119             } else {
120                 LOG.warn("cannot create maintenance obj. db reader/writer is null");
121             }
122         }
123
124
125     }
126
127     /**
128      * Provide default maintenanceinformation for a device
129      *
130      * @param mountpointId nodeId of device
131      * @return default data
132      */
133     static private MaintenanceEntity getDefaultMaintenance(String mountpointId) {
134
135         DateAndTime now = NetconfTimeStampImpl.getConverter().getTimeStamp();
136
137         MaintenanceBuilder deviceMaintenanceModeBuilder = new MaintenanceBuilder();
138         deviceMaintenanceModeBuilder.setNodeId(mountpointId).setId(mountpointId);
139         // Use time from mountpoint creation
140         deviceMaintenanceModeBuilder.setDescription("");
141         // Use time from mountpoint creation
142         deviceMaintenanceModeBuilder.setStart(now);
143         deviceMaintenanceModeBuilder.setEnd(now);
144         deviceMaintenanceModeBuilder.setActive(false);
145
146         // Reference to all
147         //consistent to UI input to null/not empty string
148         //deviceMaintenanceModeBuilder.setObjectIdRef("");
149         //deviceMaintenanceModeBuilder.setProblem("");
150
151         return deviceMaintenanceModeBuilder.build();
152     }
153
154     // -- Private
155     /**
156      * Check in required ne if entry exists for mountpointNodeName
157      *
158      * @param mountPointNodeName
159      * @return
160      */
161     @SuppressWarnings("null")
162     private boolean isRequireNe(String mountPointNodeName) {
163         NetworkElementConnectionEntity ne = null;
164         if (requiredNeRW != null) {
165             LOG.debug("searching for entry in required-networkelement for " + mountPointNodeName);
166             ne = requiredNeRW.read(mountPointNodeName);
167         } else {
168             LOG.warn("cannot read db. no db reader writer initialized");
169         }
170         if (ne != null && ne.requireIsRequired() != null) {
171             return ne.requireIsRequired();
172         } else {
173             return false;
174         }
175     }
176
177 }