JavaDataStorage.java

package eu.javaexperience.datastorage.javaImpl;

import java.util.HashMap;
import java.util.Map;

import eu.javaexperience.datastorage.DataTransaction;
import eu.javaexperience.datastorage.DataStorage;
import eu.javaexperience.interfaces.simple.SimpleGetFactory;
import eu.javaexperience.interfaces.simple.getBy.GetBy1;
import eu.javaexperience.interfaces.simple.getBy.GetByTools;

public class JavaDataStorage implements DataStorage
{
	protected final Map<String, Map<String, Object>> root;
	protected final GetBy1<Map<String, Object>, String> newMap;
	
	public JavaDataStorage(Map<String, Map<String, Object>> root, GetBy1<Map<String, Object>, String> creator)
	{
		this.root = root;
		this.newMap = creator;
	}
	
	public static JavaDataStorage createDefault()
	{
		return new JavaDataStorage(new HashMap(), (GetBy1)GetByTools.wrapSimpleGet(SimpleGetFactory.getHashMapFactory()));
	}
	
	public Map<String, Map<String, Object>> getBackendStorage()
	{
		return root;
	}
	
	@Override
	public DataTransaction startTransaction(String key)
	{
		synchronized (this)
		{
			Map<String, Object> ret = root.get(key);
			if(null == ret)
			{
				root.put(key, ret = newMap.getBy(key)); 
			}
			
			return new JavaDataTransaction(ret);
		}
	}
}