summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/data/Context.java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-12-03 19:21:38 -0500
committerBen Culkin <scorpress@gmail.com>2020-12-03 19:21:38 -0500
commit0a8f34c27c6ef93c5c94d17728af62c7607e225f (patch)
tree3bbbbb6d62649c7411e7ae3d53a75786255ed84e /src/main/java/bjc/data/Context.java
parent097a33bc2ecaa64a664550ddd62ccd8de47c51d0 (diff)
Rename types to match Java style
This renames several interfaces that had names like IWhatever, since that isn't a style that Java uses
Diffstat (limited to 'src/main/java/bjc/data/Context.java')
-rw-r--r--src/main/java/bjc/data/Context.java62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/main/java/bjc/data/Context.java b/src/main/java/bjc/data/Context.java
new file mode 100644
index 0000000..7efdc4d
--- /dev/null
+++ b/src/main/java/bjc/data/Context.java
@@ -0,0 +1,62 @@
+package bjc.data;
+
+/**
+ * Represents a 'context' which is a hierarchical set of objects.
+ * @author Ben Culkin
+ *
+ */
+public interface Context {
+ /**
+ * Register an object with this context.
+ *
+ * @param name The name of the object.
+ * @param o The object to register.
+ */
+ void register(String name, Object o);
+
+ /**
+ * Get the parent of this context.
+ *
+ * @return The parent of this context.
+ */
+ Context getParent();
+
+ /**
+ * Get an object from this context.
+ *
+ * @param name The name of the object.
+ *
+ * @return The object bound to that name.
+ */
+ Object get(String name);
+
+ /**
+ * Get an object which is an instance of the provided class or a subclass
+ * thereof.
+ *
+ * @param <T> The type of the object.
+ *
+ * @param contract The class of the object.
+ *
+ * @return An instance of the provided class.
+ */
+ <T> T get(Class<T> contract);
+
+ /**
+ * Get a named object which is an instance of the provided class or a subclass
+ * thereof.
+ *
+ * @param <T> The type of the object.
+ *
+ * @param name The name of the object
+ * @param contract The class of the object.
+ *
+ * @return An instance of the provided class, with the given name..
+ */
+ default <T> T get(String name, Class<T> contract) {
+ Object obj = get(name);
+ return obj == null
+ ? getParent().get(name, contract)
+ : contract.cast(obj);
+ };
+}