package de.unisiegen.gtitool.core.entities.regex;
import java.util.ArrayList;
import javax.swing.event.EventListenerList;
import de.unisiegen.gtitool.core.entities.Entity;
import de.unisiegen.gtitool.core.entities.listener.PrettyStringChangedListener;
import de.unisiegen.gtitool.core.parser.ParserOffset;
import de.unisiegen.gtitool.core.parser.style.PrettyPrintable;
import de.unisiegen.gtitool.core.parser.style.PrettyString;
import de.unisiegen.gtitool.core.parser.style.PrettyToken;
import de.unisiegen.gtitool.core.parser.style.Style;
/**
* Representation of an Epsilon in the Regex
*
* @author Simon Meurer
* @version
*/
public class EpsilonNode extends LeafNode
{
/**
* The serial version uid
*/
private static final long serialVersionUID = -4046042638595309404L;
/**
* The {@link EventListenerList}.
*/
private EventListenerList listenerList = new EventListenerList ();
/**
* The offset of this {@link EpsilonNode} in the source code.
*
* @see #getParserOffset()
* @see #setParserOffset(ParserOffset)
*/
private ParserOffset parserOffset = NO_PARSER_OFFSET;
/**
* The position in the Syntaxtree
*/
private int position;
/**
* Constructor of an {@link EpsilonNode}
*/
public EpsilonNode ()
{
// Do nothing
}
/**
* {@inheritDoc}
*
* @see PrettyPrintable#addPrettyStringChangedListener(de.unisiegen.gtitool.core.entities.listener.PrettyStringChangedListener)
*/
public void addPrettyStringChangedListener (
PrettyStringChangedListener listener )
{
this.listenerList.add ( PrettyStringChangedListener.class, listener );
}
/**
* {@inheritDoc}
*
* @see de.unisiegen.gtitool.core.entities.regex.RegexNode#clone()
*/
@Override
public RegexNode clone ()
{
return new EpsilonNode ();
}
/**
* {@inheritDoc}
*
* @see Comparable#compareTo(java.lang.Object)
*/
public int compareTo ( @SuppressWarnings ( "unused" ) RegexNode o )
{
return 0;
}
/**
* {@inheritDoc}
*
* @see Object#equals(java.lang.Object)
*/
@Override
public boolean equals ( Object obj )
{
if ( obj == this )
{
return true;
}
if ( obj instanceof EpsilonNode )
{
EpsilonNode e = ( EpsilonNode ) obj;
return this.position == e.position;
}
return false;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getAllChildren()
*/
@Override
public ArrayList < RegexNode > getAllChildren ()
{
return new ArrayList < RegexNode > ();
}
/**
* {@inheritDoc}
*
* @see RegexNode#getChildren()
*/
@Override
public ArrayList < RegexNode > getChildren ()
{
return new ArrayList < RegexNode > ();
}
/**
* {@inheritDoc}
*
* @see RegexNode#getLeftChildrenCount()
*/
@Override
public int getLeftChildrenCount ()
{
return 0;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getNextUnfinishedNode()
*/
@Override
public UnfinishedNode getNextUnfinishedNode ()
{
return null;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getNodeString()
*/
@Override
public PrettyString getNodeString ()
{
return new PrettyString ( new PrettyToken ( "\u03B5", Style.TOKEN ) ); //$NON-NLS-1$
}
/**
* {@inheritDoc}
*
* @see Entity#getParserOffset()
*/
public ParserOffset getParserOffset ()
{
return this.parserOffset;
}
/**
* {@inheritDoc}
*
* @see LeafNode#getPosition()
*/
@Override
public int getPosition ()
{
return this.position;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getRightChildrenCount()
*/
@Override
public int getRightChildrenCount ()
{
return 0;
}
/**
* {@inheritDoc}
*
* @see RegexNode#isInCoreSyntax()
*/
@Override
public boolean isInCoreSyntax ()
{
return true;
}
/**
* {@inheritDoc}
*
* @see RegexNode#nullable()
*/
@Override
public boolean nullable ()
{
return true;
}
/**
* {@inheritDoc}
*
* @see PrettyPrintable#removePrettyStringChangedListener(de.unisiegen.gtitool.core.entities.listener.PrettyStringChangedListener)
*/
public void removePrettyStringChangedListener (
PrettyStringChangedListener listener )
{
this.listenerList.remove ( PrettyStringChangedListener.class, listener );
}
/**
* {@inheritDoc}
*
* @see Entity#setParserOffset(ParserOffset)
*/
public void setParserOffset ( ParserOffset parserOffset )
{
this.parserOffset = parserOffset;
}
/**
* {@inheritDoc}
*
* @see LeafNode#setPosition(int)
*/
@Override
public void setPosition ( int position )
{
this.position = position;
}
/**
* {@inheritDoc}
*
* @see RegexNode#toCoreSyntax(boolean)
*/
@Override
public RegexNode toCoreSyntax (
@SuppressWarnings ( "unused" ) boolean withCharacterClasses )
{
return this;
}
/**
* {@inheritDoc}
*
* @see PrettyPrintable#toPrettyString()
*/
public PrettyString toPrettyString ()
{
PrettyString string = new PrettyString ();
string.add ( ( new PrettyToken ( "\u03B5", Style.TOKEN ) ) ); //$NON-NLS-1$
return string;
}
/**
* {@inheritDoc}
*
* @see Object#toString()
*/
@Override
public String toString ()
{
return "\u03B5"; //$NON-NLS-1$
}
}