/** * 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.gui.new_plotter; import com.rapidminer.RapidMiner; import com.rapidminer.gui.new_plotter.listener.events.PlotConfigurationChangeEvent; import com.rapidminer.tools.I18N; import com.rapidminer.tools.ParameterService; import java.text.MessageFormat; import java.util.LinkedList; import java.util.List; import java.util.ResourceBundle; /** * @author Marius Helf, Nils Woehler * */ public class PlotConfigurationError { private static ResourceBundle messages = I18N.getGUIBundle(); private static final MessageFormat formatter = new MessageFormat(""); private static final String NAME_KEY = "name"; private static final String MESSAGE_KEY = "message"; private static final String EXPLANATION_KEY = "explanation"; private List<PlotConfigurationQuickFix> possiblesFixes = new LinkedList<PlotConfigurationQuickFix>(); /** * An identifier for the error (see PlotterMessages.properties, prefix "gui.plotter.error") */ private String errorId; private Object[] messageParameters; // /** // * The change that caused the error, if any // */ // private PlotConfigurationChangeEvent cause; // /** // * The object that created this error // */ // private Object location; public PlotConfigurationError(String errorId, Object... messageParameters) { super(); this.errorId = errorId; this.messageParameters = messageParameters; } public PlotConfigurationError(String errorId, PlotConfigurationQuickFix quickFix, Object... messageParameters) { super(); this.errorId = errorId; this.messageParameters = messageParameters; possiblesFixes.add(quickFix); } public PlotConfigurationError(String errorId, PlotConfigurationChangeEvent changeForQuickFix, Object... messageParameters) { super(); this.errorId = errorId; this.messageParameters = messageParameters; possiblesFixes.add(new PlotConfigurationQuickFix(changeForQuickFix)); } public void addQuickFix(PlotConfigurationQuickFix quickFix) { possiblesFixes.add(quickFix); } public List<PlotConfigurationQuickFix> getQuickFixes() { return possiblesFixes; } public String getErrorName() { String deflt = "Unnamed plotter error."; if (Boolean.valueOf(ParameterService.getParameterValue(RapidMiner.PROPERTY_RAPIDMINER_GENERAL_DEBUGMODE))) { deflt += " (" + errorId + ")"; } return getResourceString(errorId, NAME_KEY, deflt); } public String getErrorMessage() { return getErrorMessage(errorId, messageParameters); } public Object[] getMessageParameters() { return messageParameters; } public String getErrorId() { return errorId; } public String getErrorDescription() { return getResourceString(errorId, EXPLANATION_KEY, ""); } /** * This returns a resource message of the internationalized error messages identified by an id. * Compared to the legacy method {@link #getResourceString(int, String, String)} this supports a * more detailed identifier. This makes it easier to ensure extensions don't reuse already * defined core errors. It is common sense to add the extensions namespace identifier as second * part of the key, just after error. For example: error.rmx_web.operator.unusable = This * operator {0} is unusable. * * @param id * The identifier of the error. "gui.plotter.error." will be automatically prepended- * @param key * The part of the error description that should be shown. * @param deflt * The default if no resource bundle is available. */ public static String getResourceString(String id, String key, String deflt) { if (messages == null) { return deflt; } try { return messages.getString("gui.plotter.error." + id + "." + key); } catch (java.util.MissingResourceException e) { return deflt; } } public static String getErrorMessage(String identifier, Object[] arguments) { String message = getResourceString(identifier, MESSAGE_KEY, "No message."); try { formatter.applyPattern(message); String formatted = formatter.format(arguments); return formatted; } catch (Throwable t) { return message; } } @Override public boolean equals(Object obj) { if (obj == null || !(obj instanceof PlotConfigurationError)) { return false; } return true; } }