package ckelling.baukasten;

import java.util.*;

/**
 *  Datenklasse für RTFTextArea
 *
 *  @param u Der Original-Text inklusive Formatanweisungen
 *  @param p Der Text nach dem Parsen
 *  @param l Die einzelnen Zeilen des umgebrochenen Textes
 *  @param attribs Formatinformationen zu jedem Element von l
 *
 *  @author   Carsten Kelling
 *  @version  1.0.0, 29.06.97
 */ 
public class RTFParsedText
{
	public String	unwrappedText;
	public String	parsedText;
	public Vector	lines;
	public Vector	attribs;
	private boolean hashCodeHasBeenCalculated;
	private int hashCode;

	public RTFParsedText(String u, String p, Vector l, Vector a)
	{
		unwrappedText = u;
		parsedText = p;
		lines = l;
		attribs = a;
		hashCodeHasBeenCalculated = false;
		hashCode = 0;
	}
	
	public int hashCode()
	{
		if (! hashCodeHasBeenCalculated)
		// RTFParsedText aendert sich nie, deswegen braucht sein hashCode
		// nur einmal berechnet zu werden.
		{
			hashCode = unwrappedText.hashCode();
			hashCodeHasBeenCalculated = true;
		}
		
		return hashCode;
	}
	
	public boolean equals(Object o)
	{
		if ((o != null) && (o instanceof RTFParsedText))
		{
			RTFParsedText other = (RTFParsedText) o;
			if (! unwrappedText.equals(other.unwrappedText))
				return false;
			else if (! parsedText.equals(other.parsedText))
				return false;
			else if (! lines.equals(other.lines))
				return false;
			else if (! attribs.equals(other.attribs))
				return false;
			else
				return true;
		}
		else
			return false;
	}
}
