package io.airlift.airship.cli; import com.google.common.base.Objects; import com.google.common.base.Predicate; import io.airlift.airline.Option; import io.airlift.airship.coordinator.CoordinatorFilterBuilder; import io.airlift.airship.shared.CoordinatorStatus; import io.airlift.airship.shared.HttpUriBuilder; import java.net.URI; import java.util.List; import static com.google.common.collect.Lists.newArrayList; public class CoordinatorFilter { @Option(name = {"-u", "--uuid"}, description = "Select coordinator with the given UUID") public final List<String> uuid = newArrayList(); @Option(name = {"-U", "--not-uuid"}, description = "Excludes coordinator with the given UUID") public final List<String> notUuid = newArrayList(); @Option(name = {"-h", "--host"}, description = "Select coordinator on the given host or IP address") public final List<String> host = newArrayList(); @Option(name = {"-H", "--not-host"}, description = "Excludes coordinator on the given host or IP address") public final List<String> notHost = newArrayList(); @Option(name = {"-m", "--machine"}, description = "Select coordinator on the given machine") public final List<String> machine = newArrayList(); @Option(name = {"-M", "--not-machine"}, description = "Excludes coordinator on the given machine") public final List<String> notMachine = newArrayList(); @Option(name = {"-s", "--state"}, description = "Select 'online', 'offline' or 'provisioning' coordinators") public final List<String> state = newArrayList(); @Option(name = {"-S", "--not-state"}, description = "Excludes 'online', 'offline' or 'provisioning' coordinators") public final List<String> notState = newArrayList(); @Option(name = "--all", description = "Select all coordinators") public boolean selectAll; public Predicate<CoordinatorStatus> toCoordinatorPredicate() { return createFilterBuilder().buildPredicate(); } public URI toUri(URI baseUri) { return createFilterBuilder().buildUri(baseUri); } public URI toUri(HttpUriBuilder uriBuilder) { return createFilterBuilder().buildUri(uriBuilder); } private CoordinatorFilterBuilder createFilterBuilder() { CoordinatorFilterBuilder coordinatorFilterBuilder = CoordinatorFilterBuilder.builder(); for (String id : uuid) { coordinatorFilterBuilder.addUuidFilter(id); } for (String notId : notUuid) { coordinatorFilterBuilder.addNotUuidFilter(notId); } for (String hostGlob : host) { coordinatorFilterBuilder.addHostGlobFilter(hostGlob); } for (String notHostGlob : notHost) { coordinatorFilterBuilder.addNotHostGlobFilter(notHostGlob); } for (String machineGlob : machine) { coordinatorFilterBuilder.addMachineGlobFilter(machineGlob); } for (String notMachineGlob : notMachine) { coordinatorFilterBuilder.addNotMachineGlobFilter(notMachineGlob); } for (String stateFilter : state) { coordinatorFilterBuilder.addStateFilter(stateFilter); } for (String notStateFilter : notState) { coordinatorFilterBuilder.addNotStateFilter(notStateFilter); } if (selectAll) { coordinatorFilterBuilder.selectAll(); } return coordinatorFilterBuilder; } @Override public String toString() { return Objects.toStringHelper(this) .add("uuid", uuid) .add("notUuid", notUuid) .add("host", host) .add("notHost", notHost) .add("machine", machine) .add("notMachine", notMachine) .add("state", state) .add("notState", notState) .add("selectAll", selectAll) .toString(); } }