/* DOMException.java


	Purpose: 
	Description: 
	History:
	2001/09/28 14:04:16, Create, Tom M. Yeh.

Copyright (C) 2001 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
	This program is distributed under LGPL Version 2.1 in the hope that
	it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.idom;

import org.xml.sax.Locator;

import org.zkoss.xml.Locators;

/**
 * Denotes an operation is not supported.
 *
 * @author tomyeh
 */
public class DOMException extends org.w3c.dom.DOMException {
	protected Locator _loc;

	public DOMException(short code) {
		super(code, message(code, null, null));
	}
	public DOMException(short code, String extraMsg) {
		super(code, message(code, extraMsg, null));
	}
	public DOMException(short code, Locator loc) {
		super(code, message(code, null, loc));
		_loc = loc;
	}
	public DOMException(short code, String extraMsg, Locator loc) {
		super(code, message(code, extraMsg, loc));
		_loc = loc;
	}

	private static final String
	message(short code, String extraMsg, Locator loc) {
		StringBuffer sb = new StringBuffer(64);
		switch (code) {
		case HIERARCHY_REQUEST_ERR:
			sb.append("Hierarchy request error");
			break;
		case INVALID_ACCESS_ERR:
			sb.append("Invalid access to the underly object");
			break;
		case INVALID_CHARACTER_ERR:
			sb.append("Invalid character(s)");
			break;
		case NAMESPACE_ERR:
			sb.append("Namespace error");
			break;
		case NO_DATA_ALLOWED_ERR:
			sb.append("Data not allowed");
			break;
		case NO_MODIFICATION_ALLOWED_ERR:
			sb.append("No modification allowed");
			break;
		case NOT_FOUND_ERR:
			sb.append("Not found");
			break;
		case NOT_SUPPORTED_ERR:
			sb.append("Not supported yet");
			break;
		case SYNTAX_ERR:
			sb.append("Syntax error");
			break;
		default:
			sb.append("Unknown error");
			break;
		}
		if (extraMsg != null)
			sb.append(": ").append(extraMsg);

		return Locators.format(sb.toString(), loc);
	}
}
