package io.airlift.airship.cli; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import io.airlift.airship.shared.SlotLifecycleState; import io.airlift.airship.shared.SlotStatusRepresentation; import org.fusesource.jansi.Ansi.Color; import static io.airlift.airship.cli.Ansi.colorize; public class SlotRecord implements Record { public static ImmutableList<Record> toSlotRecords(Iterable<SlotStatusRepresentation> slots) { return ImmutableList.copyOf(Iterables.transform(slots, new Function<SlotStatusRepresentation, Record>() { @Override public SlotRecord apply(SlotStatusRepresentation slot) { return new SlotRecord(slot); } })); } private final SlotStatusRepresentation slotStatus; public SlotRecord(SlotStatusRepresentation statusRepresentation) { this.slotStatus = statusRepresentation; } public String getObjectValue(Column column) { switch (column) { case shortId: return slotStatus.getShortId(); case uuid: return slotStatus.getId().toString(); case machine: return slotStatus.getInstanceId(); case internalHost: return slotStatus.getInternalHost(); case internalIp: return slotStatus.getInternalIp(); case externalHost: return slotStatus.getExternalHost(); case status: return slotStatus.getStatus(); case location: return slotStatus.getLocation(); case shortLocation: return slotStatus.getShortLocation(); case binary: return slotStatus.getBinary(); case shortBinary: return slotStatus.getShortBinary(); case config: return slotStatus.getConfig(); case shortConfig: return slotStatus.getShortConfig(); case expectedStatus: return slotStatus.getExpectedStatus(); case expectedBinary: return slotStatus.getExpectedBinary(); case expectedConfig: return slotStatus.getExpectedConfig(); case statusMessage: return slotStatus.getStatusMessage(); default: return null; } } @Override public String getValue(Column column) { return toString(getObjectValue(column)); } @Override public String getColorizedValue(Column column) { Object value = getObjectValue(column); if (Column.status == column) { SlotLifecycleState state = SlotLifecycleState.lookup(toString(value)); if (SlotLifecycleState.RUNNING == state) { return colorize(state, Color.GREEN); } else if (SlotLifecycleState.UNKNOWN == state) { return colorize(state, Color.RED); } } 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); } }