package de.ugoe.cs.tasktree.keyboardmaps; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Logger; /** * TODO comment * * @version $Revision: $ $Date: 12.07.2012$ * @author 2012, last modified by $Author: pharms$ */ class VirtualKeySynonyms { /** */ private static Logger LOG = Logger.getLogger(KeyboardMap.class.getName()); /** */ private Map> synonyms = new HashMap>(); /** */ private Map keyIds = new HashMap(); /** * TODO: comment * * @param keyId * @param virtualKey */ public void add(int keyId, VirtualKey virtualKey) { List synonymList = synonyms.get(keyId); if (synonymList == null) { synonymList = new ArrayList(); synonyms.put(keyId, synonymList); } if (!synonymList.contains(virtualKey)) { // ensure that the latest determined virtual keys are considered first synonymList.add(0, virtualKey); } Integer existingKeyId = keyIds.get(virtualKey); if ((existingKeyId != null) && (existingKeyId != keyId)) { LOG.finest("virtual key " + virtualKey + " is mapped to more than one key id (current is " + existingKeyId + ", new is " + keyId + "). New key id will be used (" + keyId + ")."); } keyIds.put(virtualKey, keyId); } /** * */ public boolean containsKey(int keyId) { return synonyms.containsKey(keyId); } /** * TODO: comment * * @param keyId * @return */ public VirtualKey[] getVirtualKeySynonyms(int keyId) { List virtualKeys = synonyms.get(keyId); if (virtualKeys != null) { return virtualKeys.toArray(new VirtualKey[virtualKeys.size()]); } else { LOG.warning("no virtual key define for key id " + keyId); return null; } } }