PGcircle.java
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. package postgresql.geometric;
  2. import java.io.*;
  3. import java.sql.*;
  4. import postgresql.util.*;
  5. /**
  6.  * This represents postgresql's circle datatype, consisting of a point and
  7.  * a radius
  8.  */
  9. public class PGcircle extends PGobject implements Serializable,Cloneable
  10. {
  11.   /**
  12.    * This is the centre point
  13.    */
  14.   public PGpoint center;
  15.   
  16.   /**
  17.    * This is the radius
  18.    */
  19.   double radius;
  20.   
  21.   /**
  22.    * @param x coordinate of centre
  23.    * @param y coordinate of centre
  24.    * @param r radius of circle
  25.    */
  26.   public PGcircle(double x,double y,double r)
  27.   {
  28.     this(new PGpoint(x,y),r);
  29.   }
  30.   
  31.   /**
  32.    * @param c PGpoint describing the circle's centre
  33.    * @param r radius of circle
  34.    */
  35.   public PGcircle(PGpoint c,double r)
  36.   {
  37.     this();
  38.     this.center = c;
  39.     this.radius = r;
  40.   }
  41.   
  42.   /**
  43.    * @param s definition of the circle in PostgreSQL's syntax.
  44.    * @exception SQLException on conversion failure
  45.    */
  46.   public PGcircle(String s) throws SQLException
  47.   {
  48.     this();
  49.     setValue(s);
  50.   }
  51.   
  52.   /**
  53.    * This constructor is used by the driver.
  54.    */
  55.   public PGcircle()
  56.   {
  57.     setType("circle");
  58.   }
  59.   
  60.   /**
  61.    * @param s definition of the circle in PostgreSQL's syntax.
  62.    * @exception SQLException on conversion failure
  63.    */
  64.   public void setValue(String s) throws SQLException
  65.   {
  66.     PGtokenizer t = new PGtokenizer(PGtokenizer.removeAngle(s),',');
  67.     if(t.getSize() != 2)
  68.       throw new PSQLException("postgresql.geo.circle",s);
  69.     
  70.     try {
  71.       center = new PGpoint(t.getToken(0));
  72.       radius = Double.valueOf(t.getToken(1)).doubleValue();
  73.     } catch(NumberFormatException e) {
  74.       throw new PSQLException("postgresql.geo.circle",e);
  75.     }
  76.   }
  77.   
  78.   /**
  79.    * @param obj Object to compare with
  80.    * @return true if the two boxes are identical
  81.    */
  82.   public boolean equals(Object obj)
  83.   {
  84.     if(obj instanceof PGcircle) {
  85.       PGcircle p = (PGcircle)obj;
  86.       return p.center.equals(center) && p.radius==radius;
  87.     }
  88.     return false;
  89.   }
  90.   
  91.   /**
  92.    * This must be overidden to allow the object to be cloned
  93.    */
  94.   public Object clone()
  95.   {
  96.     return new PGcircle((PGpoint)center.clone(),radius);
  97.   }
  98.   
  99.   /**
  100.    * @return the PGcircle in the syntax expected by postgresql
  101.    */
  102.   public String getValue()
  103.   {
  104.     return "<"+center+","+radius+">";
  105.   }
  106. }