Example usage for com.google.common.base Optional presentInstances

List of usage examples for com.google.common.base Optional presentInstances

Introduction

In this page you can find the example usage for com.google.common.base Optional presentInstances.

Prototype

@Beta
public static <T> Iterable<T> presentInstances(final Iterable<? extends Optional<? extends T>> optionals) 

Source Link

Document

Returns the value of each present instance from the supplied optionals , in order, skipping over occurrences of Optional#absent .

Usage

From source file:com.eucalyptus.cluster.VmStateHandler.java

public static void updateVmInfo(final VmStateUpdate stateUpdate) {
    UpdateInstanceResourcesType update = new UpdateInstanceResourcesType();
    update.setPartition(stateUpdate.getCluster().getPartition());
    update.setResources(TypeMappers.transform(stateUpdate, InstanceResourceReportType.class));
    final boolean requestBroadcast = Networking.getInstance().update(update);

    if (Databases.isVolatile()) {
        return;/*from   www  . ja v  a 2 s .c  o  m*/
    }

    final Cluster cluster = stateUpdate.getCluster();
    final Set<String> initialInstances = stateUpdate.getRequestedVms();
    final List<VmInfo> vms = stateUpdate.getVmInfos();
    final Map<String, VmStateView> localState = ImmutableMap.copyOf(CollectionUtils.putAll(
            instanceViewSupplier.get(), Maps.<String, VmStateView>newHashMapWithExpectedSize(vms.size()),
            HasName.GET_NAME, Functions.<VmStateView>identity()));

    final Set<String> reportedInstances = Sets.newHashSetWithExpectedSize(vms.size());
    for (VmInfo vmInfo : vms) {
        reportedInstances.add(vmInfo.getInstanceId());
        vmInfo.setPlacement(cluster.getConfiguration().getName());
        VmTypeInfo typeInfo = vmInfo.getInstanceType();
        if (typeInfo.getName() == null || "".equals(typeInfo.getName())) {
            for (VmType t : VmTypes.list()) {
                if (t.getCpu().equals(typeInfo.getCores()) && t.getDisk().equals(typeInfo.getDisk())
                        && t.getMemory().equals(typeInfo.getMemory())) {
                    typeInfo.setName(t.getName());
                }
            }
        }
    }

    final Set<String> unreportedInstances = Sets
            .newHashSet(Sets.difference(initialInstances, reportedInstances));
    if (Databases.isVolatile()) {
        return;
    }

    final Set<String> unknownInstances = Sets.newHashSet(Sets.difference(reportedInstances, initialInstances));

    final List<Optional<Runnable>> taskList = Lists.newArrayList();

    for (final VmInfo runVm : vms) {
        if (initialInstances.contains(runVm.getInstanceId())) {
            taskList.add(UpdateTaskFunction.REPORTED.apply(context(localState, runVm)));
        } else if (unknownInstances.contains(runVm.getInstanceId())) {
            taskList.add(UpdateTaskFunction.UNKNOWN.apply(context(localState, runVm)));
        }
    }
    for (final String vmId : unreportedInstances) {
        taskList.add(UpdateTaskFunction.UNREPORTED.apply(context(localState, vmId)));
    }
    final Optional<Runnable> broadcastRequestRunnable = requestBroadcast
            ? Optional.<Runnable>of(new Runnable() {
                @Override
                public void run() {
                    NetworkInfoBroadcaster.requestNetworkInfoBroadcast();
                }
            })
            : Optional.<Runnable>absent();

    for (final Runnable task : Iterables.concat(Optional.presentInstances(taskList),
            broadcastRequestRunnable.asSet())) {
        Threads.enqueue(ClusterController.class, VmStateHandler.class,
                (Runtime.getRuntime().availableProcessors() * 2) + 1, Executors.callable(task));
    }
}

From source file:com.google.errorprone.refaster.Choice.java

/**
 * Returns all the choices obtained by choosing from this {@code Choice} and yielding a present
 * {@code Optional}./*from w  ww .j a  v a  2s.  co  m*/
 *
 * <p>The function may be applied lazily or immediately, at the discretion of the implementation.
 */
public <R> Choice<R> thenOption(final Function<? super T, Optional<R>> function) {
    checkNotNull(function);
    final Choice<T> thisChoice = this;
    return new Choice<R>() {
        @Override
        protected Iterator<R> iterator() {
            return Optional.presentInstances(Iterables.transform(thisChoice.asIterable(), function)).iterator();
        }
    };
}

From source file:com.twitter.common.args.ArgumentInfo.java

private Iterable<ValueVerifier<T>> getVerifiers(final Verifiers verifierOracle) {
    Function<Annotation, Optional<ValueVerifier<T>>> toVerifier = new Function<Annotation, Optional<ValueVerifier<T>>>() {
        @Override/*  ww w  .j a  v  a2 s  .  c om*/
        public Optional<ValueVerifier<T>> apply(Annotation annotation) {
            @Nullable
            Verifier<? super T> verifier = verifierOracle.get(type, annotation);
            if (verifier != null) {
                return Optional.of(new ValueVerifier<T>(verifier, annotation));
            } else {
                return Optional.absent();
            }
        }
    };
    return Optional.presentInstances(Iterables.transform(verifierAnnotations, toVerifier));
}

From source file:net.shibboleth.idp.session.AbstractIdPSession.java

/** {@inheritDoc} */
@Override/*from  w  w  w .  j ava  2 s . co m*/
@Nonnull
@NonnullElements
@NotLive
@Unmodifiable
public Set<AuthenticationResult> getAuthenticationResults() {
    return ImmutableSet.copyOf(Optional.presentInstances(authenticationResults.values()));
}

From source file:com.facebook.buck.apple.WorkspaceAndProjectGenerator.java

public Path generateWorkspaceAndDependentProjects(Map<Path, ProjectGenerator> projectGenerators)
        throws IOException {
    LOG.debug("Generating workspace for target %s", workspaceBuildTarget);

    String workspaceName = XcodeWorkspaceConfigDescription.getWorkspaceNameFromArg(workspaceArguments);
    Path outputDirectory;//from  w  w  w . j  av  a  2  s .c  o  m
    if (combinedProject) {
        workspaceName += "-Combined";
        outputDirectory = BuildTargets.getGenPath(workspaceBuildTarget, "%s").getParent()
                .resolve(workspaceName + ".xcodeproj");
    } else {
        outputDirectory = workspaceBuildTarget.getBasePath();
    }

    WorkspaceGenerator workspaceGenerator = new WorkspaceGenerator(projectFilesystem,
            combinedProject ? "project" : workspaceName, outputDirectory);

    ImmutableMap.Builder<String, XcodeWorkspaceConfigDescription.Arg> schemeConfigsBuilder = ImmutableMap
            .builder();
    ImmutableSetMultimap.Builder<String, Optional<TargetNode<?>>> schemeNameToSrcTargetNodeBuilder = ImmutableSetMultimap
            .builder();
    ImmutableSetMultimap.Builder<String, TargetNode<?>> buildForTestNodesBuilder = ImmutableSetMultimap
            .builder();
    ImmutableMultimap.Builder<AppleTestBundleParamsKey, TargetNode<AppleTestDescription.Arg>> groupedTestsBuilder = ImmutableMultimap
            .builder();
    ImmutableSetMultimap.Builder<String, TargetNode<AppleTestDescription.Arg>> ungroupedTestsBuilder = ImmutableSetMultimap
            .builder();

    buildWorkspaceSchemes(getTargetToBuildWithBuck(), projectGraph,
            projectGeneratorOptions.contains(ProjectGenerator.Option.INCLUDE_TESTS),
            projectGeneratorOptions.contains(ProjectGenerator.Option.INCLUDE_DEPENDENCIES_TESTS),
            groupableTests, workspaceName, workspaceArguments, schemeConfigsBuilder,
            schemeNameToSrcTargetNodeBuilder, buildForTestNodesBuilder, groupedTestsBuilder,
            ungroupedTestsBuilder);

    ImmutableMap<String, XcodeWorkspaceConfigDescription.Arg> schemeConfigs = schemeConfigsBuilder.build();
    ImmutableSetMultimap<String, Optional<TargetNode<?>>> schemeNameToSrcTargetNode = schemeNameToSrcTargetNodeBuilder
            .build();
    ImmutableSetMultimap<String, TargetNode<?>> buildForTestNodes = buildForTestNodesBuilder.build();
    ImmutableMultimap<AppleTestBundleParamsKey, TargetNode<AppleTestDescription.Arg>> groupedTests = groupedTestsBuilder
            .build();
    ImmutableSetMultimap<String, TargetNode<AppleTestDescription.Arg>> ungroupedTests = ungroupedTestsBuilder
            .build();
    Iterable<PBXTarget> synthesizedCombinedTestTargets = ImmutableList.of();

    ImmutableSet<BuildTarget> targetsInRequiredProjects = FluentIterable
            .from(Optional.presentInstances(schemeNameToSrcTargetNode.values()))
            .append(buildForTestNodes.values()).transform(HasBuildTarget.TO_TARGET).toSet();
    ImmutableMultimap.Builder<BuildTarget, PBXTarget> buildTargetToPbxTargetMapBuilder = ImmutableMultimap
            .builder();
    ImmutableMap.Builder<PBXTarget, Path> targetToProjectPathMapBuilder = ImmutableMap.builder();
    Optional<BuildTarget> targetToBuildWithBuck = getTargetToBuildWithBuck();

    if (combinedProject) {
        LOG.debug("Generating a combined project");
        ProjectGenerator generator = new ProjectGenerator(projectGraph, targetsInRequiredProjects,
                projectFilesystem, outputDirectory.getParent(), workspaceName, buildFileName,
                projectGeneratorOptions, targetToBuildWithBuck, buildWithBuckFlags, executableFinder,
                environment, cxxPlatforms, defaultCxxPlatform, sourcePathResolverForNode, buckEventBus,
                attemptToDetermineBestCxxPlatform, halideBuckConfig, cxxBuckConfig)
                        .setAdditionalCombinedTestTargets(groupedTests)
                        .setTestsToGenerateAsStaticLibraries(groupableTests);
        combinedProjectGenerator = Optional.of(generator);
        generator.createXcodeProjects();

        workspaceGenerator.addFilePath(generator.getProjectPath(), Optional.<Path>absent());
        requiredBuildTargetsBuilder.addAll(generator.getRequiredBuildTargets());

        buildTargetToPbxTargetMapBuilder.putAll(generator.getBuildTargetToGeneratedTargetMap());
        for (PBXTarget target : generator.getBuildTargetToGeneratedTargetMap().values()) {
            targetToProjectPathMapBuilder.put(target, generator.getProjectPath());
        }
        synthesizedCombinedTestTargets = generator.getBuildableCombinedTestTargets();
        for (PBXTarget target : synthesizedCombinedTestTargets) {
            targetToProjectPathMapBuilder.put(target, generator.getProjectPath());
        }
    } else {
        ImmutableMultimap.Builder<Path, BuildTarget> projectDirectoryToBuildTargetsBuilder = ImmutableMultimap
                .builder();
        for (TargetNode<?> targetNode : projectGraph.getNodes()) {
            BuildTarget buildTarget = targetNode.getBuildTarget();
            projectDirectoryToBuildTargetsBuilder.put(buildTarget.getBasePath(), buildTarget);
        }
        ImmutableMultimap<Path, BuildTarget> projectDirectoryToBuildTargets = projectDirectoryToBuildTargetsBuilder
                .build();
        for (Path projectDirectory : projectDirectoryToBuildTargets.keySet()) {
            final ImmutableSet<BuildTarget> rules = filterRulesForProjectDirectory(projectGraph,
                    ImmutableSet.copyOf(projectDirectoryToBuildTargets.get(projectDirectory)));
            if (Sets.intersection(targetsInRequiredProjects, rules).isEmpty()) {
                continue;
            }

            ProjectGenerator generator = projectGenerators.get(projectDirectory);
            if (generator == null) {
                LOG.debug("Generating project for directory %s with targets %s", projectDirectory, rules);
                String projectName;
                if (projectDirectory.getNameCount() == 0) {
                    // If we're generating a project in the root directory, use a generic name.
                    projectName = "Project";
                } else {
                    // Otherwise, name the project the same thing as the directory we're in.
                    projectName = projectDirectory.getFileName().toString();
                }
                generator = new ProjectGenerator(projectGraph, rules, projectFilesystem, projectDirectory,
                        projectName, buildFileName, projectGeneratorOptions, Optionals.bind(
                                targetToBuildWithBuck, new Function<BuildTarget, Optional<BuildTarget>>() {
                                    @Override
                                    public Optional<BuildTarget> apply(BuildTarget input) {
                                        return rules.contains(input) ? Optional.of(input)
                                                : Optional.<BuildTarget>absent();
                                    }
                                }),
                        buildWithBuckFlags, executableFinder, environment, cxxPlatforms, defaultCxxPlatform,
                        sourcePathResolverForNode, buckEventBus, attemptToDetermineBestCxxPlatform,
                        halideBuckConfig, cxxBuckConfig).setTestsToGenerateAsStaticLibraries(groupableTests);

                generator.createXcodeProjects();
                requiredBuildTargetsBuilder.addAll(generator.getRequiredBuildTargets());
                projectGenerators.put(projectDirectory, generator);
            } else {
                LOG.debug("Already generated project for target %s, skipping", projectDirectory);
            }

            workspaceGenerator.addFilePath(generator.getProjectPath());

            buildTargetToPbxTargetMapBuilder.putAll(generator.getBuildTargetToGeneratedTargetMap());
            for (PBXTarget target : generator.getBuildTargetToGeneratedTargetMap().values()) {
                targetToProjectPathMapBuilder.put(target, generator.getProjectPath());
            }
        }

        if (!groupedTests.isEmpty()) {
            ProjectGenerator combinedTestsProjectGenerator = new ProjectGenerator(projectGraph,
                    ImmutableSortedSet.<BuildTarget>of(), projectFilesystem,
                    BuildTargets.getGenPath(workspaceBuildTarget, "%s-CombinedTestBundles"),
                    "_CombinedTestBundles", buildFileName, projectGeneratorOptions,
                    Optional.<BuildTarget>absent(), buildWithBuckFlags, executableFinder, environment,
                    cxxPlatforms, defaultCxxPlatform, sourcePathResolverForNode, buckEventBus,
                    attemptToDetermineBestCxxPlatform, halideBuckConfig, cxxBuckConfig);
            combinedTestsProjectGenerator.setAdditionalCombinedTestTargets(groupedTests).createXcodeProjects();
            workspaceGenerator.addFilePath(combinedTestsProjectGenerator.getProjectPath());
            requiredBuildTargetsBuilder.addAll(combinedTestsProjectGenerator.getRequiredBuildTargets());
            for (PBXTarget target : combinedTestsProjectGenerator.getBuildTargetToGeneratedTargetMap()
                    .values()) {
                targetToProjectPathMapBuilder.put(target, combinedTestsProjectGenerator.getProjectPath());
            }
            synthesizedCombinedTestTargets = combinedTestsProjectGenerator.getBuildableCombinedTestTargets();
            for (PBXTarget target : synthesizedCombinedTestTargets) {
                targetToProjectPathMapBuilder.put(target, combinedTestsProjectGenerator.getProjectPath());
            }
            this.combinedTestsProjectGenerator = Optional.of(combinedTestsProjectGenerator);
        }
    }

    Path workspacePath = workspaceGenerator.writeWorkspace();

    final Multimap<BuildTarget, PBXTarget> buildTargetToTarget = buildTargetToPbxTargetMapBuilder.build();
    final Function<BuildTarget, PBXTarget> targetNodeToPBXTargetTransformer = new Function<BuildTarget, PBXTarget>() {
        @Override
        public PBXTarget apply(BuildTarget input) {
            ImmutableList<PBXTarget> targets = ImmutableList.copyOf(buildTargetToTarget.get(input));
            if (targets.size() == 1) {
                return targets.get(0);
            }
            // The only reason why a build target would map to more than one project target is if
            // there are two project targets: one is the usual one, the other is a target that just
            // shells out to Buck.
            Preconditions.checkState(targets.size() == 2);
            PBXTarget first = targets.get(0);
            PBXTarget second = targets.get(1);
            Preconditions.checkState(first.getName().endsWith(ProjectGenerator.BUILD_WITH_BUCK_POSTFIX)
                    ^ second.getName().endsWith(ProjectGenerator.BUILD_WITH_BUCK_POSTFIX));
            PBXTarget buildWithBuckTarget;
            PBXTarget buildWithXcodeTarget;
            if (first.getName().endsWith(ProjectGenerator.BUILD_WITH_BUCK_POSTFIX)) {
                buildWithBuckTarget = first;
                buildWithXcodeTarget = second;
            } else {
                buildWithXcodeTarget = first;
                buildWithBuckTarget = second;
            }
            return buildWithBuck ? buildWithBuckTarget : buildWithXcodeTarget;
        }
    };

    writeWorkspaceSchemes(workspaceName, outputDirectory, schemeConfigs, schemeNameToSrcTargetNode,
            buildForTestNodes, ungroupedTests, targetToProjectPathMapBuilder.build(),
            synthesizedCombinedTestTargets, new Function<TargetNode<?>, Collection<PBXTarget>>() {
                @Override
                public Collection<PBXTarget> apply(TargetNode<?> input) {
                    return buildTargetToTarget.get(input.getBuildTarget());
                }
            }, targetNodeToPBXTargetTransformer);

    return workspacePath;
}

From source file:net.shibboleth.idp.session.AbstractIdPSession.java

/** {@inheritDoc} */
@Override//from   ww  w  .j a  v  a 2s. c o m
@Nonnull
@NonnullElements
@NotLive
@Unmodifiable
public Set<SPSession> getSPSessions() {
    return ImmutableSet.copyOf(Optional.presentInstances(spSessions.values()));
}

From source file:org.apache.aurora.common.args.apt.CmdLineProcessor.java

@Nullable
private Set<String> getParsedTypes(@Nullable Configuration configuration, Set<? extends Element> parsers) {

    if (!isCheckLinkage) {
        return null;
    }//from  w  ww . ja v  a  2  s.  com

    Iterable<String> parsersFor = Optional.presentInstances(Iterables.transform(parsers, parser -> {
        TypeMirror parsedType = getTypeArgument(parser.asType(), typeElement(Parser.class));
        if (parsedType == null) {
            error("failed to find a type argument for Parser: %s", parser);
            return Optional.absent();
        }
        // Equals on TypeMirrors doesn't work - so we compare string representations :/
        return Optional.of(typeUtils.erasure(parsedType).toString());
    }));
    if (configuration != null) {
        parsersFor = Iterables.concat(parsersFor, Iterables
                .filter(Iterables.transform(configuration.parserInfo(), new Function<ParserInfo, String>() {
                    @Override
                    @Nullable
                    public String apply(ParserInfo parserInfo) {
                        TypeElement typeElement = elementUtils.getTypeElement(parserInfo.parsedType);
                        // We may not have a type on the classpath for a previous round - this is fine as
                        // long as the no Args in this round that are of the type.
                        return (typeElement == null) ? null
                                : typeUtils.erasure(typeElement.asType()).toString();
                    }
                }), Predicates.notNull()));
    }
    return ImmutableSet.copyOf(parsersFor);
}

From source file:org.apache.aurora.common.args.apt.CmdLineProcessor.java

private Iterable<ArgInfo> processAnnotatedArgs(@Nullable final Set<String> parsedTypes,
        Set<? extends Element> args, final Class<? extends Annotation> argAnnotation) {

    return Optional.presentInstances(Iterables.transform(args, arg -> {
        @Nullable/*  w  w w  .jav  a 2s. c  om*/
        TypeElement containingType = processArg(parsedTypes, arg, argAnnotation);
        if (containingType == null) {
            return Optional.absent();
        } else {
            return Optional.of(new ArgInfo(getBinaryName(containingType), arg.getSimpleName().toString()));
        }
    }));
}

From source file:clocker.docker.location.DockerHostLocation.java

@Override
public DockerContainerLocation obtain(Map<?, ?> flags) throws NoMachinesAvailableException {
    lock.readLock().lock();/*w w w.  j  a v  a2  s  .  c  o  m*/
    try {
        // Lookup entity from context or flags
        Object context = flags.get(LocationConfigKeys.CALLER_CONTEXT.getName());
        if (context == null || !(context instanceof Entity)) {
            throw new IllegalStateException("Invalid location context: " + context);
        }
        Entity entity = (Entity) context;

        // Flag to configure adding SSHable layer
        boolean useSsh = entity.config().get(DockerContainer.DOCKER_USE_SSH)
                && dockerHost.config().get(DockerContainer.DOCKER_USE_SSH);

        // Configure the entity
        LOG.info("Configuring entity {} via subnet {}", entity, dockerHost.getSubnetTier());
        entity.config().set(SubnetTier.PORT_FORWARDING_MANAGER,
                dockerHost.getSubnetTier().getPortForwardManager());
        entity.config().set(SubnetTier.PORT_FORWARDER, portForwarder);
        if (getOwner().config().get(SdnAttributes.SDN_ENABLE)) {
            SdnAgent agent = getOwner().sensors().get(SdnAgent.SDN_AGENT);
            if (agent == null) {
                throw new IllegalStateException("SDN agent entity on " + getOwner() + " is null");
            }
            Map<String, Cidr> networks = agent.sensors().get(SdnAgent.SDN_PROVIDER).sensors()
                    .get(SdnProvider.SUBNETS);
            entity.config().set(SubnetTier.SUBNET_CIDR, networks.get(entity.getApplicationId()));
        } else {
            entity.config().set(SubnetTier.SUBNET_CIDR, Cidr.UNIVERSAL);
        }

        // Add the entity Dockerfile if configured
        String dockerfile = entity.config().get(DockerAttributes.DOCKERFILE_URL);
        String entrypoint = entity.config().get(DockerAttributes.DOCKERFILE_ENTRYPOINT_URL);
        String contextArchive = entity.config().get(DockerAttributes.DOCKERFILE_CONTEXT_URL);
        String imageId = entity.config().get(DockerAttributes.DOCKER_IMAGE_ID);

        Optional<String> baseImage = Optional
                .fromNullable(entity.config().get(DockerAttributes.DOCKER_IMAGE_NAME));
        String imageTag = Optional.fromNullable(entity.config().get(DockerAttributes.DOCKER_IMAGE_TAG))
                .or("latest");

        boolean autoCheckpointImagePostInstall = Boolean.TRUE
                .equals(entity.config().get(DockerAttributes.AUTO_CHECKPOINT_DOCKER_IMAGE_POST_INSTALL));

        // TODO incorporate more info (incl registry?)
        String imageName;
        if (autoCheckpointImagePostInstall) {
            imageName = DockerUtils.imageName(entity, dockerfile);
        } else {
            // Generate a random id, and avoid collisions
            boolean collision;
            do {
                imageName = DockerUtils.randomImageName();
                collision = dockerHost.getImageNamed(imageName, imageTag).isPresent();
                if (collision)
                    LOG.info("Random image name collision '{}' on host {}; generating new id", imageName,
                            getOwner());
            } while (collision);
        }

        // Lookup image ID or build new image from Dockerfile
        LOG.info("ImageName ({}) for entity {}: {}",
                new Object[] { (autoCheckpointImagePostInstall ? "hash" : "random"), entity, imageName });

        if (dockerHost.getImageNamed(imageName, imageTag).isPresent()) {
            assert autoCheckpointImagePostInstall : "random imageName " + imageName + " collision on host "
                    + getOwner();

            // Wait until committed before continuing - Brooklyn may be midway through its creation.
            waitForImage(imageName);

            // Look up imageId again
            imageId = dockerHost.getImageNamed(imageName, imageTag).get();
            LOG.info("Found image {} for entity: {}", imageName, imageId);

            // Skip install phase
            entity.config().set(SoftwareProcess.SKIP_INSTALLATION, true);
        } else if (baseImage.isPresent()) {
            // Use the repository configured on the entity if present
            Optional<String> imageRepo = Optional
                    .fromNullable(entity.config().get(DockerAttributes.DOCKER_IMAGE_REGISTRY_URL));
            // Otherwise only use the configured repo here if it we created it or it is writeable
            Optional<String> localRepo = Optional.absent();
            if (config().get(DockerInfrastructure.DOCKER_SHOULD_START_REGISTRY)
                    || config().get(DockerInfrastructure.DOCKER_IMAGE_REGISTRY_WRITEABLE)) {
                localRepo = Optional.fromNullable(
                        getDockerInfrastructure().sensors().get(DockerAttributes.DOCKER_IMAGE_REGISTRY_URL));
                ;
            }
            imageName = Joiner.on('/')
                    .join(Optional.presentInstances(ImmutableList.of(imageRepo.or(localRepo), baseImage)));
            String fullyQualifiedName = imageName + ":" + imageTag;

            if (useSsh) {
                // Create an SSHable image from the one configured
                imageId = dockerHost.layerSshableImageOnFullyQualified(fullyQualifiedName);
                LOG.info("Created SSHable image from {}: {}", fullyQualifiedName, imageId);
            } else {
                try {
                    dockerHost.runDockerCommand(String.format("pull %s", fullyQualifiedName));
                } catch (Exception e) {
                    // XXX pulls fail sometimes but issue fixed in Docker 1.9.1
                    LOG.debug("Caught exception pulling {}: {}", fullyQualifiedName, e.getMessage());
                }
                imageId = dockerHost.getImageNamed(imageName, imageTag).orNull();
            }
            entity.config().set(SoftwareProcess.SKIP_INSTALLATION, true);
        } else {
            // Push or commit the image, otherwise Clocker will make a new one for the entity once it is installed.
            if (autoCheckpointImagePostInstall) {
                if (getDockerInfrastructure().config().get(DockerInfrastructure.DOCKER_IMAGE_REGISTRY_WRITEABLE)
                        && (getDockerInfrastructure().config()
                                .get(DockerInfrastructure.DOCKER_SHOULD_START_REGISTRY)
                                || Strings.isNonBlank(getDockerInfrastructure().sensors()
                                        .get(DockerInfrastructure.DOCKER_IMAGE_REGISTRY_URL)))) {
                    insertCallback(entity, SoftwareProcess.POST_INSTALL_COMMAND, DockerCallbacks.push());
                } else {
                    insertCallback(entity, SoftwareProcess.POST_INSTALL_COMMAND, DockerCallbacks.commit());
                }
            }

            if (Strings.isNonBlank(dockerfile)) {
                if (imageId != null) {
                    LOG.warn("Ignoring container imageId {} as dockerfile URL is set: {}", imageId, dockerfile);
                }
                Map<String, Object> substitutions = getExtraTemplateSubstitutions(imageName, entity);
                imageId = dockerHost.buildImage(dockerfile, entrypoint, contextArchive, imageName, useSsh,
                        substitutions);
            }
            if (Strings.isBlank(imageId)) {
                imageId = getOwner().sensors().get(DockerHost.DOCKER_IMAGE_ID);
            }

            // Tag the image name and create its latch
            imageLatches.putIfAbsent(imageName, new CountDownLatch(1));
            dockerHost.runDockerCommand(String.format("tag -f %s %s:latest", imageId, imageName));
        }

        // Look up hardware ID
        String hardwareId = entity.config().get(DockerAttributes.DOCKER_HARDWARE_ID);
        if (Strings.isEmpty(hardwareId)) {
            hardwareId = getOwner().config().get(DockerAttributes.DOCKER_HARDWARE_ID);
        }

        // Fix missing device link for urandom on some containers
        insertCallback(entity, SoftwareProcess.PRE_INSTALL_COMMAND,
                "if [ ! -e /dev/random ] ; then ln -s /dev/urandom /dev/random ; fi");

        // Create new Docker container in the host cluster
        LOG.info("Starting container with imageId {} and hardwareId {} at {}",
                new Object[] { imageId, hardwareId, machine });
        Map<Object, Object> containerFlags = MutableMap.builder().putAll(flags).put("useSsh", useSsh)
                .put("entity", entity).putIfNotNull("imageId", imageId)
                .putIfNotNull("imageName", imageId == null ? imageName : null)
                .putIfNotNull("imageTag", imageId == null ? imageTag : null)
                .putIfNotNull("hardwareId", hardwareId).build();
        Group cluster = dockerHost.getDockerContainerCluster();
        EntitySpec<DockerContainer> spec = EntitySpec
                .create(getOwner().sensors().get(DockerHost.DOCKER_CONTAINER_SPEC));
        spec.configure(containerFlags);
        Entity added = cluster.addMemberChild(spec);
        if (added == null) {
            throw new NoMachinesAvailableException(
                    String.format("Failed to create container at %s", dockerHost));
        } else {
            if (LOG.isDebugEnabled())
                LOG.debug("Starting container {} at {}, config {}", new Object[] { added, machine,
                        Sanitizer.sanitize(((EntityInternal) added).config().getBag()) });
            Entities.invokeEffector(entity, added, Startable.START,
                    MutableMap.of("locations", ImmutableList.of(machine))).getUnchecked();
        }
        DockerContainer dockerContainer = (DockerContainer) added;

        // Save the container attributes
        dockerContainer.sensors().set(DockerContainer.DOCKER_IMAGE_ID, imageId);
        dockerContainer.sensors().set(DockerContainer.DOCKER_IMAGE_NAME, imageName);
        dockerContainer.sensors().set(DockerContainer.DOCKER_HARDWARE_ID, hardwareId);

        // record SDN application network details
        if (getOwner().config().get(SdnAttributes.SDN_ENABLE)) {
            SdnAgent agent = getOwner().sensors().get(SdnAgent.SDN_AGENT);
            Cidr applicationCidr = agent.sensors().get(SdnAgent.SDN_PROVIDER)
                    .getSubnetCidr(entity.getApplicationId());
            entity.sensors().set(SdnProvider.APPLICATION_CIDR, applicationCidr);
            dockerContainer.sensors().set(SdnProvider.APPLICATION_CIDR, applicationCidr);
        }

        return dockerContainer.getDynamicLocation();
    } finally {
        lock.readLock().unlock();
    }
}

From source file:com.twitter.common.args.apt.CmdLineProcessor.java

@Nullable
private Set<String> getParsedTypes(@Nullable Configuration configuration, Set<? extends Element> parsers) {

    if (!isCheckLinkage) {
        return null;
    }//  www . j av  a  2  s  . co m

    Iterable<String> parsersFor = Optional
            .presentInstances(Iterables.transform(parsers, new Function<Element, Optional<String>>() {
                @Override
                public Optional<String> apply(Element parser) {
                    TypeMirror parsedType = getTypeArgument(parser.asType(), typeElement(Parser.class));
                    if (parsedType == null) {
                        error("failed to find a type argument for Parser: %s", parser);
                        return Optional.absent();
                    }
                    // Equals on TypeMirrors doesn't work - so we compare string representations :/
                    return Optional.of(typeUtils.erasure(parsedType).toString());
                }
            }));
    if (configuration != null) {
        parsersFor = Iterables.concat(parsersFor, Iterables
                .filter(Iterables.transform(configuration.parserInfo(), new Function<ParserInfo, String>() {
                    @Override
                    @Nullable
                    public String apply(ParserInfo parserInfo) {
                        TypeElement typeElement = elementUtils.getTypeElement(parserInfo.parsedType);
                        // We may not have a type on the classpath for a previous round - this is fine as
                        // long as the no Args in this round that are of the type.
                        return (typeElement == null) ? null
                                : typeUtils.erasure(typeElement.asType()).toString();
                    }
                }), Predicates.notNull()));
    }
    return ImmutableSet.copyOf(parsersFor);
}