UCaseMap.java Source code

Java tutorial

Introduction

Here is the source code for UCaseMap.java

Source

//package com.customwars.client.tools;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * This Map stores it's keys as strings in upper case, null and duplicate keys are not allowed
 * Attempting to add a duplicate object in this map results in an IllegalArgumentException
 * Null values are not allowed
 *
 * @param <T> The type of the object stored in this UCaseMap
 */
public class UCaseMap<T> implements Map<String, T> {
    private final Map<String, T> cache;

    public UCaseMap() {
        cache = new HashMap<String, T>();
    }

    public UCaseMap(int initialCapacity) {
        cache = new HashMap<String, T>(initialCapacity);
    }

    public boolean containsKey(Object key) {
        if (key != null) {
            String s = (String) key;
            return cache.containsKey(s.toUpperCase());
        } else {
            return false;
        }
    }

    public boolean containsValue(Object value) {
        return cache.containsValue(value);
    }

    public T get(Object objKey) {
        if (objKey == null) {
            throw new IllegalArgumentException("objKey cannot be null");
        }

        String strKey = (String) objKey;
        String uCaseKey = strKey.toUpperCase();

        if (cache.containsKey(uCaseKey)) {
            return cache.get(uCaseKey);
        } else {
            throw new IllegalArgumentException(
                    "No obj found for '" + uCaseKey + "' available keys " + cache.keySet());
        }
    }

    public T put(String key, T value) {
        String uCaseKey = key.toUpperCase();
        if (value == null) {
            return get(key);
        }

        if (!cache.containsKey(uCaseKey)) {
            return cache.put(uCaseKey, value);
        } else {
            throw new IllegalArgumentException("key " + uCaseKey + " is already cached");
        }
    }

    public T remove(Object key) {
        return cache.remove(key);
    }

    public void putAll(Map<? extends String, ? extends T> map) {
        cache.putAll(map);
    }

    public int size() {
        return cache.size();
    }

    public boolean isEmpty() {
        return cache.isEmpty();
    }

    public void clear() {
        cache.clear();
    }

    public Set<String> keySet() {
        return cache.keySet();
    }

    public Collection<T> values() {
        return cache.values();
    }

    public Set<Entry<String, T>> entrySet() {
        return cache.entrySet();
    }

    @Override
    public String toString() {
        return cache.toString();
    }
}