]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/examples/org/simantics/databoard/example/StringVariantBindingExample.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / examples / org / simantics / databoard / example / StringVariantBindingExample.java
diff --git a/bundles/org.simantics.databoard/examples/org/simantics/databoard/example/StringVariantBindingExample.java b/bundles/org.simantics.databoard/examples/org/simantics/databoard/example/StringVariantBindingExample.java
new file mode 100644 (file)
index 0000000..7b9176c
--- /dev/null
@@ -0,0 +1,107 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.\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.example;\r
+\r
+import java.awt.geom.Rectangle2D;\r
+import java.util.Arrays;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.binding.mutable.MutableVariant;\r
+\r
+public class StringVariantBindingExample {\r
+\r
+       public static void main(String[] args) throws Exception {\r
+\r
+               //\r
+               // You can escape any string to a string that is filename and URL compatible,\r
+               // using StringVariantBinding\r
+               //              \r
+               String str = "Hello World";\r
+               String escapedString = (String) Bindings.STR_VARIANT.create(Bindings.STRING, str);\r
+               String unescapedString = (String) Bindings.STR_VARIANT.getContent(escapedString, Bindings.STRING);\r
+               System.out.println("Unescaped String: "+unescapedString);\r
+               System.out.println("Escaped String: "+escapedString);\r
+               System.out.println();\r
+               \r
+               str = "http://www.simantics.org/path?query=value";\r
+               escapedString = (String) Bindings.STR_VARIANT.create(Bindings.STRING, str);\r
+               unescapedString = (String) Bindings.STR_VARIANT.getContent(escapedString, Bindings.STRING);\r
+               System.out.println("Unescaped String: "+unescapedString);\r
+               System.out.println("Escaped String: "+escapedString);\r
+               System.out.println();\r
+               \r
+               // \r
+               // The escaped string is actually a string representation of a variant.\r
+               // It contains information of the data type as well.\r
+               // Strings are prefixed with "S", Integers with "I", Longs "L",\r
+               // Other types are Base64 encoded binary which are not human readable.\r
+               //\r
+               // \r
+               // This means you can convert almost any value Integer, Long, Array, int[], \r
+               // Map, Set, Bean-like Class, Immutable-like class to a string and back\r
+               // to an object.\r
+               //\r
+               Object value = 5;\r
+               escapedString = (String) Bindings.STR_VARIANT.create(Bindings.INTEGER, value);\r
+               Object unescapedObject = (Integer) Bindings.STR_VARIANT.getContent(escapedString, Bindings.INTEGER);\r
+               System.out.println("Unescaped Object: "+unescapedObject);\r
+               System.out.println("Escaped String: "+escapedString);\r
+               System.out.println();\r
+\r
+               value = new int[] {1, 2, 3, 4, 5, 6};\r
+               escapedString = (String) Bindings.STR_VARIANT.create(Bindings.INTEGER, value);\r
+               unescapedObject = (int[]) Bindings.STR_VARIANT.getContent(escapedString, Bindings.INTEGER);             \r
+               System.out.println("Unescaped Object: "+Arrays.toString((int[]) unescapedObject));\r
+               System.out.println("Escaped String: "+escapedString);\r
+               System.out.println();\r
+\r
+               //\r
+               // You can change the class to a compatible class with another binding\r
+               // int[] -> Integer[]\r
+               //\r
+               Binding binding1 = Bindings.INT_ARRAY;\r
+               Binding binding2 = Bindings.getBinding(Integer[].class);\r
+               value = new int[] {1, 2, 3, 4, 5, 6};\r
+               escapedString = (String) Bindings.STR_VARIANT.create(binding1, value);\r
+               unescapedObject = (Integer[]) Bindings.STR_VARIANT.getContent(escapedString,  binding2);                \r
+               System.out.println("Unescaped Object: "+Arrays.toString((Integer[]) unescapedObject));\r
+               System.out.println("Escaped String: "+escapedString);\r
+               System.out.println();\r
+\r
+               //\r
+               // Binding.getBinding creates a binding for many classes by inspecting the class using a Reflection\r
+               //\r
+               Binding rectangleBinding = Bindings.getBinding(Rectangle2D.Double.class);\r
+               value = new Rectangle2D.Double(10, 10, 200, 200);\r
+               escapedString = (String) Bindings.STR_VARIANT.create(rectangleBinding, value);\r
+               unescapedObject = (Rectangle2D) Bindings.STR_VARIANT.getContent(escapedString, rectangleBinding);               \r
+               System.out.println("Unescaped Object: "+unescapedObject);\r
+               System.out.println("Escaped String: "+escapedString);\r
+               System.out.println();\r
+\r
+               //\r
+               // ObjectVariantBinding binds many java classes to java.lang.Object\r
+               // You can adapt Objects, which are bound as variants, to strings, also bound as variants \r
+               //\r
+               value = "Some object";\r
+               String stringVariant = (String) Bindings.adapt(value, Bindings.OBJECT, Bindings.STR_VARIANT);\r
+               Object objectVariant = Bindings.adapt(stringVariant, Bindings.STR_VARIANT, Bindings.OBJECT);\r
+               MutableVariant variantVariant = (MutableVariant) Bindings.adapt(stringVariant, Bindings.STR_VARIANT, Bindings.MUTABLE_VARIANT);         \r
+               System.out.println("Object Variant: "+objectVariant+" ("+objectVariant.getClass().getName()+")");\r
+               System.out.println("String Variant: "+stringVariant);\r
+               System.out.println("Variant Variant: "+variantVariant);\r
+               System.out.println();\r
+               \r
+       }\r
+       \r
+}\r
+\r