package biz.book;
|
|
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;
|
private Map<String, TargetBookCommand> targetCommands;
|
|
static {
|
newInstance();
|
}
|
|
private BookCommandBucket() {
|
idMaps = new MapList<String, BookCommandMeta>();
|
codeMaps = new HashMap<String, List<BookCommandMeta>>();
|
targetCommands = new HashMap<String, TargetBookCommand>();
|
}
|
|
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 void loadOneTarget(String targetId, String dataName, String commandCode) {
|
TargetBookCommand target = targetCommands.get(targetId);
|
|
if (target == null) {
|
List<BookCommandMeta> metas = codeMaps.get(commandCode);
|
target = new TargetBookCommand(targetId, dataName, metas);
|
}
|
|
targetCommands.put(targetId, target);
|
}
|
|
|
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) throws Exception {
|
if (commandCode == null) {
|
return null;
|
}
|
|
commandCode = commandCode.toLowerCase();
|
|
List<BookCommandMeta> metas = instance.codeMaps.get(commandCode);
|
List<BookCommand> result = new ArrayList<BookCommand>();
|
if (metas != null) {
|
for (BookCommandMeta meta: metas) {
|
BookCommand command = new BookCommand(meta);
|
result.add(command);
|
}
|
}
|
|
|
TargetBookCommand bookCommand = instance.targetCommands.get(commandCode);
|
|
if (bookCommand == null) {
|
return result;
|
}
|
|
metas = new ArrayList<BookCommandMeta>();
|
result = new ArrayList<BookCommand>();
|
|
List<BookCommandMeta> commandMetas = bookCommand.getComands();
|
|
for (BookCommandMeta meta : commandMetas) {
|
BookCommand command = new BookCommand(bookCommand.getDataName(), meta);
|
result.add(command);
|
}
|
|
|
return result;
|
}
|
|
@Override
|
public Iterator<BookCommandMeta> iterator() {
|
return idMaps.iterator();
|
}
|
|
}
|