
cn.featherfly.common.data.GroupMatcher Maven / Gradle / Ivy
package cn.featherfly.common.data;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import cn.featherfly.common.enums.Logic;
import cn.featherfly.common.lang.AssertIllegalArgument;
import cn.featherfly.common.lang.CollectionUtils;
import cn.featherfly.common.lang.LangUtils;
/**
*
* 匹配器组
*
* @param 泛型
* @param 泛型
* @author 钟冀
*/
public class GroupMatcher, O> implements Matcher{
private Logic logic = Logic.AND;
private Set matchers = new HashSet<>();
/**
*/
public GroupMatcher() {
}
/**
* @param matchers matchers
*/
public GroupMatcher(@SuppressWarnings("unchecked") M...matchers) {
CollectionUtils.addAll(this.matchers, matchers);
}
/**
* @param logic match logic
* @param matchers matchers
*/
public GroupMatcher(Logic logic, @SuppressWarnings("unchecked") M...matchers) {
setLogic(logic);
CollectionUtils.addAll(this.matchers, matchers);
}
/**
* {@inheritDoc}
*/
@Override
public boolean match(O o) {
if (LangUtils.isEmpty(this.matchers)) {
return false;
}
if (logic == Logic.AND) {
return matchAnd(o, this.matchers);
} else {
return matchOr(o, this.matchers);
}
}
/**
* add matcher
* @param matcher matcher
*/
public void addMatcher(M matcher) {
this.matchers.add(matcher);
}
/**
* add matchers
* @param matchers matchers
*/
public void addMatcher(@SuppressWarnings("unchecked") M...matchers) {
CollectionUtils.addAll(this.matchers, matchers);
}
/**
* add matchers
* @param matchers matchers
*/
public void addMatcher(Collection matchers) {
this.matchers.addAll(matchers);
}
private boolean matchAnd(O o, Collection matchers) {
boolean matchResult = false;
for (M matcher : matchers) {
matchResult = matcher.match(o);
if (!matchResult) {
return false;
}
}
return true;
}
private boolean matchOr(O o, Collection matchers) {
boolean matchResult = false;
for (M matcher : matchers) {
matchResult = matcher.match(o);
if (matchResult) {
return true;
}
}
return false;
}
// ********************************************************************
// setter and getter
// ********************************************************************
/**
* 返回logic
* @return logic
*/
public Logic getLogic() {
return logic;
}
/**
* 设置logic
* @param logic logic
*/
public void setLogic(Logic logic) {
AssertIllegalArgument.isNotNull(logic, "logic can not be null");
this.logic = logic;
}
/**
* 返回matchers
* @return matchers
*/
public Set getMatchers() {
return matchers;
}
/**
* 设置matchers
* @param matchers matchers
*/
public void setMatchers(Set matchers) {
this.matchers = matchers;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy