Merge dev/fluorine work across to master
[unimgr.git] / legato-api / src / main / java / org / opendaylight / unimgr / mef / legato / util / LegatoUtils.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 package org.opendaylight.unimgr.mef.legato.util;
9
10 import java.util.ArrayList;
11 import java.util.List;
12
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
15 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
16 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
17 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
18 import org.opendaylight.unimgr.mef.legato.dao.EVCDao;
19 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.common.types.rev180321.PositiveInteger;
20 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.SubscriberServices;
21 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.SubscriberServicesBuilder;
22 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.Evc;
23 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.legato.services.rev171215.mef.services.carrier.ethernet.subscriber.services.evc.end.points.EndPoint;
24 import org.opendaylight.yang.gen.v1.urn.mef.yang.mef.types.rev171215.VlanIdType;
25 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrm.connectivity.rev180321.carrier.eth.connectivity.end.point.resource.CeVlanIdListAndUntagBuilder;
26 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrm.connectivity.rev180321.vlan.id.list.and.untag.VlanId;
27 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrm.connectivity.rev180321.vlan.id.list.and.untag.VlanIdBuilder;
28 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.CreateConnectivityServiceInput1;
29 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.CreateConnectivityServiceInput1Builder;
30 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.EndPoint2;
31 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.EndPoint2Builder;
32 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.EndPoint7;
33 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.EndPoint7Builder;
34 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.UpdateConnectivityServiceInput1;
35 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.UpdateConnectivityServiceInput1Builder;
36 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.connectivity.service.attrs.NrpCarrierEthConnectivityResource;
37 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.connectivity.service.attrs.NrpCarrierEthConnectivityResourceBuilder;
38 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.connectivity.service.end.point.attrs.NrpCarrierEthConnectivityEndPointResource;
39 import org.opendaylight.yang.gen.v1.urn.mef.yang.nrp._interface.rev180321.nrp.connectivity.service.end.point.attrs.NrpCarrierEthConnectivityEndPointResourceBuilder;
40 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.LayerProtocolName;
41 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.PortDirection;
42 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.PortRole;
43 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.Uuid;
44 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.CreateConnectivityServiceInput;
45 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.CreateConnectivityServiceInputBuilder;
46 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.ServiceType;
47 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.UpdateConnectivityServiceInput;
48 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.UpdateConnectivityServiceInputBuilder;
49 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connectivity.service.end.point.ServiceInterfacePoint;
50 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.connectivity.service.end.point.ServiceInterfacePointBuilder;
51 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.ConnConstraintBuilder;
52 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.EndPointBuilder;
53 import org.opendaylight.yangtools.yang.binding.DataObject;
54 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
55 import org.slf4j.Logger;
56 import org.slf4j.LoggerFactory;
57
58 import com.google.common.base.Optional;
59 import com.google.common.util.concurrent.CheckedFuture;
60
61 /**
62  * @author santanu.de@xoriant.com
63  */
64
65 public class LegatoUtils {
66
67     private static final Logger LOG = LoggerFactory.getLogger(LegatoUtils.class);
68
69     public static EVCDao parseNodes(Evc evc) {
70         List<String> uniList = new ArrayList<String>();
71         String vlanId;
72         EVCDao evcDao = new EVCDao();
73
74         assert evc != null;
75         uniList = new ArrayList<String>();
76         assert evc.getEndPoints().getEndPoint() != null && evc.getEndPoints().getEndPoint().size() > 0;
77         for (EndPoint endPoint : evc.getEndPoints().getEndPoint()) {
78             vlanId = "0";
79             assert endPoint.getCeVlans().getCeVlan() != null;
80             for (VlanIdType vlanIdType : endPoint.getCeVlans().getCeVlan()) {
81                 vlanId = vlanIdType.getValue().toString();
82             }
83
84             uniList.add(endPoint.getUniId().getValue().toString() + "#" + vlanId);
85         }
86
87         evcDao.setEvcId(evc.getEvcId().getValue());
88         evcDao.setMaxFrameSize((evc.getMaxFrameSize().getValue() != null) ? evc.getMaxFrameSize().getValue() : 0);
89         evcDao.setConnectionType((evc.getConnectionType().getName() != null) ? evc.getConnectionType().getName() : "");
90         evcDao.setSvcType(evc.getSvcType().getName());
91         evcDao.setUniList(uniList);
92         return evcDao;
93     }
94
95     public static EndPoint2 buildCreateEthConnectivityEndPointAugmentation(String vlanId) {
96         return new EndPoint2Builder()
97                 .setNrpCarrierEthConnectivityEndPointResource(buildNrpCarrierEthConnectivityEndPointResource(vlanId))
98                 .build();
99     }
100
101     public static EndPoint7 buildUpdateEthConnectivityEndPointAugmentation(String vlanId) {
102         return new EndPoint7Builder()
103                 .setNrpCarrierEthConnectivityEndPointResource(buildNrpCarrierEthConnectivityEndPointResource(vlanId))
104                 .build();
105     }
106
107     public static CreateConnectivityServiceInput1 buildCreateConServiceAugmentation(String maxFrameSize) {
108         return new CreateConnectivityServiceInput1Builder()
109                 .setNrpCarrierEthConnectivityResource(buildNrpCarrierEthConnectivityResource(maxFrameSize)).build();
110     }
111
112     public static UpdateConnectivityServiceInput1 buildUpdateConServiceAugmentation(String maxFrameSize) {
113         return new UpdateConnectivityServiceInput1Builder()
114                 .setNrpCarrierEthConnectivityResource(buildNrpCarrierEthConnectivityResource(maxFrameSize)).build();
115     }
116
117     public static NrpCarrierEthConnectivityEndPointResource buildNrpCarrierEthConnectivityEndPointResource(
118             String vlanId) {
119
120         NrpCarrierEthConnectivityEndPointResourceBuilder nrpCarrierEthConnectivityEndPointResourceBuilder =
121                 new NrpCarrierEthConnectivityEndPointResourceBuilder();
122
123         CeVlanIdListAndUntagBuilder ceVlanIdListAndUntagBuilder = new CeVlanIdListAndUntagBuilder();
124         List<VlanId> vlanList = new ArrayList<>();
125         if (Integer.parseInt(vlanId) > 0) {
126             VlanIdBuilder vlanIdBuilder = new VlanIdBuilder().setVlanId(new PositiveInteger(Long.parseLong(vlanId)));
127             vlanList.add(vlanIdBuilder.build());
128         }
129         ceVlanIdListAndUntagBuilder.setVlanId(vlanList);
130         nrpCarrierEthConnectivityEndPointResourceBuilder.setCeVlanIdListAndUntag(ceVlanIdListAndUntagBuilder.build());
131
132         return nrpCarrierEthConnectivityEndPointResourceBuilder.build();
133     }
134
135     public static NrpCarrierEthConnectivityResource buildNrpCarrierEthConnectivityResource(String maxFrameSize) {
136         NrpCarrierEthConnectivityResourceBuilder nrpCarrierEthConnectivityResourceBuilder =
137                 new NrpCarrierEthConnectivityResourceBuilder();
138         return nrpCarrierEthConnectivityResourceBuilder
139                 .setMaxFrameSize(new PositiveInteger(Long.parseLong(maxFrameSize))).build();
140     }
141
142     public static CreateConnectivityServiceInput buildCreateConnectivityServiceInput(EVCDao evcDao) {
143
144         CreateConnectivityServiceInputBuilder createConnServiceInputBuilder =
145                 new CreateConnectivityServiceInputBuilder();
146         List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.EndPoint> endpointList;
147         List<String> uniList = evcDao.getUniList();
148         boolean isExclusive = false;
149
150         // if svc-type = epl/eplan then set is_exclusive flag as true
151         if (evcDao.getSvcType().equalsIgnoreCase(LegatoConstants.EPL)
152                 || evcDao.getSvcType().equalsIgnoreCase(LegatoConstants.EPLAN)) {
153             isExclusive = true;
154         }
155
156         switch (evcDao.getConnectionType().replace("-", "").toUpperCase()) {
157             case LegatoConstants.POINTTOPOINT:
158                 createConnServiceInputBuilder.setConnConstraint(new ConnConstraintBuilder()
159                         .setServiceLevel(LegatoConstants.BEST_EFFORT).setIsExclusive(isExclusive)
160                         .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).build());
161                 break;
162             case LegatoConstants.MULTIPOINTTOMULTIPOINT:
163                 createConnServiceInputBuilder.setConnConstraint(new ConnConstraintBuilder()
164                         .setServiceLevel(LegatoConstants.BEST_EFFORT).setIsExclusive(isExclusive)
165                         .setServiceType(ServiceType.MULTIPOINTCONNECTIVITY).build());
166                 break;
167             default:
168                 break;
169         }
170
171
172         // build end points
173         assert uniList != null && uniList.size() > 0;
174         endpointList = buildCreateEndpoints(uniList, LayerProtocolName.ETH);
175
176         createConnServiceInputBuilder.setEndPoint(endpointList);
177
178         createConnServiceInputBuilder.addAugmentation(CreateConnectivityServiceInput1.class,
179                 LegatoUtils.buildCreateConServiceAugmentation(evcDao.getMaxFrameSize().toString()));
180
181         return createConnServiceInputBuilder.build();
182     }
183
184     public static UpdateConnectivityServiceInput buildUpdateConnectivityServiceInput(EVCDao evcDao,
185             String uniStr, String uuid) {
186         boolean isExclusive = false;
187
188         UpdateConnectivityServiceInputBuilder updateConnServiceInputBuilder =
189                 new UpdateConnectivityServiceInputBuilder();
190
191         // if svc-type = epl/eplan then set is_exclusive flag as true
192         if (evcDao.getSvcType().equalsIgnoreCase(LegatoConstants.EPL)
193                 || evcDao.getSvcType().equalsIgnoreCase(LegatoConstants.EPLAN)) {
194             isExclusive = true;
195         }
196
197         switch (evcDao.getConnectionType().replace("-", "").toUpperCase()) {
198             case LegatoConstants.POINTTOPOINT:
199                 updateConnServiceInputBuilder
200                         .setConnConstraint(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.update.connectivity.service.input.ConnConstraintBuilder()
201                                 .setServiceLevel(LegatoConstants.BEST_EFFORT).setIsExclusive(isExclusive)
202                                 .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).build());
203                 break;
204             case LegatoConstants.MULTIPOINTTOMULTIPOINT:
205                 updateConnServiceInputBuilder
206                         .setConnConstraint(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.update.connectivity.service.input.ConnConstraintBuilder()
207                                 .setServiceLevel(LegatoConstants.BEST_EFFORT).setIsExclusive(isExclusive)
208                                 .setServiceType(ServiceType.MULTIPOINTCONNECTIVITY).build());
209                 break;
210             default:
211                 break;
212         }
213
214         updateConnServiceInputBuilder
215                 .setEndPoint(buildUpdateEndpoints(uniStr, LayerProtocolName.ETH));
216         updateConnServiceInputBuilder.addAugmentation(UpdateConnectivityServiceInput1.class,
217                 LegatoUtils.buildUpdateConServiceAugmentation(evcDao.getMaxFrameSize().toString()));
218         updateConnServiceInputBuilder.setServiceIdOrName(uuid);
219
220         return updateConnServiceInputBuilder.build();
221     }
222
223     private static List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.EndPoint> buildCreateEndpoints(
224             List<String> uniList, LayerProtocolName layerProtocolName) {
225         List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.EndPoint> endpointList =
226                 new ArrayList<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.create.connectivity.service.input.EndPoint>();
227
228         EndPointBuilder endPointBuilder;
229         String[] uniArr;
230
231         for (String uniStr : uniList) {
232             uniArr = uniStr.split("#");
233
234             ServiceInterfacePoint sipRef = new ServiceInterfacePointBuilder()
235                     .setServiceInterfacePointId(new Uuid(uniArr[0])).build();
236
237             endPointBuilder = new EndPointBuilder().setRole(PortRole.SYMMETRIC)
238                     .setLocalId("e:" + uniArr[0]).setServiceInterfacePoint(sipRef)
239                     .setDirection(PortDirection.BIDIRECTIONAL)
240                     .setLayerProtocolName(layerProtocolName).addAugmentation(EndPoint2.class,
241                             LegatoUtils.buildCreateEthConnectivityEndPointAugmentation(uniArr[1]));
242
243             endpointList.add(endPointBuilder.build());
244         }
245
246         endPointBuilder = null;
247         uniArr = null;
248
249         return endpointList;
250     }
251
252     private static org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.update.connectivity.service.input.EndPoint buildUpdateEndpoints(
253             String uniStr, LayerProtocolName layerProtocolName) {
254         org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.update.connectivity.service.input.EndPointBuilder endPointBuilder = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev180307.update.connectivity.service.input.EndPointBuilder();
255         String[] uniArr;
256
257         if (uniStr != null && !uniStr.trim().isEmpty()) {
258             uniArr = uniStr.split("#");
259             ServiceInterfacePoint sipRef = new ServiceInterfacePointBuilder()
260                     .setServiceInterfacePointId(new Uuid(uniArr[0])).build();
261             endPointBuilder.setRole(PortRole.SYMMETRIC).setLocalId("e:" + uniArr[0])
262                     .setServiceInterfacePoint(sipRef).setDirection(PortDirection.BIDIRECTIONAL)
263                     .setLayerProtocolName(layerProtocolName)
264                     .addAugmentation(EndPoint7.class,
265                             LegatoUtils.buildUpdateEthConnectivityEndPointAugmentation(uniArr[1]));
266         }
267
268         uniArr = null;
269
270         return endPointBuilder.build();
271     }
272
273     public static Optional<Evc> readEvc(DataBroker dataBroker, LogicalDatastoreType store,
274             InstanceIdentifier<?> evcNode) {
275         final ReadTransaction read = dataBroker.newReadOnlyTransaction();
276         final InstanceIdentifier<Evc> evcId = evcNode.firstIdentifierOf(Evc.class);
277         final CheckedFuture<Optional<Evc>, ReadFailedException> linkFuture = read.read(store, evcId);
278         try {
279             return linkFuture.checkedGet();
280         } catch (final ReadFailedException e) {
281             LOG.error("Unable to read node with EVC Id {}, err: {} ", evcId, e);
282         }
283         return Optional.absent();
284     }
285
286     @SuppressWarnings("deprecation")
287     public static Optional<?> readProfile(String string, DataBroker dataBroker, LogicalDatastoreType store,
288             InstanceIdentifier<?> child) {
289         final ReadTransaction read = dataBroker.newReadOnlyTransaction();
290         try {
291
292             switch (string) {
293                 case LegatoConstants.SLS_PROFILES:
294                     final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.sls.profiles.Profile> profileId =
295                             child.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.sls.profiles.Profile.class);
296                     final CheckedFuture<Optional<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.sls.profiles.Profile>, ReadFailedException> profileFuture =
297                             read.read(store, profileId);
298                     return profileFuture.checkedGet();
299
300                 case LegatoConstants.COS_PROFILES:
301                     final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.cos.profiles.Profile> cosProfileId =
302                             child.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.cos.profiles.Profile.class);
303                     final CheckedFuture<Optional<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.cos.profiles.Profile>, ReadFailedException> cosProfileFuture =
304                             read.read(store, cosProfileId);
305                     return cosProfileFuture.checkedGet();
306
307                 case LegatoConstants.BWP_PROFILES:
308                     final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.bwp.flow.parameter.profiles.Profile> bwpProfileId =
309                             child.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.bwp.flow.parameter.profiles.Profile.class);
310                     final CheckedFuture<Optional<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.bwp.flow.parameter.profiles.Profile>, ReadFailedException> bwpProfileFuture =
311                             read.read(store, bwpProfileId);
312                     return bwpProfileFuture.checkedGet();
313
314                 case LegatoConstants.L2CP_EEC_PROFILES:
315                     final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.l2cp.eec.profiles.Profile> l2cpEec_ProfileId =
316                             child.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.l2cp.eec.profiles.Profile.class);
317                     final CheckedFuture<Optional<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.l2cp.eec.profiles.Profile>, ReadFailedException> l2cpEecProfileFuture =
318                             read.read(store, l2cpEec_ProfileId);
319                     return l2cpEecProfileFuture.checkedGet();
320
321                 case LegatoConstants.L2CP_PEERING_PROFILES:
322                     final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.l2cp.peering.profiles.Profile> l2cpPeering_ProfileId =
323                             child.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.l2cp.peering.profiles.Profile.class);
324                     final CheckedFuture<Optional<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.l2cp.peering.profiles.Profile>, ReadFailedException> l2cpPeeringProfileFuture =
325                             read.read(store, l2cpPeering_ProfileId);
326                     return l2cpPeeringProfileFuture.checkedGet();
327
328                 case LegatoConstants.EEC_PROFILES:
329                     final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.eec.profiles.Profile> eecProfileId =
330                             child.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.eec.profiles.Profile.class);
331                     final CheckedFuture<Optional<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.eec.profiles.Profile>, ReadFailedException> eecProfileFuture =
332                             read.read(store, eecProfileId);
333                     return eecProfileFuture.checkedGet();
334
335                 case LegatoConstants.CMP_PROFILES:
336                     final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.color.mapping.profiles.Profile> cmpProfileId =
337                             child.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.color.mapping.profiles.Profile.class);
338                     final CheckedFuture<Optional<org.opendaylight.yang.gen.v1.urn.mef.yang.mef.global.rev171215.mef.global.color.mapping.profiles.Profile>, ReadFailedException> cmpProfileFuture =
339                             read.read(store, cmpProfileId);
340                     return cmpProfileFuture.checkedGet();
341
342                 default:
343                     LOG.info("IN DEFAULT CASE :  NO MATCH");
344             }
345         } catch (final ReadFailedException e) {
346             LOG.error("Unable to read node ", e);
347         }
348         return Optional.absent();
349     }
350
351     @SuppressWarnings("deprecation")
352     public static boolean deleteFromOperationalDB(InstanceIdentifier<?> nodeIdentifier,
353             DataBroker dataBroker) {
354
355         LOG.info("Received a request to delete node {}", nodeIdentifier);
356         boolean result = false;
357
358         final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
359         transaction.delete(LogicalDatastoreType.OPERATIONAL, nodeIdentifier);
360
361         try {
362             transaction.submit().checkedGet();
363             result = true;
364         } catch (org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException e) {
365             LOG.error("Unable to remove node ", nodeIdentifier, e);
366         }
367         return result;
368     }
369
370     @SuppressWarnings("deprecation")
371     public static <T extends DataObject> void addToOperationalDB(T typeOfProfile,
372             InstanceIdentifier<T> profilesTx, DataBroker dataBroker) {
373         LOG.info("Received a request to add node {}", profilesTx);
374
375         WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
376         transaction.merge(LogicalDatastoreType.OPERATIONAL, profilesTx, typeOfProfile);
377
378         try {
379             transaction.submit().checkedGet();
380         } catch (org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException e) {
381             LOG.error("Unable to add node in OperationalDB(). Err: ", e);
382         }
383
384     }
385
386     @SuppressWarnings("deprecation")
387     public static boolean updateEvcInOperationalDB(Evc evc,
388             InstanceIdentifier<SubscriberServices> nodeIdentifier, DataBroker dataBroker) {
389         LOG.info("Received a request to add node {}", nodeIdentifier);
390
391         boolean result = false;
392
393         List<Evc> evcList = new ArrayList<Evc>();
394         evcList.add(evc);
395
396         final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
397         transaction.put(LogicalDatastoreType.OPERATIONAL, nodeIdentifier,
398                 new SubscriberServicesBuilder().setEvc(evcList).build());
399
400         try {
401             transaction.submit().checkedGet();
402             result = true;
403         } catch (org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException e) {
404             LOG.error("Unable to add node in OperationalDB() ", nodeIdentifier, e);
405         }
406         return result;
407
408     }
409
410 }