commit etree topology
[unimgr.git] / legato-api / src / main / java / org / opendaylight / unimgr / mef / legato / LegatoL2cpPeeringController.java
1 /*
2  * Copyright (c) 2018 Xoriant Corporation and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.unimgr.mef.legato;
10
11 import com.google.common.base.Optional;
12
13 import java.util.Collections;
14
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;
31
32
33 /**
34  * @author Arif.Hussain@Xoriant.Com
35  *
36  */
37 public class LegatoL2cpPeeringController extends UnimgrDataTreeChangeListener<Profile> {
38
39     private static final Logger LOG = LoggerFactory.getLogger(LegatoL2cpPeeringController.class);
40
41     private static final InstanceIdentifier<Profile> PROFILE_ID = InstanceIdentifier
42             .builder(MefGlobal.class).child(L2cpPeeringProfiles.class).child(Profile.class).build();
43
44     private static final InstanceIdentifier<L2cpPeeringProfiles> L2CP_PEERING_PROFILES_ID_OPERATIONAL =
45             InstanceIdentifier.builder(MefGlobal.class).child(L2cpPeeringProfiles.class).build();
46
47     private ListenerRegistration<LegatoL2cpPeeringController> dataTreeChangeListenerRegistration;
48
49     public LegatoL2cpPeeringController(DataBroker dataBroker) {
50         super(dataBroker);
51         registerListener();
52     }
53
54     public void registerListener() {
55         LOG.info("Initializing LegatoL2cpPeeringController:init() ");
56
57         dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
58                 new DataTreeIdentifier<Profile>(LogicalDatastoreType.CONFIGURATION, PROFILE_ID),
59                 this);
60     }
61
62
63     @Override
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());
68     }
69
70
71     public void addToOperationalDB(Profile profileObj) {
72
73         LOG.info(" inside addNode()");
74
75         try {
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);
82         }
83         LOG.info(" ********** END addNode() ****************** ");
84
85     }
86
87
88     @Override
89     public void update(DataTreeModification<Profile> modifiedDataObject) {
90         if (modifiedDataObject.getRootNode() != null && modifiedDataObject.getRootPath() != null) {
91             LOG.info(
92                     "ClassName :: LegatoL2cpPeeringController, Method:: update(), Message:: Node modified  "
93                             + modifiedDataObject.getRootNode().getIdentifier());
94
95             try {
96                 assert modifiedDataObject.getRootNode().getDataAfter() != null;
97                 updateFromOperationalDB(modifiedDataObject.getRootNode().getDataAfter());
98             } catch (Exception ex) {
99                 LOG.error("error: ", ex);
100             }
101         }
102     }
103
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())));
112
113         if (optionalProfile.isPresent()) {
114
115             LegatoUtils.deleteFromOperationalDB(
116                     InstanceIdentifier.create(MefGlobal.class).child(L2cpPeeringProfiles.class)
117                             .child(Profile.class, new ProfileKey(profile.getId())),
118                     dataBroker);
119
120             addToOperationalDB(optionalProfile.get());
121         }
122
123     }
124
125     @Override
126     public void remove(DataTreeModification<Profile> removedDataObject) {
127         if (removedDataObject.getRootNode() != null && removedDataObject.getRootPath() != null) {
128             LOG.info(
129                     "ClassName :: LegatoL2cpPeeringController, Method:: remove(), Message:: Node removed  "
130                             + removedDataObject.getRootNode().getIdentifier());
131
132             try {
133                 assert removedDataObject.getRootNode().getDataBefore() != null;
134                 deleteFromOperationalDB(removedDataObject.getRootNode().getDataBefore());
135             } catch (Exception ex) {
136                 LOG.error("error: ", ex);
137             }
138         }
139     }
140
141     public void deleteFromOperationalDB(Profile profile) {
142         try {
143             assert profile != null;
144             LegatoUtils.deleteFromOperationalDB(
145                     InstanceIdentifier.create(MefGlobal.class).child(L2cpPeeringProfiles.class)
146                             .child(Profile.class, new ProfileKey(profile.getId())),
147                     dataBroker);
148         } catch (Exception ex) {
149             LOG.error("error: ", ex);
150         }
151     }
152
153     @Override
154     public void close() throws Exception {
155         if (dataTreeChangeListenerRegistration != null) {
156             dataTreeChangeListenerRegistration.close();
157         }
158     }
159
160 }