org.simantics.databoard
Class Bindings

java.lang.Object
  extended by org.simantics.databoard.Bindings

public class Bindings
extends java.lang.Object

This ia a facade class for the binding services.

Author:
Toni Kalajainen

Field Summary
static AdapterRepository adapterCache
           
static BindingRepository defaultScheme
          Default Scheme supports java primitives and others
static GenericBindingScheme genericBindingScheme
           
static ReflectionBinding reflectionBinding
           
static UnboundScheme UnboundScheme
           
 
Constructor Summary
Bindings()
           
 
Method Summary
static java.lang.Object adapt(java.lang.Object value, Binding domain, Binding range)
          Adapt a value of one type to another.
static java.lang.Object adaptUnchecked(java.lang.Object value, Binding domain, Binding range)
          Adapt a value of one type to another
static java.lang.Object clone(java.lang.Object value, Binding domain, Binding range)
          Clone a value to another type to another.
static java.lang.Object cloneUnchecked(java.lang.Object value, Binding domain, Binding range)
          Clone a value of one binding to another.
static int compare(Binding b1, java.lang.Object o1, Binding b2, java.lang.Object o2)
          Compares its two data values for order.
static java.util.Comparator<java.lang.Object> createComparator(Binding b1, Binding b2)
           
static boolean equals(Binding b1, java.lang.Object o1, Binding b2, java.lang.Object o2)
          Compare two data values for equality.
static Adapter getAdapter(Binding domain, Binding range)
          Create an adapter that adapts two bindings of the same data type.
static Adapter getAdapterUnchecked(Binding domain, Binding range)
          Create an adapter that adapts between two bindings of the same data type.
static
<T extends Binding>
T
getBinding(java.lang.Class<?> clazz)
          Get a binding to a Java Class.
static
<T extends Binding>
T
getBinding(DataType type)
          Get a generic binding to a DataType.
static Binding getBindingUnchecked(java.lang.Class<?> clazz)
          Read binding and type from a class.
static Adapter getTypeAdapter(Binding domain, Binding range)
          Create a type adapter that adapts instances from one DataType to another.
static Adapter getTypeAdapterUnchecked(Binding domain, Binding range)
          Create a type adapter that adapts instances from one DataType to another.
static
<T extends Binding>
T
getUnboundBinding(DataType type)
          Unbound binding is a fake binding that is used with Serializer for two purposes.
static BindingScheme schemeOver(Binding binding)
          Create Binding Scheme that covers one binding
static java.lang.String toString(java.lang.Object o)
          Print the content of an object as a structure.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

adapterCache

public static final AdapterRepository adapterCache

reflectionBinding

public static final ReflectionBinding reflectionBinding

UnboundScheme

public static final UnboundScheme UnboundScheme

genericBindingScheme

public static final GenericBindingScheme genericBindingScheme

defaultScheme

public static final BindingRepository defaultScheme
Default Scheme supports java primitives and others

Constructor Detail

Bindings

public Bindings()
Method Detail

getBinding

public static <T extends Binding> T getBinding(DataType type)
Get a generic binding to a DataType. The result is a binding to completely mutable java classes. DataType | Class of the bound instance ===================|================== UnionType | GenericBinding.TaggedObject.class OptionType | ValueContainer.class RecordType | Object[].class BooleanType | MutableBoolean.class DoubleType | MutableDouble.class FloatType | MutableFloat.class ByteType | MutableByte.class IntegerType | MutableInt.class LongType | MutableLong.class StringType | ValueContainer.class ArrayType | ArrayList.class MapType | TreeMap.class VariantType | Variant.class

Parameters:
type -
Returns:
binding binding to a mutable class

getBinding

public static <T extends Binding> T getBinding(java.lang.Class<?> clazz)
                                    throws BindingConstructionException
Get a binding to a Java Class. Type details can be modified with annotations. Please see the package org.simantics.databoard.annotations.

The whether the result binding is a completely mutable or not depends on the provided classes. For instance, fields such as Boolean, Integer, Long are not mutable, instead MutableBoolean, MutableInteger and MutableLong are. The length of Object[] is not mutable, but length of List is.

Parameters:
clazz -
Returns:
binding
Throws:
BindingConstructionException
See Also:
ReflectionBinding

getBindingUnchecked

public static Binding getBindingUnchecked(java.lang.Class<?> clazz)
                                   throws RuntimeBindingConstructionException
Read binding and type from a class. DataType details and parameters are read as annotations placed in the class. (See org.simantics.databoard.annotations)

As an exception, in the subclasses of Throwable, the fields of Throwable are omited.

This method is used when the caller is 100% sure that binding will be constructed without exceptions. Such classes are all primitive types (Double, Integer, etc, arrays, DataType, ...) This method is unchecked if binding construction to the clazz cannot be trusted. If construction fails, a RuntimeException is thrown.

Parameters:
clazz -
Returns:
binding
Throws:
RuntimeBindingConstructionException

getUnboundBinding

public static <T extends Binding> T getUnboundBinding(DataType type)
Unbound binding is a fake binding that is used with Serializer for two purposes. The first is for validating data the format of data with out instantiating Objects, and the second is for skipping over bytes of unknown sized objects of a stream.

Parameters:
type -
Returns:
binding

schemeOver

public static BindingScheme schemeOver(Binding binding)
Create Binding Scheme that covers one binding

Parameters:
binding -
Returns:
scheme that covers the binding

getAdapter

public static Adapter getAdapter(Binding domain,
                                 Binding range)
                          throws AdapterConstructionException
Create an adapter that adapts two bindings of the same data type.

Parameters:
domain - binding of the source instance
range - binding of the result instance
Returns:
result adapter
Throws:
AdapterConstructionException

getAdapterUnchecked

public static Adapter getAdapterUnchecked(Binding domain,
                                          Binding range)
                                   throws RuntimeAdapterConstructionException
Create an adapter that adapts between two bindings of the same data type.

Parameters:
domain - binding of the source instance
range - binding of the result instance
Returns:
result adapter
Throws:
AdapterConstructionException
RuntimeAdapterConstructionException

getTypeAdapter

public static Adapter getTypeAdapter(Binding domain,
                                     Binding range)
                              throws AdapterConstructionException
Create a type adapter that adapts instances from one DataType to another. Type Adapter does the following conversions: o Number Types, e.g. long -> double o Unit Types, e.g. mph -> km/h o Record Types, for each field of the range, there must be equal in domain o Union Types, for each tag type of the domain, there must be equal in range AdaptException is thrown at runtime, if number values are not compatible, e.g. converting value 500 from Long to Byte. Note, there is also a possibility of precision loss, e.g. when converting from double to int.

Parameters:
domain - binding of the source instance
range - binding of the result instance
Returns:
result adapter
Throws:
AdapterConstructionException

getTypeAdapterUnchecked

public static Adapter getTypeAdapterUnchecked(Binding domain,
                                              Binding range)
Create a type adapter that adapts instances from one DataType to another. Type Adapter does the following conversions: o Number Types, e.g. long -> double o Unit Types, e.g. mph -> km/h o Record Types, for each field of the range, there must be equal in domain o Union Types, for each tag type of the domain, there must be equal in range AdaptException is thrown at runtime, if number values are not compatible, e.g. converting value 500 from Long to Byte. Note, there is also a possibility of precision loss, e.g. when converting from double to int.

Parameters:
domain - binding of the source instance
range - binding of the result instance
Returns:
result adapter
Throws:
AdapterConstructionException

adapt

public static java.lang.Object adapt(java.lang.Object value,
                                     Binding domain,
                                     Binding range)
                              throws AdaptException
Adapt a value of one type to another.

Parameters:
value -
domain -
range -
Returns:
adapted value
Throws:
AdapterConstructionException
AdaptException

adaptUnchecked

public static java.lang.Object adaptUnchecked(java.lang.Object value,
                                              Binding domain,
                                              Binding range)
                                       throws RuntimeAdapterConstructionException,
                                              RuntimeAdaptException
Adapt a value of one type to another

Parameters:
value -
domain -
range -
Returns:
adapted value
Throws:
AdapterConstructionException
AdaptException
RuntimeAdapterConstructionException
RuntimeAdaptException

clone

public static java.lang.Object clone(java.lang.Object value,
                                     Binding domain,
                                     Binding range)
                              throws AdaptException
Clone a value to another type to another. Bindings that handle immutable values may return the same instance, others will guarantee a complete copy.

Parameters:
value -
domain -
range -
Returns:
adapted value
Throws:
AdapterConstructionException
AdaptException

cloneUnchecked

public static java.lang.Object cloneUnchecked(java.lang.Object value,
                                              Binding domain,
                                              Binding range)
                                       throws RuntimeAdapterConstructionException,
                                              RuntimeAdaptException
Clone a value of one binding to another. Bindings that handle immutable values may return the same instance, others will guarantee a complete copy.

Parameters:
value -
domain -
range -
Returns:
adapted value
Throws:
AdapterConstructionException
AdaptException
RuntimeAdapterConstructionException
RuntimeAdaptException

compare

public static int compare(Binding b1,
                          java.lang.Object o1,
                          Binding b2,
                          java.lang.Object o2)
                   throws BindingException
Compares its two data values for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

DataTypes of b1 and b2 are not equal then data types are compared.

The comparison function is defined at https://www.simantics.org/wiki/index.php/Org.simantics.datatype_Manual#CompareTo_and_Equals

Note, comparing 2 different number types will not result a value comparison. Instead values have the following type precedence ByteType, IntegerType, LongType, FloatType, and the highest DoubleType.

Parameters:
b1 - Binding of o1
o1 - the first object to be compared.
b2 - Binding of o2
o2 - the second object to be compared.
Returns:
a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
Throws:
BindingException - if object cannot be handled by a binding

equals

public static boolean equals(Binding b1,
                             java.lang.Object o1,
                             Binding b2,
                             java.lang.Object o2)
                      throws BindingException
Compare two data values for equality.

Note, comparing 2 different number types will not result a value comparison. Instead values have the following type precedence ByteType, IntegerType, LongType, FloatType, and the highest DoubleType.

Parameters:
b1 -
o1 -
b2 -
o2 -
Returns:
true if equal
Throws:
BindingException

createComparator

public static java.util.Comparator<java.lang.Object> createComparator(Binding b1,
                                                                      Binding b2)

toString

public static java.lang.String toString(java.lang.Object o)
Print the content of an object as a structure. Utility function for debug purposes.

Parameters:
o -
Returns:
content