Hi folks,
I finally found the time to try something I planned to do for Turbine
4.0 already. I changed all modules (Action, Page, Screen,...) to be
(functional) interfaces instead of base classes. This works fine but
results in some methods to be public that were protected before.
The advantage is that the whole module and loader code is much cleaner
and simpler now and less spread over the different classes.
Before I commit this, I wanted to ask if any of your code heavily relies
on the old behavior?
Bye, Thomas
Example for Action:
--8<--
@FunctionalInterface
public interface Action extends Assembler
{
/** Prefix for action related classes and templates */
String PREFIX = "actions";
/** Property for the size of the module cache if caching is on */
String CACHE_SIZE_KEY = "action.cache.size";
/** The default size for the action cache */
int CACHE_SIZE_DEFAULT = 20;
/** Represents Action Objects */
String NAME = "action";
/**
* A subclass must implement this method to perform itself. The
* Action can also set the screen that is associated with {@link
PipelineData}.
*
* @param pipelineData Turbine information.
* @throws Exception a generic exception.
*/
void doPerform(PipelineData pipelineData) throws Exception;
/**
* Subclasses can override this method to add additional
* functionality.
*
* @param pipelineData Turbine information.
* @throws Exception a generic exception.
*/
default void perform(PipelineData pipelineData) throws Exception
{
doPerform(pipelineData);
}
}
--8<--
Example for ActionLoader:
--8<--
public class ActionLoader
extends GenericLoader<Action>
{
/** The single instance of this class. */
private static ActionLoader instance = new ActionLoader();
/**
* These ctor's are private to force clients to use getInstance()
* to access this class.
*/
private ActionLoader()
{
super(Action.class,
() -> Turbine.getConfiguration().getInt(Action.CACHE_SIZE_KEY,
Action.CACHE_SIZE_DEFAULT));
}
/**
* Attempts to load and execute the external action.
*
* @param pipelineData Turbine information.
* @param name Name of object that will execute the action.
* @throws Exception a generic exception.
*/
@Override
public void exec(PipelineData pipelineData, String name)
throws Exception
{
getAssembler(name).perform(pipelineData);
}
/**
* The method through which this class is accessed.
*
* @return The single instance of this class.
*/
public static ActionLoader getInstance()
{
return instance;
}
}
--8<--
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]