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.L2cpPeeringProfiles;
24 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.L2cpPeeringProfilesBuilder;
25 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.l2cp.peering.profiles.Profile;
26 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.l2cp.peering.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 LegatoL2cpPeeringController extends UnimgrDataTreeChangeListener<Profile> {
39 private static final Logger LOG = LoggerFactory.getLogger(LegatoL2cpPeeringController.class);
41 private static final InstanceIdentifier<Profile> PROFILE_ID = InstanceIdentifier
42 .builder(MefGlobal.class).child(L2cpPeeringProfiles.class).child(Profile.class).build();
44 private static final InstanceIdentifier<L2cpPeeringProfiles> L2CP_PEERING_PROFILES_ID_OPERATIONAL =
45 InstanceIdentifier.builder(MefGlobal.class).child(L2cpPeeringProfiles.class).build();
47 private ListenerRegistration<LegatoL2cpPeeringController> dataTreeChangeListenerRegistration;
49 public LegatoL2cpPeeringController(DataBroker dataBroker) {
54 public void registerListener() {
55 LOG.info("Initializing LegatoL2cpPeeringController:init() ");
57 dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
58 new DataTreeIdentifier<Profile>(LogicalDatastoreType.CONFIGURATION, PROFILE_ID),
64 public void add(DataTreeModification<Profile> newDataObject) {
65 LOG.info("ClassName :: LegatoL2cpPeeringController, Method:: add(), Message:: Node Added "
66 + newDataObject.getRootNode().getIdentifier());
67 addToOperationalDB(newDataObject.getRootNode().getDataAfter());
71 public void addToOperationalDB(Profile profileObj) {
73 LOG.info(" inside addNode()");
76 assert profileObj != null;
77 L2cpPeeringProfiles l2cpPeeringProfiles = new L2cpPeeringProfilesBuilder()
78 .setProfile(Collections.singletonList(profileObj)).build();
79 LegatoUtils.addToOperationalDB(l2cpPeeringProfiles, L2CP_PEERING_PROFILES_ID_OPERATIONAL, dataBroker);
80 } catch (Exception e) {
81 LOG.error("Error in addNode(). Err: ", e);
83 LOG.info(" ********** END addNode() ****************** ");
89 public void update(DataTreeModification<Profile> modifiedDataObject) {
90 if (modifiedDataObject.getRootNode() != null && modifiedDataObject.getRootPath() != null) {
92 "ClassName :: LegatoL2cpPeeringController, Method:: update(), Message:: Node modified "
93 + modifiedDataObject.getRootNode().getIdentifier());
96 assert modifiedDataObject.getRootNode().getDataAfter() != null;
97 updateFromOperationalDB(modifiedDataObject.getRootNode().getDataAfter());
98 } catch (Exception ex) {
99 LOG.error("error: ", ex);
104 @SuppressWarnings("unchecked")
105 public void updateFromOperationalDB(Profile profile) {
106 assert profile != null;
107 Optional<Profile> optionalProfile =
108 (Optional<Profile>) LegatoUtils.readProfile(LegatoConstants.L2CP_PEERING_PROFILES,
109 dataBroker, LogicalDatastoreType.CONFIGURATION,
110 InstanceIdentifier.create(MefGlobal.class).child(L2cpPeeringProfiles.class)
111 .child(Profile.class, new ProfileKey(profile.getId())));
113 if (optionalProfile.isPresent()) {
115 LegatoUtils.deleteFromOperationalDB(
116 InstanceIdentifier.create(MefGlobal.class).child(L2cpPeeringProfiles.class)
117 .child(Profile.class, new ProfileKey(profile.getId())),
120 addToOperationalDB(optionalProfile.get());
126 public void remove(DataTreeModification<Profile> removedDataObject) {
127 if (removedDataObject.getRootNode() != null && removedDataObject.getRootPath() != null) {
129 "ClassName :: LegatoL2cpPeeringController, Method:: remove(), Message:: Node removed "
130 + removedDataObject.getRootNode().getIdentifier());
133 assert removedDataObject.getRootNode().getDataBefore() != null;
134 deleteFromOperationalDB(removedDataObject.getRootNode().getDataBefore());
135 } catch (Exception ex) {
136 LOG.error("error: ", ex);
141 public void deleteFromOperationalDB(Profile profile) {
143 assert profile != null;
144 LegatoUtils.deleteFromOperationalDB(
145 InstanceIdentifier.create(MefGlobal.class).child(L2cpPeeringProfiles.class)
146 .child(Profile.class, new ProfileKey(profile.getId())),
148 } catch (Exception ex) {
149 LOG.error("error: ", ex);
154 public void close() throws Exception {
155 if (dataTreeChangeListenerRegistration != null) {
156 dataTreeChangeListenerRegistration.close();