package org.arquillian.cube.kubernetes.fabric8.impl.label; import io.fabric8.kubernetes.clnt.v2_2.KubernetesClient; import org.arquillian.cube.kubernetes.api.LabelProvider; import org.jboss.arquillian.core.api.Instance; import org.jboss.arquillian.core.api.annotation.Inject; import org.jboss.arquillian.core.spi.Validate; import java.util.HashMap; import java.util.Map; public class Fabric8LabelProvider implements LabelProvider { @Inject Instance<KubernetesClient> client; LabelProvider delegate; @Override public Map<String, String> getLabels() { return toImmutable().getLabels(); } @Override public LabelProvider toImmutable() { if (delegate != null) { return delegate; } synchronized(this) { if (delegate == null) { delegate = new ImmutableFabric8LabelProvider(client.get()); } } return delegate; } public static class ImmutableFabric8LabelProvider implements LabelProvider { private final KubernetesClient client; private ImmutableFabric8LabelProvider(KubernetesClient client) { Validate.notNull(client, "A KubernetesClient instance is required."); this.client = client; } @Override public Map<String, String> getLabels() { Map<String, String> labels = new HashMap<String, String>(); labels.put("project", client.getNamespace()); labels.put("framework", "arquillian"); labels.put("provider", "fabric8"); labels.put("component", "integrationTest"); return labels; } @Override public LabelProvider toImmutable() { return this; } } }