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}