/*
* Copyright © 2015 Copyright (c) 2015 SNLAB and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.alto.spce.impl.util;
import com.google.common.base.Optional;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.host.tracker.rev140624.HostNode;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ExecutionException;
public class InventoryReader {
private Logger LOG = LoggerFactory.getLogger(InventoryReader.class);
private DataBroker dataBroker;
public InventoryReader(DataBroker dataBroker) {
this.dataBroker = dataBroker;
}
public TpId getNodeConnectorByMac(MacAddress macAddress) {
TpId tpId = null;
InstanceIdentifier<HostNode> hostId = InstanceIdentifier.builder(NetworkTopology.class)
.child(Topology.class, new TopologyKey(new TopologyId("flow:1")))
.child(Node.class,
new NodeKey(
new NodeId("host:"+macAddress.getValue())))
.augmentation(HostNode.class)
.build();
ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction();
try {
Optional<HostNode> dataObjectOptional = null;
dataObjectOptional = readOnlyTransaction.read(LogicalDatastoreType.OPERATIONAL, hostId).get();
if (dataObjectOptional.isPresent()) {
HostNode hostNode = dataObjectOptional.get();
String attPoint = hostNode.getAttachmentPoints().get(0).getKey().getTpId().getValue();
tpId = new TpId(attPoint);
}
} catch (InterruptedException | ExecutionException e) {
LOG.error("Failed to read nodes from Operation data store.");
readOnlyTransaction.close();
}
readOnlyTransaction.close();
return tpId;
}
}