/** * Copyright (C) 2013-2016 The Rythm Engine project * for LICENSE and other details see: * https://github.com/rythmengine/rythmengine */ package org.rythmengine.internal; import org.rythmengine.RythmEngine; import org.rythmengine.extension.ICodeType; import org.rythmengine.extension.IFormatter; import org.rythmengine.utils.S; import java.util.*; public class ExtensionManager { private final Set<IJavaExtension> _extensions = new HashSet<IJavaExtension>(); private final List<IFormatter> _fmts = new ArrayList<IFormatter>(); private final RythmEngine engine; public ExtensionManager(RythmEngine engine) { if (null == engine) throw new NullPointerException(); this.engine = engine; } /** * Add a Java extension * * @param javaExtension */ public void registerJavaExtension(IJavaExtension javaExtension) { _extensions.add(javaExtension); } Iterable<IJavaExtension> javaExtensions() { return _extensions; } /** * Is a specified method name a java extension? * * @param s * @return true if the name is a java extension */ public boolean isJavaExtension(String s) { for (IJavaExtension ext : _extensions) { if (S.isEqual(s, ext.methodName())) { return true; } } return false; } public ExtensionManager registerUserDefinedParsers(IParserFactory... parsers) { return registerUserDefinedParsers(null, parsers); } /** * Register a special case parser to a dialect * <p/> * <p>for example, the play-rythm plugin might want to register a special case parser to * process something like @{Controller.actionMethod()} or &{'MSG_ID'} etc to "japid" * and "play-groovy" dialects * * @param dialect * @param parsers */ public ExtensionManager registerUserDefinedParsers(String dialect, IParserFactory... parsers) { engine.dialectManager().registerExternalParsers(dialect, parsers); return this; } private List<IExpressionProcessor> expressionProcessors = new ArrayList<IExpressionProcessor>(); public ExtensionManager registerExpressionProcessor(IExpressionProcessor p) { if (!expressionProcessors.contains(p)) expressionProcessors.add(p); return this; } public Iterable<IExpressionProcessor> expressionProcessors() { return expressionProcessors; } private List<ICodeType> codeTypeList = new ArrayList<ICodeType>(); public ExtensionManager registerCodeType(ICodeType type) { codeTypeList.add(type); return this; } public Iterable<ICodeType> templateLangs() { return codeTypeList; } public boolean hasTemplateLangs() { return !codeTypeList.isEmpty(); } public ExtensionManager registerFormatter(IFormatter fmt) { _fmts.add(fmt); return this; } public Iterable<IFormatter> formatters() { return new Iterable<IFormatter>() { @Override public Iterator<IFormatter> iterator() { return _fmts.iterator(); } }; } }