package org.nutz.mvc.config;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.nutz.lang.Strings;
import org.nutz.lang.meta.Pair;
public class AtMap {
private Map<String, String> ats;
private Map<String, Method> methods;
public AtMap() {
ats = new HashMap<String, String>();
methods = new HashMap<String, Method>();
}
public void add(String key, String actionPath) {
if (actionPath.endsWith("/*"))
actionPath = actionPath.substring(0, actionPath.length() - 2);
ats.put(Strings.trim(key), Strings.trim(actionPath));
}
public void addMethod(String url, Method method) {
methods.put(url, method);
}
public Set<String> keys() {
return ats.keySet();
}
public Map<String, Method> getMethodMapping() {
return methods;
}
public int size() {
return ats.size();
}
public String get(String key) {
return ats.get(key);
}
public AtMap clear() {
ats.clear();
return this;
}
public List<Pair<String>> getAll() {
return getList((String[]) null);
}
public List<Pair<String>> getList(String... prefixes) {
List<Pair<String>> list = new ArrayList<Pair<String>>(ats.size());
Set<Entry<String, String>> ens = ats.entrySet();
for (Entry<String, String> en : ens) {
String key = en.getKey();
if (null == prefixes || prefixes.length == 0)
list.add(new Pair<String>(key, en.getValue()));
else {
for (String prefix : prefixes)
if (key.startsWith(prefix)) {
list.add(new Pair<String>(key, en.getValue()));
break;
}
}
}
return list;
}
}