001package gu.sql2java;
002
003import static com.google.common.base.Preconditions.checkNotNull;
004import static gu.sql2java.Managers.baseManagerOf;
005
006import com.google.common.base.Function;
007import com.google.common.base.Strings;
008import com.google.common.collect.Multimap;
009
010public class StringFieldSearcher<B extends BaseBean> extends BaseFieldSearcher<B, String> {
011
012        private Function<B, String> funKeyGetter;
013        public StringFieldSearcher(RowMetaData metaData, int... effectColumnId) {
014                super(metaData, effectColumnId);
015                setDefaultMatchFilter(StringMatchType.REGEX_MATCH);
016        }
017
018        public StringFieldSearcher(RowMetaData metaData, String... effectColumnNames) {
019                this(metaData, checkNotNull(metaData,"metaData is null").columnIDsOf(effectColumnNames));
020        }
021
022        public <M extends TableManager<B>> StringFieldSearcher(Class<M> interfaceClass, int[] effectColumnId) {
023                this(baseManagerOf(interfaceClass).metaData, effectColumnId);
024        }
025
026        public <M extends TableManager<B>> StringFieldSearcher(Class<M> interfaceClass, String... effectColumnNames) {
027                this(baseManagerOf(interfaceClass).metaData, effectColumnNames);
028        }
029
030        @Override
031        protected String keyOf(B bean) {
032                // 返回空则视为null
033                return Strings.emptyToNull(checkNotNull(funKeyGetter,"funKeyGetter is uninitialized").apply(bean));
034        }
035        
036        public Function<B, String> getFunKeyGetter() {
037                return funKeyGetter;
038        }
039
040        public StringFieldSearcher<B> setFunKeyGetter(Function<B, String> funKeyGetter) {
041                this.funKeyGetter = funKeyGetter;
042                return this;
043        }
044        
045        public StringFieldSearcher<B> setDefaultMatchFilter(StringMatchType defaultMatchType){
046                if(defaultMatchType != null){
047                        setDefaultMatchFilter(defaultMatchType.createMatchFilter());
048                }
049                return this;
050        }
051        public final <T> Multimap<String, T> search(String key, StringMatchType matchType){
052                return search(key,matchType == null ? null : matchType.createMatchFilter());
053        }
054}