package de.unisiegen.gtitool.ui.style;
import java.util.ArrayList;
import de.unisiegen.gtitool.core.entities.Entity;
import de.unisiegen.gtitool.core.entities.State;
import de.unisiegen.gtitool.core.entities.StateSet;
import de.unisiegen.gtitool.core.parser.exceptions.ParserException;
import de.unisiegen.gtitool.core.parser.exceptions.ScannerException;
import de.unisiegen.gtitool.core.parser.stateset.StateSetParseable;
import de.unisiegen.gtitool.ui.i18n.Messages;
import de.unisiegen.gtitool.ui.style.parser.StyledParserPanel;
/**
* The styled {@link StateSet} panel class.
*
* @author Christian Fehler
* @version $Id: StyledStateSetParserPanel.java 946 2008-05-30 14:27:24Z fehler
* $
*/
public final class StyledStateSetParserPanel extends
StyledParserPanel < StateSet >
{
/**
* The serial version uid.
*/
private static final long serialVersionUID = -177852679422657040L;
/**
* Every {@link State} in the {@link StateSet} has to be in this {@link State}
* list.
*/
private ArrayList < State > stateList = null;
/**
* Allocates a new {@link StyledStateSetParserPanel}.
*/
public StyledStateSetParserPanel ()
{
super ( new StateSetParseable () );
}
/**
* {@inheritDoc}
*
* @see StyledParserPanel#checkParsedObject(Entity)
*/
@Override
protected final StateSet checkParsedObject ( StateSet stateSet )
{
ArrayList < ScannerException > exceptionList = new ArrayList < ScannerException > ();
if ( ( this.stateList != null ) && ( stateSet != null ) )
{
for ( State current : stateSet )
{
boolean found = false;
for ( State currentState : this.stateList )
{
if ( current.getName ().equals ( currentState.getName () ) )
{
found = true;
break;
}
}
if ( !found )
{
exceptionList.add ( new ParserException ( current.getParserOffset ()
.getStart (), current.getParserOffset ().getEnd (), Messages
.getPrettyString (
"StyledStateSetParserPanel.StateNotInStateSet", //$NON-NLS-1$
current.toPrettyString () ).toHTMLString () ) );
}
}
}
if ( exceptionList.size () > 0 )
{
setException ( exceptionList );
return null;
}
return stateSet;
}
/**
* Sets the {@link State} list. Every {@link State} in the {@link StateSet}
* has to be in the {@link State} list.
*
* @param statesList The {@link State} list to set.
*/
public final void setStateList ( ArrayList < State > statesList )
{
this.stateList = statesList;
}
}