view src/treecms/proto/id/IncrementalNodeID.java @ 27:45881237e777

commit
author ShoshiTAMAKI
date Sun, 07 Nov 2010 14:07:03 +0900
parents 9b91329e8a04
children c0a0fa870e6e
line wrap: on
line source

package treecms.proto.id;

import treecms.proto.api.NodeID;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;

public class IncrementalNodeID implements NodeID
{
	private String m_inheritedID;
	private final long m_version;
	
	private AtomicLong m_tip;
	
	public IncrementalNodeID()
	{
		m_inheritedID = UUID.randomUUID().toString();
		m_tip = new AtomicLong();
		m_version = m_tip.getAndIncrement();
	}
	
	private IncrementalNodeID(String _inheritedID,AtomicLong _version)
	{
		m_inheritedID = _inheritedID;
		m_version = _version.getAndIncrement();
		m_tip = _version;
	}
	
	public NodeID update()
	{
		return new IncrementalNodeID(m_inheritedID,m_tip);
	}
	
	@Override
	public int compare(NodeID _target)
	{
		// TODO Auto-generated method stub
		if(!(_target instanceof IncrementalNodeID)){
			throw new IllegalArgumentException("_target is not instance of NodeIDImpl");
		}
		
		IncrementalNodeID target = (IncrementalNodeID)_target;
		if(m_inheritedID.equals(target.m_inheritedID)){
			long diff = m_version - target.m_version;
			if(diff == 0){
				return 0;
			}else if(diff < 0){
				return -1;
			}else{
				return 1;
			}
		}
		return -2;
	}
	
	@Override
	public String toString()
	{
		return m_inheritedID + "@" + m_version;
	}
}