Search in sources :

Example 1 with Binding

use of com.canoo.platform.core.functional.Binding in project dolphin-platform by canoo.

the class AbstractNumericDolphinBinder method bidirectionalToNumeric.

@Override
public Binding bidirectionalToNumeric(final javafx.beans.property.Property<Number> javaFxProperty) {
    if (javaFxProperty == null) {
        throw new IllegalArgumentException("javaFxProperty must not be null");
    }
    final Binding unidirectionalBinding = toNumeric(javaFxProperty);
    final Subscription subscription = property.onChanged(e -> {
        if (!equals(javaFxProperty.getValue(), property.get())) {
            javaFxProperty.setValue(getConverter().convertBack(property.get()));
        }
    });
    return () -> {
        unidirectionalBinding.unbind();
        subscription.unsubscribe();
    };
}
Also used : Binding(com.canoo.platform.core.functional.Binding) Subscription(com.canoo.platform.core.functional.Subscription)

Example 2 with Binding

use of com.canoo.platform.core.functional.Binding in project dolphin-platform by canoo.

the class DefaultJavaFXBidirectionalBinder method bidirectionalTo.

@Override
public <T> Binding bidirectionalTo(final Property<T> property, final BidirectionalConverter<T, S> converter) {
    final Binding unidirectionalBinding = to(property, converter);
    final ChangeListener<S> listener = (obs, oldVal, newVal) -> property.set(converter.convertBack(newVal));
    javaFxProperty.addListener(listener);
    return () -> {
        javaFxProperty.removeListener(listener);
        unidirectionalBinding.unbind();
    };
}
Also used : Binding(com.canoo.platform.core.functional.Binding) BidirectionalConverter(com.canoo.platform.remoting.client.javafx.BidirectionalConverter) Binding(com.canoo.platform.core.functional.Binding) JavaFXBidirectionalBinder(com.canoo.platform.remoting.client.javafx.binding.JavaFXBidirectionalBinder) Property(com.canoo.platform.remoting.Property) API(org.apiguardian.api.API) ChangeListener(javafx.beans.value.ChangeListener) INTERNAL(org.apiguardian.api.API.Status.INTERNAL)

Example 3 with Binding

use of com.canoo.platform.core.functional.Binding in project dolphin-platform by canoo.

the class DefaultJavaFXListBinder method to.

@Override
public <T> Binding to(final ObservableList<T> dolphinList, final Function<? super T, ? extends S> converter) {
    Assert.requireNonNull(dolphinList, "dolphinList");
    Assert.requireNonNull(converter, "converter");
    if (boundLists.containsKey(list)) {
        throw new UnsupportedOperationException("A JavaFX list can only be bound to one Dolphin Platform list!");
    }
    boundLists.put(list, list);
    final InternalListChangeListener<T> listChangeListener = new InternalListChangeListener<>(converter);
    final Subscription subscription = dolphinList.onChanged(listChangeListener);
    list.setAll(dolphinList.stream().map(converter).collect(Collectors.toList()));
    ListChangeListener<S> readOnlyListener = c -> {
        if (!listChangeListener.onChange) {
            throw new UnsupportedOperationException("A JavaFX list that is bound to a dolphin list can only be modified by the binding!");
        }
    };
    list.addListener(readOnlyListener);
    return () -> {
        subscription.unsubscribe();
        list.removeListener(readOnlyListener);
        boundLists.remove(list);
    };
}
Also used : Binding(com.canoo.platform.core.functional.Binding) Subscription(com.canoo.platform.core.functional.Subscription) IdentityHashMap(java.util.IdentityHashMap) ListChangeListener(javafx.collections.ListChangeListener) ObservableList(com.canoo.platform.remoting.ObservableList) Assert(com.canoo.dp.impl.platform.core.Assert) JavaFXListBinder(com.canoo.platform.remoting.client.javafx.binding.JavaFXListBinder) API(org.apiguardian.api.API) ListChangeEvent(com.canoo.platform.remoting.ListChangeEvent) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) INTERNAL(org.apiguardian.api.API.Status.INTERNAL) Subscription(com.canoo.platform.core.functional.Subscription)

Example 4 with Binding

use of com.canoo.platform.core.functional.Binding in project dolphin-platform by canoo.

the class FXBinderTest method testJavaFXIntegerBidirectional.

@Test
public void testJavaFXIntegerBidirectional() {
    Property<Integer> integerDolphinProperty = new MockedProperty<>();
    Property<Number> numberDolphinProperty = new MockedProperty<>();
    IntegerProperty integerJavaFXProperty = new SimpleIntegerProperty();
    integerDolphinProperty.set(47);
    assertNotEquals(integerJavaFXProperty.get(), 47);
    Binding binding = FXBinder.bind(integerJavaFXProperty).bidirectionalToNumeric(integerDolphinProperty);
    assertEquals(integerJavaFXProperty.get(), 47);
    integerDolphinProperty.set(100);
    assertEquals(integerJavaFXProperty.get(), 100);
    integerDolphinProperty.set(null);
    assertEquals(integerJavaFXProperty.get(), 0);
    integerJavaFXProperty.set(12);
    assertEquals(integerDolphinProperty.get().intValue(), 12);
    integerJavaFXProperty.setValue(null);
    assertEquals(integerDolphinProperty.get().intValue(), 0);
    binding.unbind();
    integerDolphinProperty.set(100);
    assertEquals(integerJavaFXProperty.get(), 0);
    numberDolphinProperty.set(12);
    binding = FXBinder.bind(integerJavaFXProperty).bidirectionalTo(numberDolphinProperty);
    assertEquals(integerJavaFXProperty.get(), 12);
    numberDolphinProperty.set(null);
    assertEquals(integerJavaFXProperty.get(), 0);
    integerJavaFXProperty.set(12);
    assertEquals(numberDolphinProperty.get().intValue(), 12);
    integerJavaFXProperty.setValue(null);
    assertEquals(numberDolphinProperty.get().intValue(), 0);
    binding.unbind();
    numberDolphinProperty.set(100);
    assertEquals(integerJavaFXProperty.get(), 0);
}
Also used : Binding(com.canoo.platform.core.functional.Binding) IntegerProperty(javafx.beans.property.IntegerProperty) SimpleIntegerProperty(javafx.beans.property.SimpleIntegerProperty) MockedProperty(com.canoo.dp.impl.remoting.MockedProperty) SimpleIntegerProperty(javafx.beans.property.SimpleIntegerProperty) Test(org.testng.annotations.Test)

Example 5 with Binding

use of com.canoo.platform.core.functional.Binding in project dolphin-platform by canoo.

the class FXBinderTest method testJavaFXBooleanUnidirectionalWithConverter.

@Test
public void testJavaFXBooleanUnidirectionalWithConverter() {
    Property<String> stringDolphinProperty = new MockedProperty<>();
    BooleanProperty booleanJavaFXProperty = new SimpleBooleanProperty();
    WritableBooleanValue writableBooleanValue = new SimpleBooleanProperty();
    Converter<String, Boolean> stringBooleanConverter = s -> s == null ? null : Boolean.parseBoolean(s);
    stringDolphinProperty.set("Hello");
    assertEquals(booleanJavaFXProperty.get(), false);
    Binding binding = FXBinder.bind(booleanJavaFXProperty).to(stringDolphinProperty, stringBooleanConverter);
    assertEquals(booleanJavaFXProperty.get(), false);
    stringDolphinProperty.set("true");
    assertEquals(booleanJavaFXProperty.get(), true);
    stringDolphinProperty.set(null);
    assertEquals(booleanJavaFXProperty.get(), false);
    binding.unbind();
    stringDolphinProperty.set("true");
    assertEquals(booleanJavaFXProperty.get(), false);
    stringDolphinProperty.set("false");
    binding = FXBinder.bind(writableBooleanValue).to(stringDolphinProperty, stringBooleanConverter);
    assertEquals(writableBooleanValue.get(), false);
    stringDolphinProperty.set("true");
    assertEquals(writableBooleanValue.get(), true);
    stringDolphinProperty.set(null);
    assertEquals(writableBooleanValue.get(), false);
    binding.unbind();
    stringDolphinProperty.set("true");
    assertEquals(writableBooleanValue.get(), false);
}
Also used : Binding(com.canoo.platform.core.functional.Binding) Arrays(java.util.Arrays) WritableBooleanValue(javafx.beans.value.WritableBooleanValue) SimpleStringProperty(javafx.beans.property.SimpleStringProperty) FXCollections(javafx.collections.FXCollections) Assert.assertEquals(org.testng.Assert.assertEquals) DoubleProperty(javafx.beans.property.DoubleProperty) Test(org.testng.annotations.Test) FXBinder(com.canoo.platform.remoting.client.javafx.FXBinder) DefaultBidirectionalConverter(com.canoo.dp.impl.client.javafx.DefaultBidirectionalConverter) Property(com.canoo.platform.remoting.Property) IntegerProperty(javafx.beans.property.IntegerProperty) ArrayList(java.util.ArrayList) WritableStringValue(javafx.beans.value.WritableStringValue) SimpleIntegerProperty(javafx.beans.property.SimpleIntegerProperty) MockedProperty(com.canoo.dp.impl.remoting.MockedProperty) ObservableArrayList(com.canoo.dp.impl.remoting.collections.ObservableArrayList) Assert.assertNotEquals(org.testng.Assert.assertNotEquals) ObservableList(com.canoo.platform.remoting.ObservableList) Converter(com.canoo.platform.remoting.client.javafx.Converter) BidirectionalConverter(com.canoo.platform.remoting.client.javafx.BidirectionalConverter) BooleanProperty(javafx.beans.property.BooleanProperty) List(java.util.List) SimpleBooleanProperty(javafx.beans.property.SimpleBooleanProperty) WritableIntegerValue(javafx.beans.value.WritableIntegerValue) SimpleDoubleProperty(javafx.beans.property.SimpleDoubleProperty) Assert.assertTrue(org.testng.Assert.assertTrue) StringProperty(javafx.beans.property.StringProperty) WritableDoubleValue(javafx.beans.value.WritableDoubleValue) Binding(com.canoo.platform.core.functional.Binding) MockedProperty(com.canoo.dp.impl.remoting.MockedProperty) SimpleBooleanProperty(javafx.beans.property.SimpleBooleanProperty) BooleanProperty(javafx.beans.property.BooleanProperty) SimpleBooleanProperty(javafx.beans.property.SimpleBooleanProperty) WritableBooleanValue(javafx.beans.value.WritableBooleanValue) Test(org.testng.annotations.Test)

Aggregations

Binding (com.canoo.platform.core.functional.Binding)28 Test (org.testng.annotations.Test)21 MockedProperty (com.canoo.dp.impl.remoting.MockedProperty)15 ObservableArrayList (com.canoo.dp.impl.remoting.collections.ObservableArrayList)11 SimpleStringProperty (javafx.beans.property.SimpleStringProperty)9 StringProperty (javafx.beans.property.StringProperty)9 Property (com.canoo.platform.remoting.Property)8 BidirectionalConverter (com.canoo.platform.remoting.client.javafx.BidirectionalConverter)8 BooleanProperty (javafx.beans.property.BooleanProperty)7 DoubleProperty (javafx.beans.property.DoubleProperty)7 IntegerProperty (javafx.beans.property.IntegerProperty)7 SimpleBooleanProperty (javafx.beans.property.SimpleBooleanProperty)7 SimpleDoubleProperty (javafx.beans.property.SimpleDoubleProperty)7 SimpleIntegerProperty (javafx.beans.property.SimpleIntegerProperty)7 ObservableList (com.canoo.platform.remoting.ObservableList)6 WritableBooleanValue (javafx.beans.value.WritableBooleanValue)6 WritableDoubleValue (javafx.beans.value.WritableDoubleValue)6 WritableIntegerValue (javafx.beans.value.WritableIntegerValue)6 WritableStringValue (javafx.beans.value.WritableStringValue)6 DefaultBidirectionalConverter (com.canoo.dp.impl.client.javafx.DefaultBidirectionalConverter)5