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