2 * Copyright (c) 2015 Huawei, Inc. 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
9 package org.opendaylight.nemo.renderer.openflow.physicalnetwork;
11 import com.google.common.util.concurrent.CheckedFuture;
12 import com.google.common.util.concurrent.FutureCallback;
13 import com.google.common.util.concurrent.Futures;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
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.TransactionCommitFailedException;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.PhysicalNetwork;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalHosts;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalLinks;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalNodes;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHost;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.hosts.PhysicalHostKey;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLink;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLinkKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.nodes.PhysicalNode;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.nodes.PhysicalNodeKey;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
33 * Created by hj on 11/6/15.
35 public class DataBrokerAdapter {
36 private static final Logger log = LoggerFactory.getLogger(DataBrokerAdapter.class);
37 final private DataBroker dataBroker;
38 private static final String DEFAULT_TOPOLOGY_ID = "flow:1";
41 public DataBrokerAdapter(DataBroker dataBroker) {
42 this.dataBroker = dataBroker;
47 private InstanceIdentifier<PhysicalHost> getPhysicalHostIdentifier(PhysicalHostKey physicalHostKey) {
48 return InstanceIdentifier
49 .builder(PhysicalNetwork.class)
50 .child(PhysicalHosts.class)
51 .child(PhysicalHost.class, physicalHostKey)
54 private InstanceIdentifier<PhysicalNode> getPhysicalNodeIdentifier(PhysicalNodeKey physicalNodeKey) {
55 return InstanceIdentifier
56 .builder(PhysicalNetwork.class)
57 .child(PhysicalNodes.class)
58 .child(PhysicalNode.class, physicalNodeKey)
61 private InstanceIdentifier<PhysicalLink> getPhysicalLinkIdentifier(PhysicalLinkKey physicalLinkKey) {
62 return InstanceIdentifier
63 .builder(PhysicalNetwork.class)
64 .child(PhysicalLinks.class)
65 .child(PhysicalLink.class, physicalLinkKey)
69 protected void addPhysicalHost(final PhysicalHost physicalHost) {
71 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
72 final InstanceIdentifier<PhysicalHost> instanceIdentifier = getPhysicalHostIdentifier(physicalHost.getKey());
74 transaction.put(LogicalDatastoreType.OPERATIONAL, instanceIdentifier, physicalHost, true);
76 CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
77 Futures.addCallback(future, new FutureCallback<Void>() {
79 public void onFailure(Throwable t) {
80 log.warn("Could not write PhysicalHost: {} {}", physicalHost, t);
84 public void onSuccess(Void result) {
85 //System.out.println("write transaction onSuccess.");
86 log.debug("Write PhysicalHost transaction onSuccess: {}.", physicalHost);
90 } catch (Exception e) {
91 // TODO Auto-generated catch block
92 log.error("Exception:",e);
96 protected boolean addPhysicalNode(final PhysicalNode physicalNode){
97 final boolean[] addResult = {false};
99 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
100 InstanceIdentifier<PhysicalNode> identifier = getPhysicalNodeIdentifier(physicalNode.getKey());
101 t.put(LogicalDatastoreType.OPERATIONAL, identifier, physicalNode, true);
103 CheckedFuture<Void, TransactionCommitFailedException> future = t.submit();
104 Futures.addCallback(future, new FutureCallback<Void>() {
106 public void onFailure(Throwable t) {
107 log.warn("Could not write PhysicalNode {} : {}",physicalNode, t);
111 public void onSuccess(Void result) {
113 log.debug("write transaction onSuccess.");
117 } catch (Exception e) {
118 // TODO Auto-generated catch block
119 log.error("Exception:",e);
123 protected boolean removePhysicalNode(final PhysicalNodeKey nodeKey){
124 final boolean[] removeResult = {false};
126 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
127 InstanceIdentifier<PhysicalNode> identifier = getPhysicalNodeIdentifier(nodeKey);
128 t.delete(LogicalDatastoreType.OPERATIONAL, identifier);
130 CheckedFuture<Void, TransactionCommitFailedException> future = t.submit();
131 Futures.addCallback(future, new FutureCallback<Void>() {
133 public void onFailure(Throwable t) {
134 log.error("Could not delete PhysicalNode {} : {}",nodeKey, t);
138 public void onSuccess(Void result) {
139 removeResult[0]=true;
140 log.debug("Delete {} transaction onSuccess.",nodeKey);
144 } catch (Exception e) {
145 // TODO Auto-generated catch block
146 log.error("Exception:",e);
148 return removeResult[0];
151 protected void addPhysicalLink(final PhysicalLink physicalLink){
153 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
154 final InstanceIdentifier<PhysicalLink> linkIdentifier = getPhysicalLinkIdentifier(physicalLink.getKey());
155 transaction.put(LogicalDatastoreType.OPERATIONAL, linkIdentifier, physicalLink, true);
157 CheckedFuture<Void, TransactionCommitFailedException> f = transaction.submit();
158 Futures.addCallback(f, new FutureCallback<Void>() {
160 public void onFailure(Throwable t) {
161 log.warn("Could not put PhysicalLink {} : {}",physicalLink.getKey(), t);
165 public void onSuccess(Void result) {
166 //System.out.println("write transaction onSuccess.");
167 log.debug("Put transaction onSuccess:{}.",physicalLink.getKey());
171 } catch (Exception e) {
172 // TODO Auto-generated catch block
173 log.error("Exception:",e);
176 protected void removePhysicalLink(final PhysicalLinkKey physicalLinkKey){
178 WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
179 final InstanceIdentifier<PhysicalLink> linkIdentifier = getPhysicalLinkIdentifier(physicalLinkKey);
180 transaction.delete(LogicalDatastoreType.OPERATIONAL, linkIdentifier);
182 CheckedFuture<Void, TransactionCommitFailedException> f = transaction.submit();
183 Futures.addCallback(f, new FutureCallback<Void>() {
185 public void onFailure(Throwable t) {
186 log.warn("Could not remove PhysicalLink {} : {}",physicalLinkKey, t);
190 public void onSuccess(Void result) {
191 //System.out.println("write transaction onSuccess.");
192 log.debug("Remove transaction onSuccess:{}.", physicalLinkKey);
196 } catch (Exception e) {
197 // TODO Auto-generated catch block
198 log.error("Exception:",e);