package com.hubspot.singularity; import java.util.Collection; import java.util.Map; import javax.annotation.Nonnull; import com.google.common.base.Function; import com.google.common.collect.Maps; import com.hubspot.mesos.JavaUtils; public class SingularityDeployKey extends SingularityId { private final String requestId; private final String deployId; public static SingularityDeployKey fromDeploy(SingularityDeploy deploy) { return new SingularityDeployKey(deploy.getRequestId(), deploy.getId()); } public static SingularityDeployKey fromPendingTask(SingularityPendingTask pendingTask) { return new SingularityDeployKey(pendingTask.getPendingTaskId().getRequestId(), pendingTask.getPendingTaskId().getDeployId()); } public static SingularityDeployKey fromDeployMarker(SingularityDeployMarker deployMarker) { return new SingularityDeployKey(deployMarker.getRequestId(), deployMarker.getDeployId()); } public static SingularityDeployKey fromTaskId(SingularityTaskId taskId) { return new SingularityDeployKey(taskId.getRequestId(), taskId.getDeployId()); } public static Map<SingularityDeployKey, SingularityDeploy> fromDeploys(Collection<SingularityDeploy> deploys) { return Maps.uniqueIndex(deploys, new Function<SingularityDeploy, SingularityDeployKey>() { @Override public SingularityDeployKey apply(@Nonnull SingularityDeploy input) { return SingularityDeployKey.fromDeploy(input); } }); } public static Map<SingularityPendingTask, SingularityDeployKey> fromPendingTasks(Collection<SingularityPendingTask> pendingTasks) { return Maps.toMap(pendingTasks, new Function<SingularityPendingTask, SingularityDeployKey>() { @Override public SingularityDeployKey apply(@Nonnull SingularityPendingTask input) { return SingularityDeployKey.fromPendingTask(input); } }); } public static Map<SingularityPendingDeploy, SingularityDeployKey> fromPendingDeploys(Collection<SingularityPendingDeploy> pendingDeploys) { return Maps.toMap(pendingDeploys, FROM_PENDING_TO_DEPLOY_KEY); } public static final Function<SingularityPendingDeploy, SingularityDeployKey> FROM_PENDING_TO_DEPLOY_KEY = new Function<SingularityPendingDeploy, SingularityDeployKey>() { @Override public SingularityDeployKey apply(@Nonnull SingularityPendingDeploy input) { return SingularityDeployKey.fromDeployMarker(input.getDeployMarker()); } }; public SingularityDeployKey(String requestId, String deployId) { super(String.format("%s-%s", requestId, deployId)); this.requestId = requestId; this.deployId = deployId; } public String getRequestId() { return requestId; } public String getDeployId() { return deployId; } public static SingularityDeployKey valueOf(String string) { final String[] splits = JavaUtils.reverseSplit(string, 2, "-"); final String requestId = splits[0]; final String deployId = splits[1]; return new SingularityDeployKey(requestId, deployId); } @Override public String toString() { return getId(); } }