PGpolygon.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 implements the polygon datatype within PostgreSQL.
  7.  */
  8. public class PGpolygon extends PGobject implements Serializable,Cloneable
  9. {
  10.   /**
  11.    * The points defining the polygon
  12.    */
  13.   public PGpoint points[];
  14.   
  15.   /**
  16.    * Creates a polygon using an array of PGpoints
  17.    *
  18.    * @param points the points defining the polygon
  19.    */
  20.   public PGpolygon(PGpoint[] points)
  21.   {
  22.     this();
  23.     this.points = points;
  24.   }
  25.   
  26.   /**
  27.    * @param s definition of the circle in PostgreSQL's syntax.
  28.    * @exception SQLException on conversion failure
  29.    */
  30.   public PGpolygon(String s) throws SQLException
  31.   {
  32.     this();
  33.     setValue(s);
  34.   }
  35.   
  36.   /**
  37.    * Required by the driver
  38.    */
  39.   public PGpolygon()
  40.   {
  41.     setType("polygon");
  42.   }
  43.   
  44.   /**
  45.    * @param s Definition of the polygon in PostgreSQL's syntax
  46.    * @exception SQLException on conversion failure
  47.    */
  48.   public void setValue(String s) throws SQLException
  49.   {
  50.     PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(s),',');
  51.     int npoints = t.getSize();
  52.     points = new PGpoint[npoints];
  53.     for(int p=0;p<npoints;p++)
  54.       points[p] = new PGpoint(t.getToken(p));
  55.   }
  56.   
  57.   /**
  58.    * @param obj Object to compare with
  59.    * @return true if the two boxes are identical
  60.    */
  61.   public boolean equals(Object obj)
  62.   {
  63.     if(obj instanceof PGpolygon) {
  64.       PGpolygon p = (PGpolygon)obj;
  65.       
  66.       if(p.points.length != points.length)
  67. return false;
  68.       
  69.       for(int i=0;i<points.length;i++)
  70. if(!points[i].equals(p.points[i]))
  71.   return false;
  72.       
  73.       return true;
  74.     }
  75.     return false;
  76.   }
  77.   
  78.   /**
  79.    * This must be overidden to allow the object to be cloned
  80.    */
  81.   public Object clone()
  82.   {
  83.     PGpoint ary[] = new PGpoint[points.length];
  84.     for(int i=0;i<points.length;i++)
  85.       ary[i] = (PGpoint)points[i].clone();
  86.     return new PGpolygon(ary);
  87.   }
  88.   
  89.   /**
  90.    * @return the PGpolygon in the syntax expected by postgresql
  91.    */
  92.   public String getValue()
  93.   {
  94.     StringBuffer b = new StringBuffer();
  95.     b.append("(");
  96.     for(int p=0;p<points.length;p++) {
  97.       if(p>0) b.append(",");
  98.       b.append(points[p].toString());
  99.     }
  100.     b.append(")");
  101.     return b.toString();
  102.   }
  103. }