/*******************************************************************************
 * Copyright (c) 2001, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Jens Lukowski/Innoopract - initial renaming/restructuring
 *     
 *******************************************************************************/
package org.eclipse.wst.sse.core.internal.text.rules;




/**
 * Similar jace TypedRegion, but had to subclass our version which allowed
 * length to be set.
 */
public class SimpleStructuredTypedRegion extends SimpleStructuredRegion implements IStructuredTypedRegion {

	/** The region's type */
	private String fType;

	/**
	 * Creates a typed region based on the given specification.
	 * 
	 * @param offset
	 *            the region's offset
	 * @param length
	 *            the region's length
	 * @param type
	 *            the region's type
	 */
	public SimpleStructuredTypedRegion(int offset, int length, String type) {
		super(offset, length);
		fType = type;
	}

	/**
	 * Two typed positions are equal if they have the same offset, length, and
	 * type.
	 * 
	 * @see Object#equals
	 */
	public boolean equals(Object o) {
		if (o instanceof SimpleStructuredTypedRegion) {
			SimpleStructuredTypedRegion r = (SimpleStructuredTypedRegion) o;
			return super.equals(r) && ((fType == null && r.getType() == null) || fType.equals(r.getType()));
		}
		return false;
	}

	/*
	 * @see ITypedRegion#getType()
	 */
	public String getType() {
		return fType;
	}

	/*
	 * @see Object#hashCode
	 */
	public int hashCode() {
		int type = fType == null ? 0 : fType.hashCode();
		return super.hashCode() | type;
	}

	public void setType(String type) {
		fType = type;
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		StringBuffer s = new StringBuffer();
		s.append(getOffset());
		s.append(":"); //$NON-NLS-1$
		s.append(getLength());
		s.append(" - "); //$NON-NLS-1$
		s.append(getType());
		return s.toString();
	}

}
