First project structure.

This commit is contained in:
Konrad Neitzel
2025-03-17 20:54:16 +01:00
commit 7117bdfdcc
15 changed files with 1320 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>de.neitzel</groupId>
<artifactId>injectfx</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>injectfx-lib</artifactId>
<properties>
<!-- Application Properties -->
<link.name>${project.artifactId}</link.name>
<launcher>${project.artifactId}</launcher>
<appName>${project.artifactId}</appName>
<main.class>de.kneitzel.Main</main.class>
<jar.filename>${project.artifactId}-${project.version}</jar.filename>
</properties>
<build>
<finalName>${jar.filename}</finalName>
<plugins>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,42 @@
package de.neitzel.injectfx;
import javafx.util.Callback;
import java.lang.reflect.Constructor;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;
public class InjectingControllerFactory implements Callback<Class<?>, Object> {
private final Map<Class<?>, Object> parameterMap;
public InjectingControllerFactory(Map<Class<?>, Object> parameterMap) {
this.parameterMap = parameterMap;
}
@Override
public Object call(Class<?> controllerClass) {
try {
Optional<Constructor<?>> bestConstructor = Stream.of(controllerClass.getConstructors())
.filter(constructor -> canBeInstantiated(constructor, parameterMap))
.findFirst();
if (bestConstructor.isPresent()) {
Constructor<?> constructor = bestConstructor.get();
Object[] parameters = Stream.of(constructor.getParameterTypes())
.map(parameterMap::get)
.toArray();
return constructor.newInstance(parameters);
} else {
throw new IllegalStateException("Kein passender Konstruktor gefunden für " + controllerClass.getName());
}
} catch (Exception e) {
throw new RuntimeException("Fehler beim Erstellen der Controller-Instanz für " + controllerClass.getName(), e);
}
}
private boolean canBeInstantiated(Constructor<?> constructor, Map<Class<?>, Object> parameterMap) {
return Stream.of(constructor.getParameterTypes()).allMatch(parameterMap::containsKey);
}
}