Author: rwhitcomb Date: Mon Apr 26 02:26:18 2021 New Revision: 1889182 URL: http://svn.apache.org/viewvc?rev=1889182&view=rev Log: Add another variation of Point.decode ("x, y"); fix checkstyle problems.
Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Point.java Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/Point.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/Point.java?rev=1889182&r1=1889181&r2=1889182&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/Point.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/Point.java Mon Apr 26 02:26:18 2021 @@ -33,24 +33,58 @@ import org.apache.pivot.util.Utils; public final class Point implements Serializable { private static final long serialVersionUID = 5193175754909343769L; + /** + * The (integer) X-value of this point, representing a distance from the + * left of the parent object. + */ public final int x; + /** + * The (integer) Y-value of this point, representing a distance down + * from the top of the parent object. + */ public final int y; + /** + * Map key used to access the X-value. + */ public static final String X_KEY = "x"; + /** + * Map key used to access the Y-value. + */ public static final String Y_KEY = "y"; - public Point(final int x, final int y) { - this.x = x; - this.y = y; + /** + * Construct a point given the X/Y coordinates. + * + * @param xValue The X-position for the point. + * @param yValue The Y-position for the point. + */ + public Point(final int xValue, final int yValue) { + x = xValue; + y = yValue; } + /** + * A "copy" constructor to duplicate a point value. + * + * @param point The other point to copy. + */ public Point(final Point point) { Utils.checkNull(point, "point"); - this.x = point.x; - this.y = point.y; + x = point.x; + y = point.y; } + /** + * Construct a point from a dictionary containing the X- and Y-position + * values as entries. + * + * @param point The source dictionary containing the values. + * @throws IllegalArgumentException if the input is {@code null}. + * @see #X_KEY + * @see #Y_KEY + */ public Point(final Dictionary<String, ?> point) { Utils.checkNull(point, "point"); @@ -58,11 +92,19 @@ public final class Point implements Seri this.y = point.getInt(Y_KEY); } + /** + * Construct a point from a sequence of two number values for the + * X- and Y-positions respectively. + * + * @param point The source sequence containing the values (values must be + * {@link Number}s). + * @throws IllegalArgumentException if the input is {@code null}. + */ public Point(final Sequence<?> point) { Utils.checkNull(point, "point"); - this.x = ((Number) point.get(0)).intValue(); - this.y = ((Number) point.get(1)).intValue(); + x = ((Number) point.get(0)).intValue(); + y = ((Number) point.get(1)).intValue(); } /** @@ -75,8 +117,7 @@ public final class Point implements Seri * @param dy The distance to move in the vertical * direction (positive moves downward on the screen, * and negative to move upward). - * @return A new object represented the translated - * location. + * @return A new object represented the translated location. */ public Point translate(final int dx, final int dy) { return new Point(x + dx, y + dy); @@ -105,18 +146,22 @@ public final class Point implements Seri } /** - * Decode a JSON-formatted string (map or list) that contains the two - * values for a new point. + * Decode a string value (which could be a JSON-formatted string (map or list)) + * that contains the two values for a new point. * <p> The format of a JSON map would be: * <pre>{ "x":nnn, "y":nnn }</pre> * <p> The format for a JSON list would be: * <pre>[ x, y ]</pre> + * <p> Or the string can simply be two numbers: + * <pre>x [,;] y</pre> * - * @param value The JSON string to be interpreted (must not be {@code null}). + * @param value The string to be interpreted (must not be {@code null}). * @return The new Point object if the string can be decoded successfully. * @throws IllegalArgumentException if the input is {@code null} or if the - * value could not be successfully decoded as either a JSON map or list. + * value could not be successfully decoded as a JSON map or list, or simply + * two values. * @see #Point(Dictionary) + * @see #Point(Sequence) * @see #Point(int, int) */ public static Point decode(final String value) { @@ -136,7 +181,16 @@ public final class Point implements Seri throw new IllegalArgumentException(exception); } } else { - throw new IllegalArgumentException("Invalid format for Point."); + String[] parts = value.split("\\s*[,;]\\s*"); + if (parts.length == 2) { + try { + point = new Point(Integer.parseInt(parts[0]), Integer.parseInt(parts[1])); + } catch (NumberFormatException ex) { + throw new IllegalArgumentException(ex); + } + } else { + throw new IllegalArgumentException("Invalid format for Point: '" + value + "'"); + } } return point;