package book.rebate;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
import foundation.util.MapList;
|
|
public class BookCommandBucket implements Iterable<BookCommandMeta> {
|
|
private static BookCommandBucket instance;
|
private MapList<String, BookCommandMeta> idMaps;
|
private Map<String, List<BookCommandMeta>> codeMaps;
|
|
static {
|
newInstance();
|
}
|
|
private BookCommandBucket() {
|
idMaps = new MapList<String, BookCommandMeta>();
|
codeMaps = new HashMap<String, List<BookCommandMeta>>();
|
}
|
|
public static BookCommandBucket getInstance() {
|
return instance;
|
}
|
|
public static BookCommandBucket newInstance() {
|
instance = new BookCommandBucket();
|
return instance;
|
}
|
|
public void loadOne(BookCommandMeta meta) {
|
String code = meta.getCode();
|
|
if (code == null) {
|
return;
|
}
|
|
code = code.toLowerCase();
|
|
//1. add to id map
|
idMaps.add(meta.getId(), meta);
|
|
//2. add to code map
|
List<BookCommandMeta> metaList = codeMaps.get(code);
|
|
if (metaList == null) {
|
metaList = new ArrayList<BookCommandMeta>();
|
codeMaps.put(code, metaList);
|
}
|
|
metaList.add(meta);
|
}
|
|
public static List<BookCommandMeta> getMeta(String code) {
|
if (code == null) {
|
return null;
|
}
|
|
code = code.toLowerCase();
|
return instance.codeMaps.get(code);
|
}
|
|
public static List<BookCommand> get(String commandCode) {
|
if (commandCode == null) {
|
return null;
|
}
|
|
commandCode = commandCode.toLowerCase();
|
|
//1. get meta
|
List<BookCommandMeta> metas = instance.codeMaps.get(commandCode);
|
|
if (metas == null) {
|
return null;
|
}
|
|
//2. create command
|
List<BookCommand> result = new ArrayList<BookCommand>();
|
|
for (BookCommandMeta meta: metas) {
|
BookCommand command = new BookCommand(meta);
|
result.add(command);
|
}
|
|
return result;
|
}
|
|
@Override
|
public Iterator<BookCommandMeta> iterator() {
|
return idMaps.iterator();
|
}
|
|
}
|