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.AgentLifecycleState; import io.airlift.airship.shared.AgentStatusRepresentation; import org.fusesource.jansi.Ansi.Color; import java.util.List; import static io.airlift.airship.cli.Ansi.colorize; public class AgentRecord implements Record { public static List<Record> toAgentRecords(Iterable<AgentStatusRepresentation> agents) { return ImmutableList.copyOf(Iterables.transform(agents, new Function<AgentStatusRepresentation, Record>() { @Override public AgentRecord apply(AgentStatusRepresentation agent) { return new AgentRecord(agent); } })); } private final AgentStatusRepresentation agentStatus; public AgentRecord(AgentStatusRepresentation agentStatus) { Preconditions.checkNotNull(agentStatus, "agentStatus is null"); this.agentStatus = agentStatus; } public Object getObjectValue(Column column) { switch (column) { case shortId: return agentStatus.getShortAgentId(); case uuid: return agentStatus.getAgentId(); case machine: return agentStatus.getInstanceId(); case internalHost: return agentStatus.getInternalHost(); case internalIp: return agentStatus.getInternalIp(); case externalHost: return agentStatus.getExternalHost(); case status: return agentStatus.getState(); case location: return agentStatus.getLocation(); case shortLocation: return agentStatus.getShortLocation(); case instanceType: return agentStatus.getInstanceType(); case internalUri: return agentStatus.getSelf(); case externalUri: return agentStatus.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) { AgentLifecycleState state = AgentLifecycleState.valueOf(toString(value)); if (AgentLifecycleState.ONLINE == state) { return colorize(state, Color.GREEN); } else if (AgentLifecycleState.OFFLINE == state) { return colorize(state, Color.RED); } else if (AgentLifecycleState.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); } }