From 76f9992a5fd8e818f8051130e25c6aefb4ef51ad Mon Sep 17 00:00:00 2001 From: gmungoc Date: Fri, 11 Oct 2019 15:26:35 +0100 Subject: [PATCH] JAL-3261 tidy up get/set properties in Cache, Javadoc, tests --- src/jalview/bin/Cache.java | 97 +++++++++++++++++++------- src/jalview/gui/ColourMenuHelper.java | 2 +- src/jalview/gui/LineartOptions.java | 2 +- src/jalview/gui/Preferences.java | 18 +++-- src/jalview/util/Format.java | 122 ++++++++++++++++----------------- test/jalview/util/FormatTest.java | 18 +++++ 6 files changed, 164 insertions(+), 95 deletions(-) diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index 7128ca4..07e346f 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -206,8 +206,6 @@ import org.apache.log4j.SimpleLayout; * panel in web service preferences * * - * @author $author$ - * @version $Revision$ */ public class Cache implements ApplicationSingletonI { @@ -628,29 +626,36 @@ public class Cache implements ApplicationSingletonI } /** - * These methods are used when checking if the saved preference is different - * to the default setting + * Returns the boolean property value for the given property name. If the + * value is absent then the default value is returned instead. + * + * @param property + * @param def + * @return */ - - public static boolean getDefault(String property, boolean def) + public static boolean getDefault(String property, final boolean def) { String string = getProperty(property); - if (string != null) - { - def = Boolean.valueOf(string).booleanValue(); - } - - return def; + return string == null ? def : Boolean.parseBoolean(string); } - public static int getDefault(String property, int def) + /** + * Returns the integer property value for the given property name. If the + * value is absent, or malformed (not an integer), then the default value is + * returned instead. + * + * @param property + * @param def + * @return + */ + public static int getDefault(String property, final int def) { String string = getProperty(property); if (string != null) { try { - def = Integer.parseInt(string); + return Integer.parseInt(string); } catch (NumberFormatException e) { System.out.println("Error parsing int property '" + property @@ -696,10 +701,14 @@ public class Cache implements ApplicationSingletonI } /** - * Answers the value of the given property, or the supplied default value if + * Returns the value of the given property, or the supplied default value if * the property is not set + * + * @param property + * @param def + * @return */ - public static String getDefault(String property, String def) + public static String getDefault(String property, final String def) { String value = getProperty(property); return value == null ? def : value; @@ -720,11 +729,27 @@ public class Cache implements ApplicationSingletonI return getInstance().setPropertyImpl(key, obj, true); } + /** + * Sets a property value for the running application, without saving it to the + * properties file + * + * @param key + * @param obj + */ public static void setPropertyNoSave(String key, String obj) { getInstance().setPropertyImpl(key, obj, false); } + /** + * Sets a property value, and optionally also saves the current properties to + * file + * + * @param key + * @param obj + * @param andSave + * @return + */ private Object setPropertyImpl(String key, String obj, boolean andSave) { Object oldValue = null; @@ -746,7 +771,7 @@ public class Cache implements ApplicationSingletonI } /** - * remove the specified property from the jalview properties file + * Removes the specified property from the jalview properties file * * @param key */ @@ -755,11 +780,24 @@ public class Cache implements ApplicationSingletonI getInstance().removePropertyImpl(key, true); } + /** + * Removes the named property for the running application, without saving the + * properties file + * + * @param key + */ public static void removePropertyNoSave(String key) { getInstance().removePropertyImpl(key, false); } + /** + * Removes the named property, and optionally saves the current properties to + * file + * + * @param key + * @param andSave + */ private void removePropertyImpl(String key, boolean andSave) { applicationProperties.remove(key); @@ -769,6 +807,9 @@ public class Cache implements ApplicationSingletonI } } + /** + * Saves the current properties to file + */ public static void saveProperties() { getInstance().savePropertiesImpl(); @@ -1012,18 +1053,24 @@ public class Cache implements ApplicationSingletonI } /** - * get the user's default colour if available + * Returns the Color value of the given property's value, or the supplied + * default colour if no property is found, or it cannot be parsed to a colour. + * Colours are normally saved as hex rgb values, though other formats may be + * parseable. * * @param property - * @param defcolour + * @param defaultColour * @return + * @see Cache#setColourPropertyNoSave(String, Color) + * @see ColorUtils#parseColourString(String) */ - public static Color getDefaultColour(String property, Color defcolour) + public static Color getDefaultColour(String property, + final Color defaultColour) { String colprop = getProperty(property); if (colprop == null) { - return defcolour; + return defaultColour; } Color col = ColorUtils.parseColourString(colprop); if (col == null) @@ -1031,22 +1078,24 @@ public class Cache implements ApplicationSingletonI log.warn("Couldn't parse '" + colprop + "' as a colour for " + property); } - return (col == null) ? defcolour : col; + return (col == null) ? defaultColour : col; } /** - * store a colour as a Jalview user default property + * Stores a colour as a Jalview property, converted to hex values for rgb. + * Properties are not saved to file. * * @param property * @param colour */ - public static void setColourProperty(String property, Color colour) + public static void setColourPropertyNoSave(String property, Color colour) { setProperty(property, jalview.util.Format.getHexString(colour)); } /** * Stores a formatted date in a jalview property, using a fixed locale. + * Updated properties are written out to the properties file. * * @param propertyName * @param date diff --git a/src/jalview/gui/ColourMenuHelper.java b/src/jalview/gui/ColourMenuHelper.java index 5528e75..fbbd1ac 100644 --- a/src/jalview/gui/ColourMenuHelper.java +++ b/src/jalview/gui/ColourMenuHelper.java @@ -314,7 +314,7 @@ public class ColourMenuHelper } else { - Cache.removePropertyNoSave(Preferences.USER_DEFINED_COLOURS); + Cache.removeProperty(Preferences.USER_DEFINED_COLOURS); } } } diff --git a/src/jalview/gui/LineartOptions.java b/src/jalview/gui/LineartOptions.java index 62bdd35..67b748a 100644 --- a/src/jalview/gui/LineartOptions.java +++ b/src/jalview/gui/LineartOptions.java @@ -188,7 +188,7 @@ public class LineartOptions extends JPanel } else { - Cache.removePropertyNoSave(preferencesKey); + Cache.removeProperty(preferencesKey); } } diff --git a/src/jalview/gui/Preferences.java b/src/jalview/gui/Preferences.java index 777ab48..207fcb8 100755 --- a/src/jalview/gui/Preferences.java +++ b/src/jalview/gui/Preferences.java @@ -798,16 +798,17 @@ public class Preferences extends GPreferences protColour.getSelectedItem().toString()); Cache.setPropertyNoSave(DEFAULT_COLOUR_NUC, nucColour.getSelectedItem().toString()); - Cache.setColourProperty(ANNOTATIONCOLOUR_MIN, + Cache.setColourPropertyNoSave(ANNOTATIONCOLOUR_MIN, minColour.getBackground()); - Cache.setColourProperty(ANNOTATIONCOLOUR_MAX, + Cache.setColourPropertyNoSave(ANNOTATIONCOLOUR_MAX, maxColour.getBackground()); /* * Save Overview settings */ - Cache.setColourProperty(GAP_COLOUR, gapColour.getBackground()); - Cache.setColourProperty(HIDDEN_COLOUR, hiddenColour.getBackground()); + Cache.setColourPropertyNoSave(GAP_COLOUR, gapColour.getBackground()); + Cache.setColourPropertyNoSave(HIDDEN_COLOUR, + hiddenColour.getBackground()); Cache.setPropertyNoSave(USE_LEGACY_GAP, Boolean.toString(useLegacyGap.isSelected())); Cache.setPropertyNoSave(SHOW_OV_HIDDEN_AT_START, @@ -1045,7 +1046,8 @@ public class Preferences extends GPreferences } /** - * DOCUMENT ME! + * Opens a file browser, and if a file is chosen, sets its path as the text of + * the 'startup file' text field */ @Override public void startupFileTextfield_mouseClicked() @@ -1065,8 +1067,10 @@ public class Preferences extends GPreferences FileFormatI format = chooser.getSelectedFormat(); if (format != null) { - Cache.setPropertyNoSave("DEFAULT_FILE_FORMAT", - format.getName()); + /* + * saving properties to file is deferred to the 'OK' action + */ + Cache.setPropertyNoSave("DEFAULT_FILE_FORMAT", format.getName()); } startupFileTextfield .setText(chooser.getSelectedFile().getAbsolutePath()); diff --git a/src/jalview/util/Format.java b/src/jalview/util/Format.java index ce7ab6d..0f12eb8 100755 --- a/src/jalview/util/Format.java +++ b/src/jalview/util/Format.java @@ -29,10 +29,13 @@ package jalview.util; import java.util.Arrays; /** - * DOCUMENT ME! + * A utility class that provides a variety of formatting methods. * - * @author $author$ - * @version $Revision$ + * Principle method {@code format} formats the number following printf + * conventions. Main limitation: Can only handle one format parameter at a time + * Use multiple Format objects to format more than one number + * + * @author unknown */ public class Format { @@ -59,12 +62,59 @@ public class Format private final String formatString; /** - * Creates a new Format object. + * Creates a new Format object given a format descriptor, which follows printf + * conventions The string has a prefix, a format code and a suffix. The prefix + * and suffix become part of the formatted output. The format code directs the + * formatting of the (single) parameter to be formatted. The code has the + * following structure + * * * @param s - * DOCUMENT ME! + * the format descriptor */ - public Format(String s) + public Format(final String s) { formatString = s; width = 0; @@ -214,63 +264,11 @@ public class Format } /** - * Formats the number following printf conventions. Main limitation: Can only - * handle one format parameter at a time Use multiple Format objects to format - * more than one number - * - * @param s - * the format string following printf conventions The string has a - * prefix, a format code and a suffix. The prefix and suffix become - * part of the formatted output. The format code directs the - * formatting of the (single) parameter to be formatted. The code has - * the following structure - * - * @exception IllegalArgumentException - * if bad format + * Returns a 6 character string consisting of the hex values of the colour's + * rgb values (left padded with zeroes if necessary) * + * @param color + * @return */ public static String getHexString(java.awt.Color color) { diff --git a/test/jalview/util/FormatTest.java b/test/jalview/util/FormatTest.java index 999e456..422132a 100644 --- a/test/jalview/util/FormatTest.java +++ b/test/jalview/util/FormatTest.java @@ -25,6 +25,8 @@ import static org.testng.Assert.assertTrue; import jalview.gui.JvOptionPane; +import java.awt.Color; + import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -162,4 +164,20 @@ public class FormatTest + "ms"); assertTrue(elapsed2 > elapsed1); } + + @Test(groups = "Functional") + public void testGetHexString() + { + /* + * r = 13 = d base 16, gets padded to 0d + * g = 103 = (16x6) + 7 = 67 base 16 + * b = 219 = (16x13) + 11 = db base 16 + */ + Color c = new Color(13, 103, 219); + assertEquals(Format.getHexString(c), "0d67db"); + + assertEquals(Format.getHexString(Color.black), "000000"); + + assertEquals(Format.getHexString(Color.white), "ffffff"); + } } -- 1.7.10.2