/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" ** ** $Id$ ** ** Class History ** ** Date Name Description ** ---------|------------|----------------------------------------------- ** 24Aug98 subtle start of recorded history ** */ package key.commands; import key.*; import java.io.IOException; import java.util.StringTokenizer; public class Edit extends Command { public static final int MAX_LINES = 200; public static final int MAX_BYTES = 50 * MAX_LINES; public Edit() { setKey( "edit" ); // a default usage = "<property>"; } public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException { if( args.hasMoreTokens() ) { String id = args.nextToken(); Search search = new Search( id, p.getContext() ); Object o = search.matchedResult; try { if( o instanceof AtomicElement ) { AtomicElement ae = (AtomicElement) o; if( ae.isReadOnly() ) { ic.sendFailure( "That property is read-only." ); return; } else if( ae.isReference() || ae.isAtomic() ) { o = ae.getValue( search.lastAtom ); // fall through } else { Object a = ae.getValue( search.lastAtom ); if( a instanceof Paragraph ) { // see if we can find the limits for // this paragraph... AtomicSpecial special = ae.getSpecial(); int max_lines = MAX_LINES; int max_bytes = MAX_BYTES; if( special instanceof TextParagraphLengthWrapper ) { TextParagraphLengthWrapper wrapper = (TextParagraphLengthWrapper) special; max_lines = wrapper.getLineLimit(); max_bytes = wrapper.getByteLimit(); } // edit this Paragraph para = Editor.edit( p, (Paragraph)a, ic, max_lines, max_bytes ); if( para != a ) ae.setValue( search.lastAtom, para, null ); } else { ic.sendFailure( "That is not a paragraph, it is a " + Type.typeOf( a ).getName() ); } return; } } } catch( IllegalAccessException e ) { ic.sendFailure( "Error accessing: " + e.getMessage() ); return; } // some things fall through to here if( o instanceof Reference ) { o = ((Reference)o).get(); } if( o instanceof Screen ) { Screen s = (Screen) o; Paragraph from = s.getParagraph(); Paragraph para = Editor.edit( p, from, ic, MAX_LINES, MAX_BYTES ); if( para != from ) s.setParagraph( para ); } else ic.sendError( "You can't edit a " + Type.typeOf( o ).getName() ); } else usage( ic ); } }