2 * Copyright (c) 2015 CableLabs and others. All rights reserved.
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
8 package org.opendaylight.vcpe.impl;
10 import java.util.ArrayList;
11 import java.util.List;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
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.sal.binding.api.BindingAwareBroker.ProviderContext;
18 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
19 import org.opendaylight.vcpe.api.IVcpeConsoleProvider;
20 import org.opendaylight.vcpe.command.TransactionInvoker;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vcpe.rev150622.Evcs;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vcpe.rev150622.EvcsBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vcpe.rev150622.Unis;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vcpe.rev150622.UnisBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vcpe.rev150622.evcs.Evc;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vcpe.rev150622.unis.Uni;
27 import org.opendaylight.yangtools.yang.binding.DataObject;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.osgi.framework.BundleContext;
30 import org.osgi.framework.FrameworkUtil;
31 import org.osgi.framework.ServiceRegistration;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
35 import com.google.common.util.concurrent.FutureCallback;
36 import com.google.common.util.concurrent.Futures;
38 public class VcpeProvider implements BindingAwareProvider, AutoCloseable, IVcpeConsoleProvider {
40 private static final Logger LOG = LoggerFactory.getLogger(VcpeProvider.class);
42 private UniDataChangeListener vcpeDataChangeListener;
43 private EvcDataChangeListener evcDataChangeListener;
44 private VcpeDataChangeListener listener;
45 private TransactionInvoker invoker;
47 private DataBroker dataBroker;
48 private ServiceRegistration<IVcpeConsoleProvider> vcpeConsoleRegistration;
51 public void onSessionInitiated(ProviderContext session) {
52 LOG.info("VcpeProvider Session Initiated");
54 dataBroker = session.getSALService(DataBroker.class);
55 invoker = new TransactionInvoker();
56 // Initialize operational and default config data in MD-SAL data store
57 BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
58 vcpeConsoleRegistration = context.registerService(IVcpeConsoleProvider.class, this, null);
60 vcpeDataChangeListener = new UniDataChangeListener(dataBroker);
61 evcDataChangeListener = new EvcDataChangeListener(dataBroker);
62 listener = new VcpeDataChangeListener(dataBroker, invoker);
64 // Init UNI Config & Operational stores
65 Unis unis = new UnisBuilder().build();
66 initDatastore(LogicalDatastoreType.CONFIGURATION, VcpeMapper.getUnisIid(), unis);
67 initDatastore(LogicalDatastoreType.OPERATIONAL, VcpeMapper.getUnisIid(), unis);
68 // Init EVC Config & Operational stores
69 Evcs evcs = new EvcsBuilder().build();
70 initDatastore(LogicalDatastoreType.CONFIGURATION, VcpeMapper.getEvcsIid(), evcs);
71 initDatastore(LogicalDatastoreType.OPERATIONAL, VcpeMapper.getEvcsIid(), evcs);
75 public void close() throws Exception {
76 LOG.info("VcpeProvider Closed");
77 vcpeConsoleRegistration.unregister();
78 vcpeDataChangeListener.close();
79 evcDataChangeListener.close();
83 @SuppressWarnings({ "unchecked", "rawtypes" })
84 protected void initDatastore(final LogicalDatastoreType store, InstanceIdentifier iid, final DataObject object) {
85 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
86 tx.put(store, iid, object);
88 // Perform the tx.submit asynchronously
89 Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
91 public void onSuccess(final Void result) {
92 LOG.info("initStore {} with object {} succeeded", store, object);
95 public void onFailure(final Throwable throwable) {
96 LOG.error("initStore {} with object {} failed", store, object);
102 public boolean addUni(Uni uni) {
104 List<Uni> listOfUnis = listUnis(true);
108 unis = new UnisBuilder().setUni(listOfUnis).build();
110 // Place default config data in data store tree
111 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
112 tx.put(LogicalDatastoreType.CONFIGURATION, VcpeMapper.getUnisIid(), unis);
114 // Perform the tx.submit synchronously
116 } catch (Exception e) {
117 LOG.error("addUni: failed: {}", e);
124 public boolean removeUni(String id) {
126 // Removes default config data in data store tree
127 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
128 tx.delete(LogicalDatastoreType.CONFIGURATION, VcpeMapper.getUniIid(id));
129 System.out.println(VcpeMapper.getUniIid(id));
130 // Perform the tx.submit synchronously
132 } catch (Exception e) {
133 LOG.info("RemoveUni: failed: {}", e);
140 public List<Uni> listUnis(boolean isConfigurationDatastore) {
141 List<Uni> listOfUnis = null;
144 ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction();
145 listOfUnis = tx.read((isConfigurationDatastore) ? LogicalDatastoreType.CONFIGURATION
146 : LogicalDatastoreType.OPERATIONAL, VcpeMapper.getUnisIid()).checkedGet().get().getUni();
147 } catch (Exception e) {
148 LOG.error("ListIntents: failed: {}", e);
151 if (listOfUnis == null) {
152 listOfUnis = new ArrayList<Uni>();
154 LOG.info("ListUnisConfiguration: list of unis retrieved sucessfully");
159 public Uni getUni(String id) {
163 InstanceIdentifier<Uni> iid = VcpeMapper.getUniIid(id);
164 System.out.println(VcpeMapper.getUniIid(id));
166 ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction();
167 uni = tx.read(LogicalDatastoreType.CONFIGURATION, iid).checkedGet().get();
170 uni = tx.read(LogicalDatastoreType.OPERATIONAL, iid).checkedGet().get();
172 } catch (Exception e) {
173 LOG.error("getUni: failed: {}", e);
176 LOG.info("getUni: Uni retrieved sucessfully");
181 public boolean removeEvc(String uuid) {
183 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
184 tx.delete(LogicalDatastoreType.CONFIGURATION, VcpeMapper.getEvcIid(uuid));
185 System.out.println(VcpeMapper.getEvcIid(uuid));
187 } catch (Exception e) {
188 LOG.info("Remove Evc: failed: {}", e);
195 public boolean addEvc(Evc evc) {
196 // TODO Auto-generated method stub
201 public Evc getEvc(String uuid) {
202 // TODO Auto-generated method stub