Author: julien_viet
Date: 2010-01-15 05:45:53 -0500 (Fri, 15 Jan 2010)
New Revision: 1310
Added:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ReplicatableTypeModel.java
Removed:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/SerializationContext.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/TypeDomain.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectReader.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectWriter.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/D.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/TestSerialization.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/TestTypeModel.java
Log:
- do not serialize static fields
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/SerializationContext.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/SerializationContext.java 2010-01-15
10:13:34 UTC (rev 1309)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/SerializationContext.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -100,4 +100,20 @@
ObjectReader in = new ObjectReader(this, bais);
return (O)in.readObject();
}
+
+ public byte[] write(Object o) throws IOException
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectWriter writer = new ObjectWriter(this, baos);
+ writer.writeObject(o);
+ writer.close();
+ return baos.toByteArray();
+ }
+
+ public Object read(byte[] bytes) throws IOException, ClassNotFoundException
+ {
+ ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+ ObjectReader in = new ObjectReader(this, bais);
+ return in.readObject();
+ }
}
Deleted:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java 2010-01-15
10:13:34 UTC (rev 1309)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.webui.application.replication.model;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-public final class ClassTypeModel<O> extends TypeModel
-{
-
- /** . */
- private final Class<O> objectType;
-
- /** . */
- private final TypeModel superType;
-
- /** . */
- private final Map<String, FieldModel> fields;
-
- /** . */
- private final Map<String, FieldModel> immutableFields;
-
- ClassTypeModel(
- Class<O> javaType,
- TypeModel superType,
- Map<String, FieldModel> fields)
- {
- super(javaType);
-
- //
- this.objectType = javaType;
- this.superType = superType;
- this.fields = fields;
- this.immutableFields = Collections.unmodifiableMap(fields);
- }
-
- public Class<O> getObjectType()
- {
- return objectType;
- }
-
- public TypeModel getSuperType()
- {
- return superType;
- }
-
- public Collection<FieldModel> getFields()
- {
- return immutableFields.values();
- }
-
- public Map<String, FieldModel> getFieldMap()
- {
- return immutableFields;
- }
-}
Copied:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ReplicatableTypeModel.java
(from rev 1303,
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java)
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ReplicatableTypeModel.java
(rev 0)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ReplicatableTypeModel.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.exoplatform.webui.application.replication.model;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public final class ReplicatableTypeModel<O> extends TypeModel
+{
+
+ /** . */
+ private final Class<O> objectType;
+
+ /** . */
+ private final TypeModel superType;
+
+ /** . */
+ private final Map<String, FieldModel> fields;
+
+ /** . */
+ private final Map<String, FieldModel> immutableFields;
+
+ ReplicatableTypeModel(
+ Class<O> javaType,
+ TypeModel superType,
+ Map<String, FieldModel> fields)
+ {
+ super(javaType);
+
+ //
+ this.objectType = javaType;
+ this.superType = superType;
+ this.fields = fields;
+ this.immutableFields = Collections.unmodifiableMap(fields);
+ }
+
+ public Class<O> getObjectType()
+ {
+ return objectType;
+ }
+
+ public TypeModel getSuperType()
+ {
+ return superType;
+ }
+
+ public Collection<FieldModel> getFields()
+ {
+ return immutableFields.values();
+ }
+
+ public Map<String, FieldModel> getFieldMap()
+ {
+ return immutableFields;
+ }
+}
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/TypeDomain.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/TypeDomain.java 2010-01-15
10:13:34 UTC (rev 1309)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/TypeDomain.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -23,6 +23,7 @@
import java.io.Serializable;
import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
import java.util.*;
/**
@@ -119,12 +120,15 @@
{
return buildSerializable(javaType, addedTypeModels);
}
- return null;
+ else
+ {
+ return null;
+ }
}
- private <O> ClassTypeModel<O> buildClassTypeModel(Class<O> javaType,
Map<String, TypeModel> addedTypeModels)
+ private <O> ReplicatableTypeModel<O> buildClassTypeModel(Class<O>
javaType, Map<String, TypeModel> addedTypeModels)
{
- ClassTypeModel typeModel = (ClassTypeModel) get(javaType, addedTypeModels);
+ ReplicatableTypeModel typeModel = (ReplicatableTypeModel) get(javaType,
addedTypeModels);
if (typeModel == null)
{
TypeModel superTypeModel = null;
@@ -141,7 +145,7 @@
TreeMap<String, FieldModel> fieldModels = new TreeMap<String,
FieldModel>();
//
- typeModel = new ClassTypeModel<O>(javaType, superTypeModel, fieldModels);
+ typeModel = new ReplicatableTypeModel<O>(javaType, superTypeModel,
fieldModels);
//
addedTypeModels.put(javaType.getName(), typeModel);
@@ -149,18 +153,21 @@
// Now build fields
for (Field field : javaType.getDeclaredFields())
{
- field.setAccessible(true);
- Class<?> fieldJavaType = field.getType();
- TypeModel fieldTypeModel = build(fieldJavaType, addedTypeModels);
- if (fieldTypeModel != null)
+ if (!Modifier.isStatic(field.getModifiers()))
{
- fieldModels.put(field.getName(), new FieldModel(field, fieldTypeModel));
+ field.setAccessible(true);
+ Class<?> fieldJavaType = field.getType();
+ TypeModel fieldTypeModel = build(fieldJavaType, addedTypeModels);
+ if (fieldTypeModel != null)
+ {
+ fieldModels.put(field.getName(), new FieldModel(field,
fieldTypeModel));
+ }
}
}
}
// It must be good
- return (ClassTypeModel<O>)typeModel;
+ return (ReplicatableTypeModel<O>)typeModel;
}
private SerializableTypeModel buildSerializable(Class<?> javaType,
Map<String, TypeModel> addedTypeModels)
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectReader.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectReader.java 2010-01-15
10:13:34 UTC (rev 1309)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectReader.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -21,7 +21,7 @@
import org.exoplatform.webui.application.replication.SerializationContext;
import org.exoplatform.webui.application.replication.factory.ObjectFactory;
-import org.exoplatform.webui.application.replication.model.ClassTypeModel;
+import org.exoplatform.webui.application.replication.model.ReplicatableTypeModel;
import org.exoplatform.webui.application.replication.model.FieldModel;
import org.exoplatform.webui.application.replication.model.TypeModel;
@@ -57,7 +57,7 @@
this.idToResolutions = new HashMap<Integer, List<Resolution>>();
}
- private <O> O instantiate(ClassTypeModel<O> typeModel, Map<FieldModel,
?> state) throws InvalidClassException
+ private <O> O instantiate(ReplicatableTypeModel<O> typeModel,
Map<FieldModel, ?> state) throws InvalidClassException
{
try
{
@@ -97,11 +97,11 @@
id = container.readInt();
Class clazz = (Class) container.readObject();
- ClassTypeModel<?> typeModel =
(ClassTypeModel)context.getTypeDomain().getTypeModel(clazz);
+ ReplicatableTypeModel<?> typeModel =
(ReplicatableTypeModel)context.getTypeDomain().getTypeModel(clazz);
//
Map<FieldModel, Object> state = new HashMap<FieldModel,
Object>();
- ClassTypeModel<?> currentTypeModel = typeModel;
+ ReplicatableTypeModel<?> currentTypeModel = typeModel;
List<Bilto> biltos = new ArrayList<Bilto>();
while (true)
{
@@ -136,9 +136,9 @@
{
break;
}
- if (currentSuperTypeModel instanceof ClassTypeModel)
+ if (currentSuperTypeModel instanceof ReplicatableTypeModel)
{
- currentTypeModel = (ClassTypeModel)currentSuperTypeModel;
+ currentTypeModel = (ReplicatableTypeModel)currentSuperTypeModel;
}
else
{
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectWriter.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectWriter.java 2010-01-15
10:13:34 UTC (rev 1309)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectWriter.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -20,7 +20,7 @@
package org.exoplatform.webui.application.replication.serial;
import org.exoplatform.webui.application.replication.SerializationContext;
-import org.exoplatform.webui.application.replication.model.ClassTypeModel;
+import org.exoplatform.webui.application.replication.model.ReplicatableTypeModel;
import org.exoplatform.webui.application.replication.model.FieldModel;
import org.exoplatform.webui.application.replication.model.TypeModel;
@@ -79,7 +79,7 @@
}
else
{
- ClassTypeModel<?> typeModel =
(ClassTypeModel<?>)context.getTypeDomain().getTypeModel(obj.getClass());
+ ReplicatableTypeModel<?> typeModel =
(ReplicatableTypeModel<?>)context.getTypeDomain().getTypeModel(obj.getClass());
//
if (typeModel == null)
@@ -93,7 +93,7 @@
output.writeObject(obj.getClass());
//
- ClassTypeModel<?> currentTypeModel = typeModel;
+ ReplicatableTypeModel<?> currentTypeModel = typeModel;
while (true)
{
for (FieldModel fieldModel : (currentTypeModel).getFields())
@@ -127,9 +127,9 @@
}
//
- if (currentSuperTypeModel instanceof ClassTypeModel)
+ if (currentSuperTypeModel instanceof ReplicatableTypeModel)
{
- currentTypeModel = (ClassTypeModel)currentSuperTypeModel;
+ currentTypeModel = (ReplicatableTypeModel)currentSuperTypeModel;
}
else
{
Modified: portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/D.java
===================================================================
---
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/D.java 2010-01-15
10:13:34 UTC (rev 1309)
+++
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/D.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -21,16 +21,15 @@
import org.exoplatform.webui.application.replication.annotations.ReplicatedType;
-import java.util.ArrayList;
-
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
* @version $Revision$
*/
@ReplicatedType
-public class D extends ArrayList
+public class D
{
- String a = "a";
+ static String a = "a";
+ String b = "b";
}
Modified:
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/TestSerialization.java
===================================================================
---
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/TestSerialization.java 2010-01-15
10:13:34 UTC (rev 1309)
+++
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/TestSerialization.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -57,6 +57,20 @@
assertSame(b, b.ref.ref);
}
+ public void testStaticField() throws Exception
+ {
+ TypeDomain domain = new TypeDomain();
+ domain.add(D.class);
+ D d = new D();
+ d.b = "bar";
+ SerializationContext context = new SerializationContext(domain);
+ byte[] bytes = context.write(d);
+ D.a = "foo";
+ d = (D)context.read(bytes);
+ assertEquals("foo", D.a);
+ assertEquals("bar", d.b);
+ }
+
public void testAAA() throws Exception
{
TypeDomain domain = new TypeDomain();
@@ -73,4 +87,26 @@
assertSame(((E2)e.left).left, ((E2)e.right).left);
assertSame(((E2)e.left).right, ((E2)e.right).right);
}
+
+/*
+ public void testListOfReplicatable() throws Exception
+ {
+ TypeDomain domain = new TypeDomain();
+ domain.add(F1.class);
+ domain.add(F2.class);
+
+ //
+ F1 f1 = new F1();
+ F2 f2 = new F2();
+ f1.values.add(f2);
+
+ //
+ SerializationContext context = new SerializationContext(domain);
+ f1 = context.clone(f1);
+
+ //
+ assertNotNull(f1.values);
+ assertEquals(1, f1.values.size());
+ }
+*/
}
Modified:
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/TestTypeModel.java
===================================================================
---
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/TestTypeModel.java 2010-01-15
10:13:34 UTC (rev 1309)
+++
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/TestTypeModel.java 2010-01-15
10:45:53 UTC (rev 1310)
@@ -50,7 +50,7 @@
public void testJuu()
{
TypeDomain domain = new TypeDomain();
- ClassTypeModel aTM = (ClassTypeModel) domain.add(A.class);
+ ReplicatableTypeModel aTM = (ReplicatableTypeModel) domain.add(A.class);
assertEquals(4, domain.getSize());
assertEquals(A.class.getName(), aTM.getName());
assertEquals(SetBuilder.create(domain.getTypeModel(int.class)).with(aTM).with(domain.getTypeModel(boolean.class)).build(domain.getTypeModel(String.class)),
domain.getTypeModels());