Generate typed Java ViewModels and discover declarative registry defaults

This commit is contained in:
2026-11-13 20:06:26 +01:00
parent adf432b98b
commit 8be0aec287
36 changed files with 1123 additions and 17 deletions
@@ -24,7 +24,7 @@
<groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths><path><groupId>de.neitzel.fxdesigner</groupId><artifactId>designer-model-processor</artifactId><version>0.1.0-SNAPSHOT</version></path></annotationProcessorPaths>
<compilerArgs><arg>-Adesigner.models=fixture.model.Person,fixture.model.Address</arg></compilerArgs>
<compilerArgs><arg>-Adesigner.models=fixture.model.Person,fixture.model.Address,fixture.model.GeneratedPerson,fixture.model.GeneratedEmployee</arg><arg>-Adesigner.viewModels=true</arg><arg>-Adesigner.viewModelModels=fixture.model.GeneratedPerson,fixture.model.GeneratedEmployee</arg><arg>-Adesigner.generatedPackage=fixture.generated</arg><arg>-Adesigner.viewModelDefaults=fixture.model.GeneratedPerson=fixture.components.CustomGeneratedPerson</arg></compilerArgs>
</configuration>
</plugin></plugins></build>
</project>
@@ -0,0 +1,11 @@
package fixture.components;
public final class CustomGeneratedPerson extends fixture.generated.GeneratedPersonViewModel {
public CustomGeneratedPerson(fixture.model.GeneratedPerson model) {
super(model);
}
public String greeting() {
return "Hello " + getName();
}
}
@@ -0,0 +1,5 @@
package fixture.components;
@jakarta.inject.Singleton
@de.neitzel.fx.view.ViewModelClass(fixture.generated.GeneratedPersonViewModel.class)
public class GeneratedController {}
@@ -0,0 +1,22 @@
package fixture.model;
public class GeneratedAddress {
private String street = "Generated street";
private GeneratedAddress next;
public String getStreet() {
return street;
}
public void setStreet(String v) {
street = v;
}
public GeneratedAddress getNext() {
return next;
}
public void setNext(GeneratedAddress v) {
next = v;
}
}
@@ -0,0 +1,13 @@
package fixture.model;
public class GeneratedEmployee extends GeneratedPerson {
private int salary = 42;
public int getSalary() {
return salary;
}
public void setSalary(int v) {
salary = v;
}
}
@@ -0,0 +1,35 @@
package fixture.model;
public class GeneratedPerson {
static {
System.setProperty("fixture.generated.initialized", "yes");
}
private String name = "Generated sample";
private GeneratedAddress home = new GeneratedAddress();
private java.util.List<GeneratedAddress> visits = new java.util.ArrayList<>();
public String getName() {
return name;
}
public void setName(String v) {
name = v;
}
public GeneratedAddress getHome() {
return home;
}
public void setHome(GeneratedAddress v) {
home = v;
}
public java.util.List<GeneratedAddress> getVisits() {
return visits;
}
public void setVisits(java.util.List<GeneratedAddress> v) {
visits = v;
}
}
@@ -1,5 +1,13 @@
module fixture.app {
requires fx;
provides de.neitzel.fx.view.ViewModelRegistry with
fixture.generated.GeneratedViewModelRegistry;
exports fixture.generated;
opens fixture.generated;
requires de.neitzel.fxdesigner.preview;
requires injection;
requires jakarta.inject;
@@ -0,0 +1,3 @@
<?neitzel-model fixture.model.GeneratedPerson?>
<?import javafx.scene.layout.VBox?><?import javafx.scene.control.TextField?><?import de.neitzel.fx.view.*?>
<VBox xmlns:fx="http://javafx.com/fxml/1"><fx:define><BindingList><DirectBinding control="name" property="text" path="name" direction="both"/><DirectBinding control="street" property="text" path="home.street" direction="both"/></BindingList></fx:define><TextField fx:id="name"/><TextField fx:id="street"/></VBox>
@@ -0,0 +1,2 @@
<?neitzel-model fixture.model.GeneratedAddress?><?import javafx.scene.control.TextField?><?import javafx.scene.layout.VBox?><?import de.neitzel.fx.view.*?>
<VBox xmlns:fx="http://javafx.com/fxml/1"><fx:define><BindingList><DirectBinding control="street" property="text" path="street" direction="both"/></BindingList></fx:define><TextField fx:id="street"/></VBox>
@@ -0,0 +1,3 @@
<?neitzel-model fixture.model.GeneratedPerson?>
<?import javafx.scene.layout.VBox?><?import javafx.scene.control.TextField?><?import de.neitzel.fx.view.*?>
<VBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="fixture.components.GeneratedController"><fx:define><BindingList><DirectBinding control="name" property="text" path="name" direction="both"/><DirectBinding control="street" property="text" path="home.street" direction="both"/></BindingList></fx:define><TextField fx:id="name"/><TextField fx:id="street"/></VBox>