/******************************************************************************* * Copyright (c) 2001, 2005 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jem.internal.proxy.ide; /* */ import java.io.OutputStream; import org.eclipse.jem.internal.proxy.common.*; public class IDEVMServer implements IVMCallbackServer { IDECallbackRegistry fCallbackRegistry; IDEStandardBeanProxyFactory fBeanProxyFactory; IDEVMServer(IDECallbackRegistry aCallbackRegistry){ fCallbackRegistry = aCallbackRegistry; fBeanProxyFactory = (IDEStandardBeanProxyFactory)fCallbackRegistry.fProxyFactoryRegistry.getBeanProxyFactory(); } public Object doCallback(ICallbackRunnable aRunnable){ try { return aRunnable.run(new ICallbackHandler(){ public Object callbackWithParms(int callbackID, int msgID, Object[] parms){ // We are running in the same IDE so just call the registry directly // although we must convert the parms to bean proxies Object[] proxyParms = null; // If we have any parms then convert them to bean proxies if ( parms != null ) { proxyParms = new Object[parms.length]; for ( int i=0;i<parms.length;i++){ Object p = parms[i]; proxyParms[i] = createNextParm(p); } } return fCallbackRegistry.vmCallback(callbackID,msgID,proxyParms); } private Object createNextParm(Object p) { if (!(p instanceof ICallbackHandler.TransmitableArray)) { return fBeanProxyFactory.createIDEBeanProxyWith(p); } else { Object[] array = ((ICallbackHandler.TransmitableArray) p).getArray(); Object[] parm = new Object[array.length]; for (int i = 0; i < array.length; i++) { parm[i] = createNextParm(array[i]); } return parm; } } /* (non-Javadoc) * @see org.eclipse.jem.internal.proxy.common.ICallbackHandler#callbackAsConstants(int, int, java.lang.Object) */ public Object callbackAsConstants(int callbackID, int msgID, Object parm) throws CommandException { return fCallbackRegistry.vmCallback(callbackID,msgID,parm); } }); } catch ( CommandException exc ) { return null; } } public OutputStream requestStream(int callbackID, int msgID) throws CommandException { return fCallbackRegistry.requestStream(callbackID,msgID); } public IVMServer getIVMServer() { return fCallbackRegistry.fProxyFactoryRegistry; } }