view src/treecms/tree/id/IncrementalID.java @ 25:c1e7ec6b3d44

commit
author Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp>
date Tue, 12 Jul 2011 14:39:35 +0900
parents
children
line wrap: on
line source

package treecms.tree.id;

import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;

import treecms.api.NodeID;

public class IncrementalID implements NodeID
{
	private final AtomicLong m_counter;
	private final String m_fid;
	private final long m_version;
	
	public IncrementalID(String _fid)
	{
		this(_fid,new AtomicLong(0));
	}
	
	private IncrementalID(String _fid,AtomicLong _counter)
	{
		m_fid = _fid;
		m_counter = _counter;
		m_version = _counter.getAndIncrement();
	}
	
	@Override
	public NodeID create()
	{
		String fid = UUID.randomUUID().toString();
		IncrementalID newID = new IncrementalID(fid);
		return newID;
	}

	@Override
	public NodeID update()
	{
		IncrementalID newID = new IncrementalID(m_fid,m_counter);
		return newID;
	}

	@Override
	public String getFamilyID()
	{
		return m_fid;
	}

	@Override
	public String getVersion()
	{
		return Long.toHexString(m_counter.get());
	}
	
	@Override
	public boolean equals(Object _obj)
	{
		if(this == _obj){
			return true;
		}
		
		if(_obj instanceof IncrementalID){
			IncrementalID id = (IncrementalID)_obj;
			if(id.m_version == m_version && id.m_fid.equals(m_fid)){
				return true;
			}
		}
		return false;
	}
	
	@Override
	public String toString()
	{
		return m_fid + "@" + Long.toHexString(m_version);
	}

	@Override
	public boolean isFamily(NodeID _id)
	{
		return m_fid.equals(_id.getFamilyID());
	}

}