view src/treecms/memory/OnMemoryForest.java @ 4:f5ed85be5640

finished treecms.cassandra.v1 implementation (not tested yet)
author shoshi
date Thu, 24 Feb 2011 21:30:18 +0900
parents 5fa718b63cd5
children 12604eb6b615
line wrap: on
line source

package treecms.memory;

import java.util.Random;

import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import treecms.api.Forest;
import treecms.api.Node;
import treecms.api.NodeData;
import treecms.api.NodeID;
import treecms.tree.id.RandomNodeID;

public class OnMemoryForest implements Forest
{
	ConcurrentHashMap<NodeID,OnMemoryNode> m_table;
	
	public OnMemoryForest()
	{
		m_table = new ConcurrentHashMap<NodeID,OnMemoryNode>();
	}
	
	public OnMemoryNode createNode(NodeID _id,NodeData _newData)
	{
		NodeID newID = (_id != null) ? _id : createID();
		NodeData newData = (_newData != null) ? _newData : new NodeData();
		OnMemoryNode newNode = new OnMemoryNode(this,newID,newData);
		m_table.put(newID,newNode);
		return newNode;
	}
	
	NodeID createID()
	{
		return new RandomNodeIDImpl(null);
	}

	@Override
	public Node get(NodeID _id)
	{
		return m_table.get(_id);
	}
	
	@Override
	public Node create()
	{
		return createNode(null,null);
	}
	
	class RandomNodeIDImpl extends RandomNodeID
	{
		String m_uuid;
		long m_version;
		
		public RandomNodeIDImpl(String _uuid)
		{
			if(_uuid != null){
			 	m_uuid = _uuid;
			}else{
				m_uuid = UUID.randomUUID().toString();
			}
			m_version = (new Random()).nextLong();
		}

		@Override
		public NodeID create()
		{
			return new RandomNodeIDImpl(null);
		}

		@Override
		public NodeID update()
		{
			return new RandomNodeIDImpl(m_uuid);
		}

		@Override
		public String getUUID()
		{
			return m_uuid;
		}

		@Override
		public String getVersion()
		{
			return Long.toHexString(m_version);
		}
	}
}