package it.mice.voila.runtime.entity;

import java.io.Serializable;

import org.pojomatic.diff.Differences;

/**
 * Created by IntelliJ IDEA.
 * User: zzy9v4
 * Date: May 23, 2006
 * Time: 3:59:31 PM
 * To change this template use File | Settings | File Templates.
 */
public interface Entity extends CoreEntity, Cloneable {
    /**
     *
     */
    boolean isNewEntity();

    /**
     *
     */
    boolean isLazyEntity();

    /**
     *
     */
    boolean isLoadedEntity();

    /**
     *
     */
    boolean isChangedEntity();

    /**
     *
     */
    boolean isDeletedEntity();

    /**
     * Returns the internalEntityState.
     *
     * @return int
     */
    byte getInternalEntityState();

    /**
     *
     */
    void setInternalEntityStateToNew();

    /**
     *
     */
    void setInternalEntityStateToLoaded();

    /**
     *
     */
    void setInternalEntityStateToChanged();

    /**
     *
     */
    void setInternalEntityStateToLazy();

    /**
     *
     */
    void setInternalEntityStateToDeleted();

    void setInternalEntityState(byte internalState);

    boolean isNewPkFilledEntity(Entity entity);

    void setInternalEntityStateToChangedIfLoaded();

    boolean isLazyPkFilledEntity(Entity entity);

    boolean isNewOrLazyEntity();

	void setChecked(boolean checked);
	
	boolean isChecked();

	/* (non-Javadoc)
	 * @see java.lang.Object#clone()
	 */
	public Object clone() throws CloneNotSupportedException;

	public String getObjectTitle();

	public Serializable getEntityId();

	public String getEntityStateDump();
	public void setEntityStateDump(String entityStateDump);

	Differences diff(Entity theEntity);
}
