/* * #%L * Bio-Formats Plugins for ImageJ: a collection of ImageJ plugins including the * Bio-Formats Importer, Bio-Formats Exporter, Bio-Formats Macro Extensions, * Data Browser and Stack Slicer. * %% * Copyright (C) 2006 - 2015 Open Microscopy Environment: * - Board of Regents of the University of Wisconsin-Madison * - Glencoe Software, Inc. * - University of Dundee * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-2.0.html>. * #L% */ package loci.plugins.prefs; import java.io.IOException; import java.util.HashMap; import java.util.Vector; import loci.common.IniList; import loci.common.IniParser; import loci.common.IniTable; /** * Base class for ImageJ preferences for plugins. */ public class OptionsList { // -- Constants -- /** INI key indicating option's type. */ public static final String INI_TYPE = "type"; /** String indicating option is of type boolean. */ public static final String TYPE_BOOLEAN = "boolean"; /** String indicating option is of type string. */ public static final String TYPE_STRING = "string"; // -- Fields -- /** Table of options defining this set of preferences. */ protected HashMap<String, Option> options; // -- Constructor -- public OptionsList(String path, Class<?> c) throws IOException { this(new IniParser().parseINI(path, c)); } public OptionsList(IniList ini) { options = new HashMap<String, Option>(); for (IniTable entry : ini) { String type = entry.get(INI_TYPE); Option o; if (type.equals(TYPE_BOOLEAN)) o = new BooleanOption(entry); else if (type.equals(TYPE_STRING)) o = new StringOption(entry); else throw new IllegalArgumentException("Unknown type: " + type); options.put(o.getKey(), o); } } // -- OptionsList methods -- /** Parses option values from the given argument string. */ public void parseOptions(String arg) { for (Option o : options.values()) o.parseOption(arg); } /** Loads option values from the ImageJ preferences file. */ public void loadOptions() { for (Option o : options.values()) o.loadOption(); } /** Saves option values to the ImageJ preferences file. */ public void saveOptions() { for (Option o : options.values()) o.saveOption(); } /** * Gets whether the option with the given key * is saved to the ImageJ preferences file. */ public boolean isSaved(String key) { return options.get(key).isSaved(); } /** Gets the label for the option with the given key. */ public String getLabel(String key) { return options.get(key).getLabel(); } /** Gets the documentation for the option with the given key. */ public String getInfo(String key) { return options.get(key).getInfo(); } /** Gets the possible values for the string option with the given key. */ public String[] getPossible(String key) { Option o = options.get(key); if (o instanceof StringOption) { Vector<String> possible = ((StringOption) o).getPossible(); return possible.toArray(new String[0]); } throw new IllegalArgumentException("Not a string key: " + key); } /** * Gets whether the specified value is a possible one * for the string option with the given key. */ public boolean isPossible(String key, String value) { Option o = options.get(key); if (o instanceof StringOption) { Vector<String> possible = ((StringOption) o).getPossible(); return possible.contains(value); } throw new IllegalArgumentException("Not a string key: " + key); } /** Gets the default value of the boolean option with the given key. */ public boolean isSetByDefault(String key) { Option o = options.get(key); if (o instanceof BooleanOption) return ((BooleanOption) o).getDefault(); throw new IllegalArgumentException("Not a boolean key: " + key); } /** Gets the default value of the string option with the given key. */ public String getDefaultValue(String key) { Option o = options.get(key); if (o instanceof StringOption) return ((StringOption) o).getDefault(); throw new IllegalArgumentException("Not a string key: " + key); } /** Gets the value of the boolean option with the given key. */ public boolean isSet(String key) { Option o = options.get(key); if (o instanceof BooleanOption) return ((BooleanOption) o).getValue(); throw new IllegalArgumentException("Not a boolean key: " + key); } /** Gets the value of the string option with the given key. */ public String getValue(String key) { Option o = options.get(key); if (o instanceof StringOption) return ((StringOption) o).getValue(); throw new IllegalArgumentException("Not a string key: " + key); } /** Sets the value of the boolean option with the given key. */ public void setValue(String key, boolean value) { Option o = options.get(key); if (o instanceof BooleanOption) ((BooleanOption) o).setValue(value); else throw new IllegalArgumentException("Not a boolean key: " + key); } /** Sets the value of the string option with the given key. */ public void setValue(String key, String value) { Option o = options.get(key); if (o instanceof StringOption) ((StringOption) o).setValue(value); else throw new IllegalArgumentException("Not a string key: " + key); } /** Gets the option with the given key. */ public Option getOption(String key) { return options.get(key); } /** Gets the boolean option with the given key. */ public BooleanOption getBooleanOption(String key) { Option o = options.get(key); if (o instanceof BooleanOption) return (BooleanOption) o; throw new IllegalArgumentException("Not a boolean key: " + key); } /** Gets the string option with the given key. */ public StringOption getStringOption(String key) { Option o = options.get(key); if (o instanceof StringOption) return (StringOption) o; throw new IllegalArgumentException("Not a string key: " + key); } // -- Object API methods -- /* @see java.lang.Object#equals(Object) */ @Override public boolean equals(Object o) { if (o == null || !(o instanceof OptionsList)) return false; OptionsList optionsList = (OptionsList) o; if (options.size() != optionsList.options.size()) { return false; } for (String key : options.keySet()) { Option a = options.get(key); Option b = optionsList.options.get(key); if ((a != null && b == null) || (a == null && b != null)) { return false; } else if (a == null && b == null) continue; if ((a instanceof BooleanOption) && (b instanceof BooleanOption)) { if (((BooleanOption) a).getValue() != ((BooleanOption) b).getValue()) { return false; } } else if ((a instanceof StringOption) && (b instanceof StringOption)) { String aValue = ((StringOption) a).getValue(); String bValue = ((StringOption) b).getValue(); if (aValue == null && bValue == null) continue; if (aValue == null) { return false; } if (aValue == null || !aValue.equals(bValue)) { return false; } } else { return false; } } return true; } @Override public int hashCode() { return options.hashCode(); } }