use of com.canoo.platform.remoting.Property 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();
};
}
use of com.canoo.platform.remoting.Property 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);
}
use of com.canoo.platform.remoting.Property in project dolphin-platform by canoo.
the class FXBinderTest method testJavaFXDoubleBidirectionalWithConverter.
@Test
public void testJavaFXDoubleBidirectionalWithConverter() {
Property<String> stringDolphinProperty = new MockedProperty<>();
DoubleProperty doubleJavaFXProperty = new SimpleDoubleProperty();
Converter<String, Double> stringDoubleConverter = s -> s == null ? null : Double.parseDouble(s);
Converter<Double, String> doubleStringConverter = d -> d == null ? null : d.toString();
BidirectionalConverter<String, Double> doubleBidirectionalConverter = new DefaultBidirectionalConverter<>(stringDoubleConverter, doubleStringConverter);
stringDolphinProperty.set("47.0");
assertNotEquals(doubleJavaFXProperty.doubleValue(), 47.0, EPSILON);
Binding binding = FXBinder.bind(doubleJavaFXProperty).bidirectionalToNumeric(stringDolphinProperty, doubleBidirectionalConverter);
assertEquals(doubleJavaFXProperty.doubleValue(), 47.0, EPSILON);
stringDolphinProperty.set("100.0");
assertEquals(doubleJavaFXProperty.doubleValue(), 100.0, EPSILON);
stringDolphinProperty.set(null);
assertEquals(doubleJavaFXProperty.doubleValue(), 0.0, EPSILON);
doubleJavaFXProperty.set(12.0);
assertEquals(stringDolphinProperty.get(), "12.0");
doubleJavaFXProperty.setValue(null);
assertEquals(stringDolphinProperty.get(), "0.0");
binding.unbind();
stringDolphinProperty.set("100.0");
assertEquals(doubleJavaFXProperty.doubleValue(), 0.0, EPSILON);
}
use of com.canoo.platform.remoting.Property in project dolphin-platform by canoo.
the class FXBinderTest method testJavaFXBooleanBidirectionalWithConverter.
@Test
public void testJavaFXBooleanBidirectionalWithConverter() {
Property<String> stringDolphinProperty = new MockedProperty<>();
BooleanProperty booleanJavaFXProperty = new SimpleBooleanProperty();
Converter<Boolean, String> booleanStringConverter = b -> b == null ? null : b.toString();
Converter<String, Boolean> stringBooleanConverter = s -> s == null ? null : Boolean.parseBoolean(s);
BidirectionalConverter<Boolean, String> booleanStringBidirectionalConverter = new DefaultBidirectionalConverter<>(booleanStringConverter, stringBooleanConverter);
stringDolphinProperty.set("true");
assertNotEquals(booleanJavaFXProperty.get(), true);
Binding binding = FXBinder.bind(booleanJavaFXProperty).bidirectionalTo(stringDolphinProperty, booleanStringBidirectionalConverter.invert());
assertEquals(booleanJavaFXProperty.get(), true);
stringDolphinProperty.set("false");
assertEquals(booleanJavaFXProperty.get(), false);
stringDolphinProperty.set(null);
assertEquals(booleanJavaFXProperty.get(), false);
booleanJavaFXProperty.set(true);
assertEquals(stringDolphinProperty.get(), "true");
booleanJavaFXProperty.setValue(null);
assertEquals(stringDolphinProperty.get(), "false");
binding.unbind();
stringDolphinProperty.set("true");
assertEquals(booleanJavaFXProperty.get(), false);
}
use of com.canoo.platform.remoting.Property in project dolphin-platform by canoo.
the class GarbageCollector method gc.
/**
* Calling this method triggers the garbage collection. For all dolphin beans (see {@link RemotingBean}) that
* are not referenced by a root bean (see {@link RemotingModel}) the defined {@link GarbageCollectionCallback} (see constructor)
* will be called.
*/
public synchronized void gc() {
if (!configuration.isUseGc()) {
LOG.trace("GC deactivated, no beans will be removed!");
return;
}
LOG.trace("Garbage collection started! GC will remove {} beans!", removeOnGC.size());
onRemoveCallback.onReject(removeOnGC.keySet());
for (Map.Entry<Instance, Object> entry : removeOnGC.entrySet()) {
Instance removedInstance = entry.getKey();
for (Property property : removedInstance.getProperties()) {
propertyToParent.remove(property);
}
for (ObservableList list : removedInstance.getLists()) {
listToParent.remove(list);
}
allInstances.remove(entry.getValue());
}
removedBeansCount = removedBeansCount + removeOnGC.size();
removeOnGC.clear();
gcCalls = gcCalls + 1;
LOG.trace("Garbage collection done! GC currently manages {} referenced beans!", allInstances.size());
}
Aggregations