File: PGcircle.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 (132 lines) | stat: -rw-r--r-- 3,488 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
131
132
/*-------------------------------------------------------------------------
*
* Copyright (c) 2003-2008, PostgreSQL Global Development Group
*
* IDENTIFICATION
*   $PostgreSQL: pgjdbc/org/postgresql/geometric/PGcircle.java,v 1.17 2008/01/08 06:56:28 jurka Exp $
*
*-------------------------------------------------------------------------
*/
package org.postgresql.geometric;

import org.postgresql.util.GT;
import org.postgresql.util.PGobject;
import org.postgresql.util.PGtokenizer;
import org.postgresql.util.PSQLException;
import org.postgresql.util.PSQLState;

import java.io.Serializable;
import java.sql.SQLException;

/**
 *     This represents org.postgresql's circle datatype, consisting of a point
 *     and a radius
 */
public class PGcircle extends PGobject implements Serializable, Cloneable
{
    /**
     * This is the center point
     */
    public PGpoint center;

    /**
     * This is the radius
     */
    public double radius;

    /**
     * @param x coordinate of center
     * @param y coordinate of center
     * @param r radius of circle
     */
    public PGcircle(double x, double y, double r)
    {
        this(new PGpoint(x, y), r);
    }

    /**
     * @param c PGpoint describing the circle's center
     * @param r radius of circle
     */
    public PGcircle(PGpoint c, double r)
    {
        this();
        this.center = c;
        this.radius = r;
    }

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

    /**
     * This constructor is used by the driver.
     */
    public PGcircle()
    {
        setType("circle");
    }

    /**
     * @param s definition of the circle in PostgreSQL's syntax.
     * @exception SQLException on conversion failure
     */
    public void setValue(String s) throws SQLException
    {
        PGtokenizer t = new PGtokenizer(PGtokenizer.removeAngle(s), ',');
        if (t.getSize() != 2)
            throw new PSQLException(GT.tr("Conversion to type {0} failed: {1}.", new Object[]{type,s}), PSQLState.DATA_TYPE_MISMATCH);

        try
        {
            center = new PGpoint(t.getToken(0));
            radius = Double.valueOf(t.getToken(1)).doubleValue();
        }
        catch (NumberFormatException e)
        {
            throw new PSQLException(GT.tr("Conversion to type {0} failed: {1}.", new Object[]{type,s}), PSQLState.DATA_TYPE_MISMATCH, e);
        }
    }

    /**
     * @param obj Object to compare with
     * @return true if the two circles are identical
     */
    public boolean equals(Object obj)
    {
        if (obj instanceof PGcircle)
        {
            PGcircle p = (PGcircle)obj;
            return p.center.equals(center) && p.radius == radius;
        }
        return false;
    }

    public int hashCode()
    {
        long v = Double.doubleToLongBits(radius);
        return (int) (center.hashCode() ^ v ^ (v >>> 32));
    }

    public Object clone() throws CloneNotSupportedException
    {
        PGcircle newPGcircle = (PGcircle) super.clone();
        if( newPGcircle.center != null )
            newPGcircle.center = (PGpoint) newPGcircle.center.clone();
        return newPGcircle;
    }

    /**
     * @return the PGcircle in the syntax expected by org.postgresql
     */
    public String getValue()
    {
        return "<" + center + "," + radius + ">";
    }
}