*/
package org.opendaylight.openflowplugin.impl.services;
+import com.google.common.util.concurrent.JdkFutureAdapters;
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
import com.google.common.base.Function;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterConvertor;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.slf4j.Logger;
-import java.math.BigInteger;
import java.util.concurrent.Future;
public class SalMeterServiceImpl extends CommonService implements SalMeterService {
@Override
public Future<RpcResult<AddMeterOutput>> addMeter(final AddMeterInput input) {
- return ServiceCallProcessingUtil.<AddMeterOutput, Void>handleServiceCall(rpcContext, PRIMARY_CONNECTION,
- deviceContext, new Function<BigInteger,Future<RpcResult<Void>>>() {
+ return this.<AddMeterOutput, Void>handleServiceCall( PRIMARY_CONNECTION,
+ new Function<DataCrate<AddMeterOutput>,ListenableFuture<RpcResult<Void>>>() {
@Override
- public Future<RpcResult<Void>> apply(final BigInteger IDConnection) {
- return convertAndSend(input, IDConnection);
+ public ListenableFuture<RpcResult<Void>> apply(final DataCrate<AddMeterOutput> data) {
+ return convertAndSend(input, data);
}
});
}
@Override
public Future<RpcResult<UpdateMeterOutput>> updateMeter(final UpdateMeterInput input) {
- return ServiceCallProcessingUtil.<UpdateMeterOutput, Void>handleServiceCall(rpcContext, PRIMARY_CONNECTION,
- deviceContext, new Function<BigInteger,Future<RpcResult<Void>>>() {
+ return this.<UpdateMeterOutput, Void>handleServiceCall( PRIMARY_CONNECTION,
+ new Function<DataCrate<UpdateMeterOutput>,ListenableFuture<RpcResult<Void>>>() {
@Override
- public Future<RpcResult<Void>> apply(final BigInteger IDConnection) {
- return convertAndSend(input.getUpdatedMeter(), IDConnection);
+ public ListenableFuture<RpcResult<Void>> apply(final DataCrate<UpdateMeterOutput> data) {
+ return convertAndSend(input.getUpdatedMeter(), data);
}
});
}
@Override
public Future<RpcResult<RemoveMeterOutput>> removeMeter(final RemoveMeterInput input) {
- return ServiceCallProcessingUtil.<RemoveMeterOutput, Void>handleServiceCall(rpcContext, PRIMARY_CONNECTION,
- deviceContext, new Function<BigInteger,Future<RpcResult<Void>>>() {
+ return this.<RemoveMeterOutput, Void>handleServiceCall( PRIMARY_CONNECTION,
+ new Function<DataCrate<RemoveMeterOutput>,ListenableFuture<RpcResult<Void>>>() {
@Override
- public Future<RpcResult<Void>> apply(final BigInteger IDConnection) {
- return convertAndSend(input, IDConnection);
+ public ListenableFuture<RpcResult<Void>> apply(final DataCrate<RemoveMeterOutput> data) {
+ return convertAndSend(input, data);
}
});
}
- Future<RpcResult<Void>> convertAndSend(final Meter iputMeter, final BigInteger IDConnection) {
+ <T> ListenableFuture<RpcResult<Void>> convertAndSend(final Meter iputMeter, final DataCrate<T> data) {
final MeterModInputBuilder ofMeterModInput = MeterConvertor.toMeterModInput(iputMeter, version);
- ofMeterModInput.setXid(deviceContext.getNextXid().getValue());
- return provideConnectionAdapter(IDConnection).meterMod(ofMeterModInput.build());
+ Xid xid = deviceContext.getNextXid();
+ ofMeterModInput.setXid(xid.getValue());
+ data.getRequestContext().setXid(xid);
+ return JdkFutureAdapters.listenInPoolThread(provideConnectionAdapter(data.getiDConnection()).meterMod(ofMeterModInput.build()));
}
}