/*
 * Created on Apr 23, 2008
 * Created by Paul Gardner
 * 
 * Copyright 2008 Vuze, Inc.  All rights reserved.
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License only.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 */


package com.aelitis.azureus.plugins.net.buddy;

import java.util.Map;

public class 
BuddyPluginBuddyMessage 
{
	private BuddyPluginBuddyMessageHandler		handler;
	private int									id;
	private int									subsystem;
	private int									timeout;
	private long								create_time;
	private boolean								deleted;
	
	protected
	BuddyPluginBuddyMessage(
		BuddyPluginBuddyMessageHandler		_handler,
		int									_id,
		int									_subsystem,
		Map									_request,
		int									_timeout,
		long								_create_time )
	
		throws BuddyPluginException
	{
		handler		= _handler;
		id			= _id;
		subsystem	= _subsystem;
		timeout		= _timeout;
		create_time	= _create_time;
		
		if ( _request != null ){
			
			handler.writeRequest( this, _request );
		}
	}
	
	public BuddyPluginBuddy
	getBuddy()
	{
		return( handler.getBuddy());
	}
	
	public int
	getID()
	{
		return( id );
	}
	
	public int
	getSubsystem()
	{
		return( subsystem );
	}
	
	public Map
	getRequest()
	
		throws BuddyPluginException
	{
		return( handler.readRequest( this ));
	}
	
		/**
		 * Only available for pending-success messages, so don't make public 
		 * @return
		 * @throws BuddyPluginException
		 */
	
	protected Map
	getReply()
	
		throws BuddyPluginException
	{
		return( handler.readReply( this ));
	}
	
	protected int
	getTimeout()
	{
		return( timeout );
	}
	
	protected long
	getCreateTime()
	{
		return( create_time );
	}
	
	public void
	delete()
	{
		deleted = true;
		
		handler.deleteMessage( this );
	}
	
	public boolean
	isDeleted()
	{
		return( deleted );
	}
}
