/*
* Copyright © 2015 Yale University 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.basic.endpointcostservice.helper;
import com.google.common.base.Optional;
import org.opendaylight.alto.basic.endpointcostservice.suportservice.exception.ReadDataFailedException;
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.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class DataStoreHelper {
/**
* @param dataBroker
* @param iid
* @param <T>
* @return The configuration of iid
* @throws ReadDataFailedException
*/
public static <T extends DataObject> T readConfiguration(
DataBroker dataBroker, InstanceIdentifier<T> iid) throws ReadDataFailedException {
return readFromDataStore(dataBroker, iid, LogicalDatastoreType.CONFIGURATION);
}
/**
* @param dataBroker
* @param iid
* @param <T>
* @return The operational data of iid
* @throws ReadDataFailedException
*/
public static <T extends DataObject> T readOperational(
DataBroker dataBroker, InstanceIdentifier<T> iid) throws ReadDataFailedException {
T data = readFromDataStore(dataBroker, iid, LogicalDatastoreType.OPERATIONAL);
return data;
}
/**
* @param dataBroker
* @param iid
* @param type
* @param <T>
* @return The data of iid
* @throws ReadDataFailedException
*/
public static <T extends DataObject> T readFromDataStore(
DataBroker dataBroker, InstanceIdentifier<T> iid, LogicalDatastoreType type) throws ReadDataFailedException {
ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction();
Future<Optional<T>> future = tx.read(type, iid);
try {
if (future != null) {
Optional<T> optional = future.get();
if (optional.isPresent()) {
return optional.get();
}
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
tx.close();
}
throw new ReadDataFailedException();
}
}