mirror of https://github.com/postgres/postgres
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
3.3 KiB
164 lines
3.3 KiB
/*-------------------------------------------------------------------------
|
|
*
|
|
* PGpath.java
|
|
* This implements a path (a multiple segmented line, which may be closed)
|
|
*
|
|
* Copyright (c) 2003, PostgreSQL Global Development Group
|
|
*
|
|
* IDENTIFICATION
|
|
* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/geometric/Attic/PGpath.java,v 1.6 2003/09/13 04:02:15 barry Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
package org.postgresql.geometric;
|
|
|
|
import org.postgresql.util.PGobject;
|
|
import org.postgresql.util.PGtokenizer;
|
|
import org.postgresql.util.PSQLException;
|
|
import org.postgresql.util.PSQLState;
|
|
|
|
import java.io.Serializable;
|
|
import java.sql.SQLException;
|
|
|
|
public class PGpath extends PGobject implements Serializable, Cloneable
|
|
{
|
|
/*
|
|
* True if the path is open, false if closed
|
|
*/
|
|
public boolean open;
|
|
|
|
/*
|
|
* The points defining this path
|
|
*/
|
|
public PGpoint points[];
|
|
|
|
/*
|
|
* @param points the PGpoints that define the path
|
|
* @param open True if the path is open, false if closed
|
|
*/
|
|
public PGpath(PGpoint[] points, boolean open)
|
|
{
|
|
this();
|
|
this.points = points;
|
|
this.open = open;
|
|
}
|
|
|
|
/*
|
|
* Required by the driver
|
|
*/
|
|
public PGpath()
|
|
{
|
|
setType("path");
|
|
}
|
|
|
|
/*
|
|
* @param s definition of the circle in PostgreSQL's syntax.
|
|
* @exception SQLException on conversion failure
|
|
*/
|
|
public PGpath(String s) throws SQLException
|
|
{
|
|
this();
|
|
setValue(s);
|
|
}
|
|
|
|
/*
|
|
* @param s Definition of the path in PostgreSQL's syntax
|
|
* @exception SQLException on conversion failure
|
|
*/
|
|
public void setValue(String s) throws SQLException
|
|
{
|
|
// First test to see if were open
|
|
if (s.startsWith("[") && s.endsWith("]"))
|
|
{
|
|
open = true;
|
|
s = PGtokenizer.removeBox(s);
|
|
}
|
|
else if (s.startsWith("(") && s.endsWith(")"))
|
|
{
|
|
open = false;
|
|
s = PGtokenizer.removePara(s);
|
|
}
|
|
else
|
|
throw new PSQLException("postgresql.geo.path", PSQLState.DATA_TYPE_MISMATCH);
|
|
|
|
PGtokenizer t = new PGtokenizer(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 boxes are identical
|
|
*/
|
|
public boolean equals(Object obj)
|
|
{
|
|
if (obj instanceof PGpath)
|
|
{
|
|
PGpath p = (PGpath)obj;
|
|
|
|
if (p.points.length != points.length)
|
|
return false;
|
|
|
|
if (p.open != open)
|
|
return false;
|
|
|
|
for (int i = 0;i < points.length;i++)
|
|
if (!points[i].equals(p.points[i]))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* This must be overidden to allow the object to be cloned
|
|
*/
|
|
public Object clone()
|
|
{
|
|
PGpoint ary[] = new PGpoint[points.length];
|
|
for (int i = 0;i < points.length;i++)
|
|
ary[i] = (PGpoint)points[i].clone();
|
|
return new PGpath(ary, open);
|
|
}
|
|
|
|
/*
|
|
* This returns the polygon in the syntax expected by org.postgresql
|
|
*/
|
|
public String getValue()
|
|
{
|
|
StringBuffer b = new StringBuffer(open ? "[" : "(");
|
|
|
|
for (int p = 0;p < points.length;p++)
|
|
{
|
|
if (p > 0)
|
|
b.append(",");
|
|
b.append(points[p].toString());
|
|
}
|
|
b.append(open ? "]" : ")");
|
|
|
|
return b.toString();
|
|
}
|
|
|
|
public boolean isOpen()
|
|
{
|
|
return open;
|
|
}
|
|
|
|
public boolean isClosed()
|
|
{
|
|
return !open;
|
|
}
|
|
|
|
public void closePath()
|
|
{
|
|
open = false;
|
|
}
|
|
|
|
public void openPath()
|
|
{
|
|
open = true;
|
|
}
|
|
}
|
|
|