package com.k_int.aggr2.mimsy.data.hdo;

import java.io.Writer;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import com.k_int.aggr2.mimsy.data.util.MimsyHelper;
import com.k_int.aggr2.mimsy.data.util.SerializationException;

@Entity
@Table(name="MIMSY_EXCAVATION")
public class ExcavationHDO // implements java.io.Serializable 
{

	private static final long serialVersionUID = 1L;
	private Long id;
	private String organisation;
	private String role;
	private String start;
	private String end;
	
	public ExcavationHDO()
	{;}
	
	
	@Id
	@Column(name="ID")
	@GeneratedValue(strategy=GenerationType.AUTO)
	public Long getId()
	{
		return id;
	}
	
	protected void setId(Long id)
	{
		this.id = id;
	}

	@Column(name="ORGANISATION")
	public String getOrganisation() { // TODO - should organisation be here and in site?
		return organisation;
	}

	public void setOrganisation(String organisation) {
		this.organisation = organisation;
	}

	@Column(name="ROLE")
	public String getRole() {
		return role;
	}

	public void setRole(String role) {
		this.role = role;
	}

	@Column(name="EX_START")
	public String getStart() {
		return start;
	}

	public void setStart(String start) {
		this.start = start;
	}

	@Column(name="EX_END")
	public String getEnd() {
		return end;
	}

	public void setEnd(String end) {
		this.end = end;
	}

	@Transient
	public int hashCode()
	{
		return toString().hashCode();
	}
	
	@Transient
	public boolean equals(Object o)
	{
		boolean retval=false;
		if(o instanceof ExcavationHDO)
		{
			retval = (o.toString()).equals(this.toString());
		}
			  
		return retval;  
	}
	
	@Transient
	public String toString()
	{
		StringBuilder builder = new StringBuilder();
		
		if(organisation!=null)
			builder.append(organisation);
		
		if(role!=null)
			builder.append(role);
		
		if(start!=null)
			builder.append(start);
		
		if(end!=null)
			builder.append(end);
		
		return builder.toString();
	}
	
	@Transient
	public void toRdfXMLElement(Writer writer) throws SerializationException
    {
		try
		{          
			writer.write("<mo:excavationLink>");
			writer.write("<mo:excavationRole>");
			if(this.getRole()==null)
            	writer.write("undefined");
    		else	                	
            	writer.write(MimsyHelper.encodeForXml(this.getRole()));
            writer.write("</mo:excavationRole>");
			
            writer.write("<mo:excavationOrg>");
            if(this.getOrganisation()==null)
            	writer.write("undefined");
    		else	                	
            	writer.write(MimsyHelper.encodeForXml(this.getOrganisation()));
            writer.write("</mo:excavationOrg>");
			
            writer.write("<mo:excavationStart>");
            if(this.getStart()==null)
            	writer.write("undefined");
    		else	                	
            	writer.write(MimsyHelper.encodeForXml(this.getStart()));
            writer.write("</mo:excavationStart>");
            
            writer.write("<mo:excavationEnd>");
            if(this.getEnd()==null)
            	writer.write("undefined");
    		else	                	
            	writer.write(MimsyHelper.encodeForXml(this.getEnd()));
            writer.write("</mo:excavationEnd>");
			
			writer.write("</mo:excavationLink>");
	        }
	        catch(Exception ex)
	        {
	            throw new SerializationException(ex);
	        }
    }
}
