245b890039e3a0ff6dc89ae7d434b901acca0d46
[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.data;
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.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.rev190801.Entity;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MaintenanceEntity;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41
42 public class HtDatabaseMaintenanceService implements HtDatabaseMaintenance {
43
44     private static final Logger LOG = LoggerFactory.getLogger(HtDatabaseMaintenanceService.class);
45
46     private final EsDataObjectReaderWriter2<MaintenanceEntity> maintenanceRW;
47     private final EsDataObjectReaderWriter2<NetworkElementConnectionEntity> requiredNeRW;
48
49     HtDatabaseMaintenanceService(@NonNull HtDatabaseClient client) throws ClassNotFoundException {
50         HtAssert.nonnull(client);
51
52         // Create control structure
53         maintenanceRW = new EsDataObjectReaderWriter2<>(client, Entity.Maintenancemode, MaintenanceEntity.class,
54                 MaintenanceBuilder.class).setEsIdAttributeName("_id");
55
56         requiredNeRW = new EsDataObjectReaderWriter2<>(client, Entity.NetworkelementConnection,
57                 NetworkElementConnectionEntity.class, NetworkElementConnectionBuilder.class)
58                         .setEsIdAttributeName("_id");
59
60     }
61
62     /**
63      * Get existing object for mountpoint to manage maintenance mode
64      * @return Object with configuration
65      */
66     @Override
67     @Nullable
68     public MaintenanceEntity getMaintenance(@Nullable String mountpointId) {
69         MaintenanceEntity deviceMaintenanceMode = null;
70         if (maintenanceRW != null && mountpointId != null) {
71             deviceMaintenanceMode = maintenanceRW.read(mountpointId);
72         }
73         return deviceMaintenanceMode;
74     }
75
76     @Override
77     public
78     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());
82             }
83            LOG.info("Wrote maintenance object {}", m.toString());
84         }
85         return m;
86     }
87
88     @Override
89     public
90     List<MaintenanceEntity> getAll() {
91         return maintenanceRW != null ? maintenanceRW.doReadAll().getHits() : new ArrayList<>();
92     }
93
94     @Override
95     public
96     MaintenanceEntity createIfNotExists(String mountpointId) {
97         MaintenanceEntity deviceMaintenanceMode = null;
98         if (maintenanceRW != null) {
99             deviceMaintenanceMode = maintenanceRW.read(mountpointId);
100             if (deviceMaintenanceMode == null) {
101                 LOG.debug("creating empty maintenance object in database");
102                 deviceMaintenanceMode = getDefaultMaintenance(mountpointId);
103                 maintenanceRW.write(deviceMaintenanceMode, mountpointId);
104             } else {
105                 LOG.debug("maintenance object already exists in database");
106             }
107         } else {
108             LOG.warn("cannot create maintenance obj. db reader/writer is null");
109         }
110         return deviceMaintenanceMode;
111     }
112
113     @Override
114     public
115     void deleteIfNotRequired(String mountPointNodeName) {
116
117         if (!this.isRequireNe(mountPointNodeName)) {
118             if (maintenanceRW != null) {
119                 LOG.debug("removing maintenance object in database for " + mountPointNodeName);
120                 maintenanceRW.remove(mountPointNodeName);
121             } else {
122                 LOG.warn("cannot create maintenance obj. db reader/writer is null");
123             }
124         }
125
126
127     }
128
129     /**
130      * Provide default maintenanceinformation for a device
131      * @param mountpointId nodeId of device
132      * @return default data
133      */
134     static private MaintenanceEntity getDefaultMaintenance(String mountpointId) {
135
136         DateAndTime now = NetconfTimeStampImpl.getConverter().getTimeStamp();
137
138         MaintenanceBuilder deviceMaintenanceModeBuilder = new MaintenanceBuilder();
139         deviceMaintenanceModeBuilder.setNodeId(mountpointId).setId(mountpointId);
140         // Use time from mountpoint creation
141         deviceMaintenanceModeBuilder.setDescription("");
142         // Use time from mountpoint creation
143         deviceMaintenanceModeBuilder.setStart(now);
144         deviceMaintenanceModeBuilder.setEnd(now);
145         deviceMaintenanceModeBuilder.setActive(false);
146         
147         // Reference to all
148         //consistent to UI input to null/not empty string
149         //deviceMaintenanceModeBuilder.setObjectIdRef("");
150         //deviceMaintenanceModeBuilder.setProblem("");
151         
152         return deviceMaintenanceModeBuilder.build();
153    }
154
155     // -- Private
156     /**
157      * Check in required ne if entry exists for mountpointNodeName
158      *
159      * @param mountPointNodeName
160      * @return
161      */
162     @SuppressWarnings("null")
163     private boolean isRequireNe(String mountPointNodeName) {
164         NetworkElementConnectionEntity ne = null;
165         if (requiredNeRW != null) {
166             LOG.debug("searching for entry in required-networkelement for " + mountPointNodeName);
167             ne = requiredNeRW.read(mountPointNodeName);
168         } else {
169             LOG.warn("cannot read db. no db reader writer initialized");
170         }
171         if (ne != null && ne.isIsRequired() != null) {
172             return ne.isIsRequired();
173         } else {
174             return false;
175         }
176     }
177
178 }