001/*
002 *  Copyright 2016 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.ametys.runtime.config;
017
018import org.apache.avalon.framework.configuration.Configuration;
019import org.apache.avalon.framework.configuration.ConfigurationException;
020
021import org.ametys.runtime.i18n.I18nizableText;
022import org.ametys.runtime.parameter.ParameterChecker;
023import org.ametys.runtime.parameter.ParameterCheckerParser;
024import org.ametys.runtime.plugin.component.ThreadSafeComponentManager;
025
026/**
027 * Parameter checker parser for configuration parameters
028 */
029public class ConfigParameterCheckerParser extends ParameterCheckerParser
030{
031    /**
032     * Instantiate a configuration parameter checker parser
033     * @param paramCheckerManager the parameter checker.
034     */
035    public ConfigParameterCheckerParser(ThreadSafeComponentManager<ParameterChecker> paramCheckerManager)
036    {
037        super(paramCheckerManager);
038    }
039    
040    /**
041     * Parse a configuration parameter checker from an XML configuration.
042     * @param pluginName the plugin's name declaring this parameter.
043     * @param paramCheckerConfig the XML configuration.
044     * @return the {@link ConfigParameterCheckerDescriptor} for the parsed configuration parameter checker
045     * @throws ConfigurationException if the configuration is not valid.
046     */
047    @Override
048    public ConfigParameterCheckerDescriptor parseParameterChecker(String pluginName, Configuration paramCheckerConfig) throws ConfigurationException
049    {
050        ConfigParameterCheckerDescriptor configParamChecker = (ConfigParameterCheckerDescriptor) super.parseParameterChecker(pluginName, paramCheckerConfig);
051        
052        Configuration uiRefConfig = paramCheckerConfig.getChild("ui-ref");
053        
054        String uiRefParamId = null;
055        Configuration uiRefParamConfig = uiRefConfig.getChild("param-ref", false);
056        if (uiRefParamConfig != null)
057        {
058            uiRefParamId = uiRefParamConfig.getAttribute("id");
059        }
060        
061        I18nizableText uiRefGroup = null;
062        Configuration uiRefGroupConfig = uiRefConfig.getChild("group", false);
063        if (uiRefGroupConfig != null)
064        {
065            uiRefGroup = _parseI18nizableText(uiRefConfig, pluginName, "group");
066        }
067        
068        I18nizableText  uiRefCategory = null;
069        Configuration uiRefCategoryConfig = uiRefConfig.getChild("category", false);
070        if (uiRefCategoryConfig != null)
071        {
072            uiRefCategory = _parseI18nizableText(uiRefConfig, pluginName, "category");
073        }
074        
075        configParamChecker.setUiRefParamPath(uiRefParamId);
076        configParamChecker.setUiRefGroup(uiRefGroup);
077        configParamChecker.setUiRefCategory(uiRefCategory);
078        
079        return configParamChecker;
080    }
081    
082    @Override
083    protected ConfigParameterCheckerDescriptor _getParameterCheckerDescriptorInstance()
084    {
085        return new ConfigParameterCheckerDescriptor();
086    }
087}