diff --git a/inject/pom.xml b/core/pom.xml
similarity index 97%
rename from inject/pom.xml
rename to core/pom.xml
index f0eb54d..0e57f51 100644
--- a/inject/pom.xml
+++ b/core/pom.xml
@@ -10,7 +10,7 @@
1.0-SNAPSHOT
- inject
+ core
diff --git a/inject/src/main/java/de/neitzel/inject/InjectableComponentScanner.java b/core/src/main/java/de/neitzel/core/inject/InjectableComponentScanner.java
similarity index 99%
rename from inject/src/main/java/de/neitzel/inject/InjectableComponentScanner.java
rename to core/src/main/java/de/neitzel/core/inject/InjectableComponentScanner.java
index 66bf98e..8f0092a 100644
--- a/inject/src/main/java/de/neitzel/inject/InjectableComponentScanner.java
+++ b/core/src/main/java/de/neitzel/core/inject/InjectableComponentScanner.java
@@ -1,6 +1,6 @@
-package de.neitzel.inject;
+package de.neitzel.core.inject;
-import de.neitzel.inject.annotation.Component;
+import de.neitzel.core.inject.annotation.Component;
import org.reflections.Reflections;
import java.lang.reflect.Constructor;
diff --git a/inject/src/main/java/de/neitzel/inject/annotation/Component.java b/core/src/main/java/de/neitzel/core/inject/annotation/Component.java
similarity index 85%
rename from inject/src/main/java/de/neitzel/inject/annotation/Component.java
rename to core/src/main/java/de/neitzel/core/inject/annotation/Component.java
index 87e25b3..fd4a3b0 100644
--- a/inject/src/main/java/de/neitzel/inject/annotation/Component.java
+++ b/core/src/main/java/de/neitzel/core/inject/annotation/Component.java
@@ -1,4 +1,4 @@
-package de.neitzel.inject.annotation;
+package de.neitzel.core.inject.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/inject/src/main/java/de/neitzel/inject/annotation/Config.java b/core/src/main/java/de/neitzel/core/inject/annotation/Config.java
similarity index 86%
rename from inject/src/main/java/de/neitzel/inject/annotation/Config.java
rename to core/src/main/java/de/neitzel/core/inject/annotation/Config.java
index 1b0814e..1992bc2 100644
--- a/inject/src/main/java/de/neitzel/inject/annotation/Config.java
+++ b/core/src/main/java/de/neitzel/core/inject/annotation/Config.java
@@ -1,4 +1,4 @@
-package de.neitzel.inject.annotation;
+package de.neitzel.core.inject.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/core/src/main/java/de/neitzel/core/sql/Query.java b/core/src/main/java/de/neitzel/core/sql/Query.java
new file mode 100644
index 0000000..e9d1bc3
--- /dev/null
+++ b/core/src/main/java/de/neitzel/core/sql/Query.java
@@ -0,0 +1,231 @@
+package de.neitzel.core.sql;
+
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.StandardCharsets;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+/**
+ * Helper class to build and execute parameterized SQL queries with factory-based result mapping.
+ */
+@Slf4j
+@RequiredArgsConstructor
+public class Query {
+
+ /**
+ * An Integer Factory that can be used to read Integer Values of a ResultSet that only has Integers (e.g. a min oder max query)
+ */
+ public static final Function INTEGER_FACTORY = rs -> {
+ try {
+ return rs.getInt(1);
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ };
+
+ private final Connection connection;
+ private final List parameterSetters = new ArrayList<>();
+ private Function factory;
+ private String queryText;
+
+ public static void execute(final Connection connection, final String query) throws SQLException {
+ new Query
diff --git a/fx-example/src/main/java/de/neitzel/fx/component/example/Address.java b/fx-example/src/main/java/de/neitzel/core/fx/component/example/Address.java
similarity index 75%
rename from fx-example/src/main/java/de/neitzel/fx/component/example/Address.java
rename to fx-example/src/main/java/de/neitzel/core/fx/component/example/Address.java
index 9166a04..b82b899 100644
--- a/fx-example/src/main/java/de/neitzel/fx/component/example/Address.java
+++ b/fx-example/src/main/java/de/neitzel/core/fx/component/example/Address.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.component.example;
+package de.neitzel.core.fx.component.example;
import lombok.Getter;
import lombok.Setter;
diff --git a/fx-example/src/main/java/de/neitzel/fx/component/example/ExampleApp.java b/fx-example/src/main/java/de/neitzel/core/fx/component/example/ExampleApp.java
similarity index 90%
rename from fx-example/src/main/java/de/neitzel/fx/component/example/ExampleApp.java
rename to fx-example/src/main/java/de/neitzel/core/fx/component/example/ExampleApp.java
index d4ef74e..d39f1f4 100644
--- a/fx-example/src/main/java/de/neitzel/fx/component/example/ExampleApp.java
+++ b/fx-example/src/main/java/de/neitzel/core/fx/component/example/ExampleApp.java
@@ -1,6 +1,6 @@
-package de.neitzel.fx.component.example;
+package de.neitzel.core.fx.component.example;
-import de.neitzel.fx.component.ComponentLoader;
+import de.neitzel.core.fx.component.ComponentLoader;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
diff --git a/fx-example/src/main/java/de/neitzel/fx/component/example/Main.java b/fx-example/src/main/java/de/neitzel/core/fx/component/example/Main.java
similarity index 89%
rename from fx-example/src/main/java/de/neitzel/fx/component/example/Main.java
rename to fx-example/src/main/java/de/neitzel/core/fx/component/example/Main.java
index 80565bb..388db92 100644
--- a/fx-example/src/main/java/de/neitzel/fx/component/example/Main.java
+++ b/fx-example/src/main/java/de/neitzel/core/fx/component/example/Main.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.component.example;
+package de.neitzel.core.fx.component.example;
/**
* Another Main class as workaround when the JavaFX Application ist started without
diff --git a/fx-example/src/main/java/de/neitzel/fx/component/example/Person.java b/fx-example/src/main/java/de/neitzel/core/fx/component/example/Person.java
similarity index 75%
rename from fx-example/src/main/java/de/neitzel/fx/component/example/Person.java
rename to fx-example/src/main/java/de/neitzel/core/fx/component/example/Person.java
index 2078450..76971fa 100644
--- a/fx-example/src/main/java/de/neitzel/fx/component/example/Person.java
+++ b/fx-example/src/main/java/de/neitzel/core/fx/component/example/Person.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.component.example;
+package de.neitzel.core.fx.component.example;
import lombok.Getter;
import lombok.Setter;
diff --git a/fx-example/src/main/java/de/neitzel/fx/injectfx/example/JavaFXApp.java b/fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/JavaFXApp.java
similarity index 93%
rename from fx-example/src/main/java/de/neitzel/fx/injectfx/example/JavaFXApp.java
rename to fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/JavaFXApp.java
index 2020ead..2a8ceb9 100644
--- a/fx-example/src/main/java/de/neitzel/fx/injectfx/example/JavaFXApp.java
+++ b/fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/JavaFXApp.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.injectfx.example;
+package de.neitzel.core.fx.injectfx.example;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
diff --git a/fx-example/src/main/java/de/neitzel/fx/injectfx/example/Main.java b/fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/Main.java
similarity index 90%
rename from fx-example/src/main/java/de/neitzel/fx/injectfx/example/Main.java
rename to fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/Main.java
index 63b5774..4dc8937 100644
--- a/fx-example/src/main/java/de/neitzel/fx/injectfx/example/Main.java
+++ b/fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/Main.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.injectfx.example;
+package de.neitzel.core.fx.injectfx.example;
/**
* Another Main class as workaround when the JavaFX Application ist started without
diff --git a/fx-example/src/main/java/de/neitzel/fx/injectfx/example/MainWindow.java b/fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/MainWindow.java
similarity index 93%
rename from fx-example/src/main/java/de/neitzel/fx/injectfx/example/MainWindow.java
rename to fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/MainWindow.java
index 07fa5c2..e36126e 100644
--- a/fx-example/src/main/java/de/neitzel/fx/injectfx/example/MainWindow.java
+++ b/fx-example/src/main/java/de/neitzel/core/fx/injectfx/example/MainWindow.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.injectfx.example;
+package de.neitzel.core.fx.injectfx.example;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
diff --git a/fx-example/src/main/resources/address.fxml b/fx-example/src/main/resources/address.fxml
index 2bc5a08..1839be7 100644
--- a/fx-example/src/main/resources/address.fxml
+++ b/fx-example/src/main/resources/address.fxml
@@ -6,7 +6,7 @@
-
+
diff --git a/fx-example/src/main/resources/person.fxml b/fx-example/src/main/resources/person.fxml
index 01875db..a33852f 100644
--- a/fx-example/src/main/resources/person.fxml
+++ b/fx-example/src/main/resources/person.fxml
@@ -6,7 +6,7 @@
${project.artifactId}
${project.artifactId}
${project.artifactId}
- example.de.neitzel.fx.injectfx.Main
${project.artifactId}-${project.version}
de.neitzel.lib
- inject
+ core
1.0-SNAPSHOT
diff --git a/fx/src/main/java/de/neitzel/fx/component/AutoViewModel.java b/fx/src/main/java/de/neitzel/core/fx/component/AutoViewModel.java
similarity index 98%
rename from fx/src/main/java/de/neitzel/fx/component/AutoViewModel.java
rename to fx/src/main/java/de/neitzel/core/fx/component/AutoViewModel.java
index 776d5a5..87afd0f 100644
--- a/fx/src/main/java/de/neitzel/fx/component/AutoViewModel.java
+++ b/fx/src/main/java/de/neitzel/core/fx/component/AutoViewModel.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.component;
+package de.neitzel.core.fx.component;
import javafx.beans.property.*;
import java.lang.reflect.*;
diff --git a/fx/src/main/java/de/neitzel/fx/component/ComponentController.java b/fx/src/main/java/de/neitzel/core/fx/component/ComponentController.java
similarity index 94%
rename from fx/src/main/java/de/neitzel/fx/component/ComponentController.java
rename to fx/src/main/java/de/neitzel/core/fx/component/ComponentController.java
index 9231af0..0e5ff67 100644
--- a/fx/src/main/java/de/neitzel/fx/component/ComponentController.java
+++ b/fx/src/main/java/de/neitzel/core/fx/component/ComponentController.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.component;
+package de.neitzel.core.fx.component;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
diff --git a/fx/src/main/java/de/neitzel/fx/component/ComponentLoader.java b/fx/src/main/java/de/neitzel/core/fx/component/ComponentLoader.java
similarity index 99%
rename from fx/src/main/java/de/neitzel/fx/component/ComponentLoader.java
rename to fx/src/main/java/de/neitzel/core/fx/component/ComponentLoader.java
index 84f8bc2..90ea39b 100644
--- a/fx/src/main/java/de/neitzel/fx/component/ComponentLoader.java
+++ b/fx/src/main/java/de/neitzel/core/fx/component/ComponentLoader.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.component;
+package de.neitzel.core.fx.component;
import javafx.beans.property.Property;
import javafx.fxml.FXMLLoader;
diff --git a/fx/src/main/java/de/neitzel/fx/injectfx/FXMLComponentInstances.java b/fx/src/main/java/de/neitzel/core/fx/injectfx/FXMLComponentInstances.java
similarity index 98%
rename from fx/src/main/java/de/neitzel/fx/injectfx/FXMLComponentInstances.java
rename to fx/src/main/java/de/neitzel/core/fx/injectfx/FXMLComponentInstances.java
index eba67f3..2a5bce9 100644
--- a/fx/src/main/java/de/neitzel/fx/injectfx/FXMLComponentInstances.java
+++ b/fx/src/main/java/de/neitzel/core/fx/injectfx/FXMLComponentInstances.java
@@ -1,6 +1,6 @@
-package de.neitzel.fx.injectfx;
+package de.neitzel.core.fx.injectfx;
-import de.neitzel.inject.InjectableComponentScanner;
+import de.neitzel.core.inject.InjectableComponentScanner;
import java.lang.reflect.Constructor;
import java.util.*;
diff --git a/fx/src/main/java/de/neitzel/fx/injectfx/InjectingControllerFactory.java b/fx/src/main/java/de/neitzel/core/fx/injectfx/InjectingControllerFactory.java
similarity index 97%
rename from fx/src/main/java/de/neitzel/fx/injectfx/InjectingControllerFactory.java
rename to fx/src/main/java/de/neitzel/core/fx/injectfx/InjectingControllerFactory.java
index deacd83..2602746 100644
--- a/fx/src/main/java/de/neitzel/fx/injectfx/InjectingControllerFactory.java
+++ b/fx/src/main/java/de/neitzel/core/fx/injectfx/InjectingControllerFactory.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.injectfx;
+package de.neitzel.core.fx.injectfx;
import javafx.util.Callback;
diff --git a/fx/src/main/java/de/neitzel/fx/injectfx/InjectingFXMLLoader.java b/fx/src/main/java/de/neitzel/core/fx/injectfx/InjectingFXMLLoader.java
similarity index 93%
rename from fx/src/main/java/de/neitzel/fx/injectfx/InjectingFXMLLoader.java
rename to fx/src/main/java/de/neitzel/core/fx/injectfx/InjectingFXMLLoader.java
index 0de1b52..1e70c98 100644
--- a/fx/src/main/java/de/neitzel/fx/injectfx/InjectingFXMLLoader.java
+++ b/fx/src/main/java/de/neitzel/core/fx/injectfx/InjectingFXMLLoader.java
@@ -1,6 +1,6 @@
-package de.neitzel.fx.injectfx;
+package de.neitzel.core.fx.injectfx;
-import de.neitzel.inject.InjectableComponentScanner;
+import de.neitzel.core.inject.InjectableComponentScanner;
import javafx.fxml.FXMLLoader;
import lombok.extern.slf4j.Slf4j;
diff --git a/fx/src/main/java/de/neitzel/fx/mvvm/BindDirection.java b/fx/src/main/java/de/neitzel/core/fx/mvvm/BindDirection.java
similarity index 97%
rename from fx/src/main/java/de/neitzel/fx/mvvm/BindDirection.java
rename to fx/src/main/java/de/neitzel/core/fx/mvvm/BindDirection.java
index 5bd9a41..25e4932 100644
--- a/fx/src/main/java/de/neitzel/fx/mvvm/BindDirection.java
+++ b/fx/src/main/java/de/neitzel/core/fx/mvvm/BindDirection.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.mvvm;
+package de.neitzel.core.fx.mvvm;
/**
* Enum representing the direction of data binding between a JavaFX control and a ViewModel property.
diff --git a/fx/src/main/java/de/neitzel/fx/mvvm/BindingAwareFXMLLoader.java b/fx/src/main/java/de/neitzel/core/fx/mvvm/BindingAwareFXMLLoader.java
similarity index 99%
rename from fx/src/main/java/de/neitzel/fx/mvvm/BindingAwareFXMLLoader.java
rename to fx/src/main/java/de/neitzel/core/fx/mvvm/BindingAwareFXMLLoader.java
index 3ecc3b1..e80e4b2 100644
--- a/fx/src/main/java/de/neitzel/fx/mvvm/BindingAwareFXMLLoader.java
+++ b/fx/src/main/java/de/neitzel/core/fx/mvvm/BindingAwareFXMLLoader.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.mvvm;
+package de.neitzel.core.fx.mvvm;
import javafx.beans.property.Property;
import javafx.beans.property.StringProperty;
diff --git a/fx/src/main/java/de/neitzel/fx/mvvm/GenericViewController.java b/fx/src/main/java/de/neitzel/core/fx/mvvm/GenericViewController.java
similarity index 98%
rename from fx/src/main/java/de/neitzel/fx/mvvm/GenericViewController.java
rename to fx/src/main/java/de/neitzel/core/fx/mvvm/GenericViewController.java
index 95be892..690e10b 100644
--- a/fx/src/main/java/de/neitzel/fx/mvvm/GenericViewController.java
+++ b/fx/src/main/java/de/neitzel/core/fx/mvvm/GenericViewController.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.mvvm;
+package de.neitzel.core.fx.mvvm;
import javafx.fxml.Initializable;
import java.net.URL;
diff --git a/fx/src/main/java/de/neitzel/fx/mvvm/GenericViewModel.java b/fx/src/main/java/de/neitzel/core/fx/mvvm/GenericViewModel.java
similarity index 99%
rename from fx/src/main/java/de/neitzel/fx/mvvm/GenericViewModel.java
rename to fx/src/main/java/de/neitzel/core/fx/mvvm/GenericViewModel.java
index 5cc0931..94582c9 100644
--- a/fx/src/main/java/de/neitzel/fx/mvvm/GenericViewModel.java
+++ b/fx/src/main/java/de/neitzel/core/fx/mvvm/GenericViewModel.java
@@ -1,4 +1,4 @@
-package de.neitzel.fx.mvvm;
+package de.neitzel.core.fx.mvvm;
import javafx.beans.property.*;
diff --git a/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/SuperClass.java b/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/SuperClass.java
deleted file mode 100644
index 3021956..0000000
--- a/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/SuperClass.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package de.neitzel.fx.injectfx.testcomponents.test1ok;
-
-public class SuperClass {
-}
diff --git a/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/TestInterface1_1.java b/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/TestInterface1_1.java
deleted file mode 100644
index f7b342e..0000000
--- a/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/TestInterface1_1.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package de.neitzel.fx.injectfx.testcomponents.test1ok;
-
-public interface TestInterface1_1 {
-}
diff --git a/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/TestInterface1_2.java b/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/TestInterface1_2.java
deleted file mode 100644
index 8c414e8..0000000
--- a/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/TestInterface1_2.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package de.neitzel.fx.injectfx.testcomponents.test1ok;
-
-public interface TestInterface1_2 {
-}
diff --git a/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/sub/TestComponent1_2.java b/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/sub/TestComponent1_2.java
deleted file mode 100644
index 57e078f..0000000
--- a/fx/src/test/java/de/neitzel/fx/injectfx/testcomponents/test1ok/sub/TestComponent1_2.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package de.neitzel.fx.injectfx.testcomponents.test1ok.sub;
-
-import de.neitzel.fx.injectfx.testcomponents.test1ok.SuperClass;
-import de.neitzel.fx.injectfx.testcomponents.test1ok.TestInterface1_1;
-import de.neitzel.fx.injectfx.testcomponents.test1ok.TestInterface1_2;
-import de.neitzel.inject.annotation.Component;
-
-@Component
-public class TestComponent1_2 extends SuperClass implements TestInterface1_1, TestInterface1_2 {
- public TestComponent1_2() {
- }
-}
diff --git a/pom.xml b/pom.xml
index 4b3f87e..0a2648f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
pom
- inject
+ core
fx
fx-example