All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.wouterdanes.docker.maven.AbstractDockerMojo Maven / Gradle / Ivy

package net.wouterdanes.docker.maven;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.common.base.Optional;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Parameter;

import net.wouterdanes.docker.provider.DockerProvider;
import net.wouterdanes.docker.provider.DockerProviderSupplier;
import net.wouterdanes.docker.provider.model.BuiltImageInfo;

/**
 * Base class for all Mojos with shared functionality
 */
public abstract class AbstractDockerMojo extends AbstractMojo {

    private static final String STARTED_CONTAINERS_KEY = "startedContainers";
    private static final String BUILT_IMAGES_KEY = "builtImages";

    @Parameter(defaultValue = "remote", property = "docker.provider", required = true)
    private String providerName;

    public void setProviderName(final String providerName) {
        this.providerName = providerName;
    }

    @Override
    public final void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("Using docker provider: " + providerName);
        doExecute();
    }

    protected abstract void doExecute() throws MojoExecutionException, MojoFailureException;

    protected void registerStartedContainer(String id) {
        List startedContainers = obtainListFromPluginContext(STARTED_CONTAINERS_KEY);
        startedContainers.add(id);
    }

    protected List getStartedContainers() {
        return obtainListFromPluginContext(STARTED_CONTAINERS_KEY);
    }

    protected void registerBuiltImage(String startId, String imageId, boolean keep) {
        Map builtImages = obtainMapFromPluginContext(BUILT_IMAGES_KEY);
        builtImages.put(startId, new BuiltImageInfo(startId, imageId, keep));
    }

    protected Collection getBuiltImages() {
        Map builtImagesMap = obtainMapFromPluginContext(BUILT_IMAGES_KEY);
        return builtImagesMap.values();
    }

    protected DockerProvider getDockerProvider() {
        return new DockerProviderSupplier(providerName).get();
    }

    protected Optional getBuiltImageForStartId(final String imageId) {
        Map builtImages = obtainMapFromPluginContext(BUILT_IMAGES_KEY);
        return Optional.fromNullable(builtImages.get(imageId));
    }

    @SuppressWarnings("unchecked")
    private  List obtainListFromPluginContext(String name) {
        Object obj = getPluginContext().get(name);
        if (obj == null) {
            ArrayList list = new ArrayList<>();
            getPluginContext().put(name, list);
            return list;
        } else {
            return (List) obj;
        }
    }

    @SuppressWarnings("unchecked")
    private  Map obtainMapFromPluginContext(String name) {
        Object obj = getPluginContext().get(name);
        if (obj == null) {
            Map map = new HashMap<>();
            getPluginContext().put(name, map);
            return map;
        } else {
            return (Map) obj;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy