diff --git a/commons/src/main/java/module-info.java b/commons/src/main/java/module-info.java index bec37e33..04b47c38 100644 --- a/commons/src/main/java/module-info.java +++ b/commons/src/main/java/module-info.java @@ -8,11 +8,12 @@ requires com.fasterxml.jackson.annotation; requires com.fasterxml.jackson.databind; requires com.fasterxml.jackson.dataformat.xml; + requires com.fasterxml.jackson.datatype.jsr310; requires org.slf4j; requires java.desktop; requires java.sql; - requires com.fasterxml.jackson.datatype.jsr310; + } diff --git a/ui/src/main/java/tools/dynamia/ui/Alignable.java b/ui/src/main/java/tools/dynamia/ui/Alignable.java new file mode 100644 index 00000000..a7f9bb1c --- /dev/null +++ b/ui/src/main/java/tools/dynamia/ui/Alignable.java @@ -0,0 +1,13 @@ +package tools.dynamia.ui; + +public interface Alignable extends PropertiesContainer { + + default Alignable setAlign(String align) { + setProperty("align", align); + return this; + } + + default String getAlign() { + return getProperty("align"); + } +} diff --git a/ui/src/main/java/tools/dynamia/ui/BaseComponent.java b/ui/src/main/java/tools/dynamia/ui/BaseComponent.java new file mode 100644 index 00000000..1eb302c8 --- /dev/null +++ b/ui/src/main/java/tools/dynamia/ui/BaseComponent.java @@ -0,0 +1,36 @@ +package tools.dynamia.ui; + +import java.util.*; + +public class BaseComponent implements Composable { + + private List children = new LinkedList<>(); + private Map properties = new HashMap<>(); + + + @Override + public void add(Composable composable) { + children.add(composable); + } + + + @Override + public List getChildren() { + return children.stream().toList(); + } + + @Override + public void setProperty(String name, T value) { + properties.put(name, value); + } + + @Override + public T getProperty(String name) { + return (T) properties.get(name); + } + + @Override + public Map getProperties() { + return Collections.unmodifiableMap(properties); + } +} diff --git a/ui/src/main/java/tools/dynamia/ui/Composable.java b/ui/src/main/java/tools/dynamia/ui/Composable.java new file mode 100644 index 00000000..041f8015 --- /dev/null +++ b/ui/src/main/java/tools/dynamia/ui/Composable.java @@ -0,0 +1,12 @@ +package tools.dynamia.ui; + +import java.util.List; + +public interface Composable extends PropertiesContainer { + + void add(Composable composable); + + List getChildren(); + + +} diff --git a/ui/src/main/java/tools/dynamia/ui/Label.java b/ui/src/main/java/tools/dynamia/ui/Label.java new file mode 100644 index 00000000..0445a251 --- /dev/null +++ b/ui/src/main/java/tools/dynamia/ui/Label.java @@ -0,0 +1,13 @@ +package tools.dynamia.ui; + +public class Label extends BaseComponent implements Alignable, Sizable, Labeled { + + + public Label() { + } + + public Label(String value) { + setLabel(value); + } + +} diff --git a/ui/src/main/java/tools/dynamia/ui/Labeled.java b/ui/src/main/java/tools/dynamia/ui/Labeled.java new file mode 100644 index 00000000..5244e97f --- /dev/null +++ b/ui/src/main/java/tools/dynamia/ui/Labeled.java @@ -0,0 +1,13 @@ +package tools.dynamia.ui; + +public interface Labeled extends PropertiesContainer { + + default Labeled setLabel(String label) { + setProperty("label", label); + return this; + } + + default String getLabel() { + return getProperty("label"); + } +} diff --git a/ui/src/main/java/tools/dynamia/ui/PropertiesContainer.java b/ui/src/main/java/tools/dynamia/ui/PropertiesContainer.java new file mode 100644 index 00000000..71de7595 --- /dev/null +++ b/ui/src/main/java/tools/dynamia/ui/PropertiesContainer.java @@ -0,0 +1,12 @@ +package tools.dynamia.ui; + +import java.util.Map; + +public interface PropertiesContainer { + + void setProperty(String name, T value); + + T getProperty(String name); + + Map getProperties(); +} diff --git a/ui/src/main/java/tools/dynamia/ui/Sizable.java b/ui/src/main/java/tools/dynamia/ui/Sizable.java new file mode 100644 index 00000000..e0d0c294 --- /dev/null +++ b/ui/src/main/java/tools/dynamia/ui/Sizable.java @@ -0,0 +1,13 @@ +package tools.dynamia.ui; + +public interface Sizable extends PropertiesContainer { + + default Sizable setSize(String size) { + setProperty("size", size); + return this; + } + + default String getSize() { + return getProperty("size"); + } +} diff --git a/ui/src/test/java/tools/dynamia/ui/UICompositionTest.java b/ui/src/test/java/tools/dynamia/ui/UICompositionTest.java new file mode 100644 index 00000000..24f70d32 --- /dev/null +++ b/ui/src/test/java/tools/dynamia/ui/UICompositionTest.java @@ -0,0 +1,19 @@ +package tools.dynamia.ui; + +import org.junit.Assert; +import org.junit.Test; + +public class UICompositionTest { + + @Test + public void should_be_declarative() { + + var label = new Label("El Mario"); + + + + Assert.assertEquals(label.getLabel(), "El Mario"); + Assert.assertEquals(label.getSize(), "large"); + + } +}