- java.lang.Object
-
- aeonics.template.Item<T>
-
- Type Parameters:
T
- the supertype of entity this Item extends
- Direct Known Subclasses:
Action
,Database
,Destination
,Endpoint
,Filter
,Flow
,Group
,Manager
,Origin
,Policy
,Probe
,Provider
,Queue
,Role
,Rule
,Scheduler.Cron
,Storage
,Topic
,User
public abstract class Item<T extends Entity> extends java.lang.Object
Represents a cohesive unit combining anEntity
and its associatedTemplate
.The Item interface acts as a blueprint for defining entities and their creation templates. It encapsulates the relationship and context between an entity and its builder, ensuring a structured and consistent approach to entity creation.
Implementing this interface typically involves defining static inner classes for both the entity and its template. These inner classes should be either public, for allowing external access and subclassing, or private, to encapsulate the entity's construction within the Item itself. This structure promotes a clean separation between the entity's definition and its construction logic, while also providing flexibility in how entities and their templates are extended and used.
Best Practices:
- Implement the entity and template as static inner classes within the implementing class of Item.
- Use public inner classes when you intend to allow subclassing.
- Use private inner classes to restrict subclassing.
- The template returned by
template()
should create entities of the type returned bytarget()
.
Example:
public class MyItem extends Item<MyEntity> { public static class MyEntity extends Entity { } protected Class<? extends MyEntity> defaultTarget() { return MyEntity.class; } protected Supplier<? extends MyEntity> defaultCreator() { return MyEntity::new; } protected Class<? extends MyItem> category() { return MyItem.class; } }
Normally, the template should be immutable and should only be called once when registering in the
Factory
. Although, it allows also to provide a partial template that should be complemented by subclasses if need be.Example with a final template:
private static Template<MyEntity> template = new Template<MyEntity>(); public Template<MyEntity> template() { return template; }
In this case, the template is constructed only once.Example with a partial template:
public Template<MyEntity> template() { return new MyTemplate(); }
In this case, a new instance of the template is provided every time, this allows subclasses to complement it as such:public Template<MyEntity> template() { return super.template().summary("This is the sub-template"); }
The static method
from(Class, Class, Supplier)
allows to declare an Item with a default template based on the entity class. This is a way to provide an Item from within an Entity definition (reversed pattern).public class MyEntity extends Entity { public static Item<MyEntity> item() { return Item.from(MyItemCategory.class, MyEntity.class, MyEntity::new); } }
-
-
Constructor Summary
Constructors Constructor Description Item()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract java.lang.Class<? extends Item<? super T>>
category()
Returns the target entity category.java.util.function.Supplier<? extends T>
creator()
Returns the target entity creatorItem<T>
creator(java.util.function.Supplier<? extends T> creator)
Sets the final entity creator type that shall be used by the template.protected abstract java.util.function.Supplier<? extends T>
defaultCreator()
Returns the default target entity creator.protected abstract java.lang.Class<? extends T>
defaultTarget()
Returns the default target entity type.protected java.lang.Class<? extends Item<? super T>>
defaultType()
Returns the default entity supertype.static <X extends Entity>
Item<X>from(java.lang.Class<? extends Item<? super X>> category, java.lang.Class<X> target, java.util.function.Supplier<X> creator)
Returns an anonymous inline item based on the target entity implementation.java.lang.Class<? extends T>
target()
Returns the target entity typeItem<T>
target(java.lang.Class<? extends T> type)
Sets the final target entity type that shall be returned by the template.Template<? extends T>
template()
Returns the template to build the target entity.java.lang.Class<? extends Item<? super T>>
type()
Returns the entity supertypeItem<T>
type(java.lang.Class<? extends Item<? super T>> type)
Sets the entity supertype that shall be returned by the template.
-
-
-
Method Detail
-
template
public Template<? extends T> template()
Returns the template to build the target entity.This method should ultimately be used to provide the final entity template. Although, it may also provide a partial template that subclassed may complement.
- Returns:
- the matching entity template
-
target
public java.lang.Class<? extends T> target()
Returns the target entity type- Returns:
- the target entity type
-
target
public Item<T> target(java.lang.Class<? extends T> type)
Sets the final target entity type that shall be returned by the template.- Parameters:
type
- the target entity type- Returns:
- this
-
defaultTarget
protected abstract java.lang.Class<? extends T> defaultTarget()
Returns the default target entity type. This method should be implemented by subclasses to specify the target entity type.- Returns:
- the default target entity type
-
type
public java.lang.Class<? extends Item<? super T>> type()
Returns the entity supertype- Returns:
- the entity supertype
-
type
public Item<T> type(java.lang.Class<? extends Item<? super T>> type)
Sets the entity supertype that shall be returned by the template.- Parameters:
type
- the entity supertype- Returns:
- this
-
defaultType
protected java.lang.Class<? extends Item<? super T>> defaultType()
Returns the default entity supertype. By default, this method returns the current class. This method may be implemented by subclasses to specify the entity supertype.- Returns:
- the default entity supertype
-
creator
public java.util.function.Supplier<? extends T> creator()
Returns the target entity creator- Returns:
- the target entity creator
-
creator
public Item<T> creator(java.util.function.Supplier<? extends T> creator)
Sets the final entity creator type that shall be used by the template.- Parameters:
creator
- the entity creator- Returns:
- this
-
defaultCreator
protected abstract java.util.function.Supplier<? extends T> defaultCreator()
Returns the default target entity creator. This method should be implemented by subclasses to specify the entity creator.- Returns:
- the default target entity creator
-
category
protected abstract java.lang.Class<? extends Item<? super T>> category()
Returns the target entity category. This method should be implemented by subclasses to specify the entity category.- Returns:
- the target entity category
-
from
public static <X extends Entity> Item<X> from(java.lang.Class<? extends Item<? super X>> category, java.lang.Class<X> target, java.util.function.Supplier<X> creator)
Returns an anonymous inline item based on the target entity implementation.- Type Parameters:
X
- the entity target type- Parameters:
category
- the entity category. It is the entity category as registered in the Factory and Registry. SeeFactory.of(String)
andRegistry.of(String)
.target
- the target entity type. It is the entity instance to create and it will be used as the entity type. SeeFactory.get(String)
.creator
- the custom instance creator that provides new instance of the target entity.- Returns:
- a new anonymous item instance
-
-