package io.airlift.airship.coordinator;
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import io.airlift.airship.shared.CoordinatorLifecycleState;
import io.airlift.airship.shared.CoordinatorStatus;
import java.net.URI;
import java.util.Map;
public class MockRemoteCoordinator
implements RemoteCoordinator
{
private final String instanceId;
private final Map<String, CoordinatorStatus> coordinators;
public MockRemoteCoordinator(String instanceId, Map<String, CoordinatorStatus> coordinators)
{
this.instanceId = instanceId;
this.coordinators = coordinators;
}
@Override
public CoordinatorStatus status()
{
return getCoordinatorStatus();
}
@Override
public void setInternalUri(URI internalUri)
{
setCoordinatorStatus(getCoordinatorStatus().changeInternalUri(internalUri));
}
@Override
public ListenableFuture<?> updateStatus()
{
return Futures.immediateFuture(null);
}
public CoordinatorStatus getCoordinatorStatus()
{
CoordinatorStatus coordinatorStatus = coordinators.get(instanceId);
if (coordinatorStatus != null) {
return coordinatorStatus;
}
else {
return new CoordinatorStatus(null,
CoordinatorLifecycleState.OFFLINE,
instanceId,
null,
null,
null,
null);
}
}
public void setCoordinatorStatus(CoordinatorStatus coordinatorStatus)
{
Preconditions.checkNotNull(coordinatorStatus, "coordinatorStatus is null");
coordinators.put(instanceId, coordinatorStatus);
}
}