/**************************************************************************** * Copyright (c) 2004, 2009 Composent, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Composent, Inc. - initial API and implementation *****************************************************************************/ package org.eclipse.ecf.remoteservice; import org.eclipse.ecf.remoteservice.events.*; /** * Abstract implementer of IRemoteCallListener. This utility class may be used * to simplify the implementation of IRemoteCallListener. * * @since 3.0 */ public abstract class AbstractRemoteCallListener implements IRemoteCallListener { protected IRemoteCall remoteCall; protected IRemoteServiceReference remoteReference; public void handleEvent(IRemoteCallEvent event) { if (event instanceof IRemoteCallStartEvent) this.handleRemoteCallStartEvent((IRemoteCallStartEvent) event); else if (event instanceof IRemoteCallCompleteEvent) this.handleRemoteCallCompleteEvent((IRemoteCallCompleteEvent) event); } protected IRemoteCall getRemoteCall() { return remoteCall; } protected IRemoteServiceReference getRemoteServiceReference() { return remoteReference; } protected void handleRemoteCallCompleteEvent(IRemoteCallCompleteEvent event) { if (event.hadException()) handleRemoteCallException(event.getException()); else handleRemoteCallComplete(event.getResponse()); // In either case, null out references remoteCall = null; remoteReference = null; } /** * Handle remote call complete. If the remote call completes successfully, * this method will then be called with the given result of the call passed * as the parameter. If the remote call throws an exception, then {@link #handleRemoteCallException(Throwable)} * will be called instead. * * @param result the result of the remote call. May be <code>null</code>. * @see #handleRemoteCallException(Throwable) */ protected abstract void handleRemoteCallComplete(Object result); /** * Handle remote call exception. If the remote call does not complete successfully, * this method will be called with the Throwable exception that occurred. If * it did complete successfully, then * * @param exception the Throwable that occurred during execution of the remote call. * Will not be <code>null</code>. */ protected abstract void handleRemoteCallException(Throwable exception); protected void handleRemoteCallStartEvent(IRemoteCallStartEvent event) { remoteCall = event.getCall(); remoteReference = event.getReference(); } }