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
9 * VTT Technical Research Centre of Finland - initial API and implementation
\r
10 *******************************************************************************/
\r
11 package org.simantics.databoard.example;
\r
13 import java.awt.geom.Rectangle2D;
\r
14 import java.util.Arrays;
\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
20 public class StringVariantBindingExample {
\r
22 public static void main(String[] args) throws Exception {
\r
25 // You can escape any string to a string that is filename and URL compatible,
\r
26 // using StringVariantBinding
\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
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
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
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
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
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
68 // You can change the class to a compatible class with another binding
\r
69 // int[] -> Integer[]
\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
81 // Binding.getBinding creates a binding for many classes by inspecting the class using a Reflection
\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
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
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