private Map createCaseAwareMap() { return new CaseAwareMap(columnsCaseSensitive); }
/** * Sets if keys are case sensitive. * If set to <code>true</code> this implementation behaves like * a <code>HashMap</code>. Please note, that all entries are cleared * when switching case sensitivity. It's not possible to switch * and keep the entries. * @param isCaseSensitive are keys case sensitive */ public void setCaseSensitive(boolean isCaseSensitive) { clear(); this.isCaseSensitive = isCaseSensitive; }
public Object get(Object key) { Object compareKey = getCompareKey(key); return getCompareMap().get(compareKey); }
private Object doConsistentModify(Object key, ConsistentModify modifier) { Object compareKey = getCompareKey(key); if(!caseInsensitiveMap.containsKey(compareKey)) { return modifier.modify(key, compareKey); } Iterator iterator = actualMap.keySet().iterator(); while(iterator.hasNext()) { Object actualKey = iterator.next(); if(areKeysEquals(actualKey, compareKey)) { return modifier.modify(actualKey, compareKey); } } return null; }
public Object put(Object key, Object value) { return doConsistentModify(key, new ConsistentPut(value)); }
private boolean areKeysEquals(Object actualKey, Object compareKey) { if(null == actualKey && null == compareKey) return true; if(null == actualKey) return false; if(null == compareKey) return false; Object actualCompareKey = getCompareKey(actualKey); return compareKey.equals(actualCompareKey); }
public void putAll(Map map) { Iterator keys = map.keySet().iterator(); while(keys.hasNext()) { Object nextKey = keys.next(); Object nextValue = map.get(nextKey); put(nextKey, nextValue); } }
private Object getCompareKey(Object key) { if(isCaseSensitive || !isStringKey(key)) { return key; } return ((String)key).toUpperCase(); }
public boolean isEmpty() { return size() <= 0; }
private Object doConsistentModify(Object key, ConsistentModify modifier) { Object compareKey = getCompareKey(key); if(!caseInsensitiveMap.containsKey(compareKey)) { return modifier.modify(key, compareKey); } Iterator iterator = actualMap.keySet().iterator(); while(iterator.hasNext()) { Object actualKey = iterator.next(); if(areKeysEquals(actualKey, compareKey)) { return modifier.modify(actualKey, compareKey); } } return null; }
public Object put(Object key, Object value) { return doConsistentModify(key, new ConsistentPut(value)); }
private boolean areKeysEquals(Object actualKey, Object compareKey) { if(null == actualKey && null == compareKey) return true; if(null == actualKey) return false; if(null == compareKey) return false; Object actualCompareKey = getCompareKey(actualKey); return compareKey.equals(actualCompareKey); }
public void putAll(Map map) { Iterator keys = map.keySet().iterator(); while(keys.hasNext()) { Object nextKey = keys.next(); Object nextValue = map.get(nextKey); put(nextKey, nextValue); } }
private Object getCompareKey(Object key) { if(isCaseSensitive || !isStringKey(key)) { return key; } return ((String)key).toUpperCase(); }
public boolean isEmpty() { return size() <= 0; }
private Map createCaseAwareMap() { return new CaseAwareMap(columnsCaseSensitive); }
public Object get(Object key) { Object compareKey = getCompareKey(key); return getCompareMap().get(compareKey); }
public Object remove(Object key) { return doConsistentModify(key, new ConsistentRemove()); }
/** * Sets if keys are case sensitive. * If set to <code>true</code> this implementation behaves like * a <code>HashMap</code>. Please note, that all entries are cleared * when switching case sensitivity. It's not possible to switch * and keep the entries. * @param isCaseSensitive are keys case sensitive */ public void setCaseSensitive(boolean isCaseSensitive) { clear(); this.isCaseSensitive = isCaseSensitive; }
private <T> Map<String, T> createCaseAwareMap() { return (Map<String, T>)new CaseAwareMap(columnsCaseSensitive); }