/**
 * 
 */
package org.msh.tb.sync;

/**
 * Store temporarily in memory the IDs of the client and server, and indicates
 * if the server ID was generated in the current context
 * 
 * @author Ricardo Memoria
 *
 */
public class EntityKey {

	public enum EntityKeyAction {	
		UPDATED,		// the entity changed in the client side was updated in the server side
		CLI_DELETED, 	// the entity deleted in the client side was deleted in the server side
		SRV_DELETED		// the entity was deleted in the server side, and must be deleted in the client side too 
	};
	
	private Class entityClass;
	private String entityName;
	private int clientId;
	private Integer serverId;
	private boolean newServerId;
	private EntityKeyAction action;

	public EntityKey(){
		super();
	}
	
	/**
	 * Default constructor
	 * @param entityClass
	 * @param serverId
	 */
	public EntityKey(Class entityClass, Integer serverId) {
		super();
		this.entityClass = entityClass;
		this.serverId = serverId;
		this.entityName = entityClass != null? entityClass.getSimpleName(): null;
		newServerId = serverId == null;
	}
	
	/**
	 * Default constructor
	 * @param clientId
	 * @param serverId
	 */
	public EntityKey(Class entityClass, int clientId, Integer serverId) {
		super();
		this.entityClass = entityClass;
		this.clientId = clientId;
		this.serverId = serverId;
		this.entityName = entityClass != null? entityClass.getSimpleName(): null;
		newServerId = serverId == null;
	}

	/**
	 * Return the entity class name
	 * @return String value
	 */
	public String getEntityName() {
		return entityName;
	}
	
	public void setEntityName(String name) {
		entityName = name;
	}
	
	/**
	 * @return the clientId
	 */
	public int getClientId() {
		return clientId;
	}
	/**
	 * @param clientId the clientId to set
	 */
	public void setClientId(int clientId) {
		this.clientId = clientId;
	}
	/**
	 * @return the serverId
	 */
	public Integer getServerId() {
		return serverId;
	}
	/**
	 * @param serverId the serverId to set
	 */
	public void setServerId(Integer serverId) {
		this.serverId = serverId;
	}
	/**
	 * @return the newServerId
	 */
	public boolean isNewServerId() {
		return newServerId;
	}
	/**
	 * @param newServerId the newServerId to set
	 */
	public void setNewServerId(boolean newServerId) {
		this.newServerId = newServerId;
	}

	/**
	 * @return the entityClass
	 */
	public Class getEntityClass() {
		return entityClass;
	}

	/**
	 * @param entityClass the entityClass to set
	 */
	public void setEntityClass(Class entityClass) {
		this.entityClass = entityClass;
	}

	/**
	 * @return the action
	 */
	public EntityKeyAction getAction() {
		return action;
	}

	/**
	 * @param action the action to set
	 */
	public void setAction(EntityKeyAction action) {
		this.action = action;
	}
	
}
