package jp.vmi.selenium.selenese.result; import java.util.ArrayList; import java.util.Collection; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; import java.util.Set; import jp.vmi.selenium.selenese.command.ICommand; /** * CommandResult map for chaching. */ public class CommandResultMap implements Map<ICommand, List<CommandResult>> { private final IdentityHashMap<ICommand, List<CommandResult>> map; /** * Constructor. * * @param cresultList command result list. */ public CommandResultMap(CommandResultList cresultList) { map = new IdentityHashMap<>(cresultList.size()); putAll(cresultList); } /** * Put command result. * * @param cresult command result. */ @SuppressWarnings("unchecked") public void put(CommandResult cresult) { if (cresult instanceof List) { putAll((List<CommandResult>) cresult); return; } ICommand command = ((CommandResult) cresult).getCommand(); List<CommandResult> list = map.get(command); if (list == null) map.put(command, list = new ArrayList<>(1)); list.add((CommandResult) cresult); } /** * Put command result list. * * @param cresultList command result list. */ public void putAll(List<CommandResult> cresultList) { for (CommandResult cresult : cresultList) put(cresult); } @Override public int size() { return map.size(); } @Override public boolean isEmpty() { return map.isEmpty(); } @Override public List<CommandResult> get(Object key) { return map.get(key); } @Override public boolean containsKey(Object key) { return map.containsKey(key); } @Override public boolean containsValue(Object value) { return map.containsValue(value); } @Override public Set<ICommand> keySet() { return map.keySet(); } @Override public Collection<List<CommandResult>> values() { return map.values(); } @Override public Set<Entry<ICommand, List<CommandResult>>> entrySet() { return map.entrySet(); } // The following methods are not implemented. @Override public List<CommandResult> put(ICommand key, List<CommandResult> value) { throw new UnsupportedOperationException(); } @Override public void putAll(Map<? extends ICommand, ? extends List<CommandResult>> m) { throw new UnsupportedOperationException(); } @Override public List<CommandResult> remove(Object key) { throw new UnsupportedOperationException(); } @Override public void clear() { throw new UnsupportedOperationException(); } }