package sitris;


import java.rmi.RemoteException;
import javax.ejb.*;

import sitris.Resource;
import sitris.ResourcePK;

/**
 * This Entity EJB represents a RDF Resource
 @ejb:entity-cmp
 @ejb:ejb-name sitris/Resource
 @ejb:jndi-name ejb/sitris/Resource
 @ejb:finder java.util.Collection findAll()
 @ejb:security-role-ref admin Administrator
 @ejb:permission Teller
 @ejb:transaction Required
 @ejb:use-soft-locking
 @ejb:pk-extends sitris.RemoteNodePK
 ejb:data-object container false
 @ejb:remote-extends RemoteNode
 @jboss:table-name resource
 @jboss:create-table true
 @jboss:remove-table true
 @jboss:tuned-updates true
 @jboss:read-only false
 
  @version 0.01
  @author <a href="mailto:volz@aifb.uni-karlsruhe.de">Raphael Volz</a>
*/
public abstract class ResourceBean {

	protected transient EntityContext ctx;

	public void setEntityContext(javax.ejb.EntityContext ctx)
	{
		this.ctx = ctx;
	}

	protected EntityContext getEntityContext() {
		return ctx;
	}

	// --------------------------------------------------


	/**
		Returns the uri of this resource
		@ejb:remote-method
		@ejb:persistent-field
		@ejb:transaction Supports
		@jboss:column-name uri
		@jboss:sql-type VARCHAR(255)
	*/
	public String getUri() {
		return uri;
	}
	public abstract void setUri(String uri);

	/**
		Returns the label of this resource
		@ejb:remote-method
		@ejb:transaction Supports
	*/
	public String getLabel() {
		return getUri();
	}

	public String uri;
	public int hash;



	private void setup(String uri) {
		setUri(uri);
		setHash(uri.hashCode());
	}

	/**
	  Primary Key of this Resource
	  @ejb:pk-field
	  @ejb:persistent-field
	  @jboss:column-name hash
	*/
	public abstract int getHash();
	public abstract void setHash(int hash);

	public ResourcePK ejbCreate(String uri) {
		setup(uri);
		return null;
	}

	public void ejbPostCreate(String uri) throws CreateException {}

	/**
		Creates an anonymous Resource
	*/
	public ResourcePK ejbCreate() throws CreateException {
		try {
			org.w3c.rdf.model.NodeFactory factory = new org.w3c.rdf.implementation.model.NodeFactoryImpl();
			org.w3c.rdf.model.Resource res = factory.createUniqueResource();
			setup(res.getURI());
		} catch (org.w3c.rdf.model.ModelException e) {
			throw new CreateException ();
		}
		return null;
	}

	public void ejbPostCreate() throws CreateException {}


}
