blob: 36c1beced1c69fa6bb3842e6fbf8bee8e55d27ea [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2018 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.pivot.utilities;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.ocl.pivot.messages.StatusCodes;
import org.eclipse.ocl.pivot.util.PivotPlugin;
/**
* 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) {
this(null, msg);
}
public ParserException(String messageTemplate, Object... bindings) {
this(null, StringUtil.bind(messageTemplate, bindings));
}
/**
* 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(Throwable cause, String msg) {
super(msg, cause);
diagnostic = createDiagnostic(msg);
}
public ParserException(Throwable cause, String messageTemplate, Object... bindings) {
this(cause, StringUtil.bind(messageTemplate, bindings));
}
/**
* Initializes me with a diagnostic obtained from a problem handler.
*
* @param problem the diagnostic
*/
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
*/
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, PivotPlugin.PLUGIN_ID,
StatusCodes.ERROR, message, null);
}
}