diff --git a/ha-inject/.gitignore b/ha-inject/.gitignore new file mode 100644 index 0000000..106490c --- /dev/null +++ b/ha-inject/.gitignore @@ -0,0 +1,6 @@ +/.project +/.classpath +/.settings/ +/target/ +/bulldozer-temp.json +/.factorypath diff --git a/ha-inject/pom.xml b/ha-inject/pom.xml new file mode 100644 index 0000000..d68d2d1 --- /dev/null +++ b/ha-inject/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + ha-inject + + + com.g2forge.habitat + ha-project + 0.0.8-SNAPSHOT + ../ha-project/pom.xml + + + Habitat Inject + An API for value injection. + diff --git a/ha-inject/src/main/java/com/g2forge/habitat/inject/IInjectedValue.java b/ha-inject/src/main/java/com/g2forge/habitat/inject/IInjectedValue.java new file mode 100644 index 0000000..701d8ae --- /dev/null +++ b/ha-inject/src/main/java/com/g2forge/habitat/inject/IInjectedValue.java @@ -0,0 +1,5 @@ +package com.g2forge.habitat.inject; + +public interface IInjectedValue { + public InjectedValueDescriptor getDescriptor(); +} diff --git a/ha-inject/src/main/java/com/g2forge/habitat/inject/InjectedValueDescriptor.java b/ha-inject/src/main/java/com/g2forge/habitat/inject/InjectedValueDescriptor.java new file mode 100644 index 0000000..b3d05ce --- /dev/null +++ b/ha-inject/src/main/java/com/g2forge/habitat/inject/InjectedValueDescriptor.java @@ -0,0 +1,26 @@ +package com.g2forge.habitat.inject; + +import com.g2forge.alexandria.java.type.ref.ITypeRef; + +import lombok.Builder; +import lombok.Data; +import lombok.RequiredArgsConstructor; + +@Data +@Builder(toBuilder = true) +@RequiredArgsConstructor +public class InjectedValueDescriptor { + protected final String id; + + protected final ITypeRef type; + + protected final T fallback; + + public InjectedValueDescriptor(Class owner, String name, ITypeRef type, T fallback) { + this(owner.getName() + "." + name, type, fallback); + } + + public InjectedValueDescriptor(Class type, T fallback) { + this(type.getName(), ITypeRef.of(type), fallback); + } +} \ No newline at end of file diff --git a/ha-inject/src/main/java/com/g2forge/habitat/inject/MapInjectedValue.java b/ha-inject/src/main/java/com/g2forge/habitat/inject/MapInjectedValue.java new file mode 100644 index 0000000..c735e85 --- /dev/null +++ b/ha-inject/src/main/java/com/g2forge/habitat/inject/MapInjectedValue.java @@ -0,0 +1,24 @@ +package com.g2forge.habitat.inject; + +import java.util.Map; + +import lombok.Builder; +import lombok.Data; +import lombok.RequiredArgsConstructor; + +@Data +@Builder(toBuilder = true) +@RequiredArgsConstructor +public class MapInjectedValue implements IInjectedValue { + protected final InjectedValueDescriptor descriptor; + + public T get(Map map) { + if ((map != null) && map.containsKey(getDescriptor().getId())) return getDescriptor().getType().cast(map.get(getDescriptor().getId())); + return getDescriptor().getFallback(); + } + + public Map inject(Map map, T value) { + map.put(getDescriptor().getId(), value); + return map; + } +} diff --git a/pom.xml b/pom.xml index 4b83ede..a384b52 100644 --- a/pom.xml +++ b/pom.xml @@ -20,5 +20,6 @@ ha-trace ha-metadata ha-plugin + ha-inject