LinkedCaseInsensitiveMap provides case-insensitive keySet again
Issue: SPR-15026
This commit is contained in:
		
							parent
							
								
									60882ceb4e
								
							
						
					
					
						commit
						50e5a65b2d
					
				| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2016 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2017 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -85,6 +85,10 @@ public class LinkedCaseInsensitiveMap<V> implements Map<String, V>, Serializable
 | 
			
		|||
	 */
 | 
			
		||||
	public LinkedCaseInsensitiveMap(int initialCapacity, Locale locale) {
 | 
			
		||||
		this.targetMap = new LinkedHashMap<String, V>(initialCapacity) {
 | 
			
		||||
			@Override
 | 
			
		||||
			public boolean containsKey(Object key) {
 | 
			
		||||
				return LinkedCaseInsensitiveMap.this.containsKey(key);
 | 
			
		||||
			}
 | 
			
		||||
			@Override
 | 
			
		||||
			protected boolean removeEldestEntry(Map.Entry<String, V> eldest) {
 | 
			
		||||
				boolean doRemove = LinkedCaseInsensitiveMap.this.removeEldestEntry(eldest);
 | 
			
		||||
| 
						 | 
				
			
			@ -119,50 +123,16 @@ public class LinkedCaseInsensitiveMap<V> implements Map<String, V>, Serializable
 | 
			
		|||
		return this.targetMap.isEmpty();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean containsValue(Object value) {
 | 
			
		||||
		return this.targetMap.containsValue(value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<String> keySet() {
 | 
			
		||||
		return this.targetMap.keySet();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Collection<V> values() {
 | 
			
		||||
		return this.targetMap.values();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<Entry<String, V>> entrySet() {
 | 
			
		||||
		return this.targetMap.entrySet();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public V put(String key, V value) {
 | 
			
		||||
		String oldKey = this.caseInsensitiveKeys.put(convertKey(key), key);
 | 
			
		||||
		if (oldKey != null && !oldKey.equals(key)) {
 | 
			
		||||
			this.targetMap.remove(oldKey);
 | 
			
		||||
		}
 | 
			
		||||
		return this.targetMap.put(key, value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void putAll(Map<? extends String, ? extends V> map) {
 | 
			
		||||
		if (map.isEmpty()) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		for (Map.Entry<? extends String, ? extends V> entry : map.entrySet()) {
 | 
			
		||||
			put(entry.getKey(), entry.getValue());
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean containsKey(Object key) {
 | 
			
		||||
		return (key instanceof String && this.caseInsensitiveKeys.containsKey(convertKey((String) key)));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean containsValue(Object value) {
 | 
			
		||||
		return this.targetMap.containsValue(value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public V get(Object key) {
 | 
			
		||||
		if (key instanceof String) {
 | 
			
		||||
| 
						 | 
				
			
			@ -185,6 +155,25 @@ public class LinkedCaseInsensitiveMap<V> implements Map<String, V>, Serializable
 | 
			
		|||
		return defaultValue;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public V put(String key, V value) {
 | 
			
		||||
		String oldKey = this.caseInsensitiveKeys.put(convertKey(key), key);
 | 
			
		||||
		if (oldKey != null && !oldKey.equals(key)) {
 | 
			
		||||
			this.targetMap.remove(oldKey);
 | 
			
		||||
		}
 | 
			
		||||
		return this.targetMap.put(key, value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void putAll(Map<? extends String, ? extends V> map) {
 | 
			
		||||
		if (map.isEmpty()) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		for (Map.Entry<? extends String, ? extends V> entry : map.entrySet()) {
 | 
			
		||||
			put(entry.getKey(), entry.getValue());
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public V remove(Object key) {
 | 
			
		||||
		if (key instanceof String) {
 | 
			
		||||
| 
						 | 
				
			
			@ -202,6 +191,20 @@ public class LinkedCaseInsensitiveMap<V> implements Map<String, V>, Serializable
 | 
			
		|||
		this.targetMap.clear();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<String> keySet() {
 | 
			
		||||
		return this.targetMap.keySet();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Collection<V> values() {
 | 
			
		||||
		return this.targetMap.values();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<Entry<String, V>> entrySet() {
 | 
			
		||||
		return this.targetMap.entrySet();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public LinkedCaseInsensitiveMap<V> clone() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright 2002-2016 the original author or authors.
 | 
			
		||||
 * Copyright 2002-2017 the original author or authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
| 
						 | 
				
			
			@ -37,6 +37,12 @@ public class LinkedCaseInsensitiveMapTests {
 | 
			
		|||
		assertEquals("value3", map.get("key"));
 | 
			
		||||
		assertEquals("value3", map.get("KEY"));
 | 
			
		||||
		assertEquals("value3", map.get("Key"));
 | 
			
		||||
		assertTrue(map.containsKey("key"));
 | 
			
		||||
		assertTrue(map.containsKey("KEY"));
 | 
			
		||||
		assertTrue(map.containsKey("Key"));
 | 
			
		||||
		assertTrue(map.keySet().contains("key"));
 | 
			
		||||
		assertTrue(map.keySet().contains("KEY"));
 | 
			
		||||
		assertTrue(map.keySet().contains("Key"));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
| 
						 | 
				
			
			@ -48,6 +54,12 @@ public class LinkedCaseInsensitiveMapTests {
 | 
			
		|||
		assertEquals("value3", map.get("key"));
 | 
			
		||||
		assertEquals("value3", map.get("KEY"));
 | 
			
		||||
		assertEquals("value3", map.get("Key"));
 | 
			
		||||
		assertTrue(map.containsKey("key"));
 | 
			
		||||
		assertTrue(map.containsKey("KEY"));
 | 
			
		||||
		assertTrue(map.containsKey("Key"));
 | 
			
		||||
		assertTrue(map.keySet().contains("key"));
 | 
			
		||||
		assertTrue(map.keySet().contains("KEY"));
 | 
			
		||||
		assertTrue(map.keySet().contains("Key"));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue