/*
 * Copyright (c) 2003, PostgreSQL Global Development Group
 * See the LICENSE file in the project root for more information.
 */

package org.postgresql.geometric;

import org.postgresql.util.PGobject;
import org.postgresql.util.PGtokenizer;

import java.io.Serializable;
import java.sql.SQLException;

This implements the polygon datatype within PostgreSQL.
/** * This implements the polygon datatype within PostgreSQL. */
public class PGpolygon extends PGobject implements Serializable, Cloneable {
The points defining the polygon.
/** * The points defining the polygon. */
public PGpoint[] points;
Creates a polygon using an array of PGpoints.
Params:
  • points – the points defining the polygon
/** * Creates a polygon using an array of PGpoints. * * @param points the points defining the polygon */
public PGpolygon(PGpoint[] points) { this(); this.points = points; }
Params:
  • s – definition of the polygon in PostgreSQL's syntax.
Throws:
/** * @param s definition of the polygon in PostgreSQL's syntax. * @throws SQLException on conversion failure */
public PGpolygon(String s) throws SQLException { this(); setValue(s); }
Required by the driver.
/** * Required by the driver. */
public PGpolygon() { setType("polygon"); }
Params:
  • s – Definition of the polygon in PostgreSQL's syntax
Throws:
/** * @param s Definition of the polygon in PostgreSQL's syntax * @throws SQLException on conversion failure */
public void setValue(String s) throws SQLException { PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(s), ','); int npoints = t.getSize(); points = new PGpoint[npoints]; for (int p = 0; p < npoints; p++) { points[p] = new PGpoint(t.getToken(p)); } }
Params:
  • obj – Object to compare with
Returns:true if the two polygons are identical
/** * @param obj Object to compare with * @return true if the two polygons are identical */
public boolean equals(Object obj) { if (obj instanceof PGpolygon) { PGpolygon p = (PGpolygon) obj; if (p.points.length != points.length) { return false; } for (int i = 0; i < points.length; i++) { if (!points[i].equals(p.points[i])) { return false; } } return true; } return false; } public int hashCode() { // XXX not very good.. int hash = 0; for (int i = 0; i < points.length && i < 5; ++i) { hash = hash ^ points[i].hashCode(); } return hash; } public Object clone() throws CloneNotSupportedException { PGpolygon newPGpolygon = (PGpolygon) super.clone(); if (newPGpolygon.points != null) { newPGpolygon.points = (PGpoint[]) newPGpolygon.points.clone(); for (int i = 0; i < newPGpolygon.points.length; ++i) { if (newPGpolygon.points[i] != null) { newPGpolygon.points[i] = (PGpoint) newPGpolygon.points[i].clone(); } } } return newPGpolygon; }
Returns:the PGpolygon in the syntax expected by org.postgresql
/** * @return the PGpolygon in the syntax expected by org.postgresql */
public String getValue() { StringBuilder b = new StringBuilder(); b.append("("); for (int p = 0; p < points.length; p++) { if (p > 0) { b.append(","); } b.append(points[p].toString()); } b.append(")"); return b.toString(); } }