/**
* Copyright (c) 2010 Ed Merks 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:
* Ed Merks - Initial API and implementation
*/
package org.eclipse.emf.ecore.impl;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EStructuralFeature;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.client.rpc.SerializationStreamReader;
import com.google.gwt.user.client.rpc.SerializationStreamWriter;
public class BasicEObjectImpl_CustomFieldSerializer
{
public static void serialize(SerializationStreamWriter streamWriter, BasicEObjectImpl myObject) throws SerializationException
{
streamWriter.writeString(myObject.eIsProxy() ? myObject.eProxyURI().toString() : null);
EClass eClass = myObject.eDynamicClass();
streamWriter.writeObject(eClass);
if (eClass == null)
{
eClass = myObject.eClass();
}
short featureID = 0;
for (EStructuralFeature eStructuralFeature : eClass.getEAllStructuralFeatures())
{
if (!eStructuralFeature.isTransient() && myObject.eIsSet(eStructuralFeature))
{
Object value = myObject.eGet(eStructuralFeature);
if (eStructuralFeature.isMany())
{
streamWriter.writeShort(featureID);
List<?> list = (List<?>)value;
streamWriter.writeInt(list.size());
for (Object element : list)
{
streamWriter.writeObject(element);
}
}
else
{
streamWriter.writeShort((short)(-1 - featureID));
streamWriter.writeObject(value);
}
}
++featureID;
}
streamWriter.writeShort(Short.MAX_VALUE);
}
public static void deserialize(SerializationStreamReader streamReader, BasicEObjectImpl myObject) throws SerializationException
{
String proxyURI = streamReader.readString();
if (proxyURI != null)
{
myObject.eSetProxyURI(URI.createURI(proxyURI));
}
EClass eClass = (EClass)streamReader.readObject();
if (eClass != null)
{
myObject.eSetClass(eClass);
}
for (short featureID = streamReader.readShort(); featureID != Short.MAX_VALUE; featureID = streamReader.readShort())
{
if (featureID >= 0)
{
@SuppressWarnings("unchecked")
List<Object> list = (List<Object>)myObject.eGet(featureID, false, true);
for (int i = 0, size = streamReader.readInt(); i < size; ++i)
{
list.add(streamReader.readObject());
}
}
else
{
myObject.eSet(-1 - featureID, streamReader.readObject());
}
}
}
}