package de.unisiegen.tpml.core.exceptions ;
import java.text.MessageFormat ;
import java.util.ArrayList ;
import de.unisiegen.tpml.core.Messages ;
import de.unisiegen.tpml.core.expressions.Attribute ;
import de.unisiegen.tpml.core.expressions.Inherit ;
import de.unisiegen.tpml.core.expressions.Identifier ;
import de.unisiegen.tpml.core.languages.LanguageParserException ;
/**
* This {@link LanguageParserReplaceException} is used, if more than one error
* should be highlighted in the source code view and some {@link Attribute}
* {@link Identifier}s should be replaced.
*
* @author Christian Fehler
* @see LanguageParserException
*/
public final class LanguageParserReplaceException extends
LanguageParserException
{
/**
* The serial version UID.
*/
private static final long serialVersionUID = 2588539895990502861L ;
/**
* Throws a <code>LanguageParserReplaceException</code> if the {@link Inherit}
* consist of {@link Attribute}s with the same {@link Identifier}.
*
* @param pNegativeIdentifiers The input list of negative {@link Identifier}s.
* @param pReplaceIdentifiers The input list of {@link Identifier}s which
* should be replaced.
* @param pReplaceText The new text of the {@link Identifier}s.
*/
public static void throwExceptionBody (
ArrayList < Identifier > pNegativeIdentifiers ,
ArrayList < Identifier > pReplaceIdentifiers , String pReplaceText )
{
String [ ] messageNegative = new String [ pNegativeIdentifiers.size ( ) ] ;
int [ ] startOffsetNegative = new int [ pNegativeIdentifiers.size ( ) ] ;
int [ ] endOffsetNegative = new int [ pNegativeIdentifiers.size ( ) ] ;
for ( int j = 0 ; j < pNegativeIdentifiers.size ( ) ; j ++ )
{
messageNegative [ j ] = MessageFormat.format ( Messages
.getString ( "Parser.20" ) , pNegativeIdentifiers.get ( j ) ) ; //$NON-NLS-1$
startOffsetNegative [ j ] = pNegativeIdentifiers.get ( j )
.getParserStartOffset ( ) ;
endOffsetNegative [ j ] = pNegativeIdentifiers.get ( j )
.getParserEndOffset ( ) ;
}
String [ ] messageReplace = new String [ pReplaceIdentifiers.size ( ) ] ;
int [ ] startOffsetReplace = new int [ pReplaceIdentifiers.size ( ) ] ;
int [ ] endOffsetReplace = new int [ pReplaceIdentifiers.size ( ) ] ;
for ( int j = 0 ; j < pReplaceIdentifiers.size ( ) ; j ++ )
{
messageReplace [ j ] = MessageFormat.format ( Messages
.getString ( "Parser.21" ) , pReplaceIdentifiers.get ( j ) ) ; //$NON-NLS-1$
startOffsetReplace [ j ] = pReplaceIdentifiers.get ( j )
.getParserStartOffset ( ) ;
endOffsetReplace [ j ] = pReplaceIdentifiers.get ( j )
.getParserEndOffset ( ) ;
}
throw new LanguageParserReplaceException ( messageNegative ,
startOffsetNegative , endOffsetNegative , messageReplace ,
startOffsetReplace , endOffsetReplace , pReplaceText ) ;
}
/**
* The array of shown negative {@link Identifier} messages.
*/
private String [ ] messagesNegative ;
/**
* The array of negative {@link Identifier} parser start offsets.
*/
private int [ ] parserStartOffsetNegative ;
/**
* The array of negative {@link Identifier} parser end offsets.
*/
private int [ ] parserEndOffsetNegative ;
/**
* The array of shown replace {@link Identifier} messages.
*/
private String [ ] messagesReplace ;
/**
* The array of replace {@link Identifier} parser start offsets.
*/
private int [ ] parserStartOffsetReplace ;
/**
* The array of replace {@link Identifier} parser end offsets.
*/
private int [ ] parserEndOffsetReplace ;
/**
* The new text of the {@link Identifier}s.
*/
private String replaceText ;
/**
* Initializes the exception.
*
* @param pMessagesRename The array of shown messages.
* @param pParserStartOffsetRename The array of parser start offsets.
* @param pParserEndOffsetRename The array of parser end offsets.
* @param pReplaceText The new text of the {@link Identifier}s.
*/
public LanguageParserReplaceException ( String pMessagesRename ,
int pParserStartOffsetRename , int pParserEndOffsetRename ,
String pReplaceText )
{
super ( pMessagesRename , pParserStartOffsetRename , pParserEndOffsetRename ) ;
this.messagesReplace = new String [ ]
{ pMessagesRename } ;
this.parserStartOffsetReplace = new int [ ]
{ pParserStartOffsetRename } ;
this.parserEndOffsetReplace = new int [ ]
{ pParserEndOffsetRename } ;
this.replaceText = pReplaceText ;
}
/**
* Initializes the exception.
*
* @param pMessagesNegative The array of shown negative {@link Identifier}
* messages.
* @param pParserStartOffsetNegative
* @param pParserEndOffsetNegative
* @param pMessagesReplace The array of shown replace {@link Identifier}
* messages.
* @param pParserStartOffsetReplace The array of parser start offsets.
* @param pParserEndOffsetReplace The array of parser end offsets.
* @param pReplaceText The new text of the {@link Identifier}s.
*/
public LanguageParserReplaceException ( String [ ] pMessagesNegative ,
int [ ] pParserStartOffsetNegative , int [ ] pParserEndOffsetNegative ,
String [ ] pMessagesReplace , int [ ] pParserStartOffsetReplace ,
int [ ] pParserEndOffsetReplace , String pReplaceText )
{
super ( pMessagesNegative [ 0 ] , pParserStartOffsetNegative [ 0 ] ,
pParserEndOffsetNegative [ 0 ] ) ;
this.messagesNegative = pMessagesNegative ;
this.parserStartOffsetNegative = pParserStartOffsetNegative ;
this.parserEndOffsetNegative = pParserEndOffsetNegative ;
this.messagesReplace = pMessagesReplace ;
this.parserStartOffsetReplace = pParserStartOffsetReplace ;
this.parserEndOffsetReplace = pParserEndOffsetReplace ;
this.replaceText = pReplaceText ;
}
/**
* Returns the messagesNegative.
*
* @return The messagesNegative.
* @see #messagesNegative
*/
public String [ ] getMessagesNegative ( )
{
return this.messagesNegative ;
}
/**
* Returns the messagesReplace.
*
* @return The messagesReplace.
* @see #messagesReplace
*/
public String [ ] getMessagesReplace ( )
{
return this.messagesReplace ;
}
/**
* Returns the parserEndOffsetNegative.
*
* @return The parserEndOffsetNegative.
* @see #parserEndOffsetNegative
*/
public int [ ] getParserEndOffsetNegative ( )
{
return this.parserEndOffsetNegative ;
}
/**
* Returns the parserEndOffsetReplace.
*
* @return The parserEndOffsetReplace.
* @see #parserEndOffsetReplace
*/
public int [ ] getParserEndOffsetReplace ( )
{
return this.parserEndOffsetReplace ;
}
/**
* Returns the parserStartOffsetNegative.
*
* @return The parserStartOffsetNegative.
* @see #parserStartOffsetNegative
*/
public int [ ] getParserStartOffsetNegative ( )
{
return this.parserStartOffsetNegative ;
}
/**
* Returns the parserStartOffsetReplace.
*
* @return The parserStartOffsetReplace.
* @see #parserStartOffsetReplace
*/
public int [ ] getParserStartOffsetReplace ( )
{
return this.parserStartOffsetReplace ;
}
/**
* Returns the replaceText.
*
* @return The replaceText.
* @see #replaceText
*/
public String getReplaceText ( )
{
return this.replaceText ;
}
}