All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jadex.rules.state.javaimpl.OAVLongIdGenerator Maven / Gradle / Ivy

package jadex.rules.state.javaimpl;

import java.util.LinkedHashMap;
import java.util.Map;

import jadex.rules.state.IOAVState;
import jadex.rules.state.OAVObjectType;

/**
 *  Id generator based on long values.
 */
public class OAVLongIdGenerator implements IOAVIdGenerator
{
	//-------- attributes --------
	
	/** The id counter. */
	protected long	nextid;
	
	/** The flag indicating if content ids should be produced. */
	protected boolean iscontentid;
		
	//-------- constructor --------
	
	/**
	 *  Create a new id generator.
	 */
	public OAVLongIdGenerator()
	{
		this(false);
	}
	
	/**
	 *  Create a new id generator.
	 */
	public OAVLongIdGenerator(boolean iscontentid)
	{
		nextid = Long.MIN_VALUE;
		this.iscontentid = iscontentid;
	}
	
	//-------- methods --------

	/**
	 *  Create a unique id.
	 *  @param state	The state.
	 *  @param type	The object type.
	 *  @return The new id.
	 */
	public Object	createId(IOAVState state, OAVObjectType type)
	{
		long start = nextid;
		Object ret = iscontentid? new OAVContentId(nextid++): new OAVObjectId(nextid++);

		if(state.containsObject(ret))
			System.out.println("Warning, id overflow.");
		
		while(state.containsObject(ret) && nextid!=start)
			ret = new OAVObjectId(nextid++);
		
		if(state.containsObject(ret))
			throw new RuntimeException("No free id available.");
		
		return ret;
	}
	
	/**
	 *  Test if an object is an id.
	 *  @param state	The state.
	 *  @param type	The object type.
	 *  @return The new id.
	 */
	public boolean	isId(Object id)
	{
		return id!=null && id instanceof OAVObjectId;
	}
		
	/**
	 *  Main for testing.
	 *  @param args
	 */
	public static void main(String[] args)
	{
		IOAVState state = OAVStateFactory.createOAVState(null);
		OAVLongIdGenerator gen = new OAVLongIdGenerator();
		for(long i=0;; i++)
		{
			Object id = gen.createId(state, null);
			if(i%1000000==0)
				System.out.println(i+": "+id);
		}
	}

	//-------- helper classes --------
	
	/**
	 *  An id for an OAV object.
	 */
	private static class OAVObjectId
	{
		//-------- attributes --------
		
		/** The id value. */
		protected long	id;
		
		//-------- constructors --------
		
		/**
		 *  Create an OAV object id with the given id value.
		 *  @param id The id value.
		 */
		public OAVObjectId(long id)
		{
			this.id	= id;
		}
	
		//-------- methods --------
		
		/**
		 *  Create a string representation of this OAV object id.
		 */
		public String	toString()
		{
			return "OAVObjectId("+id+")";
		}
		
		/**
		 *  Test if two id's are equal.
		 *  @param id The OAV object id to compare to.
		 * /
		public boolean equals(Object id)
		{
			return id instanceof OAVObjectId && this.id==((OAVObjectId)id).id;
		}*/
	
		/**
		 *  Return the hashcode for this id.
		 *  @return The hashcode for this id.
		 * /
		public int	hashCode()
		{
			// Taken from java.lang.Long
			// Todo: is this useful?
			return (int)(id ^ (id >>> 32));
		}*/
	}
	
	/**
	 *  An id for an OAV object.
	 */
	private static class OAVContentId extends OAVObjectId implements IOAVContentId
	{
		//-------- attributes --------
		
		/** The content map. */
		protected Map	content;
		
		//-------- constructors --------
		
		/**
		 *  Create an OAV object id with the given id value.
		 *  @param id The id value.
		 */
		public OAVContentId(long id)
		{
			super(id);
			this.content = new LinkedHashMap();
		}
	
		//-------- methods --------
		
		/**
		 *  Get the content.
		 *  @return The content.
		 */
		public Map getContent()
		{
			return content;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy