/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program 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. * * 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 * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.tools.io; import com.rapidminer.RapidMiner; import com.rapidminer.operator.Operator; import com.rapidminer.operator.UserError; import com.rapidminer.parameter.ParameterHandler; import com.rapidminer.parameter.ParameterType; import com.rapidminer.parameter.ParameterTypeStringCategory; import com.rapidminer.parameter.UndefinedParameterError; import com.rapidminer.tools.ParameterService; import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; import java.nio.charset.UnsupportedCharsetException; import java.util.LinkedList; import java.util.List; /** * Collection of static helper methods to add and evaluate parameters to specify an encoding. * * @author Sebastian Land * */ public class Encoding { public static final String PARAMETER_ENCODING = "encoding"; public static final String[] CHARSETS; static { CHARSETS = new String[Charset.availableCharsets().size() + 1]; CHARSETS[0] = RapidMiner.SYSTEM_ENCODING_NAME; int i = 0; for (String charSet : Charset.availableCharsets().keySet()) { CHARSETS[i + 1] = charSet; i++; } } public static Charset getEncoding(Operator handler) throws UndefinedParameterError, UserError { String selectedCharsetName = handler.getParameterAsString(PARAMETER_ENCODING); if (RapidMiner.SYSTEM_ENCODING_NAME.equals(selectedCharsetName)) { return Charset.defaultCharset(); } try { return Charset.forName(selectedCharsetName); } catch (IllegalCharsetNameException e) { throw new UserError(handler, 207, selectedCharsetName, PARAMETER_ENCODING, "No legal charset name."); } catch (UnsupportedCharsetException e) { throw new UserError(handler, 207, selectedCharsetName, PARAMETER_ENCODING, "Charset not supported on this Java VM."); } catch (IllegalArgumentException e) { throw new UserError(handler, 207, selectedCharsetName, PARAMETER_ENCODING, "Select different charset."); } } public static Charset getEncoding(String charsetName) { if (RapidMiner.SYSTEM_ENCODING_NAME.equals(charsetName)) { return Charset.defaultCharset(); } return Charset.forName(charsetName); } public static List<ParameterType> getParameterTypes(ParameterHandler handler) { List<ParameterType> types = new LinkedList<ParameterType>(); String encoding = RapidMiner.SYSTEM_ENCODING_NAME; String encodingProperty = ParameterService .getParameterValue(RapidMiner.PROPERTY_RAPIDMINER_GENERAL_DEFAULT_ENCODING); if (encodingProperty != null) { encoding = encodingProperty; } types.add(new ParameterTypeStringCategory(PARAMETER_ENCODING, "The encoding used for reading or writing files.", CHARSETS, encoding, false)); return types; } }