commit etree topology
[unimgr.git] / legato-api / src / main / java / org / opendaylight / unimgr / mef / legato / LegatoColorMappingProfileController.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.ColorMappingProfiles;
24 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.ColorMappingProfilesBuilder;
25 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.color.mapping.profiles.Profile;
26 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.color.mapping.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 LegatoColorMappingProfileController extends UnimgrDataTreeChangeListener<Profile> {
38
39     private static final Logger LOG = LoggerFactory.getLogger(LegatoColorMappingProfileController.class);
40     private ListenerRegistration<LegatoColorMappingProfileController> dataTreeChangeListenerRegistration;
41     private static final InstanceIdentifier<Profile> CMP_PROFILE_IID = InstanceIdentifier.builder(MefGlobal.class)
42             .child(ColorMappingProfiles.class).child(Profile.class).build();
43
44     public LegatoColorMappingProfileController(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, CMP_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             ColorMappingProfiles colorMappingProfiles = new ColorMappingProfilesBuilder()
74                     .setProfile(Collections.singletonList(profile)).build();
75             InstanceIdentifier<ColorMappingProfiles> profilesTx = InstanceIdentifier.create(MefGlobal.class)
76                 .child(ColorMappingProfiles.class);
77             LegatoUtils.addToOperationalDB(colorMappingProfiles, profilesTx, dataBroker);
78         } catch (Exception ex) {
79             LOG.error("error: ", ex);
80         }
81     }
82
83
84     @Override
85     public void remove(DataTreeModification<Profile> removedDataObject) {
86         if (removedDataObject.getRootNode() != null && removedDataObject.getRootPath() != null) {
87             LOG.info("  Node removed  " + removedDataObject.getRootNode().getIdentifier());
88             try {
89                 assert removedDataObject.getRootNode().getDataBefore() != null;
90                 deleteFromOperationalDB(removedDataObject.getRootNode().getDataBefore());
91             } catch (Exception ex) {
92                 LOG.error("error: ", ex);
93             }
94         }
95     }
96
97
98     public void deleteFromOperationalDB(Profile profile) {
99         try {
100             assert profile != null;
101             LegatoUtils.deleteFromOperationalDB(
102                     InstanceIdentifier.create(MefGlobal.class).child(ColorMappingProfiles.class)
103                             .child(Profile.class, new ProfileKey(profile.getId())),
104                     dataBroker);
105         } catch (Exception ex) {
106             LOG.error("error: ", ex);
107         }
108     }
109
110
111     @Override
112     public void update(DataTreeModification<Profile> modifiedDataObject) {
113         if (modifiedDataObject.getRootNode() != null && modifiedDataObject.getRootPath() != null) {
114             LOG.info("  Node modified  " + modifiedDataObject.getRootNode().getIdentifier());
115             try {
116                 assert modifiedDataObject.getRootNode().getDataAfter() != null;
117                 updateFromOperationalDB(modifiedDataObject.getRootNode().getDataAfter());
118             } catch (Exception ex) {
119                 LOG.error("error: ", ex);
120             }
121         }
122     }
123
124
125     @SuppressWarnings("unchecked")
126     public void updateFromOperationalDB(Profile profile) {
127         assert profile != null;
128         InstanceIdentifier<Profile> instanceIdentifier =
129                 InstanceIdentifier.create(MefGlobal.class).child(ColorMappingProfiles.class)
130                         .child(Profile.class, new ProfileKey(profile.getId()));
131         Optional<Profile> optionalProfile =
132                 (Optional<Profile>) LegatoUtils.readProfile(LegatoConstants.CMP_PROFILES,
133                         dataBroker, LogicalDatastoreType.CONFIGURATION, instanceIdentifier);
134         if (optionalProfile.isPresent()) {
135             LegatoUtils.deleteFromOperationalDB(instanceIdentifier, dataBroker);
136             addToOperationalDB(optionalProfile.get());
137         }
138     }
139
140 }