/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" ** ** $Id$ ** ** Class History ** ** Date Name Description ** ---------|------------|----------------------------------------------- ** 19Aug98 subtle start of recorded history ** */ package key; import java.io.*; import java.util.Enumeration; import java.util.StringTokenizer; /** * Action names should be verbs, such that "subtle may now nuke snapper", * makes sense, where 'nuke' is the action name. (I don't want to give * anyone ideas.. I would never do such a thing to J ;p~) * * If class is made un-final, change KeyInputStream to use instanceof * instead of o.getClass() == Action.class */ public final class Action implements Symbol, Serializable, key.io.Replaceable { private static final long serialVersionUID = -9062224339411127098L; String name; boolean expert; boolean serious; Class in; // the class this action is from public Action( Class from, String theName, boolean e, boolean s ) { in = from; name = theName; expert = e; serious = s; } public String toString() { return( "(Action) " + getName() + ": expert is " + expert ); } public final String getName() { return( name ); } public final Object getKey() { return( name ); } public final boolean getExpert() { return( expert ); } public final boolean getSerious() { return( serious ); } public final void setKey( Object key ) { name = (String) key; } public final Object clone() throws CloneNotSupportedException { throw new CloneNotSupportedException(); } public final Object getReplacement() { try { java.lang.reflect.Field f = in.getDeclaredField( name + "Action" ); return( f.get( null ) ); } catch( Exception e ) { throw new UnexpectedResult( e.toString() + " while resolving " + toString() ); } } }