package com.dooapp.fxform.issues;
import com.dooapp.fxform.FXForm;
import com.dooapp.fxform.JavaFXRule;
import com.dooapp.fxform.builder.FXFormBuilder;
import com.dooapp.fxform.view.FXFormNode;
import com.dooapp.fxform.view.FXFormNodeWrapper;
import com.dooapp.fxform.view.factory.DefaultFactoryProvider;
import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Callback;
import junit.framework.Assert;
import org.junit.Rule;
import org.junit.Test;
/**
* Created by KEVIN on 12/08/2015.
*/
public class Issue112Test extends Application {
@Rule
public JavaFXRule javaFXRule = new JavaFXRule();
@Test
// should pass!
public void testWithNewDefaultFactoryProvider() {
FXForm form = new FXFormBuilder<>().build();
DefaultFactoryProvider factoryProvider = new DefaultFactoryProvider();
factoryProvider.addFactory(element -> SpecificationB.class.equals(element.getWrappedType()), new SpecificationBFactory());
form.setEditorFactoryProvider(factoryProvider);
Bean source = new Bean();
source.setSpecification(new SpecificationB());
form.setSource(source);
Assert.assertNotNull(((Node) form.lookup("#specification-form-editor")).lookup("#test"));
}
@Override
public void start(Stage primaryStage) throws Exception {
HBox root = new HBox();
FXForm form = new FXFormBuilder<>().build();
DefaultFactoryProvider factoryProvider = (DefaultFactoryProvider) form.getEditorFactoryProvider();
factoryProvider.addFactory(element -> SpecificationB.class.equals(element.getWrappedType()), new SpecificationBFactory());
form.setEditorFactoryProvider(factoryProvider);
Bean source = new Bean();
source.setSpecification(new SpecificationB());
form.setSource(source);
root.getChildren().addAll(form);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
private class Bean {
ObjectProperty<Specification> specification = new SimpleObjectProperty<>();
public Specification getSpecification() {
return specification.get();
}
public ObjectProperty<Specification> specificationProperty() {
return specification;
}
public void setSpecification(Specification specification) {
this.specification.set(specification);
}
}
private interface Specification {
}
private class SpecificationB implements Specification {
StringProperty name = new SimpleStringProperty();
public String getName() {
return name.get();
}
public StringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
}
private class SpecificationBFactory implements Callback<Void, FXFormNode> {
public FXFormNode call(Void param) {
final Label label = new Label("TEST");
label.setId("test");
ObjectProperty property = new SimpleObjectProperty<>();
return new FXFormNodeWrapper(label, property);
}
}
public static void main(String[] args) {
Application.launch(args);
}
}