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.SlsProfiles;
24 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.SlsProfilesBuilder;
25 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.sls.profiles.Profile;
26 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.sls.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 Arif.Hussain@Xoriant.Com
37 public class LegatoSlsProfileController extends UnimgrDataTreeChangeListener<Profile> {
39 public LegatoSlsProfileController(final DataBroker dataBroker) {
44 private static final Logger LOG = LoggerFactory
45 .getLogger(LegatoSlsProfileController.class);
48 private static final InstanceIdentifier<Profile> PROFILE_IID = InstanceIdentifier
49 .builder(MefGlobal.class).child(SlsProfiles.class).child(Profile.class).build();
51 private static final InstanceIdentifier<SlsProfiles> SLS_PROFILES_IID_OPERATIONAL = InstanceIdentifier
52 .builder(MefGlobal.class).child(SlsProfiles.class).build();
54 private ListenerRegistration<LegatoSlsProfileController> dataTreeChangeListenerRegistration;
56 public void registerListener() {
57 LOG.info("Initializing LegatoSlsProfileController:init() ");
59 dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
60 new DataTreeIdentifier<Profile>(LogicalDatastoreType.CONFIGURATION, PROFILE_IID), this);
66 public void close() throws Exception {
67 if (dataTreeChangeListenerRegistration != null) {
68 dataTreeChangeListenerRegistration.close();
74 public void add(DataTreeModification<Profile> newDataObject) {
75 LOG.info(" Node Added " + newDataObject.getRootNode().getIdentifier());
76 addToOperationalDB(newDataObject.getRootNode().getDataAfter());
80 public void addToOperationalDB(Profile profileObj) {
81 LOG.info(" inside addNode()");
83 assert profileObj != null;
85 SlsProfiles profile = new SlsProfilesBuilder().setProfile(Collections.singletonList(profileObj)).build();
86 LegatoUtils.addToOperationalDB(profile, SLS_PROFILES_IID_OPERATIONAL, dataBroker);
87 } catch (Exception e) {
88 LOG.error("Error in addNode(). Err: ", e);
90 LOG.info(" ********** END addNode() ****************** ");
95 public void update(DataTreeModification<Profile> modifiedDataObject) {
96 if (modifiedDataObject.getRootNode() != null && modifiedDataObject.getRootPath() != null) {
97 LOG.info(" Node modified " + modifiedDataObject.getRootNode().getIdentifier());
99 assert modifiedDataObject.getRootNode().getDataAfter() != null;
100 updateNode(modifiedDataObject.getRootNode().getDataAfter());
101 } catch (Exception ex) {
102 LOG.error("error: ", ex);
108 @SuppressWarnings("unchecked")
109 public void updateNode(Profile profile) {
110 LOG.info(" inside updateNode()");
112 assert profile != null;
113 Optional<Profile> optionalProfile =
114 (Optional<Profile>) LegatoUtils.readProfile(LegatoConstants.SLS_PROFILES,
115 dataBroker, LogicalDatastoreType.CONFIGURATION,
116 InstanceIdentifier.create(MefGlobal.class).child(SlsProfiles.class)
117 .child(Profile.class, new ProfileKey(profile.getId())));
119 if (optionalProfile.isPresent()) {
122 .deleteFromOperationalDB(
123 InstanceIdentifier.create(MefGlobal.class).child(SlsProfiles.class)
124 .child(Profile.class, new ProfileKey(profile.getId())),
127 addToOperationalDB(optionalProfile.get());
129 LOG.info(" ********** END updateNode() ****************** ");
134 public void remove(DataTreeModification<Profile> removedDataObject) {
135 if (removedDataObject.getRootNode() != null && removedDataObject.getRootPath() != null) {
136 LOG.info(" Node removed " + removedDataObject.getRootNode().getIdentifier());
138 deleteNode(removedDataObject.getRootNode().getDataBefore());
142 public void deleteNode(Profile profileObj) {
143 LOG.info(" inside deleteNode()");
146 assert profileObj != null;
148 .deleteFromOperationalDB(
149 InstanceIdentifier.create(MefGlobal.class).child(SlsProfiles.class)
150 .child(Profile.class, new ProfileKey(profileObj.getId())),
153 } catch (Exception ex) {
154 LOG.error("error: ", ex);
157 LOG.info(" ********** END deleteNode() ****************** ");