| /******************************************************************************* |
| * Copyright (c) 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 |
| *******************************************************************************/ |
| /* |
| * $RCSfile: BeanProxyValueSender.java,v $ |
| * $Revision: 1.3 $ $Date: 2005/05/11 19:01:12 $ |
| */ |
| package org.eclipse.jem.internal.proxy.remote; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| |
| import org.eclipse.jem.internal.proxy.common.CommandException; |
| import org.eclipse.jem.internal.proxy.common.remote.Commands; |
| import org.eclipse.jem.internal.proxy.core.ProxyPlugin; |
| import org.eclipse.jem.internal.proxy.core.ThrowableProxy; |
| |
| /** |
| * Useful in REM to get the array of BeanProxyValues. |
| * |
| * @since 1.1.0 |
| */ |
| public class BeanProxyValueSender implements Commands.ValueSender { |
| protected int index = 0; |
| protected Object[] array; |
| private Exception exception; |
| private final REMStandardBeanProxyFactory factory; |
| |
| /** |
| * See if there was an exception thrown during reading. |
| * |
| * @return an exception or <code>null</code> if no exception. |
| * |
| * @since 1.1.0 |
| */ |
| public Exception getException() { |
| return exception; |
| } |
| |
| public BeanProxyValueSender(REMStandardBeanProxyFactory factory) { |
| this.factory = factory; |
| } |
| public BeanProxyValueSender(REMStandardBeanProxyFactory factory, Commands.ValueObject arrayHeader) { |
| this(factory); |
| initialize(arrayHeader); |
| } |
| |
| public void initialize(Commands.ValueObject arrayHeader) { |
| index = 0; |
| // The array type doesn't matter, it will be an array of objects. |
| // The values will either be IBeanProxies or an array, or constants. |
| array = new Object[arrayHeader.anInt]; |
| } |
| |
| public void clear() { |
| array = null; |
| index = 0; |
| } |
| |
| public Object[] getArray() { |
| return array; |
| } |
| |
| // A new value is being sent to the array |
| // NOTE: It is important that this has been called within a transaction. |
| public void sendValue(Commands.ValueObject value) { |
| try { |
| array[index++] = factory.getBeanProxy(value); // Add it to the array |
| } catch (ThrowableProxy e) { |
| // We can't stop it right away because we can't send exception on, however, |
| // we can log it and save the exception. |
| ProxyPlugin.getPlugin().getLogger().log(new Status(IStatus.ERROR, ProxyPlugin.getPlugin().getBundle().getSymbolicName(), 0, "", e)); //$NON-NLS-1$ |
| exception = e; |
| } catch (CommandException e) { |
| // We can't stop it right away because we can't send exception on, however, |
| // we can log it and save the exception. |
| ProxyPlugin.getPlugin().getLogger().log(new Status(IStatus.ERROR, ProxyPlugin.getPlugin().getBundle().getSymbolicName(), 0, "", e)); //$NON-NLS-1$ |
| exception = e; |
| } |
| } |
| |
| // The next entry is an array too! |
| public Commands.ValueSender nestedArray(Commands.ValueObject arrayHeader) { |
| BeanProxyValueSender sender = new BeanProxyValueSender(factory, arrayHeader); |
| // Take the newly created array and put it into the current array. |
| array[index++] = sender.getArray(); |
| return sender; |
| } |
| } |