/** * Copyright (C) 2010 STMicroelectronics * * This file is part of "Mind Compiler" is free software: you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Contact: mind@ow2.org * * Authors: Matthieu Leclercq * Contributors: */ package org.ow2.mind.plugin.util; import java.util.HashMap; import java.util.Map; import org.objectweb.fractal.adl.CompilerError; import org.objectweb.fractal.adl.error.GenericErrors; import org.ow2.mind.plugin.ConfigurationElement; import org.ow2.mind.plugin.PluginManager; public final class BooleanEvaluatorHelper { public static final String BOOLEAN_EVALUATOR_ID = "org.ow2.mind.plugin.BooleanEvaluator"; private BooleanEvaluatorHelper() { } private static Map<String, BooleanEvaluator> evaluators = null; /** * Evaluates the given {@link ConfigurationElement} using the * {@link BooleanEvaluator} registered in the {@link PluginManager}. If the * given {@link ConfigurationElement} is <code>null</code>, this method * returns <code>true</code>. * * @param configurationElement the element to evaluate. May be * <code>null</code>. * @param pluginManager the plugin manger used to retrieve * {@link BooleanEvaluator} * @return the result of {@link BooleanEvaluator#evaluate} * @param context additional parameter. May be <code>null</code> if the * evaluation is performed in a compilation step where the context is * not available. * @throws CompilerError if no evaluator is registered for the given * configuration element. */ public static boolean evaluate( final ConfigurationElement configurationElement, final PluginManager pluginManager, final Map<Object, Object> context) { if (configurationElement == null) return true; final BooleanEvaluator evaluator = getEvaluators(pluginManager).get( configurationElement.getName()); if (evaluator == null) { throw new CompilerError(GenericErrors.GENERIC_ERROR, "Can't find boolean evaluator for element '" + configurationElement.getName() + "'."); } return evaluator.evaluate(configurationElement, pluginManager, context); } private static Map<String, BooleanEvaluator> getEvaluators( final PluginManager pluginManager) { if (evaluators == null) { evaluators = new HashMap<String, BooleanEvaluator>(); for (final ConfigurationElement element : pluginManager .getConfigurationElements(BOOLEAN_EVALUATOR_ID)) { final String name = element.getAttribute("name"); final BooleanEvaluator evaluator = element.createInstance("class", BooleanEvaluator.class); final BooleanEvaluator prevValue = evaluators.put(name, evaluator); if (prevValue != null) throw new CompilerError(GenericErrors.GENERIC_ERROR, "Duplicated BooleanEvaluator for name '" + name + "'."); } } return evaluators; } }