diff options
author | Marc G. Fournier <scrappy@hub.org> | 1998-01-13 02:19:56 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1998-01-13 02:19:56 +0000 |
commit | 06bad7807584351c2ab1cd544d677fa0ea087544 (patch) | |
tree | c17f9da61c34ca63d8f4e4ba56cf1980d6a62c13 /src/interfaces/jdbc/postgresql/geometric/PGpath.java | |
parent | c77c608aa2aba1d8b8e70f6d35371d09b48ff584 (diff) |
Oops...missed over half the patch :(
Diffstat (limited to 'src/interfaces/jdbc/postgresql/geometric/PGpath.java')
-rw-r--r-- | src/interfaces/jdbc/postgresql/geometric/PGpath.java | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/interfaces/jdbc/postgresql/geometric/PGpath.java b/src/interfaces/jdbc/postgresql/geometric/PGpath.java new file mode 100644 index 00000000000..45c162ac8aa --- /dev/null +++ b/src/interfaces/jdbc/postgresql/geometric/PGpath.java @@ -0,0 +1,145 @@ +package postgresql.geometric; + +import java.io.*; +import java.sql.*; +import postgresql.util.*; + +/** + * This implements a path (a multiple segmented line, which may be closed) + */ +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 SQLException("cannot tell if path is open or closed"); + + 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 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; + } + +} |