/*******************************************************************************
 * Copyright (c) 2002, 2003 Object Factory Inc.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *		Object Factory Inc. - Initial implementation
 *******************************************************************************/
package org.eclipse.ant.internal.ui.dtd.schema;

import java.util.HashMap;

import org.eclipse.ant.internal.ui.dtd.IElement;
import org.eclipse.ant.internal.ui.dtd.ISchema;

/**
 * This is a very simple schema suitable for DTDs.
 * Once constructed, a schema is immutable and could be
 * used by multiple threads. However, since in general
 * the schema will reflect the internal DTD subset,
 * re-use for multiple documents is problematic.
 * @author Bob Foster
 */
public class Schema implements ISchema {
	private HashMap fElementMap = new HashMap();
	private Exception fErrorException;
	/**
	 * @see org.eclipse.ant.internal.ui.dtd.ISchema#getElement(java.lang.String)
	 */
	public IElement getElement(String qname) {
		return (IElement) fElementMap.get(qname);
	}

	/**
	 * @see org.eclipse.ant.internal.ui.dtd.ISchema#getElements()
	 */
	public IElement[] getElements() {
		return (IElement[]) fElementMap.entrySet().toArray(new IElement[fElementMap.entrySet().size()]);
	}
	
	/**
	 * Add a visible element to the schema.
	 * @param element Element to add.
	 */
	public void addElement(IElement element) {
		fElementMap.put(element.getName(), element);
	}
	
	/**
	 * Sets the exception thrown by then parser when the schema was built.
	 * Note that the exception does not necessarily mean the schema is incomplete.
	 * 
	 * @param e the Exception
	 */
	public void setErrorException(Exception e) {
		fErrorException = e;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.ant.internal.ui.dtd.ISchema#getErrorException()
	 */
	public Exception getErrorException() {
		return fErrorException;
	}
}
