All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jadex.platform.service.remote.commands.RemoteFuturePullCommand Maven / Gradle / Ivy

package jadex.platform.service.remote.commands;

import jadex.bridge.IExternalAccess;
import jadex.bridge.service.annotation.Security;
import jadex.commons.future.IIntermediateFuture;
import jadex.commons.future.IPullIntermediateFuture;
import jadex.commons.future.IPullSubscriptionIntermediateFuture;
import jadex.commons.future.IntermediateFuture;
import jadex.platform.service.remote.IRemoteCommand;
import jadex.platform.service.remote.RemoteServiceManagementService;

/**
 *  Command for executing a remote method.
 */
public class RemoteFuturePullCommand extends AbstractRemoteCommand
{
	//-------- attributes --------
	
	/** The call identifier. */
	protected String callid;
	
	/** The call identifier to pull. */
	protected String pullcallid;
	
	/** The exception. */
	protected Exception exception;
		
	//-------- constructors --------
	
	/**
	 *  Create a new remote method invocation command.
	 */
	public RemoteFuturePullCommand()
	{
	}
	
	/**
	 *  Create a new remote method invocation command. 
	 */
	public RemoteFuturePullCommand(String callid, String pullcallid)
	{
		this.callid = callid;
		this.pullcallid = pullcallid;
//		System.out.println("rmi on client: "+callid+" "+pullcallid);
	}
	
	//-------- methods --------
	
	/**
	 *  Get the security level of the request.
	 */
	public String	getSecurityLevel()
	{
		// No security issues here.
		return Security.UNRESTRICTED;
	}

	/**
	 *  Execute the command.
	 *  @param lrms The local remote management service.
	 *  @return An optional result command that will be 
	 *  sent back to the command origin. 
	 */
	public IIntermediateFuture execute(IExternalAccess component, final RemoteServiceManagementService rsms)
	{
		final IntermediateFuture ret = new IntermediateFuture();
		
		// RMS acts as representative of remote caller.
//		System.out.println("callid: "+callid);
//		System.out.println("terminatecallid: "+terminatecallid);
		Object tfut = rsms.getProcessingCall(pullcallid);
		if(tfut!=null)
		{
//			System.out.println("terminating remote future: "+tfut.hashCode());
			if(tfut instanceof IPullIntermediateFuture)
			{
				((IPullIntermediateFuture)tfut).pullIntermediateResult();
			}
			else
			{
				((IPullSubscriptionIntermediateFuture)tfut).pullIntermediateResult();
			}
		}
		else
		{
//			System.out.println("remote future not found");
			rsms.addFutureCommand(pullcallid, new Runnable()
			{
				public void run()
				{
					Object tfut = rsms.getProcessingCall(pullcallid);
					if(tfut!=null)
					{
//						System.out.println("terminated future afterwards");
						if(tfut instanceof IPullIntermediateFuture)
						{
							((IPullIntermediateFuture)tfut).pullIntermediateResult();
						}
						else
						{
							((IPullSubscriptionIntermediateFuture)tfut).pullIntermediateResult();
						}
					}
				}
			});
		}
		
		ret.addIntermediateResult(new RemoteResultCommand(null, null, null, callid, 
			false, null, getNonFunctionalProperties()));
		ret.setFinished();
		return ret;
	}

	//-------- getter/setter methods --------

	/**
	 *  Get the callid.
	 *  @return the callid.
	 */
	public String getCallId()
	{
		return callid;
	}

	/**
	 *  Set the call id.
	 *  @param callid The call id to set.
	 */
	public void setCallId(String callid)
	{
//		System.out.println("rmi on server: "+callid);
		this.callid = callid;
	}

//	/**
//	 *  Get the exception.
//	 *  @return the exception.
//	 */
//	public ExceptionInfo getExceptionInfo()
//	{
//		return exception;
//	}
//
//	/**
//	 *  Set the exception.
//	 *  @param exception The exception to set.
//	 */
//	public void setExceptionInfo(ExceptionInfo exception)
//	{
//		this.exception = exception;
//	}

	/**
	 *  Get the exception.
	 *  @return The exception.
	 */
	public Exception getException()
	{
		return exception;
	}

	/**
	 *  Set the exception.
	 *  @param exception The exception to set.
	 */
	public void setException(Exception exception)
	{
		this.exception = exception;
	}

	/**
	 *  Get the pullcallid.
	 *  @return The pullcallid.
	 */
	public String getPullCallId()
	{
		return pullcallid;
	}

	/**
	 *  Set the pullcallid.
	 *  @param pullcallid The pullcallid to set.
	 */
	public void setPullCallId(String pullcallid)
	{
		this.pullcallid = pullcallid;
	}
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy