package de.unisiegen.gtitool.core.exceptions.nonterminalsymbolset;
import java.util.ArrayList;
import de.unisiegen.gtitool.core.entities.NonterminalSymbol;
import de.unisiegen.gtitool.core.entities.NonterminalSymbolSet;
import de.unisiegen.gtitool.core.exceptions.CoreException;
/**
* The {@link NonterminalSymbolSetException} is used if the
* {@link NonterminalSymbolSet} is not correct.
*
* @author Christian Fehler
* @version $Id: NonterminalSymbolSetException.java 1031 2008-06-25 16:57:06Z
* fehler $
*/
public abstract class NonterminalSymbolSetException extends CoreException
{
/**
* The serial version uid.
*/
private static final long serialVersionUID = 4736623122416917799L;
/**
* The {@link NonterminalSymbolSet}.
*/
private NonterminalSymbolSet nonterminalSymbolSet;
/**
* The {@link NonterminalSymbol}s.
*/
private ArrayList < NonterminalSymbol > nonterminalSymbolList;
/**
* Allocates a new {@link NonterminalSymbolSetException}.
*
* @param nonterminalSymbolSet The {@link NonterminalSymbolSet}.
* @param nonterminalSymbolList The {@link NonterminalSymbol}s.
*/
public NonterminalSymbolSetException (
NonterminalSymbolSet nonterminalSymbolSet,
ArrayList < NonterminalSymbol > nonterminalSymbolList )
{
super ();
// NonterminalSymbolSet
if ( nonterminalSymbolSet == null )
{
throw new NullPointerException ( "nonterminal symbol set is null" ); //$NON-NLS-1$
}
this.nonterminalSymbolSet = nonterminalSymbolSet;
// NonterminalSymbolList
if ( nonterminalSymbolList == null )
{
throw new NullPointerException ( "nonterminal symbol list is null" ); //$NON-NLS-1$
}
if ( nonterminalSymbolList.size () < 2 )
{
throw new IllegalArgumentException (
"nonterminal symbol list must contain at least two elements" ); //$NON-NLS-1$
}
this.nonterminalSymbolList = nonterminalSymbolList;
}
/**
* Returns the {@link NonterminalSymbol}s.
*
* @return The {@link NonterminalSymbol}s.
* @see #nonterminalSymbolList
*/
public final ArrayList < NonterminalSymbol > getNonterminalSymbol ()
{
return this.nonterminalSymbolList;
}
/**
* Returns the {@link NonterminalSymbol} with the given index.
*
* @param index The index.
* @return The {@link NonterminalSymbol} with the given index.
* @see #nonterminalSymbolList
*/
public final NonterminalSymbol getNonterminalSymbol ( int index )
{
return this.nonterminalSymbolList.get ( index );
}
/**
* Returns the {@link NonterminalSymbolSet}.
*
* @return The {@link NonterminalSymbolSet}.
* @see #nonterminalSymbolSet
*/
public final NonterminalSymbolSet getNonterminalSymbolSet ()
{
return this.nonterminalSymbolSet;
}
/**
* {@inheritDoc}
*
* @see Throwable#toString()
*/
@Override
public String toString ()
{
String lineBreak = System.getProperty ( "line.separator" ); //$NON-NLS-1$
StringBuilder result = new StringBuilder ( super.toString () );
result.append ( lineBreak );
result.append ( "Nonterminal symbol set: " ); //$NON-NLS-1$
result.append ( this.nonterminalSymbolSet );
result.append ( lineBreak );
result.append ( "Nonterminal symbols: " ); //$NON-NLS-1$
for ( int i = 0 ; i < this.nonterminalSymbolSet.size () ; i++ )
{
if ( i > 0 )
{
result.append ( ", " ); //$NON-NLS-1$
}
result.append ( this.nonterminalSymbolSet.get ( i ) );
}
return result.toString ();
}
}