commit etree topology
[unimgr.git] / legato-api / src / main / java / org / opendaylight / unimgr / mef / legato / LegatoEecProfileController.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.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;
31
32
33 /**
34  * @author sanket.shirode@Xoriant.com
35  */
36
37 public class LegatoEecProfileController extends UnimgrDataTreeChangeListener<Profile> {
38
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();
43
44     public LegatoEecProfileController(DataBroker dataBroker) {
45         super(dataBroker);
46         registerListener();
47     }
48
49     private void registerListener() {
50         LOG.info("Initializing LegatoSlsProfileController:init() ");
51
52         dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
53                 new DataTreeIdentifier<Profile>(LogicalDatastoreType.CONFIGURATION, EEC_PROFILE_IID), this);
54
55     }
56
57     @Override
58     public void close() throws Exception {
59         if (dataTreeChangeListenerRegistration != null) {
60             dataTreeChangeListenerRegistration.close();
61         }
62     }
63
64     @Override
65     public void add(DataTreeModification<Profile> newDataObject) {
66         LOG.info("  Node Added  " + newDataObject.getRootNode().getIdentifier());
67         addToOperationalDB(newDataObject.getRootNode().getDataAfter());
68     }
69
70     public void addToOperationalDB(Profile profile) {
71         try {
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);
79         }
80     }
81
82     @Override
83     public void remove(DataTreeModification<Profile> removedDataObject) {
84         if (removedDataObject.getRootNode() != null && removedDataObject.getRootPath() != null) {
85             LOG.info("  Node removed  " + removedDataObject.getRootNode().getIdentifier());
86             try {
87                 assert removedDataObject.getRootNode().getDataBefore() != null;
88                 deleteFromOperationalDB(removedDataObject.getRootNode().getDataBefore());
89             } catch (Exception ex) {
90                 LOG.error("error: ", ex);
91             }
92         }
93     }
94
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);
100     }
101
102
103     @Override
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()");
108             try {
109                 assert modifiedDataObject.getRootNode().getDataAfter() != null;
110                 updateFromOperationalDB(modifiedDataObject.getRootNode().getDataAfter());
111             } catch (Exception ex) {
112                 LOG.error("error: ", ex);
113             }
114         }
115     }
116
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());
128         }
129     }
130
131 }