diff --git a/src/com/mxgraph/canvas/mxGraphicsCanvas2D.java b/src/com/mxgraph/canvas/mxGraphicsCanvas2D.java index 328936845..710b4f9b6 100644 --- a/src/com/mxgraph/canvas/mxGraphicsCanvas2D.java +++ b/src/com/mxgraph/canvas/mxGraphicsCanvas2D.java @@ -352,15 +352,7 @@ public void setDashPattern(String value) { if (value != null && value.length() > 0) { - String[] tokens = value.split(" "); - float[] dashpattern = new float[tokens.length]; - - for (int i = 0; i < tokens.length; i++) - { - dashpattern[i] = (float) (Float.parseFloat(tokens[i])); - } - - state.dashPattern = dashpattern; + state.dashPattern = mxUtils.parseDashPattern(value); } } diff --git a/src/com/mxgraph/util/mxUtils.java b/src/com/mxgraph/util/mxUtils.java index 19abff6b0..90c65d7c1 100644 --- a/src/com/mxgraph/util/mxUtils.java +++ b/src/com/mxgraph/util/mxUtils.java @@ -1715,6 +1715,45 @@ public static String getHexColorString(Color color) { return mxHtmlColor.getHexColorString(color); } + + /** + * Convert a string representing a dash pattern into a float array. + * A valid dash pattern is a string of dash widths (floating point values) + * separated by space characters. + * + * @param dashPatternString + * the string representing the dash pattern + * @return float[] + * @exception NumberFormatException + * if any of the dash widths cannot be interpreted as a + * floating point number + */ + public static float[] parseDashPattern(String dashPatternString) + throws NumberFormatException + { + if (dashPatternString != null && dashPatternString.length() > 0) + { + String[] tokens = dashPatternString.split(" "); + float[] dashpattern = new float[tokens.length]; + float dashWidth; + + for (int i = 0; i < tokens.length; i++) + { + dashWidth = (float) (Float.parseFloat(tokens[i])); + if (dashWidth > 0) + { + dashpattern[i] = dashWidth; + } + else + { + throw NumberFormatException("Dash width must be positive"); + } + } + + return dashpattern; + } + return null; + } /** * Reads the given filename into a string.