/*==========================================================================*\ | $Id: PluginConfiguration.java,v 1.2 2011/03/18 11:31:32 aallowat Exp $ |*-------------------------------------------------------------------------*| | Copyright (C) 2006-2009 Virginia Tech | | This file is part of Web-CAT. | | Web-CAT is free software; you can redistribute it and/or modify | it under the terms of the GNU Affero General Public License as published | by the Free Software Foundation; either version 3 of the License, or | (at your option) any later version. | | Web-CAT 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 General Public License for more details. | | You should have received a copy of the GNU Affero General Public License | along with Web-CAT; if not, see <http://www.gnu.org/licenses/>. \*==========================================================================*/ package org.webcat.plugintester.util; import java.io.File; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.plist.PropertyListConfiguration; //------------------------------------------------------------------------- /** * Provides access to various properties of a plugin's config.plist * description. * * @author Tony Allevato * @version $Id: PluginConfiguration.java,v 1.2 2011/03/18 11:31:32 aallowat Exp $ */ public class PluginConfiguration { //~ Constructors .......................................................... // ---------------------------------------------------------- /** * Creates a new instance of the PluginConfiguration class for the plugin * in the specified directory. * * @param pluginDir the directory in which the plugin resides */ public PluginConfiguration(File pluginDir) throws ConfigurationException { File configFile = new File(pluginDir, "config.plist"); config = new PropertyListConfiguration(configFile); } //~ Methods ............................................................... // ---------------------------------------------------------- /** * Gets the value of a property located at the root of the plugin * configuration. * * @param key the name of the property * @return the string value of the property */ public String getRootProperty(String key) { return config.getProperty(key).toString(); } // ---------------------------------------------------------- /** * Gets a map containing all of the options (both per-assignment and * reusable) defined by the grading plugin. * * @return a Map containing the plugin options; the keys are the names of * the options, and the values are PropertyListConfiguration objects * that describe the properties for those options */ public Map<String, PropertyListConfiguration> getOptions() { Map<String, PropertyListConfiguration> options = new TreeMap<String, PropertyListConfiguration>(); List<?> optionPlists = config.getList("options"); addOptionsToMap(optionPlists, options); optionPlists = config.getList("assignmentOptions"); addOptionsToMap(optionPlists, options); optionPlists = config.getList("globalOptions"); addOptionsToMap(optionPlists, options); return options; } // ---------------------------------------------------------- /** * Adds the options from the specified list to a map keyed on the names of * those options. * * @param plists the list containing the options * @param map the map into which the options will be copied */ private void addOptionsToMap(List<?> plists, Map<String, PropertyListConfiguration> map) { if (plists != null) { for (Object optionObj : plists) { if (optionObj instanceof PropertyListConfiguration) { PropertyListConfiguration optionPlist = (PropertyListConfiguration) optionObj; String property = optionPlist.getString("property"); map.put(property, optionPlist); } } } } //~ Instance/static variables ............................................. private PropertyListConfiguration config; }