diff dwtx/jface/resource/StringConverter.d @ 7:8a302fdb4140

Jface some window and resource classes
author Frank Benoit <benoit@tionex.de>
date Fri, 28 Mar 2008 23:32:40 +0100
parents
children 46a6e0e6ccd4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dwtx/jface/resource/StringConverter.d	Fri Mar 28 23:32:40 2008 +0100
@@ -0,0 +1,889 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
+ *******************************************************************************/
+module dwtx.jface.resource.StringConverter;
+
+import dwtx.jface.resource.JFaceResources;
+import dwtx.jface.resource.DataFormatException;
+
+import tango.util.collection.ArraySeq;
+
+import dwt.DWT;
+import dwt.graphics.FontData;
+import dwt.graphics.Point;
+import dwt.graphics.RGB;
+import dwt.graphics.Rectangle;
+import dwtx.core.runtime.Assert;
+
+import dwt.dwthelper.utils;
+static import tango.text.Util;
+static import tango.text.convert.Float;
+static import tango.text.convert.Integer;
+static import tango.text.Text;
+alias tango.text.Text.Text!(char) StringBuffer;
+
+/**
+ * Helper class for converting various data types to and from
+ * strings. Supported types include:
+ * <ul>
+ *   <li><code>bool</code></li>
+ *   <li><code>int</code></li>
+ *   <li><code>long</code></li>
+ *   <li><code>float</code></li>
+ *   <li><code>double</code></li>
+ *   <li><code>dwt.graphics.Point</code></li>
+ *   <li><code>dwt.graphics.Rectangle</code></li>
+ *   <li><code>dwt.graphics.RGB</code></li>
+ *   <li><code>dwt.graphics.FontData</code></li>
+ * </ul>
+ * <p>
+ * All methods declared on this class are static. This
+ * class cannot be instantiated.
+ * </p>
+ */
+public class StringConverter {
+
+    /**
+     * Internal font style constant for regular fonts.
+     */
+    private static const String REGULAR = "regular"; //$NON-NLS-1$
+
+    /**
+     * Internal font style constant for bold fonts.
+     */
+    private static const String BOLD = "bold"; //$NON-NLS-1$
+
+    /**
+     * Internal font style constant for italic fonts.
+     */
+    private static const String ITALIC = "italic"; //$NON-NLS-1$
+
+    /**
+     * Internal font style constant for bold italic fonts.
+     */
+    private static const String BOLD_ITALIC = "bold italic"; //$NON-NLS-1$
+
+    /**
+     * Internal constant for the separator character used in
+     * font specifications.
+     */
+    private static const char SEPARATOR = '-';
+
+    /**
+     * Internal constant for the seperator character used in font list
+     * specifications.
+     */
+    private static const String FONT_SEPARATOR = ";"; //$NON-NLS-1$
+
+    /* (non-Javadoc)
+     * Declare a private constructor to block instantiation.
+     */
+    private this() {
+        //no-op
+    }
+
+    /**
+     * Breaks out space-separated words into an array of words.
+     * For example: <code>"no comment"</code> into an array
+     * <code>a[0]="no"</code> and <code>a[1]= "comment"</code>.
+     *
+     * @param value the string to be converted
+     * @return the list of words
+     * @throws DataFormatException thrown if request string could not seperated
+     */
+    public static String[] asArray(String value) {
+        ArraySeq!(String) list = new ArraySeq!(String);
+        foreach ( s; tango.text.Util.delimit( value, " \t\n\r\f" )) {
+            list.append(s);
+        }
+        return list.toArray();
+    }
+
+    /**
+     /**
+     * Breaks out space-separated words into an array of words.
+     * For example: <code>"no comment"</code> into an array
+     * <code>a[0]="no"</code> and <code>a[1]= "comment"</code>.
+     * Returns the given default value if the value cannot be parsed.
+     *
+     * @param value the string to be converted
+     * @param dflt the default value
+     * @return the list of words, or the default value
+     */
+    public static String[] asArray(String value, String[] dflt) {
+        try {
+            return asArray(value);
+        } catch (DataFormatException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into a bool.
+     * This method fails if the value does not represent a bool.
+     * <p>
+     * Valid representations of <code>true</code> include the strings
+     * "<code>t</code>", "<code>true</code>", or equivalent in mixed
+     * or upper case.
+     * Similarly, valid representations of <code>false</code> include the strings
+     * "<code>f</code>", "<code>false</code>", or equivalent in mixed
+     * or upper case.
+     * </p>
+     *
+     * @param value the value to be converted
+     * @return the value as a bool
+     * @exception DataFormatException if the given value does not represent
+     *  a bool
+     */
+    public static bool asBoolean(String value) {
+        String v = value.toLowerCase();
+        if (v.equals("t") || v.equals("true")) { //$NON-NLS-1$ //$NON-NLS-2$
+            return true;
+        }
+        if (value.equals("f") || v.equals("false")) { //$NON-NLS-1$ //$NON-NLS-2$
+            return false;
+        }
+        throw new DataFormatException(
+                "Value " ~ value ~ "doesn't represent a bool"); //$NON-NLS-2$//$NON-NLS-1$
+    }
+
+    /**
+     * Converts the given value into a bool.
+     * Returns the given default value if the
+     * value does not represent a bool.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as a bool, or the default value
+     */
+    public static bool asBoolean(String value, bool dflt) {
+        try {
+            return asBoolean(value);
+        } catch (DataFormatException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into a double.
+     * This method fails if the value does not represent a double.
+     *
+     * @param value the value to be converted
+     * @return the value as a double
+     * @exception DataFormatException if the given value does not represent
+     *  a double
+     */
+    public static double asDouble(String value) {
+        try {
+            return tango.text.convert.Float.toFloat(value);
+        } catch (IllegalArgumentException e) {
+            throw new DataFormatException(e.msg);
+        }
+    }
+
+    /**
+     * Converts the given value into a double.
+     * Returns the given default value if the
+     * value does not represent a double.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as a double, or the default value
+     */
+    public static double asDouble(String value, double dflt) {
+        try {
+            return tango.text.convert.Float.toFloat(value);
+        } catch (IllegalArgumentException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into a float.
+     * This method fails if the value does not represent a float.
+     *
+     * @param value the value to be converted
+     * @return the value as a float
+     * @exception DataFormatException if the given value does not represent
+     *  a float
+     */
+    public static float asFloat(String value) {
+        try {
+            return tango.text.convert.Float.toFloat(value);
+        } catch (IllegalArgumentException e) {
+            throw new DataFormatException(e.msg);
+        }
+    }
+
+    /**
+     * Converts the given value into a float.
+     * Returns the given default value if the
+     * value does not represent a float.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as a float, or the default value
+     */
+    public static float asFloat(String value, float dflt) {
+        try {
+            return tango.text.convert.Float.toFloat(value);
+        } catch (IllegalArgumentException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into an DWT font data object.
+     * This method fails if the value does not represent font data.
+     * <p>
+     * A valid font data representation is a string of the form
+     * <code><it>fontname</it>-<it>style</it>-<it>height</it></code> where
+     * <code><it>fontname</it></code> is the name of a font,
+     * <code><it>style</it></code> is a font style (one of
+     * <code>"regular"</code>, <code>"bold"</code>,
+     * <code>"italic"</code>, or <code>"bold italic"</code>)
+     * and <code><it>height</it></code> is an integer representing the
+     * font height. Example: <code>Times New Roman-bold-36</code>.
+     * </p>
+     *
+     * @param value the value to be converted
+     * @return the value as font data
+     * @exception DataFormatException if the given value does not represent
+     *  font data
+     */
+    public static FontData asFontData(String value) {
+        if (value is null) {
+            throw new DataFormatException(
+                    "Null doesn't represent a valid font data"); //$NON-NLS-1$
+        }
+        String name = null;
+        int height = 0;
+        int style = 0;
+        try {
+            int length = value.length;
+            int heightIndex = value.lastIndexOf(SEPARATOR);
+            if (heightIndex is -1) {
+                throw new DataFormatException(
+                        "No correct font data format \"" ~ value ~ "\""); //$NON-NLS-2$//$NON-NLS-1$
+            }
+            height = StringConverter.asInt(value.substring(heightIndex + 1,
+                    length));
+            int faceIndex = value.lastIndexOf(SEPARATOR, heightIndex - 1);
+            if (faceIndex is -1) {
+                throw new DataFormatException(
+                        "No correct font data format \"" ~ value ~ "\""); //$NON-NLS-2$//$NON-NLS-1$
+            }
+            String s = value.substring(faceIndex + 1, heightIndex);
+            if (BOLD_ITALIC.equals(s)) {
+                style = DWT.BOLD | DWT.ITALIC;
+            } else if (BOLD.equals(s)) {
+                style = DWT.BOLD;
+            } else if (ITALIC.equals(s)) {
+                style = DWT.ITALIC;
+            } else if (REGULAR.equals(s)) {
+                style = DWT.NORMAL;
+            } else {
+                throw new DataFormatException("Unknown face name \"" ~ s ~ "\""); //$NON-NLS-2$//$NON-NLS-1$
+            }
+            name = value.substring(0, faceIndex);
+        } catch (/+NoSuchElement+/Exception e) {
+            throw new DataFormatException(e.msg);
+        }
+        return new FontData(name, height, style);
+    }
+
+    /**
+     * Returns the result of converting a list of comma-separated tokens into an array
+     *
+     * @return the array of string tokens
+     * @param prop the initial comma-separated string
+     */
+    private static String[] getArrayFromList(String prop, String separator) {
+        if (prop is null || prop.trim().equals("")) { //$NON-NLS-1$
+            return new String[0];
+        }
+        ArraySeq!(String) list = new ArraySeq!(String);
+        foreach ( s; tango.text.Util.delimit( prop, separator )) {
+            String token = s.trim();
+            if (!token.equals("")) { //$NON-NLS-1$
+                list.append(token);
+            }
+        }
+        return list.drained() ? null : list.toArray();
+    }
+
+    /**
+     * Convert the given value into an array of DWT font data objects.
+     *
+     * @param value the font list string
+     * @return the value as a font list
+     * @since 3.0
+     */
+    public static FontData[] asFontDataArray(String value) {
+        String[] strings = getArrayFromList(value, FONT_SEPARATOR);
+        ArraySeq!(FontData) data = new ArraySeq!(FontData);
+        data.capacity(strings.length);
+        for (int i = 0; i < strings.length; i++) {
+            try {
+                data.append(StringConverter.asFontData(strings[i]));
+            } catch (DataFormatException e) {
+                //do-nothing
+            }
+        }
+        return data.toArray();
+    }
+
+    /**
+     * Converts the given value into an DWT font data object.
+     * Returns the given default value if the
+     * value does not represent a font data object.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as a font data object, or the default value
+     */
+    public static FontData asFontData(String value, FontData dflt) {
+        try {
+            return asFontData(value);
+        } catch (DataFormatException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into an int.
+     * This method fails if the value does not represent an int.
+     *
+     * @param value the value to be converted
+     * @return the value as an int
+     * @exception DataFormatException if the given value does not represent
+     *  an int
+     */
+    public static int asInt(String value) {
+        try {
+            return tango.text.convert.Integer.toInt(value);
+        } catch (IllegalArgumentException e) {
+            throw new DataFormatException(e.msg);
+        }
+    }
+
+    /**
+     * Converts the given value into an int.
+     * Returns the given default value if the
+     * value does not represent an int.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as an int, or the default value
+     */
+    public static int asInt(String value, int dflt) {
+        try {
+            return tango.text.convert.Integer.toInt(value);
+        } catch (IllegalArgumentException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into a long.
+     * This method fails if the value does not represent a long.
+     *
+     * @param value the value to be converted
+     * @return the value as a long
+     * @exception DataFormatException if the given value does not represent
+     *  a long
+     */
+    public static long asLong(String value) {
+        try {
+            return tango.text.convert.Integer.toInt(value);
+        } catch (IllegalArgumentException e) {
+            throw new DataFormatException(e.msg);
+        }
+    }
+
+    /**
+     * Converts the given value into a long.
+     * Returns the given default value if the
+     * value does not represent a long.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as a long, or the default value
+     */
+    public static long asLong(String value, long dflt) {
+        try {
+            return tango.text.convert.Integer.toInt(value);
+        } catch (IllegalArgumentException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into an DWT point.
+     * This method fails if the value does not represent a point.
+     * <p>
+     * A valid point representation is a string of the form
+     * <code><it>x</it>,<it>y</it></code> where
+     * <code><it>x</it></code> and <code><it>y</it></code>
+     * are valid ints.
+     * </p>
+     *
+     * @param value the value to be converted
+     * @return the value as a point
+     * @exception DataFormatException if the given value does not represent
+     *  a point
+     */
+    public static Point asPoint(String value) {
+        if (value is null) {
+            throw new DataFormatException(
+                    "Null doesn't represent a valid point"); //$NON-NLS-1$
+        }
+        auto stok = tango.text.Util.delimit( value, "," );
+        String x = stok[0];
+        String y = stok[1];
+        int xval = 0, yval = 0;
+        try {
+            xval = tango.text.convert.Integer.toInt(x);
+            yval = tango.text.convert.Integer.toInt(y);
+        } catch (IllegalArgumentException e) {
+            throw new DataFormatException(e.msg);
+        }
+        return new Point(xval, yval);
+    }
+
+    /**
+     * Converts the given value into an DWT point.
+     * Returns the given default value if the
+     * value does not represent a point.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as a point, or the default value
+     */
+    public static Point asPoint(String value, Point dflt) {
+        try {
+            return asPoint(value);
+        } catch (DataFormatException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into an DWT rectangle.
+     * This method fails if the value does not represent a rectangle.
+     * <p>
+     * A valid rectangle representation is a string of the form
+     * <code><it>x</it>,<it>y</it>,<it>width</it>,<it>height</it></code>
+     * where <code><it>x</it></code>, <code><it>y</it></code>,
+     * <code><it>width</it></code>, and <code><it>height</it></code>
+     * are valid ints.
+     * </p>
+     *
+     * @param value the value to be converted
+     * @return the value as a rectangle
+     * @exception DataFormatException if the given value does not represent
+     *  a rectangle
+     */
+    public static Rectangle asRectangle(String value) {
+        if (value is null) {
+            throw new DataFormatException(
+                    "Null doesn't represent a valid rectangle"); //$NON-NLS-1$
+        }
+        auto stok = tango.text.Util.delimit( value, "," );
+        String x = stok[0];
+        String y = stok[1];
+        String width = stok[2];
+        String height = stok[3];
+        int xval = 0, yval = 0, wval = 0, hval = 0;
+        try {
+            xval = tango.text.convert.Integer.toInt(x);
+            yval = tango.text.convert.Integer.toInt(y);
+            wval = tango.text.convert.Integer.toInt(width);
+            hval = tango.text.convert.Integer.toInt(height);
+        } catch (IllegalArgumentException e) {
+            throw new DataFormatException(e.msg);
+        }
+        return new Rectangle(xval, yval, wval, hval);
+    }
+
+    /**
+     * Converts the given value into an DWT rectangle.
+     * Returns the given default value if the
+     * value does not represent a rectangle.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as a rectangle, or the default value
+     */
+    public static Rectangle asRectangle(String value, Rectangle dflt) {
+        try {
+            return asRectangle(value);
+        } catch (DataFormatException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given value into an DWT RGB color value.
+     * This method fails if the value does not represent an RGB
+     * color value.
+     * <p>
+     * A valid RGB color value representation is a string of the form
+     * <code><it>red</it>,<it>green</it></code>,<it>blue</it></code> where
+     * <code><it>red</it></code>, <it>green</it></code>, and
+     * <code><it>blue</it></code> are valid ints.
+     * </p>
+     *
+     * @param value the value to be converted
+     * @return the value as an RGB color value
+     * @exception DataFormatException if the given value does not represent
+     *  an RGB color value
+     */
+    public static RGB asRGB(String value) {
+        if (value is null) {
+            throw new DataFormatException("Null doesn't represent a valid RGB"); //$NON-NLS-1$
+        }
+        auto stok = tango.text.Util.delimit( value, "," );
+        if( stok.length < 3 ){
+            throw new DataFormatException( "not enough values" );
+        }
+        String red = stok[0];
+        String green = stok[1];
+        String blue = stok[2];
+        int rval = 0, gval = 0, bval = 0;
+        try {
+            rval = tango.text.convert.Integer.toInt(red);
+            gval = tango.text.convert.Integer.toInt(green);
+            bval = tango.text.convert.Integer.toInt(blue);
+        } catch (IllegalArgumentException e) {
+            throw new DataFormatException(e.msg);
+        }
+        return new RGB(rval, gval, bval);
+    }
+
+    /**
+     * Converts the given value into an DWT RGB color value.
+     * Returns the given default value if the
+     * value does not represent an RGB color value.
+     *
+     * @param value the value to be converted
+     * @param dflt the default value
+     * @return the value as a RGB color value, or the default value
+     */
+    public static RGB asRGB(String value, RGB dflt) {
+        try {
+            return asRGB(value);
+        } catch (DataFormatException e) {
+            return dflt;
+        }
+    }
+
+    /**
+     * Converts the given double value to a string.
+     * Equivalent to <code>String.valueOf(value)</code>.
+     *
+     * @param value the double value
+     * @return the string representing the given double
+     */
+    public static String asString(double value) {
+        return tango.text.convert.Float.toString(value);
+    }
+
+    /**
+     * Converts the given float value to a string.
+     * Equivalent to <code>String.valueOf(value)</code>.
+     *
+     * @param value the float value
+     * @return the string representing the given float
+     */
+    public static String asString(float value) {
+        return tango.text.convert.Float.toString(value);
+    }
+
+    /**
+     * Converts the given int value to a string.
+     * Equivalent to <code>String.valueOf(value)</code>.
+     *
+     * @param value the int value
+     * @return the string representing the given int
+     */
+    public static String asString(int value) {
+        return tango.text.convert.Integer.toString(value);
+    }
+
+    /**
+     * Converts the given long value to a string.
+     * Equivalent to <code>String.valueOf(value)</code>.
+     *
+     * @param value the long value
+     * @return the string representing the given long
+     */
+    public static String asString(long value) {
+        return tango.text.convert.Integer.toString(value);
+    }
+
+//     /**
+//      * Converts the given bool object to a string.
+//      * Equivalent to <code>String.valueOf(value.booleanValue())</code>.
+//      *
+//      * @param value the bool object
+//      * @return the string representing the given bool value
+//      */
+//     public static String asString(Boolean value) {
+//         Assert.isNotNull(value);
+//         return String.valueOf(value.booleanValue());
+//     }
+//
+//     /**
+//      * Converts the given double object to a string.
+//      * Equivalent to <code>String.valueOf(value.doubleValue())</code>.
+//      *
+//      * @param value the double object
+//      * @return the string representing the given double value
+//      */
+//     public static String asString(Double value) {
+//         Assert.isNotNull(value);
+//         return String.valueOf(value.doubleValue());
+//     }
+//
+//     /**
+//      * Converts the given float object to a string.
+//      * Equivalent to <code>String.valueOf(value.floatValue())</code>.
+//      *
+//      * @param value the float object
+//      * @return the string representing the given float value
+//      */
+//     public static String asString(Float value) {
+//         Assert.isNotNull(value);
+//         return String.valueOf(value.floatValue());
+//     }
+//
+//     /**
+//      * Converts the given integer object to a string.
+//      * Equivalent to <code>String.valueOf(value.intValue())</code>.
+//      *
+//      * @param value the integer object
+//      * @return the string representing the given integer value
+//      */
+//     public static String asString(Integer value) {
+//         Assert.isNotNull(value);
+//         return String.valueOf(value.intValue());
+//     }
+//
+//     /**
+//      * Converts the given long object to a string.
+//      * Equivalent to <code>String.valueOf(value.longValue())</code>.
+//      *
+//      * @param value the long object
+//      * @return the string representing the given long value
+//      */
+//     public static String asString(Long value) {
+//         Assert.isNotNull(value);
+//         return String.valueOf(value.longValue());
+//     }
+
+    /**
+     * Converts a font data array  to a string. The string representation is
+     * that of asString(FontData) seperated by ';'
+     *
+     * @param value The font data.
+     * @return The string representation of the font data arra.
+     * @since 3.0
+     */
+    public static String asString(FontData[] value) {
+        StringBuffer buffer = new StringBuffer();
+        for (int i = 0; i < value.length; i++) {
+            buffer.append(asString(value[i]));
+            if (i !is value.length - 1) {
+                buffer.append(FONT_SEPARATOR);
+            }
+        }
+        return buffer.toString();
+    }
+
+    /**
+     * Converts a font data object to a string. The string representation is
+     * "font name-style-height" (for example "Times New Roman-bold-36").
+     * @param value The font data.
+     * @return The string representation of the font data object.
+     */
+    public static String asString(FontData value) {
+        Assert.isNotNull(value);
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(value.getName());
+        buffer.append(SEPARATOR);
+        int style = value.getStyle();
+        bool bold = (style & DWT.BOLD) is DWT.BOLD;
+        bool italic = (style & DWT.ITALIC) is DWT.ITALIC;
+        if (bold && italic) {
+            buffer.append(BOLD_ITALIC);
+        } else if (bold) {
+            buffer.append(BOLD);
+        } else if (italic) {
+            buffer.append(ITALIC);
+        } else {
+            buffer.append(REGULAR);
+        }
+
+        buffer.append(SEPARATOR);
+        buffer.append(value.getHeight());
+        return buffer.toString();
+    }
+
+    /**
+     * Converts the given DWT point object to a string.
+     * <p>
+     * The string representation of a point has the form
+     * <code><it>x</it>,<it>y</it></code> where
+     * <code><it>x</it></code> and <code><it>y</it></code>
+     * are string representations of integers.
+     * </p>
+     *
+     * @param value the point object
+     * @return the string representing the given point
+     */
+    public static String asString(Point value) {
+        Assert.isNotNull(value);
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(value.x);
+        buffer.append(',');
+        buffer.append(value.y);
+        return buffer.toString();
+    }
+
+    /**
+     * Converts the given DWT rectangle object to a string.
+     * <p>
+     * The string representation of a rectangle has the form
+     * <code><it>x</it>,<it>y</it>,<it>width</it>,<it>height</it></code>
+     * where <code><it>x</it></code>, <code><it>y</it></code>,
+     * <code><it>width</it></code>, and <code><it>height</it></code>
+     * are string representations of integers.
+     * </p>
+     *
+     * @param value the rectangle object
+     * @return the string representing the given rectangle
+     */
+    public static String asString(Rectangle value) {
+        Assert.isNotNull(value);
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(value.x);
+        buffer.append(',');
+        buffer.append(value.y);
+        buffer.append(',');
+        buffer.append(value.width);
+        buffer.append(',');
+        buffer.append(value.height);
+        return buffer.toString();
+    }
+
+    /**
+     * Converts the given DWT RGB color value object to a string.
+     * <p>
+     * The string representation of an RGB color value has the form
+     * <code><it>red</it>,<it>green</it></code>,<it>blue</it></code> where
+     * <code><it>red</it></code>, <it>green</it></code>, and
+     * <code><it>blue</it></code> are string representations of integers.
+     * </p>
+     *
+     * @param value the RGB color value object
+     * @return the string representing the given RGB color value
+     */
+    public static String asString(RGB value) {
+        Assert.isNotNull(value);
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(value.red);
+        buffer.append(',');
+        buffer.append(value.green);
+        buffer.append(',');
+        buffer.append(value.blue);
+        return buffer.toString();
+    }
+
+    /**
+     * Converts the given bool value to a string.
+     * Equivalent to <code>String.valueOf(value)</code>.
+     *
+     * @param value the bool value
+     * @return the string representing the given bool
+     */
+    public static String asString(bool value) {
+        return value ? "true" : "false";
+    }
+
+    /**
+     * Returns the given string with all whitespace characters removed.
+     * <p>
+     * All characters that have codes less than or equal to <code>'&#92;u0020'</code>
+     * (the space character) are considered to be a white space.
+     * </p>
+     *
+     * @param s the source string
+     * @return the string with all whitespace characters removed
+     */
+    public static String removeWhiteSpaces(String s) {
+        //check for no whitespace (common case)
+        bool found = false;
+        int wsIndex = -1;
+        int size = s.length;
+        for (int i = 0; i < size; i++) {
+            found = CharacterIsWhitespace( s.charAt(i) );
+            if (found) {
+                wsIndex = i;
+                break;
+            }
+        }
+        if (!found) {
+            return s;
+        }
+
+        StringBuffer result = new StringBuffer(s.substring(0, wsIndex));
+        for (int i = wsIndex + 1; i < size; i++) {
+            char ch = s.charAt(i);
+            if (!CharacterIsWhitespace(ch)) {
+                result.append(ch);
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * Converts a font data object to a string representation for display.
+     *  The string representation is
+     * "font name-style-height" (for example "Times New Roman-bold-36").
+     * @param value The font data.
+     * @return The string representation of the font data object.
+     * @deprecated use asString(FontData)
+     */
+    public static String asDisplayableString(FontData value) {
+        Assert.isNotNull(value);
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(value.getName());
+        buffer.append(SEPARATOR);
+        int style = value.getStyle();
+        bool bold = (style & DWT.BOLD) is DWT.BOLD;
+        bool italic = (style & DWT.ITALIC) is DWT.ITALIC;
+        if (bold && italic) {
+            buffer.append(JFaceResources.getString("BoldItalicFont")); //$NON-NLS-1$
+        } else if (bold) {
+            buffer.append(JFaceResources.getString("BoldFont")); //$NON-NLS-1$
+        } else if (italic) {
+            buffer.append(JFaceResources.getString("ItalicFont")); //$NON-NLS-1$
+        } else {
+            buffer.append(JFaceResources.getString("RegularFont")); //$NON-NLS-1$
+        }
+        buffer.append(SEPARATOR);
+        buffer.append(value.getHeight());
+        return buffer.toString();
+
+    }
+}