package com.acme.actors.model;

import com.acme.tools.StringUtil;

public class Actor extends DataObject {
	public static final String FLD_ACTOR_FIRSTNAME="Firstname";
	public static final String FLD_ACTOR_LASTNAME="Lastname";
	public static final String FLD_ACTOR_COMMENT="Comment";
	
	private String m_id;
	private String m_firstName;
	private String m_lastName;
	private String m_comment;
	private int m_hashCode;
	
	public Actor() {}

	public Actor(Actor templateActor) {
		setId(templateActor.getId());
		setFirstname(templateActor.getFirstname());
		setLastname(templateActor.getLastname());
		setComment(templateActor.getComment());
		resetChanges();
	}
	
	public String getId() {
		return m_id;
	}

	public void setId(String newId) {
		m_id=newId;
		
		recalcHashcode();
	}

	private void recalcHashcode() {
		m_hashCode=("Actor:"+m_id).hashCode();
	}

	public String getFirstname() {
		return m_firstName;
	}

	public void setFirstname(String newFirstName) {
		if (!StringUtil.isEqual(m_firstName, newFirstName)) {
			ObjectPropertyChangeEvent evt=new ObjectPropertyChangeEvent(FLD_ACTOR_FIRSTNAME, m_firstName, newFirstName);
			m_firstName=newFirstName;
			addChangeEvent(evt);
		}
	}

	public String getLastname() {
		return m_lastName;
	}

	public void setLastname(String newLastname) {
		if (!StringUtil.isEqual(m_lastName, newLastname)) {
			ObjectPropertyChangeEvent evt=new ObjectPropertyChangeEvent(FLD_ACTOR_LASTNAME, m_lastName, newLastname);
			m_lastName=newLastname;
			addChangeEvent(evt);
		}
	}

	public String getComment() {
		return m_comment;
	}

	public void setComment(String newComment) {
		if (!StringUtil.isEqual(m_comment, newComment)) {
			ObjectPropertyChangeEvent evt=new ObjectPropertyChangeEvent(FLD_ACTOR_COMMENT, m_comment, newComment);
			m_comment=newComment;
			addChangeEvent(evt);
		}
	}
	
	public boolean equals(Object o) {
		if (o instanceof Actor) {
			return StringUtil.isEqual(m_id, ((Actor)o).getId());
		}
		else
			return false;
	}
	
	public int hashCode() {
		return m_hashCode;
	}
	
	public String toString() {
		return "Actor: "+getLastname()+" (id "+getId()+")";
	}

}