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 { private static BookCommandBucket instance; private MapList idMaps; private Map> codeMaps; static { newInstance(); } private BookCommandBucket() { idMaps = new MapList(); codeMaps = new HashMap>(); } 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 metaList = codeMaps.get(code); if (metaList == null) { metaList = new ArrayList(); codeMaps.put(code, metaList); } metaList.add(meta); } public static List getMeta(String code) { if (code == null) { return null; } code = code.toLowerCase(); return instance.codeMaps.get(code); } public static List get(String commandCode) { if (commandCode == null) { return null; } commandCode = commandCode.toLowerCase(); //1. get meta List metas = instance.codeMaps.get(commandCode); if (metas == null) { return null; } //2. create command List result = new ArrayList(); for (BookCommandMeta meta: metas) { BookCommand command = new BookCommand(meta); result.add(command); } return result; } @Override public Iterator iterator() { return idMaps.iterator(); } }