]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/src/org/simantics/databoard/binding/reflection/UnionClassBinding.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / binding / reflection / UnionClassBinding.java
index 16285422ee16e4ca2877c9db7138397846b2b4d9..e47e9289dff610641226b19c0411048f73887350 100644 (file)
@@ -1,48 +1,48 @@
-/*******************************************************************************\r
- *  Copyright (c) 2010 Association for Decentralized Information Management in\r
- *  Industry THTH ry.\r
- *  All rights reserved. This program and the accompanying materials\r
- *  are made available under the terms of the Eclipse Public License v1.0\r
- *  which accompanies this distribution, and is available at\r
- *  http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- *  Contributors:\r
- *      VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
+/*******************************************************************************
+ *  Copyright (c) 2010 Association for Decentralized Information Management in
+ *  Industry THTH ry.
+ *  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:
+ *      VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
 package org.simantics.databoard.binding.reflection;
 
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.adapter.AdaptException;\r
-import org.simantics.databoard.binding.Binding;\r
-import org.simantics.databoard.binding.UnionBinding;\r
-import org.simantics.databoard.binding.error.BindingConstructionException;\r
-import org.simantics.databoard.binding.error.BindingException;\r
-import org.simantics.databoard.serialization.Serializer;\r
-import org.simantics.databoard.serialization.SpecializedSerializerProvider;\r
-import org.simantics.databoard.type.UnionType;\r
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.adapter.AdaptException;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.binding.UnionBinding;
+import org.simantics.databoard.binding.error.BindingConstructionException;
+import org.simantics.databoard.binding.error.BindingException;
+import org.simantics.databoard.serialization.Serializer;
+import org.simantics.databoard.serialization.SpecializedSerializerProvider;
+import org.simantics.databoard.type.UnionType;
 
-/**\r
+/**
  * Bindings an abstract class with @Union annotation to a DataBoard's UnionType.
- * \r
- * Example of usage:\r
- *  @Union({Rectangle.class, Circle.class, Triangle.class}) class Shape {}\r
- *     \r
- *  class Rectangle extends Shape { public int width, height; }\r
- *  class Circle extends Shape { public int radius; }          \r
- *  class Triangle extends Shape { public int sideLength; }            \r
+ * 
+ * Example of usage:
+ *  @Union({Rectangle.class, Circle.class, Triangle.class}) class Shape {}
+ *     
+ *  class Rectangle extends Shape { public int width, height; }
+ *  class Circle extends Shape { public int radius; }          
+ *  class Triangle extends Shape { public int sideLength; }            
  *
  * @author Toni Kalajainen
  */
 class UnionClassBinding extends UnionBinding implements SpecializedSerializerProvider {
 
-       Class<?>[] componentClasses;\r
-       Serializer specializedSerializer;\r
+       Class<?>[] componentClasses;
+       Serializer specializedSerializer;
        
        public UnionClassBinding(UnionType type) 
        throws BindingConstructionException {
-               this.type = type;\r
-       }\r
-       \r
+               this.type = type;
+       }
+       
        @Override
        public Object create(int tag, Object value) {
                return value;
@@ -50,17 +50,17 @@ class UnionClassBinding extends UnionBinding implements SpecializedSerializerPro
 
     @Override
     public void setValue(Object union, int tag, Object value)
-       throws BindingException {\r
-       if (tag != getTag(union)) throw new BindingException("Cannot change the class of an instance");\r
-       Binding cb = getComponentBinding(tag);\r
+       throws BindingException {
+       if (tag != getTag(union)) throw new BindingException("Cannot change the class of an instance");
+       Binding cb = getComponentBinding(tag);
        cb.readFrom(cb, value, union);
-    }\r
+    }
        
        @Override
        public int getTag(Object obj) throws BindingException {
                for (int i=0; i<componentClasses.length; i++)
-                       if (componentClasses[i].isInstance(obj)) return i;\r
-               throw new BindingException(obj.getClass().getSimpleName()+" is not a known component class");\r
+                       if (componentClasses[i].isInstance(obj)) return i;
+               throw new BindingException(obj.getClass().getSimpleName()+" is not a known component class");
        }
        @Override
        public Object getValue(Object obj) {
@@ -71,89 +71,89 @@ class UnionClassBinding extends UnionBinding implements SpecializedSerializerPro
                for (Class<?> c : componentClasses) 
                        if (c.isInstance(obj)) return true;                                     
                return false;
-       }\r
-\r
-    @Override\r
-    public Serializer getSpecializedSerializer() {\r
-        return specializedSerializer;\r
+       }
+
+    @Override
+    public Serializer getSpecializedSerializer() {
+        return specializedSerializer;
     }
-\r
-\r
-       transient Boolean isImmutable;\r
-       \r
-       @Override\r
-       public synchronized boolean isImmutable() {\r
-               if ( isImmutable == null ) {\r
-                       boolean b = true;\r
-                       for ( Binding cb : getComponentBindings() ) {\r
-                               b &= cb.isImmutable();\r
-                               if (!b) break;\r
-                       }\r
-                       isImmutable = b;\r
-               }\r
-               return isImmutable;\r
-       }\r
-\r
-       @Override\r
-    public Object readFromTry(Binding srcBinding, Object src, Object dst) throws BindingException\r
-    {\r
-               UnionBinding sb = (UnionBinding) srcBinding;\r
-               int st = sb.getTag(src);\r
-               int dt = getTag(dst);\r
-               Binding scb = sb.getComponentBinding(st);\r
-               Object sv = sb.getValue(src);\r
-               \r
-               \r
-               if (st==dt) {\r
-                       // Same Tag\r
-                       Object dv = getValue(dst);\r
-                       Binding dcb = getComponentBinding(dt);\r
-                       dcb.readFrom(scb, sv, dv);\r
-                       return dv;\r
-               } else {\r
-                       // Different Tag -> return cloned or (same, if immutable) value\r
-                       try {\r
-                               Binding dcb = getComponentBinding(st);\r
-                               return Bindings.adapt(src, scb, dcb);\r
-                       } catch(AdaptException e) {\r
-                               throw new BindingException(e);\r
-                       }\r
-               }\r
-               \r
-       }       \r
-       \r
-       /**\r
-        * Returns true if the tag of this union type can be modified\r
-        *  \r
-        * @return\r
-        */\r
-       public boolean isTagMutable() {\r
-               return true;\r
-       }\r
\r
-       @Override\r
-       protected boolean baseEquals(Object obj) {\r
-               if (!super.baseEquals(obj)) return false;       \r
-\r
-               UnionClassBinding o = (UnionClassBinding)obj;\r
-               if (isImmutable != o.isImmutable) return false;\r
-               if (specializedSerializer != o.specializedSerializer) return false;\r
-               if (componentClasses.length != o.componentClasses.length) return false;\r
-               \r
-               for (int i = 0; i < componentClasses.length; i++) {\r
-                       if (!componentClasses[i].equals(o.componentClasses[i]))\r
-                               return false;\r
-               }\r
-               \r
-               return true;\r
-       }\r
-       \r
-       @Override\r
-       public int baseHashCode() {\r
-               int code = super.baseHashCode();\r
-               for (int i = 0; i < componentClasses.length; i++)\r
-                       code = 23 * code + componentClasses.hashCode();\r
-               \r
-               return code;\r
+
+
+       transient Boolean isImmutable;
+       
+       @Override
+       public synchronized boolean isImmutable() {
+               if ( isImmutable == null ) {
+                       boolean b = true;
+                       for ( Binding cb : getComponentBindings() ) {
+                               b &= cb.isImmutable();
+                               if (!b) break;
+                       }
+                       isImmutable = b;
+               }
+               return isImmutable;
+       }
+
+       @Override
+    public Object readFromTry(Binding srcBinding, Object src, Object dst) throws BindingException
+    {
+               UnionBinding sb = (UnionBinding) srcBinding;
+               int st = sb.getTag(src);
+               int dt = getTag(dst);
+               Binding scb = sb.getComponentBinding(st);
+               Object sv = sb.getValue(src);
+               
+               
+               if (st==dt) {
+                       // Same Tag
+                       Object dv = getValue(dst);
+                       Binding dcb = getComponentBinding(dt);
+                       dcb.readFrom(scb, sv, dv);
+                       return dv;
+               } else {
+                       // Different Tag -> return cloned or (same, if immutable) value
+                       try {
+                               Binding dcb = getComponentBinding(st);
+                               return Bindings.adapt(src, scb, dcb);
+                       } catch(AdaptException e) {
+                               throw new BindingException(e);
+                       }
+               }
+               
+       }       
+       
+       /**
+        * Returns true if the tag of this union type can be modified
+        *  
+        * @return
+        */
+       public boolean isTagMutable() {
+               return true;
+       }
+       @Override
+       protected boolean baseEquals(Object obj) {
+               if (!super.baseEquals(obj)) return false;       
+
+               UnionClassBinding o = (UnionClassBinding)obj;
+               if (isImmutable != o.isImmutable) return false;
+               if (specializedSerializer != o.specializedSerializer) return false;
+               if (componentClasses.length != o.componentClasses.length) return false;
+               
+               for (int i = 0; i < componentClasses.length; i++) {
+                       if (!componentClasses[i].equals(o.componentClasses[i]))
+                               return false;
+               }
+               
+               return true;
+       }
+       
+       @Override
+       public int baseHashCode() {
+               int code = super.baseHashCode();
+               for (int i = 0; i < componentClasses.length; i++)
+                       code = 23 * code + componentClasses.hashCode();
+               
+               return code;
        }
-}\r
+}