/*******************************************************************************
 * Copyright (c) 2005, 2007 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 - Initial API and implementation
 *******************************************************************************/

package org.eclipse.ocl;

import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.ocl.internal.OCLPlugin;
import org.eclipse.ocl.internal.OCLStatusCodes;


/**
 * Exception indicating a failure to parse or validate OCL constraints.
 * Since the 1.2 release, the parser exception includes also a {@link Diagnostic}
 * carrying details of the one or more parse problems.
 * 
 * @author Christian Vogt (cvogt)
 */
public class ParserException extends Exception {

	private static final long serialVersionUID = -4457105668114213310L;

	private final Diagnostic diagnostic;
	
	/**
	 * Initializes me with a user-friendly message describing the nature of
     * the parse failure.
	 * 
	 * @param msg the exception message
	 */
	public ParserException(String msg) {
		super(msg);
		
		diagnostic = createDiagnostic(msg);
	}

    /**
     * Initializes me with a message and an exception that caused the parse
     * failure.
     * 
     * @param msg my user-friendly message
     * @param cause the cause of the parse failure
     */
	public ParserException(String msg, Throwable cause) {
		super(msg, cause);
		
		diagnostic = createDiagnostic(msg);
	}
	
	/**
	 * Initializes me with a diagnostic obtained from a problem handler.
	 * 
	 * @param problem the diagnostic
	 * 
	 * @since 1.2
	 */
	public ParserException(Diagnostic problem) {
		super(problem.getMessage());
		
		this.diagnostic = problem;
	}
	
	/**
	 * Obtains the diagnostic describing one or more parse problems that I
	 * signal.
	 * 
	 * @return the diagnostic, which may be a chain of multiple problems or
	 * even just an "OK" diagnostic indicating an absence of parse problems
	 * 
	 * @since 1.2
	 */
	public Diagnostic getDiagnostic() {
		return diagnostic;
	}
	
	/**
	 * Creates a default diagnostic for construction of an exception with just
	 * a message.
	 * 
	 * @param message the message
	 * @return a diagnostic
	 */
	private Diagnostic createDiagnostic(String message) {
		return new BasicDiagnostic(Diagnostic.ERROR, OCLPlugin.getPluginId(),
			OCLStatusCodes.ERROR, message, null);
	}
}
