key0-96/
key0-96/doc/key/
key0-96/doc/key/credits/
key0-96/doc/key/developers/
key0-96/doc/key/developers/resources/
key0-96/setup/caves/
key0-96/setup/help/
key0-96/setup/ruins/
key0-96/src/
key0-96/src/commands/
key0-96/src/events/
key0-96/src/hack/
key0-96/src/sql/
key0-96/src/swing/
key0-96/src/talker/forest/
key0-96/src/talker/objects/
key0-96/src/terminals/
/*
**               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 );
	}
}