Example usage for com.google.common.util.concurrent Futures transform

List of usage examples for com.google.common.util.concurrent Futures transform

Introduction

In this page you can find the example usage for com.google.common.util.concurrent Futures transform.

Prototype

public static <I, O> ListenableFuture<O> transform(ListenableFuture<I> input,
        Function<? super I, ? extends O> function) 

Source Link

Document

Returns a new ListenableFuture whose result is the product of applying the given Function to the result of the given Future .

Usage

From source file:com.facebook.buck.distributed.DistributedBuildFileHashes.java

public DistributedBuildFileHashes(ActionGraph actionGraph, final SourcePathResolver sourcePathResolver,
        final FileHashCache rootCellFileHashCache, ListeningExecutorService executorService,
        final int keySeed) {

    this.remoteFileHashes = CacheBuilder.newBuilder()
            .build(new CacheLoader<ProjectFilesystem, BuildJobStateFileHashes>() {
                @Override//from w w w . ja v a2  s.c o m
                public BuildJobStateFileHashes load(ProjectFilesystem filesystem) throws Exception {
                    BuildJobStateFileHashes fileHashes = new BuildJobStateFileHashes();
                    fileHashes.setFileSystemRootName(filesystem.getRootPath().toString());
                    return fileHashes;
                }
            });
    this.fileHashLoaders = CacheBuilder.newBuilder()
            .build(new CacheLoader<ProjectFilesystem, FileHashLoader>() {
                @Override
                public FileHashLoader load(ProjectFilesystem key) throws Exception {
                    return new RecordingFileHashLoader(
                            new StackedFileHashCache(ImmutableList.of(rootCellFileHashCache,
                                    DefaultFileHashCache.createDefaultFileHashCache(key))),
                            key, remoteFileHashes.get(key));
                }
            });
    this.ruleKeyFactories = CacheBuilder.newBuilder()
            .build(new CacheLoader<ProjectFilesystem, DefaultRuleKeyBuilderFactory>() {
                @Override
                public DefaultRuleKeyBuilderFactory load(ProjectFilesystem key) throws Exception {
                    return new DefaultRuleKeyBuilderFactory(/* seed */ keySeed, fileHashLoaders.get(key),
                            sourcePathResolver);
                }
            });
    this.ruleKeys = ruleKeyComputation(actionGraph, this.ruleKeyFactories, executorService);
    this.fileHashes = fileHashesComputation(Futures.transform(this.ruleKeys, Functions.<Void>constant(null)),
            this.remoteFileHashes, executorService);
}

From source file:org.opendaylight.controller.md.sal.binding.impl.RpcServiceAdapter.java

private static ListenableFuture<RpcResult<?>> transformFuture(final SchemaPath rpc,
        final ListenableFuture<DOMRpcResult> domFuture, final BindingNormalizedNodeSerializer codec) {
    return Futures.transform(domFuture, new Function<DOMRpcResult, RpcResult<?>>() {
        @Override/*from www.  j a v  a 2  s .  c  om*/
        public RpcResult<?> apply(final DOMRpcResult input) {
            final NormalizedNode<?, ?> domData = input.getResult();
            final DataObject bindingResult;
            if (domData != null) {
                final SchemaPath rpcOutput = rpc.createChild(QName.create(rpc.getLastComponent(), "output"));
                bindingResult = codec.fromNormalizedNodeRpcData(rpcOutput, (ContainerNode) domData);
            } else {
                bindingResult = null;
            }
            return RpcResult.class.cast(RpcResultBuilder.success(bindingResult).build());
        }
    });
}

From source file:android.support.test.espresso.web.action.AtomAction.java

/**
 * Return a Future, which will be set and transformed from futureEval.
 * Espresso's public API cannot have guava types in its method signatures, so return Future
 * instead of ListenableFuture or SettableFuture.
 *///  www .  jav  a2  s  .c om
public Future<E> getFuture() {
    return Futures.transform(futureEval, new Function<Evaluation, E>() {
        @Override
        public E apply(Evaluation e) {
            return atom.transform(e);
        }
    });
}

From source file:com.microsoft.azure.keyvault.extensions.KeyVaultKey.java

@Override
public ListenableFuture<byte[]> decryptAsync(byte[] ciphertext, byte[] iv, byte[] authenticationData,
        byte[] authenticationTag, String algorithm) {

    if (implementation == null) {
        return null;
    }/*from w  w w.j  av  a2s  . com*/

    if (Strings.isNullOrWhiteSpace(algorithm)) {
        algorithm = getDefaultEncryptionAlgorithm();
    }

    // Never local
    ListenableFuture<KeyOperationResult> futureCall = client.decryptAsync(implementation.getKid(),
            new JsonWebKeyEncryptionAlgorithm(algorithm), ciphertext, null);
    return Futures.transform(futureCall, new DecryptResultTransform());
}

From source file:org.glassfish.jersey.examples.rx.agent.ListenableFutureAgentResource.java

private ListenableFuture<AgentResponse> visited(final AgentResponse response) {
    final ListenableFuture<List<Destination>> visited = RxListenableFuture.from(destination).path("visited")
            .request()//from ww w .j  av  a 2s . c  o  m
            // Identify the user.
            .header("Rx-User", "Guava")
            // Reactive invoker.
            .rx()
            // Return a list of destinations.
            .get(new GenericType<List<Destination>>() {
            });
    return Futures.transform(visited, new AsyncFunction<List<Destination>, AgentResponse>() {
        @Override
        public ListenableFuture<AgentResponse> apply(final List<Destination> input) throws Exception {
            final SettableFuture<AgentResponse> future = SettableFuture.create();

            response.setVisited(input);
            future.set(response);

            return future;
        }
    });
}

From source file:org.opendaylight.vpnservice.natservice.internal.VpnFloatingIpHandler.java

@Override
public void onAddFloatingIp(final BigInteger dpnId, final String routerId, Uuid networkId,
        final String interfaceName, final String externalIp, final String internalIp) {
    final String vpnName = NatUtil.getAssociatedVPN(dataBroker, networkId, LOG);
    if (vpnName == null) {
        LOG.info("No VPN associated with ext nw {} to handle add floating ip configuration {} in router {}",
                networkId, externalIp, routerId);
        return;//from   w  w  w.ja va 2s . co  m
    }

    GenerateVpnLabelInput labelInput = new GenerateVpnLabelInputBuilder().setVpnName(vpnName)
            .setIpPrefix(externalIp).build();
    Future<RpcResult<GenerateVpnLabelOutput>> labelFuture = vpnService.generateVpnLabel(labelInput);

    ListenableFuture<RpcResult<Void>> future = Futures.transform(
            JdkFutureAdapters.listenInPoolThread(labelFuture),
            new AsyncFunction<RpcResult<GenerateVpnLabelOutput>, RpcResult<Void>>() {

                @Override
                public ListenableFuture<RpcResult<Void>> apply(RpcResult<GenerateVpnLabelOutput> result)
                        throws Exception {
                    if (result.isSuccessful()) {
                        GenerateVpnLabelOutput output = result.getResult();
                        long label = output.getLabel();
                        LOG.debug("Generated label {} for prefix {}", label, externalIp);
                        listener.updateOperationalDS(routerId, interfaceName, (int) label, internalIp,
                                externalIp);

                        //Inform BGP
                        String rd = NatUtil.getVpnRd(dataBroker, vpnName);
                        String nextHopIp = NatUtil.getEndpointIpAddressForDPN(dataBroker, dpnId);
                        LOG.debug("Nexthop ip for prefix {} is {}", externalIp, nextHopIp);
                        NatUtil.addPrefixToBGP(bgpManager, rd, externalIp + "/32", nextHopIp, label, LOG);

                        List<Instruction> instructions = new ArrayList<Instruction>();
                        List<ActionInfo> actionsInfos = new ArrayList<ActionInfo>();
                        actionsInfos.add(new ActionInfo(ActionType.nx_resubmit,
                                new String[] { Integer.toString(NatConstants.PDNAT_TABLE) }));
                        instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos)
                                .buildInstruction(0));
                        makeTunnelTableEntry(dpnId, label, instructions);

                        //Install custom FIB routes
                        List<Instruction> customInstructions = new ArrayList<>();
                        customInstructions.add(new InstructionInfo(InstructionType.goto_table,
                                new long[] { NatConstants.PDNAT_TABLE }).buildInstruction(0));
                        makeLFibTableEntry(dpnId, label, NatConstants.PDNAT_TABLE);
                        CreateFibEntryInput input = new CreateFibEntryInputBuilder().setVpnName(vpnName)
                                .setSourceDpid(dpnId).setInstruction(customInstructions)
                                .setIpAddress(externalIp + "/32").setServiceId(label)
                                .setInstruction(customInstructions).build();
                        //Future<RpcResult<java.lang.Void>> createFibEntry(CreateFibEntryInput input);
                        Future<RpcResult<Void>> future = fibService.createFibEntry(input);
                        return JdkFutureAdapters.listenInPoolThread(future);
                    } else {
                        String errMsg = String.format(
                                "Could not retrieve the label for prefix %s in VPN %s, %s", externalIp, vpnName,
                                result.getErrors());
                        LOG.error(errMsg);
                        return Futures.immediateFailedFuture(new RuntimeException(errMsg));
                    }
                }
            });

    Futures.addCallback(future, new FutureCallback<RpcResult<Void>>() {

        @Override
        public void onFailure(Throwable error) {
            LOG.error("Error in generate label or fib install process", error);
        }

        @Override
        public void onSuccess(RpcResult<Void> result) {
            if (result.isSuccessful()) {
                LOG.info("Successfully installed custom FIB routes for prefix {}", externalIp);
            } else {
                LOG.error("Error in rpc call to create custom Fib entries for prefix {} in DPN {}, {}",
                        externalIp, dpnId, result.getErrors());
            }
        }
    });
}

From source file:com.google.gapid.models.CommandStream.java

public ListenableFuture<API.Command> loadCommand(Path.Command path) {
    return Futures.transformAsync(client.get(Paths.toAny(path)), value -> Futures
            .transform(constants.loadConstants(value.getCommand()), ignore -> value.getCommand()));
}

From source file:org.thingsboard.server.dao.alarm.CassandraAlarmDao.java

@Override
public ListenableFuture<List<AlarmInfo>> findAlarms(TenantId tenantId, AlarmQuery query) {
    log.trace("Try to find alarms by entity [{}], searchStatus [{}], status [{}] and pageLink [{}]",
            query.getAffectedEntityId(), query.getSearchStatus(), query.getStatus(), query.getPageLink());
    EntityId affectedEntity = query.getAffectedEntityId();
    String searchStatusName;// w w  w .j  a  v  a 2  s .c  om
    if (query.getSearchStatus() == null && query.getStatus() == null) {
        searchStatusName = AlarmSearchStatus.ANY.name();
    } else if (query.getSearchStatus() != null) {
        searchStatusName = query.getSearchStatus().name();
    } else {
        searchStatusName = query.getStatus().name();
    }
    String relationType = BaseAlarmService.ALARM_RELATION_PREFIX + searchStatusName;
    ListenableFuture<List<EntityRelation>> relations = relationDao.findRelations(tenantId, affectedEntity,
            relationType, RelationTypeGroup.ALARM, EntityType.ALARM, query.getPageLink());
    return Futures.transformAsync(relations, input -> {
        List<ListenableFuture<AlarmInfo>> alarmFutures = new ArrayList<>(input.size());
        for (EntityRelation relation : input) {
            alarmFutures.add(
                    Futures.transform(findAlarmByIdAsync(tenantId, relation.getTo().getId()), AlarmInfo::new));
        }
        return Futures.successfulAsList(alarmFutures);
    });
}

From source file:org.opendaylight.openflowplugin.applications.frsync.impl.strategy.SyncPlanPushStrategyIncrementalImpl.java

@Override
public ListenableFuture<RpcResult<Void>> executeSyncStrategy(ListenableFuture<RpcResult<Void>> resultVehicle,
        final SynchronizationDiffInput diffInput, final SyncCrudCounters counters) {
    final InstanceIdentifier<FlowCapableNode> nodeIdent = diffInput.getNodeIdent();
    final NodeId nodeId = PathUtil.digNodeId(nodeIdent);

    /* Tables - have to be pushed before groups */
    // TODO enable table-update when ready
    //resultVehicle = updateTableFeatures(nodeIdent, configTree);

    resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() {
        @Override/*from  w  w w.  java  2s.com*/
        public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception {
            if (!input.isSuccessful()) {
                //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input);
                //final ListenableFuture<RpcResult<Void>> singleVoidUpdateResult = Futures.transform(
                //        Futures.asList Arrays.asList(input, output),
                //        ReconcileUtil.<UpdateFlowOutput>createRpcResultCondenser("TODO"));
            }
            return addMissingGroups(nodeId, nodeIdent, diffInput.getGroupsToAddOrUpdate(), counters);
        }
    });
    Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "addMissingGroups"));
    resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() {
        @Override
        public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception {
            if (!input.isSuccessful()) {
                //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input);
            }
            return addMissingMeters(nodeId, nodeIdent, diffInput.getMetersToAddOrUpdate(), counters);
        }
    });
    Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "addMissingMeters"));
    resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() {
        @Override
        public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception {
            if (!input.isSuccessful()) {
                //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input);
            }
            return addMissingFlows(nodeId, nodeIdent, diffInput.getFlowsToAddOrUpdate(), counters);
        }
    });
    Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "addMissingFlows"));

    resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() {
        @Override
        public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception {
            if (!input.isSuccessful()) {
                //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input);
            }
            return removeRedundantFlows(nodeId, nodeIdent, diffInput.getFlowsToRemove(), counters);
        }
    });
    Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "removeRedundantFlows"));
    resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() {
        @Override
        public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception {
            if (!input.isSuccessful()) {
                //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input);
            }
            return removeRedundantMeters(nodeId, nodeIdent, diffInput.getMetersToRemove(), counters);
        }
    });
    Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "removeRedundantMeters"));
    resultVehicle = Futures.transform(resultVehicle, new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() {
        @Override
        public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input) throws Exception {
            if (!input.isSuccessful()) {
                //TODO chain errors but not skip processing on first error return Futures.immediateFuture(input);
            }
            return removeRedundantGroups(nodeId, nodeIdent, diffInput.getGroupsToRemove(), counters);
        }
    });
    Futures.addCallback(resultVehicle, FxChainUtil.logResultCallback(nodeId, "removeRedundantGroups"));
    return resultVehicle;
}

From source file:com.linkedin.pinot.server.request.ScheduledRequestHandler.java

@Override
public ListenableFuture<byte[]> processRequest(ChannelHandlerContext channelHandlerContext, ByteBuf request) {
    final long queryStartTime = System.nanoTime();
    serverMetrics.addMeteredGlobalValue(ServerMeter.QUERIES, 1);

    LOGGER.debug("Processing request : {}", request);

    byte[] byteArray = new byte[request.readableBytes()];
    request.readBytes(byteArray);//from  w  ww .j  ava2 s  .c  o  m
    SerDe serDe = new SerDe(new TCompactProtocol.Factory());
    final InstanceRequest instanceRequest = new InstanceRequest();

    if (!serDe.deserialize(instanceRequest, byteArray)) {
        LOGGER.error("Failed to deserialize query request from broker ip: {}",
                ((InetSocketAddress) channelHandlerContext.channel().remoteAddress()).getAddress()
                        .getHostAddress());
        DataTable result = new DataTable();
        result.addException(QueryException.INTERNAL_ERROR);
        serverMetrics.addMeteredGlobalValue(ServerMeter.REQUEST_DESERIALIZATION_EXCEPTIONS, 1);
        return Futures.immediateFuture(serializeDataTable(null, serverMetrics, result, queryStartTime));
    }
    long deserializationEndTime = System.nanoTime();
    final BrokerRequest brokerRequest = instanceRequest.getQuery();
    serverMetrics.addPhaseTiming(brokerRequest, ServerQueryPhase.REQUEST_DESERIALIZATION,
            deserializationEndTime - queryStartTime);
    LOGGER.debug("Processing requestId:{},request={}", instanceRequest.getRequestId(), instanceRequest);
    final QueryRequest queryRequest = new QueryRequest(instanceRequest);
    String brokerId = instanceRequest.isSetBrokerId() ? instanceRequest.getBrokerId()
            : ((InetSocketAddress) channelHandlerContext.channel().remoteAddress()).getAddress()
                    .getHostAddress();
    // we will set the ip address as client id. This is good enough for start.
    // Ideally, broker should send it's identity as part of the request
    queryRequest.setClientId(brokerId);

    final long schedulerSubmitTime = System.nanoTime();
    ListenableFuture<DataTable> queryTask = queryScheduler.submit(queryRequest);

    // following future will provide default response in case of uncaught
    // exceptions from query processing
    ListenableFuture<DataTable> queryResponse = Futures.catching(queryTask, Throwable.class,
            new Function<Throwable, DataTable>() {
                @Nullable
                @Override
                public DataTable apply(@Nullable Throwable input) {
                    // this is called iff queryTask fails with unhandled exception
                    serverMetrics.addMeteredGlobalValue(ServerMeter.UNCAUGHT_EXCEPTIONS, 1);
                    DataTable result = new DataTable();
                    result.addException(QueryException.INTERNAL_ERROR);
                    return result;
                }
            });

    // transform the DataTable to serialized byte[] to send back to broker
    ListenableFuture<byte[]> serializedQueryResponse = Futures.transform(queryResponse,
            new Function<DataTable, byte[]>() {
                @Nullable
                @Override
                public byte[] apply(@Nullable DataTable instanceResponse) {
                    long totalNanos = System.nanoTime() - schedulerSubmitTime;
                    serverMetrics.addPhaseTiming(brokerRequest, ServerQueryPhase.QUERY_PROCESSING, totalNanos);
                    return serializeDataTable(instanceRequest, serverMetrics, instanceResponse, queryStartTime);
                }
            });

    return serializedQueryResponse;
}