/* ** 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 key.util.Trie; import java.io.IOException; import java.util.StringTokenizer; public class Transfer extends Command { public Transfer() { setKey( "transfer" ); usage = "<owner> <object> "; } public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException { if( args.hasMoreTokens() ) { String targetName = args.nextToken(); if( args.hasMoreTokens() ) { String ownerName = args.nextToken(); Atom newOwner; if( ownerName.equalsIgnoreCase( Key.nullString ) ) newOwner = null; else { Object owner; owner = new Search( ownerName, p.getContext() ).result; if( owner == null ) { ic.sendError( "Could not find '" + ownerName + "'" ); return; } if( owner instanceof Atom ) newOwner = (Atom) owner; else { ic.sendError( "Non-atomic get-symbol match on '" + ownerName + "'" ); return; } } Object o = new Search( targetName, p.getContext() ).result; if( o != null ) { if( o instanceof Atom ) { Atom target = (Atom) o; if( target.getOwner() == newOwner ) { if( newOwner != null ) ic.sendError( newOwner.getName() + " already owns " + target.getId() ); else ic.sendError( target.getId() + " is already not owned" ); } else { target.setOwner( newOwner ); if( newOwner != null ) ic.sendFeedback( newOwner.getName() + " now owns " + target.getId() ); else ic.sendFeedback( target.getId() + " is no longer owned" ); } } else if( o instanceof Trie ) ic.sendError( "Multiple matches: " + ((Trie)o).contents() ); else ic.sendError( "Non-atomic get-symbol match on '" + targetName + "'" ); } else ic.sendError( "Could not find '" + targetName + "'" ); } else usage( ic ); } else usage( ic ); } }