package io.airlift.airship.cli;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import io.airlift.airship.shared.CoordinatorLifecycleState;
import io.airlift.airship.shared.CoordinatorStatusRepresentation;
import org.fusesource.jansi.Ansi.Color;
import static io.airlift.airship.cli.Ansi.colorize;
public class CoordinatorRecord
implements Record
{
public static ImmutableList<Record> toCoordinatorRecords(Iterable<CoordinatorStatusRepresentation> coordinators)
{
return ImmutableList.copyOf(Iterables.transform(coordinators, new Function<CoordinatorStatusRepresentation, Record>()
{
@Override
public CoordinatorRecord apply(CoordinatorStatusRepresentation coordinator)
{
return new CoordinatorRecord(coordinator);
}
}));
}
private final CoordinatorStatusRepresentation coordinatorStatus;
public CoordinatorRecord(CoordinatorStatusRepresentation coordinatorStatus)
{
Preconditions.checkNotNull(coordinatorStatus, "coordinatorStatus is null");
this.coordinatorStatus = coordinatorStatus;
}
public Object getObjectValue(Column column)
{
switch (column) {
case shortId:
return coordinatorStatus.getShortCoordinatorId();
case uuid:
return coordinatorStatus.getCoordinatorId();
case machine:
return coordinatorStatus.getInstanceId();
case internalHost:
return coordinatorStatus.getInternalHost();
case internalIp:
return coordinatorStatus.getInternalIp();
case externalHost:
return coordinatorStatus.getExternalHost();
case status:
return coordinatorStatus.getState();
case location:
return coordinatorStatus.getLocation();
case shortLocation:
return coordinatorStatus.getShortLocation();
case instanceType:
return coordinatorStatus.getInstanceType();
case internalUri:
return coordinatorStatus.getSelf();
case externalUri:
return coordinatorStatus.getExternalUri();
default:
return null;
}
}
@Override
public String getValue(Column column)
{
Object value = getObjectValue(column);
if (value == null) {
return "";
}
return String.valueOf(value);
}
@Override
public String getColorizedValue(Column column)
{
Object value = getObjectValue(column);
if (Column.status == column) {
CoordinatorLifecycleState state = CoordinatorLifecycleState.valueOf(toString(value));
if (CoordinatorLifecycleState.ONLINE == state) {
return colorize(state, Color.GREEN);
}
else if (CoordinatorLifecycleState.OFFLINE == state) {
return colorize(state, Color.RED);
}
else if (CoordinatorLifecycleState.PROVISIONING == state) {
return colorize(state, Color.BLUE);
}
}
else if (Column.statusMessage == column) {
return colorize(value, Color.RED);
}
return toString(value);
}
private String toString(Object value)
{
if (value == null) {
return "";
}
return String.valueOf(value);
}
}