+/*******************************************************************************\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