001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/opengis/pt/PT_Envelope.java $
002    /*
003     * OpenGIS� Coordinate Transformation Services Implementation Specification
004     * Copyright (2001) OpenGIS consortium
005     *
006     * THIS COPYRIGHT NOTICE IS A TEMPORARY PATCH.   Version 1.00 of official
007     * OpenGIS's interface files doesn't contain a copyright notice yet. This
008     * file is a slightly modified version of official OpenGIS's interface.
009     * Changes have been done in order to fix RMI problems and are documented
010     * on the SEAGIS web site (seagis.sourceforge.net). THIS FILE WILL LIKELY
011     * BE REPLACED BY NEXT VERSION OF OPENGIS SPECIFICATIONS.
012     */
013    package org.opengis.pt;
014    
015    // Various JDK's classes
016    import java.io.Serializable;
017    
018    
019    /**
020     * A box defined by two positions.
021     * The two positions must have the same dimension.
022     * Each of the ordinate values in the minimum point must be less than or equal
023     * to the corresponding ordinate value in the maximum point.  Please note that
024     * these two points may be outside the valid domain of their coordinate system.
025     * (Of course the points and envelope do not explicitly reference a coordinate
026     * system, but their implicit coordinate system is defined by their context.)
027     *
028     * @version 1.01
029     * @since   1.00
030     * @author Martin Daly
031     * @author Martin Desruisseaux
032     */
033    public class PT_Envelope implements Cloneable, Serializable
034    {
035        /**
036         * Use <code>serialVersionUID</code> from first
037         * draft for interoperability with CSS 1.00.
038         */
039        private static final long serialVersionUID = -1819256261961411213L;
040    
041        /**
042         * Point containing minimum ordinate values.
043         */
044        public PT_CoordinatePoint minCP;
045    
046        /**
047         * Point containing maximum ordinate values.
048         */
049        public PT_CoordinatePoint maxCP;
050    
051        /**
052         * Construct an empty envelope. Caller must
053         * initialize {@link #minCP} and {@link #maxCP}.
054         */
055        public PT_Envelope()
056        {}
057    
058        /**
059         * Returns a hash value for this envelope.
060         * This value need not remain consistent between
061         * different implementations of the same class.
062         */
063        public int hashCode()
064        {
065            int code = 7896312;
066            if (minCP!=null) code = code*37 + minCP.hashCode();
067            if (maxCP!=null) code = code*37 + maxCP.hashCode();
068            return code;
069        }
070    
071        /**
072         * Compares the specified object with
073         * this envelope for equality.
074         */
075        public boolean equals(final Object object)
076        {
077            if (object!=null && getClass().equals(object.getClass()))
078            {
079                final PT_Envelope that = (PT_Envelope) object;
080                return (minCP==that.minCP || (minCP!=null && minCP.equals(that.minCP))) &&
081                       (maxCP==that.maxCP || (maxCP!=null && maxCP.equals(that.maxCP)));
082            }
083            return false;
084        }
085    
086        /**
087         * Returns a deep copy of this envelope.
088         */
089        public Object clone()
090        {
091            try
092            {
093                final PT_Envelope copy = (PT_Envelope) super.clone();
094                if (copy.minCP!=null) copy.minCP = (PT_CoordinatePoint) copy.minCP.clone();
095                if (copy.maxCP!=null) copy.maxCP = (PT_CoordinatePoint) copy.maxCP.clone();
096                return copy;
097            }
098            catch (CloneNotSupportedException exception)
099            {
100                // Should not happen, since we are cloneable.
101                throw new InternalError(exception.getMessage());
102            }
103        }
104    
105        /**
106         * Returns a string representation of this envelope.
107         * The returned string is implementation dependent.
108         * It is usually provided for debugging purposes only.
109         */
110        public String toString()
111        {
112            final StringBuffer buffer=new StringBuffer("PT_Envelope");
113            buffer.append('[');
114            buffer.append(minCP);
115            buffer.append(", ");
116            buffer.append(maxCP);
117            buffer.append(']');
118            return buffer.toString();
119        }
120    }
121    /* ********************************************************************
122    Changes to this class. What the people have been up to:
123    $Log$
124    Revision 1.2  2006/07/13 06:28:31  poth
125    comment footer added
126    
127    ********************************************************************** */