]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 /*******************************************************************************\r
2  * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.\r
3  * All rights reserved. This program and the accompanying materials\r
4  * are made available under the terms of the Eclipse Public License v1.0\r
5  * which accompanies this distribution, and is available at\r
6  * http://www.eclipse.org/legal/epl-v10.html\r
7  *\r
8  * Contributors:\r
9  *     VTT Technical Research Centre of Finland - initial API and implementation\r
10  *******************************************************************************/\r
11 package org.simantics.databoard.example;\r
12 \r
13 import java.awt.geom.Rectangle2D;\r
14 import java.util.Arrays;\r
15 \r
16 import org.simantics.databoard.Bindings;\r
17 import org.simantics.databoard.binding.Binding;\r
18 import org.simantics.databoard.binding.mutable.MutableVariant;\r
19 \r
20 public class StringVariantBindingExample {\r
21 \r
22         public static void main(String[] args) throws Exception {\r
23 \r
24                 //\r
25                 // You can escape any string to a string that is filename and URL compatible,\r
26                 // using StringVariantBinding\r
27                 //              \r
28                 String str = "Hello World";\r
29                 String escapedString = (String) Bindings.STR_VARIANT.create(Bindings.STRING, str);\r
30                 String unescapedString = (String) Bindings.STR_VARIANT.getContent(escapedString, Bindings.STRING);\r
31                 System.out.println("Unescaped String: "+unescapedString);\r
32                 System.out.println("Escaped String: "+escapedString);\r
33                 System.out.println();\r
34                 \r
35                 str = "http://www.simantics.org/path?query=value";\r
36                 escapedString = (String) Bindings.STR_VARIANT.create(Bindings.STRING, str);\r
37                 unescapedString = (String) Bindings.STR_VARIANT.getContent(escapedString, Bindings.STRING);\r
38                 System.out.println("Unescaped String: "+unescapedString);\r
39                 System.out.println("Escaped String: "+escapedString);\r
40                 System.out.println();\r
41                 \r
42                 // \r
43                 // The escaped string is actually a string representation of a variant.\r
44                 // It contains information of the data type as well.\r
45                 // Strings are prefixed with "S", Integers with "I", Longs "L",\r
46                 // Other types are Base64 encoded binary which are not human readable.\r
47                 //\r
48                 // \r
49                 // This means you can convert almost any value Integer, Long, Array, int[], \r
50                 // Map, Set, Bean-like Class, Immutable-like class to a string and back\r
51                 // to an object.\r
52                 //\r
53                 Object value = 5;\r
54                 escapedString = (String) Bindings.STR_VARIANT.create(Bindings.INTEGER, value);\r
55                 Object unescapedObject = (Integer) Bindings.STR_VARIANT.getContent(escapedString, Bindings.INTEGER);\r
56                 System.out.println("Unescaped Object: "+unescapedObject);\r
57                 System.out.println("Escaped String: "+escapedString);\r
58                 System.out.println();\r
59 \r
60                 value = new int[] {1, 2, 3, 4, 5, 6};\r
61                 escapedString = (String) Bindings.STR_VARIANT.create(Bindings.INTEGER, value);\r
62                 unescapedObject = (int[]) Bindings.STR_VARIANT.getContent(escapedString, Bindings.INTEGER);             \r
63                 System.out.println("Unescaped Object: "+Arrays.toString((int[]) unescapedObject));\r
64                 System.out.println("Escaped String: "+escapedString);\r
65                 System.out.println();\r
66 \r
67                 //\r
68                 // You can change the class to a compatible class with another binding\r
69                 // int[] -> Integer[]\r
70                 //\r
71                 Binding binding1 = Bindings.INT_ARRAY;\r
72                 Binding binding2 = Bindings.getBinding(Integer[].class);\r
73                 value = new int[] {1, 2, 3, 4, 5, 6};\r
74                 escapedString = (String) Bindings.STR_VARIANT.create(binding1, value);\r
75                 unescapedObject = (Integer[]) Bindings.STR_VARIANT.getContent(escapedString,  binding2);                \r
76                 System.out.println("Unescaped Object: "+Arrays.toString((Integer[]) unescapedObject));\r
77                 System.out.println("Escaped String: "+escapedString);\r
78                 System.out.println();\r
79 \r
80                 //\r
81                 // Binding.getBinding creates a binding for many classes by inspecting the class using a Reflection\r
82                 //\r
83                 Binding rectangleBinding = Bindings.getBinding(Rectangle2D.Double.class);\r
84                 value = new Rectangle2D.Double(10, 10, 200, 200);\r
85                 escapedString = (String) Bindings.STR_VARIANT.create(rectangleBinding, value);\r
86                 unescapedObject = (Rectangle2D) Bindings.STR_VARIANT.getContent(escapedString, rectangleBinding);               \r
87                 System.out.println("Unescaped Object: "+unescapedObject);\r
88                 System.out.println("Escaped String: "+escapedString);\r
89                 System.out.println();\r
90 \r
91                 //\r
92                 // ObjectVariantBinding binds many java classes to java.lang.Object\r
93                 // You can adapt Objects, which are bound as variants, to strings, also bound as variants \r
94                 //\r
95                 value = "Some object";\r
96                 String stringVariant = (String) Bindings.adapt(value, Bindings.OBJECT, Bindings.STR_VARIANT);\r
97                 Object objectVariant = Bindings.adapt(stringVariant, Bindings.STR_VARIANT, Bindings.OBJECT);\r
98                 MutableVariant variantVariant = (MutableVariant) Bindings.adapt(stringVariant, Bindings.STR_VARIANT, Bindings.MUTABLE_VARIANT);         \r
99                 System.out.println("Object Variant: "+objectVariant+" ("+objectVariant.getClass().getName()+")");\r
100                 System.out.println("String Variant: "+stringVariant);\r
101                 System.out.println("Variant Variant: "+variantVariant);\r
102                 System.out.println();\r
103                 \r
104         }\r
105         \r
106 }\r
107 \r