109 lines
2.2 KiB
Java
109 lines
2.2 KiB
Java
package postgresql.geometric;
|
|
|
|
import java.io.*;
|
|
import java.sql.*;
|
|
import postgresql.util.*;
|
|
|
|
/**
|
|
* This represents postgresql's circle datatype, consisting of a point and
|
|
* a radius
|
|
*/
|
|
public class PGcircle extends PGobject implements Serializable,Cloneable
|
|
{
|
|
/**
|
|
* This is the centre point
|
|
*/
|
|
public PGpoint center;
|
|
|
|
/**
|
|
* This is the radius
|
|
*/
|
|
double radius;
|
|
|
|
/**
|
|
* @param x coordinate of centre
|
|
* @param y coordinate of centre
|
|
* @param r radius of circle
|
|
*/
|
|
public PGcircle(double x,double y,double r)
|
|
{
|
|
this(new PGpoint(x,y),r);
|
|
}
|
|
|
|
/**
|
|
* @param c PGpoint describing the circle's centre
|
|
* @param r radius of circle
|
|
*/
|
|
public PGcircle(PGpoint c,double r)
|
|
{
|
|
this();
|
|
this.center = c;
|
|
this.radius = r;
|
|
}
|
|
|
|
/**
|
|
* @param s definition of the circle in PostgreSQL's syntax.
|
|
* @exception SQLException on conversion failure
|
|
*/
|
|
public PGcircle(String s) throws SQLException
|
|
{
|
|
this();
|
|
setValue(s);
|
|
}
|
|
|
|
/**
|
|
* This constructor is used by the driver.
|
|
*/
|
|
public PGcircle()
|
|
{
|
|
setType("circle");
|
|
}
|
|
|
|
/**
|
|
* @param s definition of the circle in PostgreSQL's syntax.
|
|
* @exception SQLException on conversion failure
|
|
*/
|
|
public void setValue(String s) throws SQLException
|
|
{
|
|
PGtokenizer t = new PGtokenizer(PGtokenizer.removeAngle(s),',');
|
|
if(t.getSize() != 2)
|
|
throw new PSQLException("postgresql.geo.circle",s);
|
|
|
|
try {
|
|
center = new PGpoint(t.getToken(0));
|
|
radius = Double.valueOf(t.getToken(1)).doubleValue();
|
|
} catch(NumberFormatException e) {
|
|
throw new PSQLException("postgresql.geo.circle",e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param obj Object to compare with
|
|
* @return true if the two boxes are identical
|
|
*/
|
|
public boolean equals(Object obj)
|
|
{
|
|
if(obj instanceof PGcircle) {
|
|
PGcircle p = (PGcircle)obj;
|
|
return p.center.equals(center) && p.radius==radius;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* This must be overidden to allow the object to be cloned
|
|
*/
|
|
public Object clone()
|
|
{
|
|
return new PGcircle((PGpoint)center.clone(),radius);
|
|
}
|
|
|
|
/**
|
|
* @return the PGcircle in the syntax expected by postgresql
|
|
*/
|
|
public String getValue()
|
|
{
|
|
return "<"+center+","+radius+">";
|
|
}
|
|
}
|