From 60edef989c51388d91e165fe948e78c97f65a86e Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 17 Jul 2021 10:22:21 -0700 Subject: [PATCH] create simple property API --- .../dfsek/terra/api/properties/Context.java | 21 +++++++++++++++++++ .../terra/api/properties/Properties.java | 4 ++++ .../terra/api/properties/PropertyHolder.java | 5 +++++ 3 files changed, 30 insertions(+) create mode 100644 common/api/src/main/java/com/dfsek/terra/api/properties/Context.java create mode 100644 common/api/src/main/java/com/dfsek/terra/api/properties/Properties.java create mode 100644 common/api/src/main/java/com/dfsek/terra/api/properties/PropertyHolder.java diff --git a/common/api/src/main/java/com/dfsek/terra/api/properties/Context.java b/common/api/src/main/java/com/dfsek/terra/api/properties/Context.java new file mode 100644 index 000000000..e9d76a6e8 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/properties/Context.java @@ -0,0 +1,21 @@ +package com.dfsek.terra.api.properties; + +import java.util.HashMap; +import java.util.Map; + +public class Context { + private final Map, Properties> map = new HashMap<>(); + + @SuppressWarnings("unchecked") + public T get(Class clazz) { + return (T) map.computeIfAbsent(clazz, k -> { + throw new IllegalArgumentException("No properties registered for class " + clazz.getCanonicalName()); + }); + } + + public Context put(Properties properties) { + if(map.containsKey(properties.getClass())) throw new IllegalArgumentException("Property for class " + properties.getClass().getCanonicalName() + " already registered."); + map.put(properties.getClass(), properties); + return this; + } +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/properties/Properties.java b/common/api/src/main/java/com/dfsek/terra/api/properties/Properties.java new file mode 100644 index 000000000..43360d347 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/properties/Properties.java @@ -0,0 +1,4 @@ +package com.dfsek.terra.api.properties; + +public interface Properties { +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/properties/PropertyHolder.java b/common/api/src/main/java/com/dfsek/terra/api/properties/PropertyHolder.java new file mode 100644 index 000000000..7fe882ab7 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/properties/PropertyHolder.java @@ -0,0 +1,5 @@ +package com.dfsek.terra.api.properties; + +public interface PropertyHolder { + Context getContext(); +}