package de.unisiegen.gtitool.core.preferences.item;
import de.unisiegen.gtitool.core.entities.DefaultNonterminalSymbol;
import de.unisiegen.gtitool.core.entities.NonterminalSymbol;
/**
* The {@link NonterminalSymbol} item class.
*
* @author Christian Fehler
* @version $Id$
*/
public final class NonterminalSymbolItem implements Cloneable
{
/**
* The {@link NonterminalSymbol} of this item.
*/
private NonterminalSymbol nonterminalSymbol;
/**
* The standard {@link NonterminalSymbol} of this item.
*/
private NonterminalSymbol standardNonterminalSymbol;
/**
* Allocates a new {@link NonterminalSymbolItem}.
*
* @param nonterminalSymbol The {@link NonterminalSymbol} of this item.
* @param standardNonterminalSymbol The standard {@link NonterminalSymbol} of
* this item.
*/
public NonterminalSymbolItem ( NonterminalSymbol nonterminalSymbol,
NonterminalSymbol standardNonterminalSymbol )
{
// NonterminalSymbol
setNonterminalSymbol ( nonterminalSymbol );
// StandardNonterminalSymbol
setStandardNonterminalSymbol ( standardNonterminalSymbol );
}
/**
* {@inheritDoc}
*
* @see Object#clone()
*/
@Override
public final NonterminalSymbolItem clone ()
{
return new NonterminalSymbolItem ( new DefaultNonterminalSymbol (
this.nonterminalSymbol.getName () ), new DefaultNonterminalSymbol (
this.standardNonterminalSymbol.getName () ) );
}
/**
* {@inheritDoc}
*
* @see Object#equals(Object)
*/
@Override
public final boolean equals ( Object other )
{
if ( other instanceof NonterminalSymbolItem )
{
NonterminalSymbolItem nonterminalSymbolItem = ( NonterminalSymbolItem ) other;
return ( ( this.nonterminalSymbol
.equals ( nonterminalSymbolItem.nonterminalSymbol ) ) && ( this.standardNonterminalSymbol
.equals ( nonterminalSymbolItem.standardNonterminalSymbol ) ) );
}
return false;
}
/**
* Returns the {@link NonterminalSymbol}.
*
* @return The {@link NonterminalSymbol}.
* @see #nonterminalSymbol
*/
public final NonterminalSymbol getNonterminalSymbol ()
{
return this.nonterminalSymbol;
}
/**
* Returns the standard {@link NonterminalSymbol}.
*
* @return The standard {@link NonterminalSymbol}.
* @see #standardNonterminalSymbol
*/
public final NonterminalSymbol getStandardNonterminalSymbol ()
{
return this.standardNonterminalSymbol;
}
/**
* {@inheritDoc}
*
* @see Object#hashCode()
*/
@Override
public final int hashCode ()
{
return this.nonterminalSymbol.hashCode ()
+ this.standardNonterminalSymbol.hashCode ();
}
/**
* Restores the default {@link NonterminalSymbol} of this item.
*/
public final void restore ()
{
this.nonterminalSymbol = this.standardNonterminalSymbol;
}
/**
* Sets the {@link NonterminalSymbol}.
*
* @param nonterminalSymbol The {@link NonterminalSymbol} to set.
*/
public final void setNonterminalSymbol ( NonterminalSymbol nonterminalSymbol )
{
if ( nonterminalSymbol == null )
{
throw new NullPointerException ( "nonterminal symbol is null" ); //$NON-NLS-1$
}
this.nonterminalSymbol = nonterminalSymbol;
}
/**
* Sets the standard {@link NonterminalSymbol}.
*
* @param standardNonterminalSymbol The standard {@link NonterminalSymbol} to
* set.
*/
public final void setStandardNonterminalSymbol (
NonterminalSymbol standardNonterminalSymbol )
{
if ( standardNonterminalSymbol == null )
{
throw new NullPointerException ( "standard nonterminal symbol is null" ); //$NON-NLS-1$
}
this.standardNonterminalSymbol = standardNonterminalSymbol;
}
/**
* {@inheritDoc}
*
* @see Object#toString()
*/
@Override
public final String toString ()
{
return this.nonterminalSymbol.toString ();
}
}