1 package org.opendaylight.neutron.transcriber;
3 import java.util.concurrent.ExecutionException;
5 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
6 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
7 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
8 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
9 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
10 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
11 import org.opendaylight.yangtools.yang.binding.DataObject;
12 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
16 import com.google.common.base.Preconditions;
17 import com.google.common.base.Predicates;
18 import com.google.common.util.concurrent.CheckedFuture;
20 public abstract class AbstractNeutronInterface<T extends DataObject,S> implements AutoCloseable {
21 private static final Logger LOGGER = LoggerFactory.getLogger(AbstractNeutronInterface.class);
22 private static final int DEDASHED_UUID_LENGTH = 32;
23 private static final int DEDASHED_UUID_START = 0;
24 private static final int DEDASHED_UUID_DIV1 = 8;
25 private static final int DEDASHED_UUID_DIV2 = 12;
26 private static final int DEDASHED_UUID_DIV3 = 16;
27 private static final int DEDASHED_UUID_DIV4 = 20;
30 private ProviderContext providerContext;
31 private DataBroker db;
33 AbstractNeutronInterface(ProviderContext providerContext) {
34 this.providerContext = providerContext;
35 this.db = providerContext.getSALService(DataBroker.class);
38 public DataBroker getDataBroker() {
42 protected abstract InstanceIdentifier<T> createInstanceIdentifier(T item);
44 protected abstract T toMd(S neutronObject);
46 protected abstract T toMd(String uuid);
48 protected boolean addMd(S neutronObject) {
49 // TODO think about adding existence logic
50 WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
51 T item = toMd(neutronObject);
52 InstanceIdentifier<T> iid = createInstanceIdentifier(item);
53 transaction.put(LogicalDatastoreType.CONFIGURATION, iid, item,true);
54 CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
57 } catch (InterruptedException | ExecutionException e) {
58 LOGGER.warn("Transation failed ",e);
64 protected boolean updateMd(S neutronObject) {
65 WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
66 T item = toMd(neutronObject);
67 InstanceIdentifier<T> iid = createInstanceIdentifier(item);
68 transaction.put(LogicalDatastoreType.CONFIGURATION, iid, item,true);
69 CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
72 } catch (InterruptedException | ExecutionException e) {
73 LOGGER.warn("Transation failed ",e);
79 protected boolean removeMd(T item) {
80 WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
81 InstanceIdentifier<T> iid = createInstanceIdentifier(item);
82 transaction.delete(LogicalDatastoreType.CONFIGURATION, iid);
83 CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
87 protected Uuid toUuid(String uuid) {
88 Preconditions.checkNotNull(uuid);
91 result = new Uuid(uuid);
92 } catch(IllegalArgumentException e) {
93 // OK... someone didn't follow RFC 4122... lets try this the hard way
94 String dedashed = uuid.replace("-", "");
95 if(dedashed.length() == DEDASHED_UUID_LENGTH) {
96 String redashed = dedashed.substring(DEDASHED_UUID_START, DEDASHED_UUID_DIV1) // 8 chars
98 + dedashed.substring(DEDASHED_UUID_DIV1, DEDASHED_UUID_DIV2) // 4 chars
100 + dedashed.substring(DEDASHED_UUID_DIV2, DEDASHED_UUID_DIV3) // 4 chars
102 + dedashed.substring(DEDASHED_UUID_DIV3, DEDASHED_UUID_DIV4) // 4 chars
104 + dedashed.substring(DEDASHED_UUID_DIV4, DEDASHED_UUID_LENGTH); // 12 chars
105 result = new Uuid(redashed);
114 public void close() throws Exception {
115 // TODO Auto-generated method stub