CorFunctions.java

package eu.javaexperience.patterns.behavioral.cor;

import eu.javaexperience.interfaces.simple.getBy.GetBy1;
import eu.javaexperience.interfaces.simple.publish.SimplePublish1;
import eu.javaexperience.patterns.behavioral.cor.CorChain;
import eu.javaexperience.patterns.behavioral.cor.CorDispatcher;
import eu.javaexperience.patterns.behavioral.cor.link.CorChainLink;
import eu.javaexperience.patterns.behavioral.cor.link.CorTools;
import eu.javaexperience.annotation.FunctionDescription;
import eu.javaexperience.annotation.FunctionVariableDescription;
import eu.javaexperience.dispatch.Dispatcher;
import eu.javaexperience.dispatch.DispatcherTools;

public class CorFunctions
{
	@FunctionDescription
	(
		functionDescription = "Szabálytábla létrehozása",
		parameters =
		{
			@FunctionVariableDescription(description = "Szabályláncok", mayNull = false, paramName = "ruleChains", type = Object.class),
		},
		returning = @FunctionVariableDescription(description="Szabálytábla", mayNull=false, paramName="", type=Object.class) 
	)
	public static <CTX> CorDispatcher<CTX> create_cor_table
	(
		CorChain<CTX>... chains
	)
	{
		CorDispatcher<CTX> ret = new CorDispatcher<>();
		for(CorChain<CTX> c:chains)
		{
			ret.addChain(c);
		}
		return ret;
	}
	
	@FunctionDescription
	(
		functionDescription = "Szabályánc létrehozása",
		parameters =
		{
			@FunctionVariableDescription(description = "Szabálylánc neve", mayNull = false, paramName = "chainName", type = Object.class),
			@FunctionVariableDescription(description = "Alapértelmezett művelet", mayNull = false, paramName = "defaultAction", type = Object.class),
			@FunctionVariableDescription(description = "Szabályok", mayNull = false, paramName = "rules", type = Object.class),
		},
		returning = @FunctionVariableDescription(description="Szabálylánc", mayNull=false, paramName="", type=Object.class) 
	)
	public static <CTX> CorChain<CTX> create_cor_chain
	(
		String chain_name,
		SimplePublish1<CTX> defaultAction,
		CorChainLink<CTX>... links
	)
	{
		CorChain<CTX> cc = new CorChain<>(chain_name);
		if(null != defaultAction)
		{
			cc.setDefaultAction(DispatcherTools.toDispatcher(defaultAction));
		}
		
		for(CorChainLink<CTX> c:links)
		{
			cc.addLink(c);
		}
		
		return cc;
	}
	
	public static <CTX> CorChainLink<CTX> create_cor_link
	(
		GetBy1<Boolean, CTX> checker,
		SimplePublish1<CTX> actor
	)
	{
		return CorTools.wrapCheckerActor(checker, actor);
	}
	
	public static <CTX> CorChainLink<CTX> create_cor_dispatch
	(
		GetBy1<Boolean, CTX> checker,
		Dispatcher<CTX> actor
	)
	{
		return CorTools.wrapCheckerActor(checker, DispatcherTools.toSimplePublish(actor));
	}
	
	public static <CTX> CorChainLink<CTX> create_cor_link_jump_chain
	(
		GetBy1<Boolean, CTX> checker,
		String chain_name
	)
	{
		return CorTools.jumpChain(checker, chain_name);
	}
	
	public static <CTX> CorChainLink<CTX> create_cor_link_include_chain
	(
		GetBy1<Boolean, CTX> checker,
		String chain_name
	)
	{
		return CorTools.includeChain(checker, chain_name);
	}
}