Example usage for com.google.common.util.concurrent AsyncFunction AsyncFunction

List of usage examples for com.google.common.util.concurrent AsyncFunction AsyncFunction

Introduction

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

Prototype

AsyncFunction

Source Link

Usage

From source file:com.microsoft.intellij.helpers.o365.Office365ManagerImpl.java

private ListenableFuture<Application> createServicePrincipalForApp(final Application application)
        throws AzureCmdException {
    ServicePrincipal servicePrincipal = new ServicePrincipal();
    servicePrincipal.setappId(application.getappId());

    servicePrincipal.setaccountEnabled(true);

    return Futures.transform(getDirectoryClient().getservicePrincipals().add(servicePrincipal),
            new AsyncFunction<ServicePrincipal, Application>() {
                @Override/*  ww  w  .j a v  a2s . c o  m*/
                public ListenableFuture<Application> apply(ServicePrincipal servicePrincipal) throws Exception {
                    return Futures.immediateFuture(application);
                }
            });
}

From source file:google.registry.bigquery.BigqueryConnection.java

/**
 * Starts an asynchronous job to run the provided query, store the results in a temporary table,
 * and then extract the contents of that table to the given GCS filepath in the specified
 * destination format, optionally printing headers.
 *
 * <p>Returns a ListenableFuture that holds the destination GCS URI on success.
 *//*  w w w .j av  a 2s .c  o  m*/
public ListenableFuture<String> extractQuery(String querySql, final String destinationUri,
        final DestinationFormat destinationFormat, final boolean printHeader) {
    // Note: although BigQuery queries save their results to an auto-generated anonymous table,
    // we can't rely on that for running the extract job because it may not be fully replicated.
    // Tracking bug for query-to-GCS support is b/13777340.
    DestinationTable tempTable = buildTemporaryTable().build();
    return Futures.transformAsync(query(querySql, tempTable), new AsyncFunction<DestinationTable, String>() {
        @Override
        public ListenableFuture<String> apply(DestinationTable tempTable) {
            return extractTable(tempTable, destinationUri, destinationFormat, printHeader);
        }
    });
}

From source file:org.opendaylight.faas.fabric.general.FabricServiceAPIProvider.java

@Override
public Future<RpcResult<Void>> rmLogicalRouter(RmLogicalRouterInput input) {
    FabricId fabricId = input.getFabricId();
    NodeId nodeid = input.getNodeId();/*from   w w w  .jav a2s. com*/

    final FabricInstance fabricObj = FabricInstanceCache.INSTANCE.retrieveFabric(fabricId);
    if (fabricObj == null) {
        return Futures.immediateFailedFuture(
                new IllegalArgumentException(String.format("fabric %s does not exist", fabricId)));
    }

    final InstanceIdentifier<Node> routerIId = MdSalUtils.createNodeIId(fabricId.getValue(), nodeid);

    ReadOnlyTransaction trans = dataBroker.newReadOnlyTransaction();

    CheckedFuture<Optional<Node>, ReadFailedException> readFuture = trans.read(LogicalDatastoreType.OPERATIONAL,
            routerIId);

    return Futures.transform(readFuture, new AsyncFunction<Optional<Node>, RpcResult<Void>>() {

        @Override
        public ListenableFuture<RpcResult<Void>> apply(Optional<Node> optional) throws Exception {

            if (optional.isPresent()) {
                Node lr = optional.get();
                fabricObj.notifyLogicRouterRemoved(lr);

                WriteTransaction wt = dataBroker.newWriteOnlyTransaction();
                wt.delete(LogicalDatastoreType.OPERATIONAL, routerIId);
                MdSalUtils.wrapperSubmit(wt, executor);
            }

            return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
        }
    }, executor);
}

From source file:org.opendaylight.centinel.impl.CentinelImpl.java

/**
 * sets alert message count rule in configurational data store
 * //  w w  w. j av  a 2 s .  c  o  m
 */
@Override
public Future<RpcResult<SetAlertMessageCountRuleOutput>> setAlertMessageCountRule(
        final SetAlertMessageCountRuleInput input) {

    final ReadWriteTransaction tx = dataProvider.newReadWriteTransaction();
    final SettableFuture<RpcResult<SetAlertMessageCountRuleOutput>> futureResult = SettableFuture.create();
    LOG.info("setAlertMessageCountRule: " + input);
    final SetAlertMessageCountRuleOutputBuilder setAlertMessageCountRuleOutputBuilder = new SetAlertMessageCountRuleOutputBuilder();
    setAlertMessageCountRuleOutputBuilder.setMessageCountOperator(input.getMessageCountOperator());
    setAlertMessageCountRuleOutputBuilder.setMessageCountCount(input.getMessageCountCount());
    setAlertMessageCountRuleOutputBuilder.setMessageCountGrace(input.getMessageCountGrace());
    setAlertMessageCountRuleOutputBuilder.setMessageCountBacklog(input.getMessageCountBacklog());
    setAlertMessageCountRuleOutputBuilder.setRuleID(input.getRuleID());
    setAlertMessageCountRuleOutputBuilder.setNodeType(input.getNodeType());
    setAlertMessageCountRuleOutputBuilder.setRuleTypeClassifier(input.getRuleTypeClassifier());
    setAlertMessageCountRuleOutputBuilder.setStreamID(input.getStreamID());
    setAlertMessageCountRuleOutputBuilder.setTimeStamp(input.getTimeStamp());
    setAlertMessageCountRuleOutputBuilder.setAlertTypeClassifier(input.getAlertTypeClassifier());

    ListenableFuture<Optional<AlertMessageCountRuleRecord>> readFuture = tx
            .read(LogicalDatastoreType.CONFIGURATION, alertMessageCountRuleRecordId);

    final ListenableFuture<Void> commitFuture = Futures.transform(readFuture,
            new AsyncFunction<Optional<AlertMessageCountRuleRecord>, Void>() {

                @Override
                public ListenableFuture<Void> apply(
                        final Optional<AlertMessageCountRuleRecord> alertMessageCountRuleRecord)
                        throws Exception {

                    List<StreamAlertMessageCountRuleList> streamAlertRuleList = new ArrayList<StreamAlertMessageCountRuleList>();

                    if (alertMessageCountRuleRecord.isPresent()) {
                        streamAlertRuleList = alertMessageCountRuleRecord.get()
                                .getStreamAlertMessageCountRuleList();

                    }
                    streamAlertRuleList.add(buildAlertMessageCountRuleRecord(input));
                    tx.put(LogicalDatastoreType.CONFIGURATION, alertMessageCountRuleRecordId,
                            new AlertMessageCountRuleRecordBuilder()
                                    .setStreamAlertMessageCountRuleList(streamAlertRuleList).build());
                    return tx.submit();

                }
            });

    Futures.addCallback(commitFuture, new FutureCallback<Void>() {
        @Override
        public void onSuccess(final Void result) {

            futureResult.set(RpcResultBuilder
                    .<SetAlertMessageCountRuleOutput>success(setAlertMessageCountRuleOutputBuilder.build())
                    .build());
        }

        @Override
        public void onFailure(final Throwable ex) {

            LOG.debug("Failed to commit Rule", ex);

            futureResult.set(RpcResultBuilder.<SetAlertMessageCountRuleOutput>failed()
                    .withRpcErrors(((TransactionCommitFailedException) ex).getErrorList()).build());

        }
    });

    return futureResult;
}

From source file:org.opendaylight.faas.fabric.general.FabricManagementAPIProvider.java

@Override
public Future<RpcResult<Void>> addNodeToFabric(AddNodeToFabricInput input) {

    final RpcResult<Void> result = RpcResultBuilder.<Void>success().build();

    final FabricId fabricId = input.getFabricId();
    final NodeRef device = input.getNodeRef();
    final DeviceRole role = input.getRole();

    final InstanceIdentifier<DeviceNodes> path = Constants.DOM_FABRICS_PATH
            .child(Node.class, new NodeKey(fabricId)).augmentation(FabricNode.class)
            .child(FabricAttribute.class).child(DeviceNodes.class, new DeviceNodesKey(device));

    final FabricInstance fabricObj = FabricInstanceCache.INSTANCE.retrieveFabric(fabricId);
    if (fabricObj == null) {
        return Futures.immediateFailedFuture(new IllegalArgumentException("fabric is not exist!"));
    }/*  w  ww. j  ava  2 s  .  co m*/

    WriteTransaction trans = dataBroker.newWriteOnlyTransaction();
    // set fabric attribute
    DeviceNodesBuilder dnodeBuilder = new DeviceNodesBuilder();
    dnodeBuilder.setKey(new DeviceNodesKey(device)).setDeviceRef(device).build();
    fabricObj.addNodeToFabric(dnodeBuilder, input);
    trans.put(LogicalDatastoreType.OPERATIONAL, path, dnodeBuilder.build(), true);

    // set node attribute
    @SuppressWarnings("unchecked")
    InstanceIdentifier<Node> noderef = (InstanceIdentifier<Node>) device.getValue();
    NodeId deviceid = noderef.firstKeyOf(Node.class).getNodeId();
    TopologyId topoid = noderef.firstKeyOf(Topology.class).getTopologyId();
    final InstanceIdentifier<SupportingNode> suplNodeIid = MdSalUtils.createFNodeIId(input.getFabricId())
            .child(SupportingNode.class, new SupportingNodeKey(deviceid, topoid));
    SupportingNodeBuilder suplNodeBuilder = new SupportingNodeBuilder();
    suplNodeBuilder.setNodeRef(deviceid);
    suplNodeBuilder.setTopologyRef(topoid);
    suplNodeBuilder.setKey(new SupportingNodeKey(deviceid, topoid));
    trans.put(LogicalDatastoreType.OPERATIONAL, suplNodeIid, suplNodeBuilder.build(), true);

    CheckedFuture<Void, TransactionCommitFailedException> future = trans.submit();

    return Futures.transform(future, new AsyncFunction<Void, RpcResult<Void>>() {

        @SuppressWarnings("unchecked")
        @Override
        public ListenableFuture<RpcResult<Void>> apply(Void submitResult) throws Exception {
            fabricObj.notifyDeviceAdded((InstanceIdentifier<Node>) device.getValue(), role);
            return Futures.immediateFuture(result);
        }
    });
}

From source file:org.opendaylight.vbd.impl.VbdBridgeDomain.java

private ListenableFuture<List<InstanceIdentifier<Link>>> findPrunableLinks(
        final KeyedInstanceIdentifier<Node, NodeKey> vbdNode) {
    LOG.debug("Finding prunable links for node {}", PPrint.node(vbdNode));

    final NodeId deletedNodeId = vbdNode.getKey().getNodeId();

    // read the topology to find the links
    final ReadOnlyTransaction rTx = chain.newReadOnlyTransaction();
    return Futures.transform(rTx.read(LogicalDatastoreType.OPERATIONAL, topology),
            new AsyncFunction<Optional<Topology>, List<InstanceIdentifier<Link>>>() {
                @Override/*www  . j av  a 2s . c  o m*/
                public ListenableFuture<List<InstanceIdentifier<Link>>> apply(
                        @Nonnull Optional<Topology> result) throws Exception {
                    final List<InstanceIdentifier<Link>> prunableLinks = new ArrayList<>();

                    if (result.isPresent()) {
                        final List<Link> links = result.get().getLink();

                        for (final Link link : links) {
                            // check if this link's source or destination matches the deleted node
                            final Source src = link.getSource();
                            final Destination dst = link.getDestination();
                            if (src.getSourceNode().equals(deletedNodeId)) {
                                LOG.debug("Link {} src matches deleted node id {}, adding to prunable list",
                                        link.getLinkId(), deletedNodeId);
                                final InstanceIdentifier<Link> linkIID = topology.child(Link.class,
                                        link.getKey());
                                prunableLinks.add(linkIID);
                            } else if (dst.getDestNode().equals(deletedNodeId)) {
                                LOG.debug("Link {} dst matches deleted node id {}, adding to prunable list",
                                        link.getLinkId(), deletedNodeId);
                                final InstanceIdentifier<Link> linkIID = topology.child(Link.class,
                                        link.getKey());
                                prunableLinks.add(linkIID);
                            }
                        }
                    } else {
                        // result is null or not present
                        LOG.warn("Tried to read virtual bridge topology {}, but got null or absent optional!",
                                PPrint.topology(topology));
                    }

                    return Futures.immediateFuture(prunableLinks);
                }
            });
}

From source file:org.opendaylight.faas.fabric.general.FabricServiceAPIProvider.java

@Override
public Future<RpcResult<Void>> rmLogicalPort(RmLogicalPortInput input) {
    FabricId fabricId = input.getFabricId();
    NodeId deviceId = input.getLogicalDevice();
    TpId tpid = input.getTpId();/*from  ww w  .  ja  v a  2  s  .c o  m*/

    final InstanceIdentifier<TerminationPoint> tpIId = MdSalUtils.createLogicPortIId(fabricId, deviceId, tpid);

    WriteTransaction trans = dataBroker.newWriteOnlyTransaction();

    trans.delete(LogicalDatastoreType.OPERATIONAL, tpIId);

    return Futures.transform(trans.submit(), new AsyncFunction<Void, RpcResult<Void>>() {

        @Override
        public ListenableFuture<RpcResult<Void>> apply(Void submitResult) throws Exception {

            return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
        }
    }, executor);
}

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

ListenableFuture<RpcResult<Void>> addMissingGroups(final NodeId nodeId,
        final InstanceIdentifier<FlowCapableNode> nodeIdent, final List<ItemSyncBox<Group>> groupsAddPlan,
        final SyncCrudCounters counters) {
    if (groupsAddPlan.isEmpty()) {
        LOG.trace("no groups configured for node: {} -> SKIPPING", nodeId.getValue());
        return RpcResultBuilder.<Void>success().buildFuture();
    }/*  ww  w .  j a  v a  2 s  .co  m*/

    ListenableFuture<RpcResult<Void>> chainedResult;
    try {
        if (!groupsAddPlan.isEmpty()) {
            final CrudCounts groupCrudCounts = counters.getGroupCrudCounts();
            groupCrudCounts.setAdded(ReconcileUtil.countTotalPushed(groupsAddPlan));
            groupCrudCounts.setUpdated(ReconcileUtil.countTotalUpdated(groupsAddPlan));

            if (LOG.isDebugEnabled()) {
                LOG.debug("adding groups: planSteps={}, toAddTotal={}, toUpdateTotal={}", groupsAddPlan.size(),
                        groupCrudCounts.getAdded(), groupCrudCounts.getUpdated());
            }

            chainedResult = flushAddGroupPortionAndBarrier(nodeIdent, groupsAddPlan.get(0));
            for (final ItemSyncBox<Group> groupsPortion : Iterables.skip(groupsAddPlan, 1)) {
                chainedResult = Futures.transform(chainedResult,
                        new AsyncFunction<RpcResult<Void>, RpcResult<Void>>() {
                            @Override
                            public ListenableFuture<RpcResult<Void>> apply(final RpcResult<Void> input)
                                    throws Exception {
                                final ListenableFuture<RpcResult<Void>> result;
                                if (input.isSuccessful()) {
                                    result = flushAddGroupPortionAndBarrier(nodeIdent, groupsPortion);
                                } else {
                                    // pass through original unsuccessful rpcResult
                                    result = Futures.immediateFuture(input);
                                }

                                return result;
                            }
                        });
            }
        } else {
            chainedResult = RpcResultBuilder.<Void>success().buildFuture();
        }
    } catch (IllegalStateException e) {
        chainedResult = RpcResultBuilder.<Void>failed()
                .withError(RpcError.ErrorType.APPLICATION, "failed to add missing groups", e).buildFuture();
    }

    return chainedResult;
}

From source file:com.microsoft.intellij.helpers.o365.Office365ManagerImpl.java

@Override
@NotNull//from   w w  w  . ja  v  a  2s. com
public ListenableFuture<List<ServicePrincipal>> getO365ServicePrincipalsForApp(
        @NotNull final Application application) {
    return requestFutureWithToken(new RequestCallback<ListenableFuture<List<ServicePrincipal>>>() {
        @Override
        public ListenableFuture<List<ServicePrincipal>> execute() throws Throwable {
            @SuppressWarnings("unchecked")
            ListenableFuture<List<ServicePrincipal>>[] futures = new ListenableFuture[] {
                    getServicePrincipalsForApp(application), getServicePrincipalsForO365() };

            final String[] filterAppIds = new String[] { ServiceAppIds.SHARE_POINT, ServiceAppIds.EXCHANGE,
                    ServiceAppIds.AZURE_ACTIVE_DIRECTORY };

            return Futures.transform(Futures.allAsList(futures),
                    new AsyncFunction<List<List<ServicePrincipal>>, List<ServicePrincipal>>() {
                        @Override
                        public ListenableFuture<List<ServicePrincipal>> apply(
                                List<List<ServicePrincipal>> lists) throws Exception {
                            // According to Guava documentation for allAsList, the list of results is in the
                            // same order as the input list. So first we get the service principals for the app
                            // filtered for O365 and Graph service principals.
                            final List<ServicePrincipal> servicePrincipalsForApp = Lists.newArrayList(
                                    Iterables.filter(lists.get(0), new Predicate<ServicePrincipal>() {
                                        @Override
                                        public boolean apply(final ServicePrincipal servicePrincipal) {
                                            // we are only interested in O365 and Graph service principals
                                            return Iterators.any(Iterators.forArray(filterAppIds),
                                                    new Predicate<String>() {
                                                        @Override
                                                        public boolean apply(String appId) {
                                                            return appId.equals(servicePrincipal.getappId());
                                                        }
                                                    });
                                        }
                                    }));

                            // next we get the O365/graph service principals
                            final List<ServicePrincipal> servicePrincipalsForO365 = lists.get(1);

                            // then we add service principals from servicePrincipalsForO365 to servicePrincipalsForApp
                            // where the service principal is not available in the latter
                            Iterable<ServicePrincipal> servicePrincipalsToBeAdded = Iterables
                                    .filter(servicePrincipalsForO365, new Predicate<ServicePrincipal>() {
                                        @Override
                                        public boolean apply(ServicePrincipal servicePrincipal) {
                                            return !servicePrincipalsForApp.contains(servicePrincipal);
                                        }
                                    });
                            Iterables.addAll(servicePrincipalsForApp, servicePrincipalsToBeAdded);

                            // assign the appid to the service principal and reset permissions on new service principals;
                            // we do Lists.newArrayList calls below to create a copy of the service lists because Lists.transform
                            // invokes the transformation function lazily and this causes problems for us; we force immediate
                            // evaluation of our transfomer by copying the elements to a new list
                            List<ServicePrincipal> servicePrincipals = Lists
                                    .newArrayList(Lists.transform(servicePrincipalsForApp,
                                            new Function<ServicePrincipal, ServicePrincipal>() {
                                                @Override
                                                public ServicePrincipal apply(
                                                        ServicePrincipal servicePrincipal) {
                                                    if (!servicePrincipal.getappId()
                                                            .equals(application.getappId())) {
                                                        servicePrincipal.setappId(application.getappId());
                                                        servicePrincipal.setoauth2Permissions(
                                                                Lists.newArrayList(Lists.transform(
                                                                        servicePrincipal.getoauth2Permissions(),
                                                                        new Function<OAuth2Permission, OAuth2Permission>() {
                                                                            @Override
                                                                            public OAuth2Permission apply(
                                                                                    OAuth2Permission oAuth2Permission) {
                                                                                oAuth2Permission
                                                                                        .setisEnabled(false);
                                                                                return oAuth2Permission;
                                                                            }
                                                                        })));
                                                    }

                                                    return servicePrincipal;
                                                }
                                            }));

                            return Futures.immediateFuture(servicePrincipals);
                        }
                    });
        }
    });
}

From source file:org.opendaylight.faas.fabric.general.FabricServiceAPIProvider.java

@Override
public Future<RpcResult<CreateLogicalRouterOutput>> createLogicalRouter(final CreateLogicalRouterInput input) {

    final RpcResultBuilder<CreateLogicalRouterOutput> resultBuilder = RpcResultBuilder
            .<CreateLogicalRouterOutput>success();
    final CreateLogicalRouterOutputBuilder outputBuilder = new CreateLogicalRouterOutputBuilder();

    FabricId fabricId = input.getFabricId();
    String name = input.getName();

    final FabricInstance fabricObj = FabricInstanceCache.INSTANCE.retrieveFabric(fabricId);
    if (fabricObj == null) {
        return Futures.immediateFailedFuture(
                new IllegalArgumentException(String.format("fabric %s does not exist", fabricId)));
    }//from   w w  w.j  av  a  2  s .  c  o m

    final String uuid = UUID.randomUUID().toString();

    final NodeId newNodeId = new NodeId(name == null ? uuid : name);
    final InstanceIdentifier<Node> newRouterIId = MdSalUtils.createNodeIId(fabricId.getValue(), newNodeId);

    NodeBuilder nodeBuilder = new NodeBuilder();
    nodeBuilder.setKey(new NodeKey(newNodeId));
    nodeBuilder.setNodeId(newNodeId);

    nodeBuilder.setSupportingNode(createDefaultSuplNode(fabricId));

    LrAttributeBuilder lrAttr = new LrAttributeBuilder();
    lrAttr.setName(name);
    lrAttr.setLrUuid(new Uuid(uuid));
    fabricObj.buildLogicalRouter(newNodeId, lrAttr, input);

    LogicalRouterAugmentBuilder lrCtx = new LogicalRouterAugmentBuilder();
    lrCtx.setLrAttribute(lrAttr.build());

    nodeBuilder.addAugmentation(LogicalRouterAugment.class, lrCtx.build());

    final Node lr = nodeBuilder.build();
    WriteTransaction trans = dataBroker.newWriteOnlyTransaction();
    trans.put(LogicalDatastoreType.OPERATIONAL, newRouterIId, lr, true);

    return Futures.transform(trans.submit(), new AsyncFunction<Void, RpcResult<CreateLogicalRouterOutput>>() {

        @Override
        public ListenableFuture<RpcResult<CreateLogicalRouterOutput>> apply(Void submitResult)
                throws Exception {

            outputBuilder.setLrUuid(new Uuid(uuid));
            outputBuilder.setName(input.getName());
            outputBuilder.setNodeId(newNodeId);
            fabricObj.notifyLogicRouterCreated(newNodeId, lr);
            return Futures.immediateFuture(resultBuilder.withResult(outputBuilder.build()).build());
        }
    }, executor);

}