/* * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander 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. * * muCommander 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/>. */ package com.mucommander.commons.conf; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; /** * Provides support for variables whose value is a list of tokens. * <p> * Such values will simply be split using a <code>StringTokenizer</code> and stored as a <code>java.util.List</code>. * </p> * <p> * In addition to the regular <code>List</code> methods, this class provides the same value casting mechanisms as * {@link Configuration} and {@link ConfigurationEvent}. These have been extended to iterators through the * {@link #valueIterator()} method. * </p> * @author Nicolas Rinaudo */ public class ValueList extends ArrayList<String> { // - Initialisation ------------------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------------------------------- /** * Creates a new <code>ValueList</code> initialised with the specified data. * @param data data contained by the list. * @param separator string used to separate <code>data</code> in tokens. */ public ValueList(String data, String separator) { StringTokenizer tokenizer; tokenizer = new StringTokenizer(data, separator); while(tokenizer.hasMoreTokens()) add(tokenizer.nextToken()); } // - Value casting ------------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------------------------- /** * Returns the value found at the specified index of the list as a string. * @param index index of the value to retrieve. * @return the value found at the specified index of the list as a string. */ public String valueAt(int index) { return get(index); } /** * Returns the value found at the specified index of the list as an integer. * @param index index of the value to retrieve. * @return the value found at the specified index of the list as an integer. * @throws NumberFormatException if the value cannot be cast to an integer. */ public int integerValueAt(int index) { return ConfigurationSection.getIntegerValue(valueAt(index)); } /** * Returns the value found at the specified index of the list as a float. * @param index index of the value to retrieve. * @return the value found at the specified index of the list as a float. * @throws NumberFormatException if the value cannot be cast to a float. */ public float floatValueAt(int index) { return ConfigurationSection.getFloatValue(valueAt(index)); } /** * Returns the value found at the specified index of the list as a double. * @param index index of the value to retrieve. * @return the value found at the specified index of the list as a double. * @throws NumberFormatException if the value cannot be cast to a double. */ public double doubleValueAt(int index) { return ConfigurationSection.getDoubleValue(valueAt(index)); } /** * Returns the value found at the specified index of the list as a long. * @param index index of the value to retrieve. * @return the value found at the specified index of the list as a long. * @throws NumberFormatException if the value cannot be cast to a long. */ public long longValueAt(int index) { return ConfigurationSection.getLongValue(valueAt(index)); } /** * Returns the value found at the specified index of the list as a boolean. * @param index index of the value to retrieve. * @return the value found at the specified index of the list as a boolean. */ public boolean booleanValueAt(int index) { return ConfigurationSection.getBooleanValue(valueAt(index)); } /** * Returns the value found at the specified index of the list as a {@link ValueList}. * @param index index of the value to retrieve. * @param separator string used to split the value into tokens. * @return the value found at the specified index of the list as a {@link ValueList}. */ public ValueList listValueAt(int index, String separator) { return ConfigurationSection.getListValue(valueAt(index), separator); } /** * Returns a {@link ValueIterator} on the list. * @return a {@link ValueIterator} on the list. */ public ValueIterator valueIterator() { return new ValueIterator(iterator()); } // - Helper methods ------------------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------------------------------- /** * Returns a string representation of the specified list. * @param data values to represent as a string. * @param separator string used to separate one element from the other. * @return a string representation of the specified list. */ public static String toString(List<?> data, String separator) { StringBuilder buffer; Iterator<?> values; buffer = new StringBuilder(); values = data.iterator(); // Deals with the first value separately. if(values.hasNext()) buffer.append(values.next().toString()); // All subsequent values will be concatenated after a separator. while(values.hasNext()) { buffer.append(separator); buffer.append(values.next().toString()); } // Returns the final value. return buffer.toString(); } }