/** * GRANITE DATA SERVICES * Copyright (C) 2006-2015 GRANITE DATA SERVICES S.A.S. * * This file is part of the Granite Data Services Platform. * * Granite Data Services 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. * * Granite Data Services 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 library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA, or see <http://www.gnu.org/licenses/>. */ package org.granite.client.test.javafx.jmf; import java.io.IOException; import java.io.PrintStream; import java.util.Arrays; import java.util.Date; import java.util.List; import org.granite.client.messaging.ClientAliasRegistry; import org.granite.client.messaging.jmf.ClientSharedContext; import org.granite.client.messaging.jmf.DefaultClientSharedContext; import org.granite.client.messaging.jmf.ext.ClientEntityCodec; import org.granite.client.test.javafx.jmf.Util.ByteArrayJMFDeserializer; import org.granite.client.test.javafx.jmf.Util.ByteArrayJMFDumper; import org.granite.client.test.javafx.jmf.Util.ByteArrayJMFSerializer; import org.granite.hibernate.jmf.EntityCodec; import org.granite.hibernate.jmf.PersistentBagCodec; import org.granite.hibernate.jmf.PersistentListCodec; import org.granite.hibernate.jmf.PersistentMapCodec; import org.granite.hibernate.jmf.PersistentSetCodec; import org.granite.hibernate.jmf.PersistentSortedMapCodec; import org.granite.hibernate.jmf.PersistentSortedSetCodec; import org.granite.messaging.jmf.DefaultCodecRegistry; import org.granite.messaging.jmf.DefaultSharedContext; import org.granite.messaging.jmf.JMFDumper; import org.granite.messaging.jmf.SharedContext; import org.granite.messaging.jmf.codec.ExtendedObjectCodec; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class TestJMFPropertiesOrder { private SharedContext dumpSharedContext; private SharedContext serverSharedContext; private ClientAliasRegistry clientAliasRegistry = new ClientAliasRegistry(); private ClientSharedContext clientSharedContext; @Before public void before() { List<ExtendedObjectCodec> serverExtendedObjectCodecs = Arrays.asList( new EntityCodec(), new PersistentListCodec(), new PersistentSetCodec(), new PersistentBagCodec(), new PersistentMapCodec(), new PersistentSortedSetCodec(), new PersistentSortedMapCodec() ); List<ExtendedObjectCodec> clientExtendedObjectCodecs = Arrays.asList((ExtendedObjectCodec) new ClientEntityCodec() ); dumpSharedContext = new DefaultSharedContext(new DefaultCodecRegistry()); serverSharedContext = new DefaultSharedContext(new DefaultCodecRegistry(serverExtendedObjectCodecs)); clientSharedContext = new DefaultClientSharedContext(new DefaultCodecRegistry(clientExtendedObjectCodecs), null, null, clientAliasRegistry); } @After public void after() { dumpSharedContext = null; serverSharedContext = null; clientSharedContext = null; } @Test public void testPropertiesOrder() throws ClassNotFoundException, IOException { clientAliasRegistry.registerAlias(ClientConcretePersistableChild.class); ConcretePersistableChild entity = new ConcretePersistableChild(); entity.setId(12); entity.setA("AAAA"); entity.setZ("ZZZZZZZZZ"); Object clientEntity = serializeAndDeserializeServerToClient(entity, true); Assert.assertTrue(clientEntity instanceof ClientConcretePersistableChild); Assert.assertEquals(entity.getId(), ((ClientConcretePersistableChild)clientEntity).getId()); Assert.assertEquals(entity.getA(), ((ClientConcretePersistableChild)clientEntity).getA()); Assert.assertEquals(entity.getZ(), ((ClientConcretePersistableChild)clientEntity).getZ()); Object serverEntity = serializeAndDeserializeClientToServer(clientEntity, true); Assert.assertTrue(serverEntity instanceof ConcretePersistableChild); Assert.assertEquals(((ClientConcretePersistableChild)clientEntity).getId(), ((ConcretePersistableChild)serverEntity).getId()); Assert.assertEquals(((ClientConcretePersistableChild)clientEntity).getA(), ((ConcretePersistableChild)serverEntity).getA()); Assert.assertEquals(((ClientConcretePersistableChild)clientEntity).getZ(), ((ConcretePersistableChild)serverEntity).getZ()); } @Test public void testEntityPropertiesOrder() throws ClassNotFoundException, IOException { clientAliasRegistry.registerAlias(ClientConcreteEntity.class); ConcreteEntity entity = new ConcreteEntity(); entity.setId(12L); entity.setCreateDate(new Date()); entity.setCreateUser("John"); entity.setBla("3247932"); entity.setCla("eiwuryti"); Object clientEntity = serializeAndDeserializeServerToClient(entity, true); Assert.assertTrue(clientEntity instanceof ClientConcreteEntity); Assert.assertEquals(entity.getId(), ((ClientConcreteEntity)clientEntity).getId()); Assert.assertEquals(entity.getUid(), ((ClientConcreteEntity)clientEntity).getUid()); Assert.assertEquals(entity.getVersion(), ((ClientConcreteEntity)clientEntity).getVersion()); Assert.assertEquals(entity.getCreateDate(), ((ClientConcreteEntity)clientEntity).getCreateDate()); Assert.assertEquals(entity.getCreateUser(), ((ClientConcreteEntity)clientEntity).getCreateUser()); Assert.assertEquals(entity.getBla(), ((ClientConcreteEntity)clientEntity).getBla()); Assert.assertEquals(entity.getCla(), ((ClientConcreteEntity)clientEntity).getCla()); Object serverEntity = serializeAndDeserializeClientToServer(clientEntity, true); Assert.assertTrue(serverEntity instanceof ConcreteEntity); Assert.assertEquals(((ClientConcreteEntity)clientEntity).getId(), ((ConcreteEntity)serverEntity).getId()); Assert.assertEquals(((ClientConcreteEntity)clientEntity).getUid(), ((ConcreteEntity)serverEntity).getUid()); Assert.assertEquals(((ClientConcreteEntity)clientEntity).getVersion(), ((ConcreteEntity)serverEntity).getVersion()); Assert.assertEquals(((ClientConcreteEntity)clientEntity).getCreateDate(), ((ConcreteEntity)serverEntity).getCreateDate()); Assert.assertEquals(((ClientConcreteEntity)clientEntity).getCreateUser(), ((ConcreteEntity)serverEntity).getCreateUser()); Assert.assertEquals(((ClientConcreteEntity)clientEntity).getBla(), ((ConcreteEntity)serverEntity).getBla()); Assert.assertEquals(((ClientConcreteEntity)clientEntity).getCla(), ((ConcreteEntity)serverEntity).getCla()); } // // private Object serializeAndDeserializeServerToServer(Object obj, boolean dump) throws ClassNotFoundException, IOException { // return serializeAndDeserialize(serverSharedContext, dumpSharedContext, serverSharedContext, obj, dump); // } private Object serializeAndDeserializeServerToClient(Object obj, boolean dump) throws ClassNotFoundException, IOException { return serializeAndDeserialize(serverSharedContext, dumpSharedContext, clientSharedContext, obj, dump); } private Object serializeAndDeserializeClientToServer(Object obj, boolean dump) throws ClassNotFoundException, IOException { return serializeAndDeserialize(clientSharedContext, dumpSharedContext, serverSharedContext, obj, dump); } private Object serializeAndDeserialize( SharedContext serializeSharedContext, SharedContext dumpSharedContext, SharedContext deserializeSharedContext, Object obj, boolean dump) throws ClassNotFoundException, IOException { ByteArrayJMFSerializer serializer = new ByteArrayJMFSerializer(serializeSharedContext); serializer.writeObject(obj); serializer.close(); byte[] bytes = serializer.toByteArray(); PrintStream ps = Util.newNullPrintStream(); if (dump) { System.out.println(bytes.length + "B. " + Util.toHexString(bytes)); ps = System.out; } JMFDumper dumper = new ByteArrayJMFDumper(bytes, dumpSharedContext, ps); dumper.dump(); dumper.close(); ByteArrayJMFDeserializer deserializer = new ByteArrayJMFDeserializer(bytes, deserializeSharedContext); Object clone = deserializer.readObject(); deserializer.close(); return clone; } }