]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/src/org/simantics/databoard/util/ObjectUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / util / ObjectUtils.java
diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/util/ObjectUtils.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/util/ObjectUtils.java
new file mode 100644 (file)
index 0000000..8293f02
--- /dev/null
@@ -0,0 +1,209 @@
+/*******************************************************************************\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
+
+package org.simantics.databoard.util;
+
+import java.lang.reflect.Array;\r
+import java.lang.reflect.Field;\r
+import java.util.Arrays;\r
+import java.util.Collection;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+
+/**
+ * ObjectUtils
+ * 
+ * @author Toni Kalajainen <toni.kalajainen@vtt.fi>
+ */
+public class ObjectUtils {
+
+    /**
+     * Equals test for two optional values. 
+     *  
+     * @param o1 obj1 or null
+     * @param o2 obj2 or null
+     * @return true if equal or both null
+     */
+    public static boolean objectEquals(Object o1, Object o2) {
+        if (o1==o2) return true;
+        if (o1==null && o2==null) return true;
+        if (o1==null || o2==null) return false;
+        return o1.equals(o2);
+    }
+    
+    public static int hashCode(Object obj) {
+        return (obj==null?0:obj.hashCode());
+    }
+
+       public static boolean equals(Collection<?> c1, Collection<?> c2)
+       {
+               if (c1.size()!=c2.size()) return false;
+               Iterator<?> i1 = c1.iterator();
+               Iterator<?> i2 = c2.iterator();
+               while (i1.hasNext())
+               {
+                       if (!ObjectUtils.objectEquals(i1.next(), i2.next()))
+                               return false;
+               }
+               return true;
+       }
+       
+       public static String toString(Collection<?> c)
+       {
+               if (c.isEmpty()) return "[]";
+       StringBuilder sb = new StringBuilder();
+       sb.append("[");
+       int i=0;
+       for (Object o : c)
+       {
+               if (i++>0) sb.append(", ");
+               sb.append( o );
+       }
+       sb.append("]");
+       return sb.toString();
+               
+       }
+       
+       
+       public static String printFieldsDeep(Object o)
+       {
+               Set<Object> visitedObjects = new HashSet<Object>();
+               StringBuilder sb = new StringBuilder();
+               _printFieldsDeep(sb, o, "", visitedObjects);
+               return sb.toString();
+       }
+       
+       private static void _printFieldsDeep(StringBuilder sb, Object o, String indent, Set<Object> visitedObjects)
+       {
+               Class<?> c = o.getClass();
+               sb.append(c.getSimpleName()+" (id="+System.identityHashCode(o)+")\n");
+               if (!visitedObjects.add(o)) return;
+               indent += "  ";
+               while (!c.equals(Object.class)) {
+                       for (Field f : ReflectionUtils.getAllFields(c))
+                       {
+                               boolean isStatic = (f.getModifiers() & 8) == 8;
+                               boolean isArray = f.getType().isArray();
+
+                               if (isStatic) continue;
+                               f.setAccessible(true);
+                               sb.append(indent+f.getName()+"=");
+                               try {
+                                       Object dada = f.get(o);         
+                                       if (dada==null)
+                                               sb.append("null\n");
+                                       else if (isArray) {
+                                       if (dada instanceof double[]) sb.append( Arrays.toString((double[])dada) +"\n"); 
+                                       else if (dada instanceof boolean[]) sb.append( Arrays.toString((boolean[])dada) +"\n"); 
+                                       else if (dada instanceof byte[]) sb.append( Arrays.toString((byte[])dada) +"\n"); 
+                                       else if (dada instanceof char[]) sb.append( Arrays.toString((char[])dada) +"\n"); 
+                                       else if (dada instanceof float[]) sb.append( Arrays.toString((float[])dada) +"\n"); 
+                                       else if (dada instanceof int[]) sb.append( Arrays.toString((int[])dada) +"\n"); 
+                                       else if (dada instanceof long[]) sb.append( Arrays.toString((long[])dada) +"\n"); 
+                                       else if (dada instanceof short[]) sb.append( Arrays.toString((short[])dada) +"\n");
+                                       else {
+                                               sb.append(dada.getClass().getComponentType()+"["+Array.getLength(dada)+"]\n");
+                                               for (int i=0; i<Array.getLength(dada); i++) {
+                                                       Object subDada = Array.get(dada, i);
+                                                       sb.append(indent+"  ["+i+"]=");
+                                                       try{
+                                                       if (subDada.getClass().getCanonicalName().startsWith("java")) {                                                          
+                                                               sb.append(subDada.toString());
+                                                               sb.append("\n");
+                                                       } else {
+                                                               _printFieldsDeep(sb, subDada, indent, visitedObjects);
+                                                       }
+                                                       }
+                                                       catch (Exception e) {
+                                                                       System.out.println("ERROR From ObjectUtils / _printfieldsDeep");
+                                                                       if(subDada == null){
+                                                                               System.out.println("Subdada null");
+                                                                               System.out.println(sb.toString());
+                                                                       }
+                                                               }
+                                                       
+                                               }
+                                       }
+                                       } else {
+                                       if (dada.getClass().getCanonicalName().startsWith("java")) {
+                                               sb.append(dada.toString());
+                                               sb.append("\n");
+                                       } else {
+                                               _printFieldsDeep(sb, dada, indent, visitedObjects);
+                                       }
+                                       }
+                                       //sb.append("\n");
+                               } catch (IllegalArgumentException e) {
+                                       sb.append("?");
+                                       continue;
+                               } catch (IllegalAccessException e) {
+                                       sb.append("?");
+                                       continue;
+                               }
+                       }
+                       c = c.getSuperclass();          
+               }
+       }
+       
+       public static String printFields(Object o)
+       {
+               Class<?> c = o.getClass();
+               StringBuilder sb = new StringBuilder();
+               
+               while (!c.equals(Object.class)) {
+                       for (Field f : c.getDeclaredFields())
+                       {
+                               boolean isStatic = (f.getModifiers() & 8) == 8;
+                               boolean isArray = f.getType().isArray();
+
+                               if (isStatic) continue;
+                               f.setAccessible(true);
+                               if (sb.length()>0) sb.append(", ");
+                               sb.append(f.getName()+"=");
+                               try {
+                                       Object dada = f.get(o);         
+                                       if (dada==null)
+                                               sb.append("null");
+                                       else if (isArray) 
+                                               sb.append(toString(dada));
+                                       else                            
+                                               sb.append(dada);
+                               } catch (IllegalArgumentException e) {
+                                       sb.append("?");
+                                       continue;
+                               } catch (IllegalAccessException e) {
+                                       sb.append("?");
+                                       continue;
+                               }
+                       }
+                       c = c.getSuperclass();
+               }
+               
+               return sb.toString();
+       }       
+
+    public static String toString(Object obj) {
+        if (obj instanceof Object[]) {            
+            return Arrays.toString((Object[])obj); 
+        }
+        if (obj instanceof double[]) return Arrays.toString((double[])obj); 
+        if (obj instanceof boolean[]) return Arrays.toString((boolean[])obj); 
+        if (obj instanceof byte[]) return Arrays.toString((byte[])obj); 
+        if (obj instanceof char[]) return Arrays.toString((char[])obj); 
+        if (obj instanceof float[]) return Arrays.toString((float[])obj); 
+        if (obj instanceof int[]) return Arrays.toString((int[])obj); 
+        if (obj instanceof long[]) return Arrays.toString((long[])obj); 
+        if (obj instanceof short[]) return Arrays.toString((short[])obj);
+        return obj.toString();
+    }          
+}