/*******************************************************************************
* Copyright (c) 2004-2009 Gabor Bergmann and Daniel Varro
* 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:
* Gabor Bergmann - initial API and implementation
*******************************************************************************/
package org.eclipse.incquery.runtime.rete.construction;
/**
* A problem has occured during the construction of the RETE net.
*
* @author Bergmann Gábor
*
*/
public class RetePatternBuildException extends Exception {
/**
*
*/
private static final long serialVersionUID = -2424538150959407887L;
private Object patternDescription;
private String templateMessage;
private String[] templateContext;
private String shortMessage;
/**
* @param message
* The template of the exception message
* @param context
* The data elements to be used to instantiate the template. Can be null if no context parameter is
* defined
* @param patternDescription
* the PatternDescription where the exception occurred
*/
public RetePatternBuildException(String message, String[] context, String shortMessage, Object patternDescription) {
super(bind(message, context));
this.patternDescription = patternDescription;
this.templateMessage = message;
this.templateContext = context;
this.shortMessage = shortMessage;
}
/**
* @param message
* The template of the exception message
* @param context
* The data elements to be used to instantiate the template. Can be null if no context parameter is
* defined
* @param patternDescription
* the PatternDescription where the exception occurred
*/
public RetePatternBuildException(String message, String[] context, String shortMessage, Object patternDescription,
Throwable cause) {
super(bind(message, context), cause);
this.patternDescription = patternDescription;
this.templateMessage = message;
this.templateContext = context;
this.shortMessage = shortMessage;
}
public Object getPatternDescription() {
return patternDescription;
}
public void setPatternDescription(Object patternDescription) {
this.patternDescription = patternDescription;
}
public String getTemplateMessage() {
return templateMessage;
}
public String[] getTemplateContext() {
return templateContext;
}
/**
* Binding the '{n}' (n = 1..N) strings to contextual conditions in 'context'
*
* @param context
* : array of context-sensitive Strings
*/
private static String bind(String message, String[] context) {
String additionalError = "";
if (context == null)
return message;
for (int i = 0; i < context.length; i++) {
message = message.replace("{" + (i + 1) + "}", context[i] != null ? context[i] : "<<null>>");
// //error handling in case there is a null value in the context array
// if(context[i] == null)
// additionalError = "[INTERNAL ERROR] A name value in the GTASM model is null. \n\n";
}
return additionalError + message;
}
/**
* @return the shortMessage
*/
public String getShortMessage() {
return shortMessage;
}
}