package org.nutz.dao.impl.entity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.nutz.dao.entity.LinkField;
import org.nutz.dao.entity.LinkVisitor;
import org.nutz.lang.Strings;
/**
* 提供一个帮助类,统一处理几种映射字段集合的常用操作
*
* @author zozoh(zozohtnt@gmail.com)
*/
public class LinkFieldSet {
private ArrayList<LinkField> lnks;
private Map<String, ArrayList<LinkField>> cache;
public LinkFieldSet() {
lnks = new ArrayList<LinkField>(3);
cache = new HashMap<String, ArrayList<LinkField>>();
}
void add(LinkField lnk) {
lnks.add(lnk);
}
public List<LinkField> getAll() {
return lnks;
}
List<LinkField> visit(Object obj, String regex, LinkVisitor visitor) {
List<LinkField> list = getList(regex);
if (null != visitor)
for (LinkField lnk : list)
visitor.visit(obj, lnk);
return list;
}
List<LinkField> getList(String regex) {
ArrayList<LinkField> list;
if (Strings.isBlank(regex)) {
list = lnks;
} else {
list = cache.get(regex);
if (null == list) {
synchronized (cache) {
list = cache.get(regex);
if (null == list) {
list = new ArrayList<LinkField>(lnks.size());
for (LinkField lnk : lnks)
if (Pattern.matches(regex, lnk.getName()))
list.add(lnk);
list.trimToSize();
cache.put(regex, list);
}
}
}
}
return list;
}
}