Skip to content

Commit

Permalink
gs-reactor: Clean up GSInputTextWithConversion
Browse files Browse the repository at this point in the history
  • Loading branch information
fducroquet committed Aug 4, 2016
1 parent 7f8345a commit 131552c
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ public class ReactorStatics {
public static final String SELECTION_SHIFT = "selectionShift";
public static final String SELECTION_STRING = "selectionString";
public static final String VALUE = "value";
public static final String CONVERTER = "converter";
public static final String TEXT = "text";
public static final String DISABLED = "disabled";
public static final String DISPLAY = "display";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.genericsystem.reactor.gs;

import java.io.Serializable;
import java.util.function.Function;

import org.genericsystem.api.core.ApiStatics;
import org.genericsystem.reactor.ReactorStatics;
Expand All @@ -15,72 +14,53 @@
import javafx.beans.value.ChangeListener;
import javafx.util.StringConverter;

public class GSInputTextWithConversion extends GSInputText {
public class GSInputTextWithConversion<T extends Serializable> extends GSInputText {

static final Logger log = LoggerFactory.getLogger(GSInputTextWithConversion.class);

public GSInputTextWithConversion(GSTag parent) {
super(parent);

addStyle("width", "100%");
addStyle("height", "100%");

createNewProperty(ReactorStatics.CONVERTER);
initProperty(ReactorStatics.CONVERTER, model -> getConverter(model));
createNewProperty(ReactorStatics.VALUE);

storeProperty(ReactorStatics.INVALID, model -> Bindings.createBooleanBinding(() -> {
boolean required = model.getGeneric().isRequiredConstraintEnabled(ApiStatics.BASE_POSITION);
String value = model.getObservableAttributes(this).get(ReactorStatics.VALUE);
if (required && (value == null || value.trim().isEmpty()))
return true;
try {
((StringConverter) getProperty(ReactorStatics.CONVERTER, model).getValue()).fromString(value);
getConverter(model).fromString(value);
return false;
} catch (Exception e) {
return true;
}
}, model.getObservableAttributes(this)));
bindOptionalStyleClass(ReactorStatics.INVALID, ReactorStatics.INVALID);

bindBiDirectionalAttributeOnEnter(ReactorStatics.VALUE, ReactorStatics.VALUE, model -> (StringConverter) getProperty(ReactorStatics.CONVERTER, model).getValue());
bindBiDirectionalAttributeOnEnter(ReactorStatics.VALUE, ReactorStatics.VALUE);
}

private void bindBiDirectionalAttributeOnEnter(String propertyName, String attributeName) {
bindBiDirectionalAttributeOnEnter(propertyName, attributeName, ApiStatics.STRING_CONVERTERS.get(String.class));
}

private <T extends Serializable> void bindBiDirectionalAttributeOnEnter(String propertyName, String attributeName, StringConverter<T> stringConverter) {
bindBiDirectionalAttributeOnEnter(propertyName, attributeName, model -> stringConverter);
}

private <T extends Serializable> void bindBiDirectionalAttributeOnEnter(String propertyName, String attributeName, Function<GenericModel, StringConverter<T>> getStringConverter) {
bindAction(model -> {
Property observable = getProperty(propertyName, model);
StringConverter stringConverter = getStringConverter.apply(model);
String attributeValue = model.getObservableAttributes(this).get(attributeName);
try {
observable.setValue(stringConverter.fromString(attributeValue));
getProperty(propertyName, model).setValue(getConverter(model).fromString(model.getObservableAttributes(this).get(attributeName)));
} catch (Exception ignore) {
log.warn("Conversion exception : " + ignore.getMessage());
}
});
addPrefixBinding(model -> {
StringConverter stringConverter = getStringConverter.apply(model);
ChangeListener listener = (o, old, newValue) -> model.getObservableAttributes(this).put(attributeName, stringConverter.toString(newValue));
Property observable = getProperty(propertyName, model);
observable.addListener(listener);
ChangeListener<T> listener = (o, old, newValue) -> model.getObservableAttributes(this).put(attributeName, getConverter(model).toString(newValue));
((Property<T>) getProperty(propertyName, model)).addListener(listener);
});
}

public StringConverter<?> getConverter(GenericModel model) {
public StringConverter<T> getConverter(GenericModel model) {
Class<?> clazz = model.getGeneric().getInstanceValueClassConstraint();
if (clazz == null)
clazz = String.class;
return ApiStatics.STRING_CONVERTERS.get(clazz);
}

public static class GSInputTextEditorWithConversion extends GSInputTextWithConversion {
public static class GSInputTextEditorWithConversion<T extends Serializable> extends GSInputTextWithConversion<T> {

public GSInputTextEditorWithConversion(GSTag parent) {
super(parent);
Expand All @@ -92,7 +72,7 @@ public GSInputTextEditorWithConversion(GSTag parent) {
}

@Override
public StringConverter<?> getConverter(GenericModel model) {
public StringConverter<T> getConverter(GenericModel model) {
Class<?> clazz = model.getGeneric().getMeta().getInstanceValueClassConstraint();
if (clazz == null) {
if (model.getGeneric().getValue() != null)
Expand Down

0 comments on commit 131552c

Please sign in to comment.