001package gu.dtalk; 002 003import java.util.Arrays; 004import java.util.Collections; 005import java.util.List; 006import java.util.Set; 007 008import com.alibaba.fastjson.annotation.JSONField; 009import com.google.common.base.MoreObjects; 010import com.google.common.base.Predicate; 011import com.google.common.base.Predicates; 012import static com.google.common.base.Preconditions.*; 013 014/** 015 * 单选列表选项 016 * @author guyadong 017 * 018 * @param <E> 019 */ 020public class SwitchOption<E> extends CheckOption<E> { 021 @JSONField(serialize = false,deserialize = false) 022 private final Predicate<Set<Integer>> switchValidator = new Predicate<Set<Integer>>() { 023 024 @Override 025 public boolean apply(Set<Integer> input) { 026 return input.size() == 1; 027 } 028 }; 029 public SwitchOption() { 030 super(); 031 super.setValidator(switchValidator); 032 } 033 034 @Override 035 public final OptionType getType() { 036 return OptionType.SWITCH; 037 } 038 039 @Override 040 public BaseOption<Set<Integer>> setValidator(Predicate<Set<Integer>> validator) { 041 return super.setValidator(Predicates.and(switchValidator, validator)); 042 } 043 044 @JSONField(serialize = false,deserialize = false) 045 public E getSwitch(){ 046 List<E> list = getSelected(); 047 return list.size()>0 ? list.get(0) : null; 048 } 049 @JSONField(serialize = false,deserialize = false) 050 public CheckOption<E> setSwitch(E value){ 051 return setSelected(Arrays.asList(value)); 052 } 053 054 @JSONField(serialize = false,deserialize = false) 055 @Override 056 public CheckOption<E> setSelected(List<E> sel) { 057 sel = MoreObjects.firstNonNull(sel, Collections.<E>emptyList()); 058 if(!sel.isEmpty()){ 059 checkArgument(sel.size()==1,"TOO MANY SELECTED OPTIONS"); 060 } 061 return super.setSelected(sel); 062 } 063 064}