summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/postgresql/geometric/PGpath.java
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1998-01-13 02:19:56 +0000
committerMarc G. Fournier <scrappy@hub.org>1998-01-13 02:19:56 +0000
commit06bad7807584351c2ab1cd544d677fa0ea087544 (patch)
treec17f9da61c34ca63d8f4e4ba56cf1980d6a62c13 /src/interfaces/jdbc/postgresql/geometric/PGpath.java
parentc77c608aa2aba1d8b8e70f6d35371d09b48ff584 (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.java145
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;
+ }
+
+}