File: PGpolygon.java

package info (click to toggle)
libpgjava 8.4-701-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 3,532 kB
  • ctags: 4,162
  • sloc: java: 33,948; xml: 3,158; makefile: 14; sh: 10
file content (130 lines) | stat: -rw-r--r-- 3,449 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*-------------------------------------------------------------------------
*
* Copyright (c) 2003-2008, PostgreSQL Global Development Group
*
* IDENTIFICATION
*   $PostgreSQL: pgjdbc/org/postgresql/geometric/PGpolygon.java,v 1.13 2008/01/08 06:56:28 jurka Exp $
*
*-------------------------------------------------------------------------
*/
package org.postgresql.geometric;

import org.postgresql.util.PGobject;
import org.postgresql.util.PGtokenizer;
import java.io.Serializable;
import java.sql.SQLException;

/**
 *     This implements the polygon datatype within PostgreSQL.
 */
public class PGpolygon extends PGobject implements Serializable, Cloneable
{
    /**
     * The points defining the polygon
     */
    public PGpoint points[];

    /**
     * Creates a polygon using an array of PGpoints
     *
     * @param points the points defining the polygon
     */
    public PGpolygon(PGpoint[] points)
    {
        this();
        this.points = points;
    }

    /**
     * @param s definition of the polygon in PostgreSQL's syntax.
     * @exception SQLException on conversion failure
     */
    public PGpolygon(String s) throws SQLException
    {
        this();
        setValue(s);
    }

    /**
     * Required by the driver
     */
    public PGpolygon()
    {
        setType("polygon");
    }

    /**
     * @param s Definition of the polygon in PostgreSQL's syntax
     * @exception SQLException on conversion failure
     */
    public void setValue(String s) throws SQLException
    {
        PGtokenizer t = new PGtokenizer(PGtokenizer.removePara(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 polygons are identical
     */
    public boolean equals(Object obj)
    {
        if (obj instanceof PGpolygon)
        {
            PGpolygon p = (PGpolygon)obj;

            if (p.points.length != points.length)
                return false;

            for (int i = 0;i < points.length;i++)
                if (!points[i].equals(p.points[i]))
                    return false;

            return true;
        }
        return false;
    }

    public int hashCode() {
        // XXX not very good..
        int hash = 0;
        for (int i = 0; i < points.length && i < 5; ++i)
        {
            hash = hash ^ points[i].hashCode();
        }
        return hash;
    }

    public Object clone() throws CloneNotSupportedException
    {
        PGpolygon newPGpolygon = (PGpolygon) super.clone();        
        if( newPGpolygon.points != null )
        {
            newPGpolygon.points = (PGpoint[]) newPGpolygon.points.clone();
            for( int i = 0; i < newPGpolygon.points.length; ++i )
                if( newPGpolygon.points[i] != null )
                    newPGpolygon.points[i] = (PGpoint) newPGpolygon.points[i].clone();
        }
        return newPGpolygon;
    }

    /**
     * @return the PGpolygon in the syntax expected by org.postgresql
     */
    public String getValue()
    {
        StringBuffer b = new StringBuffer();
        b.append("(");
        for (int p = 0;p < points.length;p++)
        {
            if (p > 0)
                b.append(",");
            b.append(points[p].toString());
        }
        b.append(")");
        return b.toString();
    }
}