package de.unisiegen.gtitool.core.preferences.item;
import de.unisiegen.gtitool.core.entities.DefaultTerminalSymbolSet;
import de.unisiegen.gtitool.core.entities.TerminalSymbolSet;
import de.unisiegen.gtitool.core.exceptions.terminalsymbolset.TerminalSymbolSetException;
/**
* The {@link TerminalSymbolSet} item class.
*
* @author Christian Fehler
* @version $Id$
*/
public final class TerminalSymbolSetItem implements Cloneable
{
/**
* The {@link TerminalSymbolSet} of this item.
*/
private TerminalSymbolSet terminalSymbolSet;
/**
* The standard {@link TerminalSymbolSet} of this item.
*/
private TerminalSymbolSet standardTerminalSymbolSet;
/**
* Allocates a new {@link TerminalSymbolSetItem}.
*
* @param terminalSymbolSet The {@link TerminalSymbolSet} of this item.
* @param standardTerminalSymbolSet The standard {@link TerminalSymbolSet} of
* this item.
*/
public TerminalSymbolSetItem ( TerminalSymbolSet terminalSymbolSet,
TerminalSymbolSet standardTerminalSymbolSet )
{
// TerminalSymbolSet
setTerminalSymbolSet ( terminalSymbolSet );
// StandardTerminalSymbolSet
setStandardTerminalSymbolSet ( standardTerminalSymbolSet );
}
/**
* {@inheritDoc}
*
* @see Object#clone()
*/
@Override
public final TerminalSymbolSetItem clone ()
{
TerminalSymbolSet newTerminalSymbolSet = new DefaultTerminalSymbolSet ();
TerminalSymbolSet newStandardTerminalSymbolSet = new DefaultTerminalSymbolSet ();
try
{
newTerminalSymbolSet.add ( this.terminalSymbolSet );
newStandardTerminalSymbolSet.add ( this.standardTerminalSymbolSet );
}
catch ( TerminalSymbolSetException exc )
{
exc.printStackTrace ();
System.exit ( 1 );
}
return new TerminalSymbolSetItem ( newTerminalSymbolSet,
newStandardTerminalSymbolSet );
}
/**
* {@inheritDoc}
*
* @see Object#equals(Object)
*/
@Override
public final boolean equals ( Object other )
{
if ( other instanceof TerminalSymbolSetItem )
{
TerminalSymbolSetItem terminalSymbolSetItem = ( TerminalSymbolSetItem ) other;
return ( ( this.terminalSymbolSet
.equals ( terminalSymbolSetItem.terminalSymbolSet ) ) && ( this.standardTerminalSymbolSet
.equals ( terminalSymbolSetItem.standardTerminalSymbolSet ) ) );
}
return false;
}
/**
* Returns the standard {@link TerminalSymbolSet}.
*
* @return The standard {@link TerminalSymbolSet}.
* @see #standardTerminalSymbolSet
*/
public final TerminalSymbolSet getStandardTerminalSymbolSet ()
{
return this.standardTerminalSymbolSet;
}
/**
* Returns the {@link TerminalSymbolSet}.
*
* @return The {@link TerminalSymbolSet}.
* @see #terminalSymbolSet
*/
public final TerminalSymbolSet getTerminalSymbolSet ()
{
return this.terminalSymbolSet;
}
/**
* {@inheritDoc}
*
* @see Object#hashCode()
*/
@Override
public final int hashCode ()
{
return this.terminalSymbolSet.hashCode ()
+ this.standardTerminalSymbolSet.hashCode ();
}
/**
* Restores the default {@link TerminalSymbolSet} of this item.
*/
public final void restore ()
{
this.terminalSymbolSet = this.standardTerminalSymbolSet;
}
/**
* Sets the standard {@link TerminalSymbolSet}.
*
* @param standardTerminalSymbolSet The standard {@link TerminalSymbolSet} to
* set.
*/
public final void setStandardTerminalSymbolSet (
TerminalSymbolSet standardTerminalSymbolSet )
{
if ( standardTerminalSymbolSet == null )
{
throw new NullPointerException ( "standard terminal symbol set is null" ); //$NON-NLS-1$
}
this.standardTerminalSymbolSet = standardTerminalSymbolSet;
}
/**
* Sets the {@link TerminalSymbolSet}.
*
* @param terminalSymbolSet The {@link TerminalSymbolSet} to set.
*/
public final void setTerminalSymbolSet ( TerminalSymbolSet terminalSymbolSet )
{
if ( terminalSymbolSet == null )
{
throw new NullPointerException ( "terminal symbol set is null" ); //$NON-NLS-1$
}
this.terminalSymbolSet = terminalSymbolSet;
}
/**
* {@inheritDoc}
*
* @see Object#toString()
*/
@Override
public final String toString ()
{
return this.terminalSymbolSet.toString ();
}
}