package de.unisiegen.gtitool.core.preferences.item; import de.unisiegen.gtitool.core.entities.DefaultNonterminalSymbolSet; import de.unisiegen.gtitool.core.entities.NonterminalSymbolSet; import de.unisiegen.gtitool.core.exceptions.nonterminalsymbolset.NonterminalSymbolSetException; /** * The {@link NonterminalSymbolSet} item class. * * @author Christian Fehler * @version $Id$ */ public final class NonterminalSymbolSetItem implements Cloneable { /** * The {@link NonterminalSymbolSet} of this item. */ private NonterminalSymbolSet nonterminalSymbolSet; /** * The standard {@link NonterminalSymbolSet} of this item. */ private NonterminalSymbolSet standardNonterminalSymbolSet; /** * Allocates a new {@link NonterminalSymbolSetItem}. * * @param nonterminalSymbolSet The {@link NonterminalSymbolSet} of this item. * @param standardNonterminalSymbolSet The standard * {@link NonterminalSymbolSet} of this item. */ public NonterminalSymbolSetItem ( NonterminalSymbolSet nonterminalSymbolSet, NonterminalSymbolSet standardNonterminalSymbolSet ) { // NonterminalSymbolSet setNonterminalSymbolSet ( nonterminalSymbolSet ); // StandardNonterminalSymbolSet setStandardNonterminalSymbolSet ( standardNonterminalSymbolSet ); } /** * {@inheritDoc} * * @see Object#clone() */ @Override public final NonterminalSymbolSetItem clone () { NonterminalSymbolSet newNonterminalSymbolSet = new DefaultNonterminalSymbolSet (); NonterminalSymbolSet newStandardNonterminalSymbolSet = new DefaultNonterminalSymbolSet (); try { newNonterminalSymbolSet.add ( this.nonterminalSymbolSet ); newStandardNonterminalSymbolSet.add ( this.standardNonterminalSymbolSet ); } catch ( NonterminalSymbolSetException exc ) { exc.printStackTrace (); System.exit ( 1 ); } return new NonterminalSymbolSetItem ( newNonterminalSymbolSet, newStandardNonterminalSymbolSet ); } /** * {@inheritDoc} * * @see Object#equals(Object) */ @Override public final boolean equals ( Object other ) { if ( other instanceof NonterminalSymbolSetItem ) { NonterminalSymbolSetItem nonterminalSymbolSetItem = ( NonterminalSymbolSetItem ) other; return ( ( this.nonterminalSymbolSet .equals ( nonterminalSymbolSetItem.nonterminalSymbolSet ) ) && ( this.standardNonterminalSymbolSet .equals ( nonterminalSymbolSetItem.standardNonterminalSymbolSet ) ) ); } return false; } /** * Returns the {@link NonterminalSymbolSet}. * * @return The {@link NonterminalSymbolSet}. * @see #nonterminalSymbolSet */ public final NonterminalSymbolSet getNonterminalSymbolSet () { return this.nonterminalSymbolSet; } /** * Returns the standard {@link NonterminalSymbolSet}. * * @return The standard {@link NonterminalSymbolSet}. * @see #standardNonterminalSymbolSet */ public final NonterminalSymbolSet getStandardNonterminalSymbolSet () { return this.standardNonterminalSymbolSet; } /** * {@inheritDoc} * * @see Object#hashCode() */ @Override public final int hashCode () { return this.nonterminalSymbolSet.hashCode () + this.standardNonterminalSymbolSet.hashCode (); } /** * Restores the default {@link NonterminalSymbolSet} of this item. */ public final void restore () { this.nonterminalSymbolSet = this.standardNonterminalSymbolSet; } /** * Sets the {@link NonterminalSymbolSet}. * * @param nonterminalSymbolSet The {@link NonterminalSymbolSet} to set. */ public final void setNonterminalSymbolSet ( NonterminalSymbolSet nonterminalSymbolSet ) { if ( nonterminalSymbolSet == null ) { throw new NullPointerException ( "nonterminal symbol set is null" ); //$NON-NLS-1$ } this.nonterminalSymbolSet = nonterminalSymbolSet; } /** * Sets the standard {@link NonterminalSymbolSet}. * * @param standardNonterminalSymbolSet The standard * {@link NonterminalSymbolSet} to set. */ public final void setStandardNonterminalSymbolSet ( NonterminalSymbolSet standardNonterminalSymbolSet ) { if ( standardNonterminalSymbolSet == null ) { throw new NullPointerException ( "standard nonterminal symbol set is null" ); //$NON-NLS-1$ } this.standardNonterminalSymbolSet = standardNonterminalSymbolSet; } /** * {@inheritDoc} * * @see Object#toString() */ @Override public final String toString () { return this.nonterminalSymbolSet.toString (); } }