source: trunk/quest-misc/src/main/java/de/ugoe/cs/tasktree/keyboardmaps/VirtualKeySynonyms.java @ 838

Last change on this file since 838 was 838, checked in by sherbold, 12 years ago
  • code documentation and clean-up
File size: 2.6 KB
Line 
1
2package de.ugoe.cs.tasktree.keyboardmaps;
3
4import java.util.ArrayList;
5import java.util.HashMap;
6import java.util.List;
7import java.util.Map;
8import java.util.logging.Level;
9
10import de.ugoe.cs.util.console.Console;
11
12/**
13 * <p>
14 * Helper class to handle synonymous {@link VirtualKey}s.
15 * </p>
16 *
17 * @version 1.0
18 * @author Patrick Harms
19 */
20class VirtualKeySynonyms {
21
22    /**
23     * <p>
24     * Map of synonymous keys.
25     * </p>
26     */
27    private Map<Integer, List<VirtualKey>> synonyms = new HashMap<Integer, List<VirtualKey>>();
28
29    /**
30     * <p>
31     * Mapping of {@link VirtualKey}s to integer Ids.
32     * </p>
33     */
34    private Map<VirtualKey, Integer> keyIds = new HashMap<VirtualKey, Integer>();
35
36    /**
37     * <p>
38     * Adds a new synonymous key.
39     * </p>
40     *
41     * @param keyId
42     *            id of the synonym
43     * @param virtualKey
44     *            the synonym
45     */
46    public void add(int keyId, VirtualKey virtualKey) {
47        List<VirtualKey> synonymList = synonyms.get(keyId);
48
49        if (synonymList == null) {
50            synonymList = new ArrayList<VirtualKey>();
51            synonyms.put(keyId, synonymList);
52        }
53
54        if (!synonymList.contains(virtualKey)) {
55            // ensure that the latest determined virtual keys are considered first
56            synonymList.add(0, virtualKey);
57        }
58
59        Integer existingKeyId = keyIds.get(virtualKey);
60
61        if ((existingKeyId != null) && (existingKeyId != keyId)) {
62            Console.traceln(Level.FINEST, "virtual key " + virtualKey + " is mapped to more " +
63                "than one key id (current is " + existingKeyId + ", new is " + keyId +
64                "). New key id will be used (" + keyId + ").");
65        }
66
67        keyIds.put(virtualKey, keyId);
68    }
69
70    /**
71     * <p>
72     * Returns whether a key is contained in the set of synonyms.
73     * </p>
74     *
75     * @param keyId
76     *            id of the key
77     * @return true, if the key is contained; false otherwise
78     */
79    public boolean containsKey(int keyId) {
80        return synonyms.containsKey(keyId);
81    }
82
83    /**
84     * <p>
85     * Returns all synonyms known for a given key.
86     * </p>
87     *
88     * @param keyId
89     *            the id of the key
90     * @return the synonyms
91     */
92    public VirtualKey[] getVirtualKeySynonyms(int keyId) {
93        List<VirtualKey> virtualKeys = synonyms.get(keyId);
94        if (virtualKeys != null) {
95            return virtualKeys.toArray(new VirtualKey[virtualKeys.size()]);
96        }
97        else {
98            Console.traceln(Level.WARNING, "no virtual key define for key id " + keyId);
99            return null;
100        }
101    }
102
103}
Note: See TracBrowser for help on using the repository browser.