2 * Copyright (c) 2018 Xoriant Corporation and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.unimgr.mef.legato;
11 import com.google.common.base.Optional;
13 import java.util.Collections;
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
17 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
20 import org.opendaylight.unimgr.mef.legato.util.LegatoConstants;
21 import org.opendaylight.unimgr.mef.legato.util.LegatoUtils;
22 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.MefGlobal;
23 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.EecProfiles;
24 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.EecProfilesBuilder;
25 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.eec.profiles.Profile;
26 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.eec.profiles.ProfileKey;
27 import org.opendaylight.yangtools.concepts.ListenerRegistration;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
34 * @author sanket.shirode@Xoriant.com
37 public class LegatoEecProfileController extends UnimgrDataTreeChangeListener<Profile> {
39 private static final Logger LOG = LoggerFactory.getLogger(LegatoEecProfileController.class);
40 private ListenerRegistration<LegatoEecProfileController> dataTreeChangeListenerRegistration;
41 private static final InstanceIdentifier<Profile> EEC_PROFILE_IID = InstanceIdentifier.builder(MefGlobal.class)
42 .child(EecProfiles.class).child(Profile.class).build();
44 public LegatoEecProfileController(DataBroker dataBroker) {
49 private void registerListener() {
50 LOG.info("Initializing LegatoSlsProfileController:init() ");
52 dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
53 new DataTreeIdentifier<Profile>(LogicalDatastoreType.CONFIGURATION, EEC_PROFILE_IID), this);
58 public void close() throws Exception {
59 if (dataTreeChangeListenerRegistration != null) {
60 dataTreeChangeListenerRegistration.close();
65 public void add(DataTreeModification<Profile> newDataObject) {
66 LOG.info(" Node Added " + newDataObject.getRootNode().getIdentifier());
67 addToOperationalDB(newDataObject.getRootNode().getDataAfter());
70 public void addToOperationalDB(Profile profile) {
72 assert profile != null;
73 EecProfiles eecProfiles = new EecProfilesBuilder().setProfile(Collections.singletonList(profile)).build();
74 InstanceIdentifier<EecProfiles> profilesTx = InstanceIdentifier.create(MefGlobal.class)
75 .child(EecProfiles.class);
76 LegatoUtils.addToOperationalDB(eecProfiles, profilesTx, dataBroker);
77 } catch (Exception ex) {
78 LOG.error("error: ", ex);
83 public void remove(DataTreeModification<Profile> removedDataObject) {
84 if (removedDataObject.getRootNode() != null && removedDataObject.getRootPath() != null) {
85 LOG.info(" Node removed " + removedDataObject.getRootNode().getIdentifier());
87 assert removedDataObject.getRootNode().getDataBefore() != null;
88 deleteFromOperationalDB(removedDataObject.getRootNode().getDataBefore());
89 } catch (Exception ex) {
90 LOG.error("error: ", ex);
95 public void deleteFromOperationalDB(Profile profile) {
96 assert profile != null;
97 LegatoUtils.deleteFromOperationalDB(
98 InstanceIdentifier.create(MefGlobal.class).child(EecProfiles.class)
99 .child(Profile.class, new ProfileKey(profile.getId())), dataBroker);
104 public void update(DataTreeModification<Profile> modifiedDataObject) {
105 if (modifiedDataObject.getRootNode() != null && modifiedDataObject.getRootPath() != null) {
106 LOG.info(" Node modified " + modifiedDataObject.getRootNode().getIdentifier());
107 LOG.info(" inside updateNode()");
109 assert modifiedDataObject.getRootNode().getDataAfter() != null;
110 updateFromOperationalDB(modifiedDataObject.getRootNode().getDataAfter());
111 } catch (Exception ex) {
112 LOG.error("error: ", ex);
117 @SuppressWarnings("unchecked")
118 public void updateFromOperationalDB(Profile profile) {
119 assert profile != null;
120 InstanceIdentifier<Profile> instanceIdentifier = InstanceIdentifier.create(MefGlobal.class)
121 .child(EecProfiles.class).child(Profile.class, new ProfileKey(profile.getId()));
122 Optional<Profile> optionalProfile =
123 (Optional<Profile>) LegatoUtils.readProfile(LegatoConstants.EEC_PROFILES,
124 dataBroker, LogicalDatastoreType.CONFIGURATION, instanceIdentifier);
125 if (optionalProfile.isPresent()) {
126 LegatoUtils.deleteFromOperationalDB(instanceIdentifier, dataBroker);
127 addToOperationalDB(optionalProfile.get());