commit etree topology
[unimgr.git] / legato-api / src / main / java / org / opendaylight / unimgr / mef / legato / LegatoSlsProfileController.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.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;
31
32
33 /**
34  * @author Arif.Hussain@Xoriant.Com
35  */
36
37 public class LegatoSlsProfileController  extends UnimgrDataTreeChangeListener<Profile> {
38
39     public LegatoSlsProfileController(final DataBroker dataBroker) {
40         super(dataBroker);
41         registerListener();
42     }
43
44     private static final Logger LOG = LoggerFactory
45             .getLogger(LegatoSlsProfileController.class);
46
47
48     private static final InstanceIdentifier<Profile> PROFILE_IID = InstanceIdentifier
49             .builder(MefGlobal.class).child(SlsProfiles.class).child(Profile.class).build();
50
51     private static final InstanceIdentifier<SlsProfiles> SLS_PROFILES_IID_OPERATIONAL = InstanceIdentifier
52             .builder(MefGlobal.class).child(SlsProfiles.class).build();
53
54     private ListenerRegistration<LegatoSlsProfileController> dataTreeChangeListenerRegistration;
55
56     public void registerListener() {
57         LOG.info("Initializing LegatoSlsProfileController:init() ");
58
59         dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
60                 new DataTreeIdentifier<Profile>(LogicalDatastoreType.CONFIGURATION, PROFILE_IID), this);
61
62     }
63
64
65     @Override
66     public void close() throws Exception {
67         if (dataTreeChangeListenerRegistration != null) {
68             dataTreeChangeListenerRegistration.close();
69         }
70     }
71
72
73     @Override
74     public void add(DataTreeModification<Profile> newDataObject) {
75         LOG.info("  Node Added  " + newDataObject.getRootNode().getIdentifier());
76         addToOperationalDB(newDataObject.getRootNode().getDataAfter());
77     }
78
79
80     public void addToOperationalDB(Profile profileObj) {
81         LOG.info(" inside addNode()");
82         try {
83             assert profileObj != null;
84
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);
89         }
90         LOG.info(" ********** END addNode() ****************** ");
91     }
92
93
94     @Override
95     public void update(DataTreeModification<Profile> modifiedDataObject) {
96         if (modifiedDataObject.getRootNode() != null && modifiedDataObject.getRootPath() != null) {
97             LOG.info("  Node modified  " + modifiedDataObject.getRootNode().getIdentifier());
98             try {
99                 assert modifiedDataObject.getRootNode().getDataAfter() != null;
100                 updateNode(modifiedDataObject.getRootNode().getDataAfter());
101             } catch (Exception ex) {
102                 LOG.error("error: ", ex);
103             }
104         }
105     }
106
107
108     @SuppressWarnings("unchecked")
109     public void updateNode(Profile profile) {
110         LOG.info(" inside updateNode()");
111
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())));
118
119         if (optionalProfile.isPresent()) {
120
121             LegatoUtils
122                     .deleteFromOperationalDB(
123                             InstanceIdentifier.create(MefGlobal.class).child(SlsProfiles.class)
124                                     .child(Profile.class, new ProfileKey(profile.getId())),
125                             dataBroker);
126
127             addToOperationalDB(optionalProfile.get());
128         }
129         LOG.info(" ********** END updateNode() ****************** ");
130     }
131
132
133     @Override
134     public void remove(DataTreeModification<Profile> removedDataObject) {
135         if (removedDataObject.getRootNode() != null && removedDataObject.getRootPath() != null) {
136             LOG.info("  Node removed  " + removedDataObject.getRootNode().getIdentifier());
137
138             deleteNode(removedDataObject.getRootNode().getDataBefore());
139         }
140     }
141
142     public void deleteNode(Profile profileObj) {
143         LOG.info(" inside deleteNode()");
144
145         try {
146             assert profileObj != null;
147             LegatoUtils
148                     .deleteFromOperationalDB(
149                             InstanceIdentifier.create(MefGlobal.class).child(SlsProfiles.class)
150                                     .child(Profile.class, new ProfileKey(profileObj.getId())),
151                             dataBroker);
152
153         } catch (Exception ex) {
154             LOG.error("error: ", ex);
155         }
156
157         LOG.info(" ********** END deleteNode() ****************** ");
158     }
159
160 }