2 * ============LICENSE_START========================================================================
3 * ONAP : ccsdk feature sdnr wt
4 * =================================================================================================
5 * Copyright (C) 2020 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
10 * http://www.apache.org/licenses/LICENSE-2.0
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
16 * ============LICENSE_END==========================================================================
18 package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl;
21 import java.util.Optional;
22 import org.eclipse.jdt.annotation.NonNull;
23 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider;
24 import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement;
25 import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElementService;
26 import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.dataprovider.Onf14DomToInternalDataModel;
27 import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.equipment.Onf14DomEquipmentManager;
28 import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.interfaces.Onf14DomInterfacePacManager;
29 import org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.dom.impl.util.Onf14DevicemanagerQNames;
30 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider;
31 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService;
32 import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NotificationService;
33 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor;
34 import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfDomAccessor;
35 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.Stream;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.StreamKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType;
40 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
41 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
42 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
47 * Representation of ONF Core model 1.4 device Top level element is "ControlConstruct" (replaces "NetworkElement" of
48 * older ONF Version) NOTE:
50 public class Onf14DomNetworkElement implements NetworkElement {
52 private static final Logger log = LoggerFactory.getLogger(Onf14DomNetworkElement.class);
54 protected static final YangInstanceIdentifier TOPLEVELEQUIPMENT_IID =
55 YangInstanceIdentifier.builder().node(Onf14DevicemanagerQNames.CORE_MODEL_CONTROL_CONSTRUCT_CONTAINER)
56 .node(Onf14DevicemanagerQNames.CORE_MODEL_CC_TOP_LEVEL_EQPT).build();
58 private final NetconfDomAccessor netconfDomAccessor;
59 private final DataProvider databaseService;
60 private final @NonNull FaultService faultService;
61 private final @NonNull NotificationService notificationService;
63 private final Onf14DomToInternalDataModel onf14Mapper;
65 private final @NonNull Onf14DomEquipmentManager equipmentManager;
66 private final @NonNull Onf14DomInterfacePacManager interfacePacManager;
67 private final @NonNull String namespaceRevision;
69 public Onf14DomNetworkElement(NetconfDomAccessor netconfDomAccessor, DeviceManagerServiceProvider serviceProvider,
70 String namespaceRevision) {
71 log.info("Create {}", Onf14DomNetworkElement.class.getSimpleName());
72 this.netconfDomAccessor = netconfDomAccessor;
73 this.databaseService = serviceProvider.getDataProvider();
74 this.notificationService = serviceProvider.getNotificationService();
75 this.faultService = serviceProvider.getFaultService();
76 this.namespaceRevision = namespaceRevision;
77 this.onf14Mapper = new Onf14DomToInternalDataModel();
78 this.equipmentManager = new Onf14DomEquipmentManager(netconfDomAccessor, databaseService, onf14Mapper);
79 this.interfacePacManager = new Onf14DomInterfacePacManager(netconfDomAccessor, serviceProvider);
84 * reading the inventory (CoreModel 1.4 Equipment Model) and adding it to the DB
86 public void initialReadFromNetworkElement() {
87 log.info("Calling read equipment");
88 // Read complete device tree
91 // Read fault data and subscribe for notifications
92 interfacePacManager.register();
94 int problems = faultService.removeAllCurrentProblemsOfNode(netconfDomAccessor.getNodeId());
95 log.debug("Removed all {} problems from database at registration", problems);
100 * @param nNode set core-model-capability
102 public void setCoreModel() {
103 NetworkElementConnectionBuilder eb = new NetworkElementConnectionBuilder();
104 eb.setCoreModelCapability(namespaceRevision);
105 databaseService.updateNetworkConnection22(eb.build(), netconfDomAccessor.getNodeId().getValue());
109 public void register() {
110 // Set core-model revision value in "core-model-capability" field
112 initialReadFromNetworkElement();
114 if (netconfDomAccessor.isNotificationsRFC5277Supported()) {
115 // Output notification streams to LOG
116 Map<StreamKey, Stream> streams = netconfDomAccessor.getNotificationStreamsAsMap();
117 log.info("Available notifications streams: {}", streams);
118 // Register to default stream
119 netconfDomAccessor.invokeCreateSubscription();
124 public void deregister() {}
127 public NodeId getNodeId() {
128 return netconfDomAccessor.getNodeId();
132 public <L extends NetworkElementService> Optional<L> getService(Class<L> clazz) {
133 return Optional.empty();
137 public void warmstart() {}
140 public Optional<NetconfAccessor> getAcessor() {
141 return Optional.of(netconfDomAccessor);
145 public NetworkElementDeviceType getDeviceType() {
146 return NetworkElementDeviceType.Wireless;
149 private void readEquipmentData() {
150 Optional<NormalizedNode> topLevelEquipment = readTopLevelEquipment(netconfDomAccessor);
151 log.info("Top level equipment data is {}", topLevelEquipment.isPresent() ? topLevelEquipment.get() : null);
152 if (topLevelEquipment.isPresent()) {
153 equipmentManager.setEquipmentData(topLevelEquipment.get());
158 private Optional<NormalizedNode> readTopLevelEquipment(NetconfDomAccessor netconfDomAccessor) {
159 log.info("Reading Top level equipment data");
160 return netconfDomAccessor.readDataNode(LogicalDatastoreType.CONFIGURATION, TOPLEVELEQUIPMENT_IID);