summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/postgresql/PGpath.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/jdbc/postgresql/PGpath.java')
-rw-r--r--src/interfaces/jdbc/postgresql/PGpath.java99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/interfaces/jdbc/postgresql/PGpath.java b/src/interfaces/jdbc/postgresql/PGpath.java
new file mode 100644
index 0000000000..d87bbedbaa
--- /dev/null
+++ b/src/interfaces/jdbc/postgresql/PGpath.java
@@ -0,0 +1,99 @@
+/**
+ *
+ * This implements a path (a multiple segmented line, which may be closed)
+ *
+ */
+
+package postgresql;
+
+import java.io.*;
+import java.sql.*;
+
+public class PGpath implements Serializable
+{
+ public int npoints;
+ public boolean open;
+ public PGpoint point[];
+
+ public PGpath(int num,PGpoint[] points,boolean open)
+ {
+ npoints = num;
+ this.point = points;
+ this.open = open;
+ }
+
+ /**
+ * This constructor is used by the driver.
+ */
+ public PGpath(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,',');
+ npoints = t.getSize();
+ point = new PGpoint[npoints];
+ for(int p=0;p<npoints;p++)
+ point[p] = new PGpoint(t.getToken(p));
+ }
+
+ public boolean equals(Object obj)
+ {
+ PGpath p = (PGpath)obj;
+
+ if(p.npoints != npoints)
+ return false;
+
+ if(p.open != open)
+ return false;
+
+ for(int i=0;i<npoints;i++)
+ if(!point[i].equals(p.point[i]))
+ return false;
+
+ return true;
+ }
+
+ /**
+ * This returns the polygon in the syntax expected by postgresql
+ */
+ public String toString()
+ {
+ StringBuffer b = new StringBuffer(open?"[":"(");
+
+ for(int p=0;p<npoints;p++)
+ b.append(point[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;
+ }
+
+}