/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" */ package key.commands; import key.*; import java.io.IOException; import java.util.StringTokenizer; public class Toggle extends Set { private static final long serialVersionUID = 7734753125517683224L; public static final AtomicElement[] ELEMENTS = { AtomicElement.construct( Toggle.class, String.class, "toggleField", AtomicElement.PUBLIC_FIELD, "a string representing the string to toggle" ), AtomicElement.construct( Toggle.class, String.class, "onFeedback", AtomicElement.PUBLIC_FIELD, "a message to send when the toggle is turned on" ), AtomicElement.construct( Toggle.class, String.class, "offFeedback", AtomicElement.PUBLIC_FIELD, "a message to send when the toggle is turned off" ), }; public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS ); public String toggleField = ""; public String onFeedback = "Toggle on"; public String offFeedback = "Toggle off"; public Toggle() { setKey( "toggle" ); usage = "[on|off]"; } public AtomicStructure getDeclaredStructure() { return( STRUCTURE ); } public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException { if( toggleField == null || toggleField.length() == 0 ) { ic.sendFailure( "This command is incorrectly set up" ); return; } { StringTokenizer st = new StringTokenizer( toggleField ); if( st.hasMoreTokens() ) { st.nextToken(); if( st.hasMoreTokens() ) { ic.sendFailure( "This command is incorrectly set up (spaces in toggle field)" ); return; } } } String toggle; if( args.hasMoreTokens() ) { toggle = args.nextToken(); if( toggle.equalsIgnoreCase( "on" ) ) { // the player wants to hide super.run( p, new StringTokenizer( toggleField + " true" ), fullLine, caller, ic, flags ); ic.sendFeedback( onFeedback ); } else if( toggle.equalsIgnoreCase( "off" ) ) { // the player doesn't want to hide super.run( p, new StringTokenizer( toggleField + " false" ), fullLine, caller, ic, flags ); ic.sendFeedback( offFeedback ); } else usage( ic ); } else { // no options passed so just invert what their current state is Search s = new Search( toggleField, p.getContext() ); if( s.result instanceof Boolean ) { if( ((Boolean)s.result).booleanValue() ) { // they are hidden and want to be 'unhidden' super.run( p, new StringTokenizer( toggleField + " false" ), fullLine, caller, ic, flags ); ic.sendFeedback( offFeedback ); } else { // hide them super.run( p, new StringTokenizer( toggleField + " true" ), fullLine, caller, ic, flags ); ic.sendFeedback( onFeedback ); } } else { ic.sendFeedback( "This command is not correctly set up (field doesn't match a boolean)" ); } } } protected void sendOkay( InteractiveConnection ic ) { } }