package com.tandbergtv.watchpoint.pmm.title;

/**
 * Value object to hold a metadata field's title name, name, and value.
 * 
 * @author Raj Prakash
 */
public class MetadataField {
	private String titleName, name, value;
	
	/**
	 * Constructor.
	 */
	public MetadataField(String titleName, String name, String value) {
		this.titleName = titleName;
		this.name = name;
		this.value = value;
	}
	
	/**
	 * Constructor.
	 */
	public MetadataField(String name, String value) {
		this.name = name;
		this.value = value;
	}

	/**
	 * @return the titleName
	 */
	public String getTitleName() {
		return titleName;
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @return the value
	 */
	public String getValue() {
		return value;
	}
	
	@Override
	public boolean equals(Object o) {
		if(this == o)
			return true;
		
		if(!(o instanceof MetadataField))
			return false;
		
		MetadataField another = (MetadataField) o;
		
		return (isEqual(titleName, another.titleName) &&
				isEqual(name, another.name) &&
				isEqual(value, another.value));
	}
	
	private boolean isEqual(String s1, String s2) {
		return (s1 == null) ? s2 == null : s1.equals(s2);
	}
	
	@Override
	public int hashCode() {
		int h1 = (titleName != null) ? titleName.hashCode() : 0;
		int h2 = (name != null) ? name.hashCode() : 0;
		int h3 = (value != null) ? value.hashCode() : 0;
		
		return (h1 + h2 + h3 + 7) * 13;
	}
	
	@Override
	public String toString() {
		return titleName + " | " + name + " | " + value;
	}
}
