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

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

package jadex.rules.state.javaimpl;

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

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

/**
 *  Id generator using easy to read names and numbers.
 */
public class OAVNameIdGenerator implements IOAVIdGenerator
{
	//-------- attributes -------- 
	
	/** The id counter map (type -> count). */
	protected Map	counters;
	
	/** The flag indicating if content ids should be produced. */
	protected boolean iscontentid;
	
	//-------- constructors --------

	/**
	 *  Create a new id generator.
	 */
	public OAVNameIdGenerator()
	{
		this(false);
	}
	
	/**
	 *  Create a new id generator.
	 */
	public OAVNameIdGenerator(boolean iscontentid)
	{
		this.counters	= new HashMap();
		this.iscontentid = iscontentid;
	}
	
	/**
	 *  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	= 1;
		if(counters.containsKey(type))
		{
			start	= ((Long)counters.get(type)).longValue();
		}
		
		long	id	= start;
		Object ret = iscontentid? new OAVContentId(type, id++): new OAVObjectId(type, id++);

		if(state.containsObject(ret))
			System.out.println("Warning, id overflow.");
		
		while(state.containsObject(ret) && id!=start)
		{
			ret = new OAVObjectId(/*state,*/ type, id++);
		}
		
		if(state.containsObject(ret))
			throw new RuntimeException("No free id available.");
		
		counters.put(type, Long.valueOf(id));
		
		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;
	}
		
	//-------- helper classes --------
	
	/**
	 *  An id for an OAV object.
	 */
	private static class OAVObjectId
	{
		//-------- attributes --------
		
		/** The state. */
//		protected IOAVState state;
		
		/** The object type. */
		protected OAVObjectType type;

		/** The id value. */
		protected long	id;
		
		//-------- constructors --------
		
		/**
		 *  Create an OAV object id with the given id value.
		 *  @param id The id value.
		 */
		public OAVObjectId(/*IOAVState state,*/ OAVObjectType type, long id)
		{
//			this.state	= state;
			this.type	= type;
			this.id	= id;
		}
	
		//-------- methods --------
		
		/**
		 *  Create a string representation of this OAV object id.
		 */
		public String	toString()
		{
			return type.getName()+"_"+id;
		}
		
		/**
		 *  Test if two object are equal.
		 *  @param object The object to compare to.
		 * /
		public boolean equals(Object object)
		{
			boolean	ret	= object instanceof OAVObjectId;
			if(ret)
			{
				OAVObjectId	other	= (OAVObjectId)object;
				ret	= this.id==other.id
					&& this.state.equals(other.state)
					&& this.type.equals(((OAVObjectId)object).type);
			}
			return ret;
		}*/
	
		/**
		 *  Return the hashcode for this id.
		 *  @return The hashcode for this id.
		 * /
		public int	hashCode()
		{
			int	ret	= 31 + (int)(id ^ (id >>> 32));
			ret	= 31 * ret + type.hashCode();
			return ret;
		}*/
	}
	
	/**
	 *  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(OAVObjectType type, long id)
		{
			super(type, id);
			this.content = new LinkedHashMap();
		}
	
		//-------- methods --------
		
		/**
		 *  Get the content.
		 *  @return The content.
		 */
		public Map getContent()
		{
			return content;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy