BulkTransitMap.java

package eu.javaexperience.collection.map;

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

import eu.javaexperience.collection.set.ArrayListSeemsSet;
import eu.javaexperience.database.JDBC;

/**
 * The only purpose why it's created to fill with data then
 * iterate truth by using entrySet() function.
 * 
 * Strongly used with {@link JDBC#fillIntoMap(java.sql.Connection, String, Map)}
 * */
public class BulkTransitMap<K,V> implements Map<K,V>, Cloneable
{
	protected ArrayListSeemsSet<java.util.Map.Entry<K, V>> records = new ArrayListSeemsSet<>();
	
	@Override
	public int size()
	{
		return records.size();
	}

	@Override
	public boolean isEmpty()
	{
		return records.size() == 0;
	}

	@Override
	public boolean containsKey(Object key)
	{
		if(key == null)
		{
			for(Entry<K, V> kv:records)
				if(kv.getKey() == null)
					return true;
		}
		else
		{
			for(Entry<K, V> kv:records)
				if(key.equals(kv.getKey()))
					return true;
		}
		
		return false;
	}

	@Override
	public boolean containsValue(Object value) {
		if(value == null)
		{
			for(Entry<K, V> kv:records)
				if(kv.getValue() == null)
					return true;
		}
		else
		{
			for(Entry<K, V> kv:records)
				if(value.equals(kv.getValue()))
					return true;
		}
		
		return false;
	}

	@Override
	public V get(Object key)
	{
		if(key == null)
		{
			for(Entry<K, V> kv:records)
				if(kv.getKey() == null)
					return kv.getValue();
		}
		else
		{
			for(Entry<K, V> kv:records)
				if(key.equals(kv.getKey()))
					return kv.getValue();
		}
	
		return null;
	}

	@Override
	public V put(K key, V value)
	{
		records.add(new KeyVal<>(key, value));
		return null;
	}

	@Override
	public V remove(Object key)
	{
		if(key == null)
		{
			for(Entry<K, V> kv:records)
				if(kv.getKey() == null)
				{
					V ret = kv.getValue();
					records.remove(kv);
					return ret;
				}
		}
		else
		{
			for(Entry<K, V> kv:records)
				if(key.equals(kv.getKey()))
				{
					V ret = kv.getValue();
					records.remove(kv);
					return ret;
				}
		}
		
		return null;
	}

	@Override
	public void putAll(Map<? extends K, ? extends V> m)
	{
		for(Entry<? extends K, ? extends V> kv:m.entrySet())
			records.add(new KeyVal(kv.getKey(), kv.getValue()));
	}

	@Override
	public void clear()
	{
		records.clear();
	}

	@Override
	public Set<K> keySet()
	{
		ArrayListSeemsSet<K> keys = new ArrayListSeemsSet<>();
		for(Entry<K, V> kv:records)
			keys.add(kv.getKey());
		
		return keys;
	}

	@Override
	public Collection<V> values()
	{
		ArrayList<V> vals = new ArrayList<>();
		for(Entry<K, V> kv:records)
			vals.add(kv.getValue());
		
		return vals;
	}

	@Override
	public ArrayListSeemsSet<java.util.Map.Entry<K, V>> entrySet()
	{
		return records;
	}
	
	public String toString()
	{
		return MapTools.toStringMultiline(this);
	}
	
	public BulkTransitMap<K, V> clone()
	{
		BulkTransitMap<K, V> ret = new BulkTransitMap<>();
		ret.records.addAll(records);
		return ret;
	}
}