
org.postgresql.geometric.PGpolygon Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of postgresql Show documentation
Show all versions of postgresql Show documentation
PostgreSQL JDBC Driver JDBC4
/*
* 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.
*/
public class PGpolygon extends PGobject implements Serializable, Cloneable {
/**
* The points defining the polygon
*/
public PGpoint[] points;
/**
* Creates a polygon using an array of PGpoints
*
* @param points the points defining the polygon
*/
public PGpolygon(PGpoint[] points) {
this();
this.points = points;
}
/**
* @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
*/
public PGpolygon() {
setType("polygon");
}
/**
* @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));
}
}
/**
* @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;
}
/**
* @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();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy