/* * This file is part of the OSMembrane project. * More informations under www.osmembrane.de * * The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0. * for more details about the license see http://www.osmembrane.de/license/ * * Source: $HeadURL$ ($Revision$) * Last changed: $Date$ */ package de.osmembrane.model.settings; import java.util.Locale; import javax.swing.UIManager; import javax.swing.UIManager.LookAndFeelInfo; import de.osmembrane.Application; import de.osmembrane.resources.Constants; import de.osmembrane.tools.I18N; /** * The type of a setting-entry. * * @author jakob_jarosch */ public enum SettingType { /** * The default path to Osmosis binaries. * * can be casted to a {@link String} */ DEFAULT_OSMOSIS_PATH(String.class, Constants.DEFAULT_OSMOSIS_PATH), /** * The default path to JOSM binaries. * * can be casted to a {@link String} */ DEFAULT_JOSM_PATH(String.class, Constants.DEFAULT_JOSM_PATH), /** * The active language as a locale. * * can be casted to a {@link Locale} */ ACTIVE_LANGUAGE(Locale.class, Locale.getDefault()), /** * The default zoom size. * * can be casted to a {@link Double} */ DEFAULT_ZOOM_SIZE(Double.class, Constants.DEFAULT_ZOOM_SIZE), /** * Use short names for tasks if available. * * can be casted to a {@link Boolean} */ USE_SHORT_TASK_NAMES_IF_AVAILABLE(Boolean.class, false), /** * Export the default values or not. * * can be casted to a {@link Boolean} */ EXPORT_PARAMETERS_WITH_DEFAULT_VALUES(Boolean.class, false), /** * Maximum count of undo-steps. * * can be casted to a {@link Integer} */ MAXIMUM_UNDO_STEPS(Integer.class, Constants.MAXIMUM_UNDO_STEPS), /** * Coordinate raster size. * * can be casted to a {@link Integer} */ PIPELINE_RASTER_SIZE(Integer.class, Constants.DEFAULT_PIPELINE_RASTER_SIZE), /** * The working directory for execution and preview. * * can be casted to a {@link String} */ DEFAULT_WORKING_DIRECTORY(String.class, Constants.DEFAULT_WORKING_DIRECTORY), /** * Show the startup screen or not. * * can be casted to a {@link Boolean} */ SHOW_STARTUP_SCREEN(Boolean.class, Constants.DEFAULT_SHOW_STARTUP_SCREEN), /** * Should the Software update or not? * * can be casted to a {@link SettingsTypeUpdateInterval}<br/> * 0: never<br/> * 1: once a day<br/> * 2: once a week<br/> */ UPDATE_INTERVAL(SettingsTypeUpdateInterval.class, Constants.DEFAULT_UPDATE_INTERVAL), /** * The last date when OSMembrane tried to update. Timestamp since * 01.01.1980. */ LAST_UPDATE_LOOKUP(Long.class, 0L), /** * The active pluggable Java Look & Feel as a name specified by the * {@link LookAndFeelInfo}. * * can be casted to a {@link String} */ ACTIVE_PLAF(String.class, Constants.DEFAULT_PLAF_NAME); private Class<?> clazz; private Object defaultValue; SettingType(Class<?> clazz, Object defaultValue) { this.clazz = clazz; this.defaultValue = defaultValue; } /** * Returns the type if the value. * * @return type of the value */ public Class<?> getType() { return clazz; } /** * Returns the default value for a type. * * @return default value for a type */ public Object getDefaultValue() { return defaultValue; } /** * Do required actions if required, for example refresh the I18N-class. * * @param value * value which should be updated */ public void doRequiredActions(Object value) { switch (this) { case ACTIVE_LANGUAGE: I18N.getInstance().setLocale((Locale) value); break; case ACTIVE_PLAF: try { String pLaF = (String) value; for (LookAndFeelInfo info : UIManager .getInstalledLookAndFeels()) { if (info.getName().equals(pLaF)) { UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (Exception e) { // if setLookAndFeel() failed Application.handleException(e); } break; } } /** * Tries to parse the object to the equivalent Type-Object. * * @param value * value which should be parsed * @return the parsed value as an object * @throws UnparsableFormatException * if the value was not parsable */ public Object parse(Object value) throws UnparsableFormatException { Object returnValue; if (value == null) { throw new UnparsableFormatException(this); } try { if (this.getType() == Integer.class) { returnValue = (Integer) Integer.parseInt(value.toString()); } else if (this.getType() == Double.class) { returnValue = (Double) Double.parseDouble(value.toString()); } else if (this.getType() == Locale.class) { returnValue = (Locale) value; } else if (this.getType() == Boolean.class) { returnValue = (Boolean) Boolean.parseBoolean(value.toString()); } else { returnValue = (String) value.toString(); } } catch (Exception e) { throw new UnparsableFormatException(this); } return formatValue(returnValue); } /** * Does automatic formation. * * @param value * value which should be formatted * @return formatted value */ private Object formatValue(Object value) { switch (this) { } return value; } }