]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/src/org/simantics/databoard/serialization/impl/ReferableRecordSerializer.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / serialization / impl / ReferableRecordSerializer.java
index c379994a4338f1da045d3e633db4727e495e262e..864459aa315cffa481af288e745b916e108a1a65 100644 (file)
-package org.simantics.databoard.serialization.impl;\r
-\r
-import gnu.trove.map.hash.TObjectIntHashMap;\r
-\r
-import java.io.DataInput;\r
-import java.io.DataOutput;\r
-import java.io.IOException;\r
-import java.util.List;\r
-\r
-import org.simantics.databoard.binding.RecordBinding;\r
-import org.simantics.databoard.binding.error.BindingException;\r
-import org.simantics.databoard.serialization.SerializationException;\r
-import org.simantics.databoard.serialization.Serializer;\r
-import org.simantics.databoard.serialization.Serializer.RecursiveSerializer;\r
-import org.simantics.databoard.type.RecordType;\r
-\r
-public class ReferableRecordSerializer extends RecursiveSerializer {\r
-\r
-       RecordBinding binding;\r
-       public Serializer[] componentSerializers;\r
-       \r
-       /** The combined size elements, or <code>null</code> */ \r
-       Integer fixedSizeOfContent;\r
-       int minContentSize;\r
-       \r
-       public ReferableRecordSerializer(RecordBinding binding, Serializer[] componentSerializers) {\r
-               this.binding = binding;\r
-               this.componentSerializers = componentSerializers;\r
-       }\r
-       \r
-       @Override\r
-       public void finalizeConstruction() {\r
-               fixedSizeOfContent = null;\r
-               for (Serializer componentSerializer : componentSerializers) {\r
-                       minContentSize += componentSerializer.getMinSize();\r
-                       Integer componentFixedSize = componentSerializer.getConstantSize();\r
-                       if (componentFixedSize==null) {\r
-                               fixedSizeOfContent = null;\r
-                               break;\r
-                       }\r
-                       fixedSizeOfContent = fixedSizeOfContent==null ? componentFixedSize : fixedSizeOfContent + componentFixedSize; \r
-               }\r
-       }\r
-\r
-       boolean referable() {\r
-               return ((RecordType)binding.type()).isReferable();\r
-       }\r
-       \r
-       @Override\r
-       public Object deserialize(DataInput in, List<Object> identities) throws IOException {\r
-               try {\r
-                       int id = in.readInt();\r
-                       if(id > 0)\r
-                               return identities.get(id-1);                    \r
-                       \r
-                       Object result = binding.createPartial();\r
-                       identities.add(result);\r
-                       \r
-//                     assertRemainingBytes(in, minContentSize);\r
-                       Object[] temp = new Object[componentSerializers.length];\r
-                       for(int i=0;i<componentSerializers.length;++i)\r
-                               temp[i] = componentSerializers[i].deserialize(in, identities);\r
-                       binding.setComponents(result, temp);\r
-                       \r
-                       return result;\r
-               } catch (BindingException e) {\r
-                       throw new IOException( e ); \r
-               }\r
-       }\r
-       \r
-       @Override\r
-       public void deserializeTo(DataInput in, List<Object> identities,\r
-                       Object obj) throws IOException {\r
-               try {\r
-                       int id = in.readInt();\r
-                       if(id > 0) {\r
-                               Object alreadyDeserializedObject = identities.get(id-1);\r
-                               if (alreadyDeserializedObject!=obj) {\r
-                                       for (int i=0; i<binding.getComponentCount(); ++i) {\r
-                                               Object component = binding.getComponent(alreadyDeserializedObject, i);\r
-                                               binding.setComponent(obj, i, component);\r
-                                       }\r
-                               }\r
-                               return;\r
-                       }\r
-                       \r
-                       identities.add(obj);\r
-//                     assertRemainingBytes(in, minContentSize);\r
-                       for(int i=0;i<componentSerializers.length;++i) {\r
-                               Serializer cs = componentSerializers[i];\r
-                               boolean csImmutable = binding.getComponentBinding(i).isImmutable();\r
-                               if (csImmutable) {\r
-                                       Object component = cs.deserialize(in, identities);\r
-                                       binding.setComponent(obj, i, component);\r
-                               } else {\r
-                                       Object component = binding.getComponent(obj, i);\r
-                                       component = cs.deserializeToTry(in, identities, component);\r
-                                       binding.setComponent(obj, i, component);\r
-                               }\r
-                       }\r
-               } catch (BindingException e) {\r
-                       throw new IOException( e ); \r
-               }\r
-               \r
-       }\r
-       \r
-       @Override\r
-       public void skip(DataInput in, List<Object> identities) throws IOException, SerializationException {\r
-               \r
-               int id = in.readInt();\r
-               if(id > 0) return;                      \r
-               \r
-               for(int i=0;i<componentSerializers.length;++i)\r
-                       componentSerializers[i].skip(in, identities);\r
-       }\r
-\r
-       @Override\r
-       public void serialize(DataOutput out, TObjectIntHashMap<Object> identities, Object obj) throws IOException {\r
-               try {\r
-                       int id = identities.get(obj);\r
-                       if(id > 0) {\r
-                               out.writeInt(id);\r
-                       }\r
-                       else {\r
-                               out.writeInt(0);\r
-                               identities.put(obj, identities.size() + 1);\r
-                               for(int i=0;i<componentSerializers.length;++i)\r
-                                       componentSerializers[i].serialize(out, identities, binding.getComponent(obj, i));\r
-                       }\r
-               } catch (BindingException e) {\r
-                       throw new IOException( e ); \r
-               }\r
-                       \r
-       }\r
-\r
-       @Override\r
-       public Integer getConstantSize() {\r
-               return null;\r
-       }\r
-\r
-       @Override\r
-       public int getSize(Object obj, TObjectIntHashMap<Object> identities) throws IOException {\r
-               try {\r
-                       int id = identities.get(obj);\r
-                       if (id>0) return 4;\r
-                       identities.put(obj, identities.size()+1);\r
-                       if (fixedSizeOfContent!=null) return 4+fixedSizeOfContent;\r
-                       int result = 4;                 \r
-                       for(int i=0;i<componentSerializers.length;++i)\r
-                               result += componentSerializers[i].getSize( binding.getComponent(obj, i), identities );                  \r
-                       return result;\r
-               } catch (BindingException e) {\r
-                       throw new IOException( e ); \r
-               }\r
-                       \r
-       }\r
-       \r
-       @Override\r
-       public int getMinSize() {\r
-               return 4;\r
-       }\r
-       \r
-}\r
-\r
+package org.simantics.databoard.serialization.impl;
+
+import gnu.trove.map.hash.TObjectIntHashMap;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.List;
+
+import org.simantics.databoard.binding.RecordBinding;
+import org.simantics.databoard.binding.error.BindingException;
+import org.simantics.databoard.serialization.SerializationException;
+import org.simantics.databoard.serialization.Serializer;
+import org.simantics.databoard.serialization.Serializer.RecursiveSerializer;
+import org.simantics.databoard.type.RecordType;
+
+public class ReferableRecordSerializer extends RecursiveSerializer {
+
+       RecordBinding binding;
+       public Serializer[] componentSerializers;
+       
+       /** The combined size elements, or <code>null</code> */ 
+       Integer fixedSizeOfContent;
+       int minContentSize;
+       
+       public ReferableRecordSerializer(RecordBinding binding, Serializer[] componentSerializers) {
+               this.binding = binding;
+               this.componentSerializers = componentSerializers;
+       }
+       
+       @Override
+       public void finalizeConstruction() {
+               fixedSizeOfContent = null;
+               for (Serializer componentSerializer : componentSerializers) {
+                       minContentSize += componentSerializer.getMinSize();
+                       Integer componentFixedSize = componentSerializer.getConstantSize();
+                       if (componentFixedSize==null) {
+                               fixedSizeOfContent = null;
+                               break;
+                       }
+                       fixedSizeOfContent = fixedSizeOfContent==null ? componentFixedSize : fixedSizeOfContent + componentFixedSize; 
+               }
+       }
+
+       boolean referable() {
+               return ((RecordType)binding.type()).isReferable();
+       }
+       
+       @Override
+       public Object deserialize(DataInput in, List<Object> identities) throws IOException {
+               try {
+                       int id = in.readInt();
+                       if(id > 0)
+                               return identities.get(id-1);                    
+                       
+                       Object result = binding.createPartial();
+                       identities.add(result);
+                       
+//                     assertRemainingBytes(in, minContentSize);
+                       Object[] temp = new Object[componentSerializers.length];
+                       for(int i=0;i<componentSerializers.length;++i)
+                               temp[i] = componentSerializers[i].deserialize(in, identities);
+                       binding.setComponents(result, temp);
+                       
+                       return result;
+               } catch (BindingException e) {
+                       throw new IOException( e ); 
+               }
+       }
+       
+       @Override
+       public void deserializeTo(DataInput in, List<Object> identities,
+                       Object obj) throws IOException {
+               try {
+                       int id = in.readInt();
+                       if(id > 0) {
+                               Object alreadyDeserializedObject = identities.get(id-1);
+                               if (alreadyDeserializedObject!=obj) {
+                                       for (int i=0; i<binding.getComponentCount(); ++i) {
+                                               Object component = binding.getComponent(alreadyDeserializedObject, i);
+                                               binding.setComponent(obj, i, component);
+                                       }
+                               }
+                               return;
+                       }
+                       
+                       identities.add(obj);
+//                     assertRemainingBytes(in, minContentSize);
+                       for(int i=0;i<componentSerializers.length;++i) {
+                               Serializer cs = componentSerializers[i];
+                               boolean csImmutable = binding.getComponentBinding(i).isImmutable();
+                               if (csImmutable) {
+                                       Object component = cs.deserialize(in, identities);
+                                       binding.setComponent(obj, i, component);
+                               } else {
+                                       Object component = binding.getComponent(obj, i);
+                                       component = cs.deserializeToTry(in, identities, component);
+                                       binding.setComponent(obj, i, component);
+                               }
+                       }
+               } catch (BindingException e) {
+                       throw new IOException( e ); 
+               }
+               
+       }
+       
+       @Override
+       public void skip(DataInput in, List<Object> identities) throws IOException, SerializationException {
+               
+               int id = in.readInt();
+               if(id > 0) return;                      
+               
+               for(int i=0;i<componentSerializers.length;++i)
+                       componentSerializers[i].skip(in, identities);
+       }
+
+       @Override
+       public void serialize(DataOutput out, TObjectIntHashMap<Object> identities, Object obj) throws IOException {
+               try {
+                       int id = identities.get(obj);
+                       if(id > 0) {
+                               out.writeInt(id);
+                       }
+                       else {
+                               out.writeInt(0);
+                               identities.put(obj, identities.size() + 1);
+                               for(int i=0;i<componentSerializers.length;++i)
+                                       componentSerializers[i].serialize(out, identities, binding.getComponent(obj, i));
+                       }
+               } catch (BindingException e) {
+                       throw new IOException( e ); 
+               }
+                       
+       }
+
+       @Override
+       public Integer getConstantSize() {
+               return null;
+       }
+
+       @Override
+       public int getSize(Object obj, TObjectIntHashMap<Object> identities) throws IOException {
+               try {
+                       int id = identities.get(obj);
+                       if (id>0) return 4;
+                       identities.put(obj, identities.size()+1);
+                       if (fixedSizeOfContent!=null) return 4+fixedSizeOfContent;
+                       int result = 4;                 
+                       for(int i=0;i<componentSerializers.length;++i)
+                               result += componentSerializers[i].getSize( binding.getComponent(obj, i), identities );                  
+                       return result;
+               } catch (BindingException e) {
+                       throw new IOException( e ); 
+               }
+                       
+       }
+       
+       @Override
+       public int getMinSize() {
+               return 4;
+       }
+       
+}
+