All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.molgenis.util.CaseInsensitiveLinkedHashMap Maven / Gradle / Ivy

package org.molgenis.util;

import java.util.AbstractMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

import com.google.common.collect.Sets;

/**
 * LinkedHashMap with a string as key. The key is caseinsensitive.
 * 
 * 
 * 
 * @param 
 */
public class CaseInsensitiveLinkedHashMap extends LinkedHashMap
{
	private static final long serialVersionUID = -5765647414721292250L;
	private final Map keyMap = new LinkedHashMap();

	@Override
	public V put(String key, V value)
	{
		if (key == null) throw new IllegalArgumentException("key is null");
		keyMap.put(key.toLowerCase(), key);
		return super.put(key.toLowerCase(), value);
	}

	@Override
	public void putAll(Map m)
	{
		for (Map.Entry entry : m.entrySet())
		{
			put(entry.getKey(), entry.getValue());
		}
	}

	@Override
	public V remove(Object key)
	{
		if (!(key instanceof String))
		{
			return null;
		}

		String keyStr = ((String) key).toLowerCase();
		keyMap.remove(keyStr);

		return super.remove(keyStr);
	}

	@Override
	public V get(Object key)
	{
		if (!(key instanceof String))
		{
			return null;
		}

		return super.get(((String) key).toLowerCase());
	}

	@Override
	public Set keySet()
	{
		// Return the original keys
		Set keys = super.keySet();
		Set originalKeys = Sets.newLinkedHashSetWithExpectedSize(keys.size());
		for (String key : keys)
		{
			originalKeys.add(keyMap.get(key));
		}

		return originalKeys;
	}

	@Override
	public Set> entrySet()
	{
		Set> entries = Sets.newLinkedHashSet();
		for (String key : keySet())
		{
			entries.add(new AbstractMap.SimpleEntry(key, get(key)));
		}

		return entries;
	}

	@Override
	public boolean equals(Object o)
	{
		if (!(o instanceof CaseInsensitiveLinkedHashMap))
		{
			return false;
		}
		CaseInsensitiveLinkedHashMap other = (CaseInsensitiveLinkedHashMap) o;
		if (!keySet().equals(other.keySet()))
		{
			return false;
		}
		for (java.util.Map.Entry entry : entrySet())
		{
			String key = entry.getKey();
			Object value = entry.getValue();
			if (value == null)
			{
				if (other.get(key) != null)
				{
					return false;
				}
			}
			else
			{
				if (!get(key).equals(other.get(key)))
				{
					return false;
				}
			}
		}
		return true;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy