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 a Token in the Regex
*
* @author Simon Meurer
* @version
*/
public class TokenNode extends LeafNode
{
/**
* The serial version uid
*/
private static final long serialVersionUID = -4513107256319511073L;
/**
* The {@link EventListenerList}.
*/
private EventListenerList listenerList = new EventListenerList ();
/**
* The name of the Token
*/
private String name;
/**
* The offset of this {@link TokenNode} in the source code.
*
* @see #getParserOffset()
* @see #setParserOffset(ParserOffset)
*/
private ParserOffset parserOffset = NO_PARSER_OFFSET;
/**
* The position in the Syntaxtree
*/
private int position;
/**
* Contructor for a Token in the Regex
*
* @param name The name of the Token
*/
public TokenNode ( String name )
{
this.name = name.toString ();
}
/**
* {@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 TokenNode ( this.name );
}
/**
* {@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 TokenNode )
{
if ( this.name.equals ( ( ( TokenNode ) obj ).name ) )
{
return this.position == ( ( TokenNode ) obj ).position;
}
}
return false;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getAllChildren()
*/
@Override
public ArrayList < RegexNode > getAllChildren ()
{
ArrayList < RegexNode > nodes = new ArrayList < RegexNode > ();
return nodes;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getChildren()
*/
@Override
public ArrayList < RegexNode > getChildren ()
{
ArrayList < RegexNode > nodes = new ArrayList < RegexNode > ();
return nodes;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getLeftChildrenCount()
*/
@Override
public int getLeftChildrenCount ()
{
return 0;
}
/**
* Returns the name.
*
* @return The name.
* @see #name
*/
public String getName ()
{
return this.name;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getNextUnfinishedNode()
*/
@Override
public UnfinishedNode getNextUnfinishedNode ()
{
return null;
}
/**
* {@inheritDoc}
*
* @see RegexNode#getNodeString()
*/
@Override
public PrettyString getNodeString ()
{
PrettyString prettyString = new PrettyString ();
prettyString.add ( new PrettyToken ( this.name, Style.TOKEN ) );
return prettyString;
}
/**
* {@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 false;
}
/**
* {@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 ( this.name, Style.TOKEN ) ) );
return string;
}
/**
* {@inheritDoc}
*
* @see Object#toString()
*/
@Override
public String toString ()
{
return this.name;
}
}