1f3f30927b2098b573bbe3286b28241de263839b
[ccsdk/features.git] / sdnr / wt / devicemanager-onap / onf14 / provider / src / main / java / org / onap / ccsdk / features / sdnr / wt / devicemanager / onf14 / impl / interfaces / Onf14AirInterfaceNotificationListener.java
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk feature sdnr wt
4  * ================================================================================
5  * Copyright (C) 2020 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.devicemanager.onf14.impl.interfaces;
23
24 import java.util.HashMap;
25 import java.util.Map;
26 import org.eclipse.jdt.annotation.NonNull;
27 import org.eclipse.jdt.annotation.Nullable;
28 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
29 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
30 import org.opendaylight.mdsal.dom.api.DOMNotification;
31 import org.opendaylight.mdsal.dom.api.DOMNotificationListener;
32 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.AirInterface20Listener;
33 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.AttributeValueChangedNotification;
34 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ObjectCreationNotification;
35 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ObjectDeletionNotification;
36 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.ProblemNotification;
37 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPE;
38 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPECRITICAL;
39 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEMAJOR;
40 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEMINOR;
41 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPENONALARMED;
42 import org.opendaylight.yang.gen.v1.urn.onf.yang.air._interface._2._0.rev200121.SEVERITYTYPEWARNING;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SeverityType;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SourceType;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51 public class Onf14AirInterfaceNotificationListener implements AirInterface20Listener, DOMNotificationListener {
52
53     private static final Logger log = LoggerFactory.getLogger(Onf14AirInterfaceNotificationListener.class);
54
55     private final NetconfAccessor netconfAccessor;
56     private final DeviceManagerServiceProvider serviceProvider;
57
58     private static final Map<Class<? extends SEVERITYTYPE>,SeverityType> severityMap = initSeverityMap();
59
60     public Onf14AirInterfaceNotificationListener(NetconfAccessor netconfAccessor,
61             DeviceManagerServiceProvider serviceProvider) {
62         this.netconfAccessor = netconfAccessor;
63         this.serviceProvider = serviceProvider;
64     }
65
66     private static Map<Class<? extends SEVERITYTYPE>, SeverityType> initSeverityMap() {
67         Map<Class<? extends SEVERITYTYPE>, SeverityType> map = new HashMap<>();
68         map.put(SEVERITYTYPECRITICAL.class,SeverityType.Critical);
69         map.put(SEVERITYTYPEMAJOR.class,SeverityType.Major);
70         map.put(SEVERITYTYPEMINOR.class,SeverityType.Minor);
71         map.put(SEVERITYTYPEWARNING.class,SeverityType.Warning);
72         map.put(SEVERITYTYPENONALARMED.class,SeverityType.NonAlarmed);
73         return map;
74     }
75
76     @Override
77     public void onObjectDeletionNotification(ObjectDeletionNotification notification) {
78         log.debug("Got event of type :: {}", ObjectDeletionNotification.class.getSimpleName());
79
80         EventlogBuilder eventlogBuilder = new EventlogBuilder();
81         eventlogBuilder.setNodeId(netconfAccessor.getNodeId().getValue()).setAttributeName("")
82                 .setCounter(notification.getCounter()).setNewValue("deleted")
83                 .setObjectId(notification.getObjectIdRef().getValue()).setSourceType(SourceType.Netconf)
84                 .setTimestamp(notification.getTimestamp());
85         serviceProvider.getDataProvider().writeEventLog(eventlogBuilder.build());
86         serviceProvider.getWebsocketService().sendNotification(notification, netconfAccessor.getNodeId(),
87                 ObjectDeletionNotification.QNAME, notification.getTimestamp());
88
89         log.debug("onObjectDeletionNotification log entry written");
90     }
91
92     @Override
93     public void onProblemNotification(ProblemNotification notification) {
94         log.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName());
95         FaultlogEntity faultAlarm = new FaultlogBuilder().setObjectId(notification.getObjectIdRef().getValue())
96                 .setProblem(notification.getProblem()).setSourceType(SourceType.Netconf)
97                 .setTimestamp(notification.getTimestamp())
98                 .setNodeId(this.netconfAccessor.getNodeId().getValue())
99                 .setSeverity(mapSeverity(notification.getSeverity())).setCounter(notification.getCounter())
100                 .build();
101         serviceProvider.getFaultService().faultNotification(faultAlarm);
102         serviceProvider.getWebsocketService().sendNotification(notification, netconfAccessor.getNodeId(),
103                 ProblemNotification.QNAME, notification.getTimestamp());
104
105     }
106
107     private SeverityType mapSeverity(@Nullable Class<? extends SEVERITYTYPE> severity) {
108         return severityMap.getOrDefault(severity,SeverityType.NonAlarmed);
109     }
110
111     @Override
112     public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) {
113         log.debug("Got event of type :: {}", AttributeValueChangedNotification.class.getSimpleName());
114
115         EventlogBuilder eventlogBuilder = new EventlogBuilder();
116         eventlogBuilder.setNodeId(netconfAccessor.getNodeId().getValue())
117                 .setAttributeName(notification.getAttributeName()).setCounter(notification.getCounter())
118                 .setNewValue(notification.getNewValue()).setObjectId(notification.getObjectIdRef().getValue())
119                 .setSourceType(SourceType.Netconf).setTimestamp(notification.getTimestamp());
120         serviceProvider.getDataProvider().writeEventLog(eventlogBuilder.build());
121         serviceProvider.getWebsocketService().sendNotification(notification, netconfAccessor.getNodeId(),
122                 AttributeValueChangedNotification.QNAME, notification.getTimestamp());
123         log.debug("onAttributeValueChangedNotification log entry written");
124     }
125
126     @Override
127     public void onObjectCreationNotification(ObjectCreationNotification notification) {
128         log.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName());
129
130         EventlogBuilder eventlogBuilder = new EventlogBuilder();
131         eventlogBuilder.setNodeId(netconfAccessor.getNodeId().getValue()).setAttributeName(notification.getObjectType())
132                 .setCounter(notification.getCounter()).setNewValue("created")
133                 .setObjectId(notification.getObjectIdRef().getValue()).setSourceType(SourceType.Netconf)
134                 .setTimestamp(notification.getTimestamp());
135         serviceProvider.getDataProvider().writeEventLog(eventlogBuilder.build());
136         serviceProvider.getWebsocketService().sendNotification(notification, netconfAccessor.getNodeId(),
137                 ObjectCreationNotification.QNAME, notification.getTimestamp());
138         log.debug("onObjectCreationNotification log entry written");
139     }
140
141     @Override
142     public void onNotification(@NonNull DOMNotification notification) {
143
144     }
145
146 }