001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/model/csct/cs/AxisInfo.java $
002 /*---------------- FILE HEADER ------------------------------------------
003
004 This file is part of deegree.
005 Copyright (C) 2001 by:
006 EXSE, Department of Geography, University of Bonn
007 http://www.giub.uni-bonn.de/exse/
008 lat/lon GmbH
009 http://www.lat-lon.de
010
011 It has been implemented within SEAGIS - An OpenSource implementation of OpenGIS specification
012 (C) 2001, Institut de Recherche pour le D�veloppement (http://sourceforge.net/projects/seagis/)
013 SEAGIS Contacts: Surveillance de l'Environnement Assist�e par Satellite
014 Institut de Recherche pour le D�veloppement / US-Espace
015 mailto:seasnet@teledetection.fr
016
017
018 This library is free software; you can redistribute it and/or
019 modify it under the terms of the GNU Lesser General Public
020 License as published by the Free Software Foundation; either
021 version 2.1 of the License, or (at your option) any later version.
022
023 This library is distributed in the hope that it will be useful,
024 but WITHOUT ANY WARRANTY; without even the implied warranty of
025 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
026 Lesser General Public License for more details.
027
028 You should have received a copy of the GNU Lesser General Public
029 License along with this library; if not, write to the Free Software
030 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
031
032 Contact:
033
034 Andreas Poth
035 lat/lon GmbH
036 Aennchenstr. 19
037 53115 Bonn
038 Germany
039 E-Mail: poth@lat-lon.de
040
041 Klaus Greve
042 Department of Geography
043 University of Bonn
044 Meckenheimer Allee 166
045 53115 Bonn
046 Germany
047 E-Mail: klaus.greve@uni-bonn.de
048
049
050 ---------------------------------------------------------------------------*/
051 package org.deegree.model.csct.cs;
052
053 // Miscellaneous
054 import java.io.Serializable;
055 import java.util.Locale;
056
057 import org.deegree.model.csct.resources.Utilities;
058 import org.deegree.model.csct.resources.css.ResourceKeys;
059 import org.deegree.model.csct.units.resources.Resources;
060
061 /**
062 * Details of axis. This is used to label axes, and indicate the orientation.
063 *
064 * @version 1.00
065 * @author OpenGIS (www.opengis.org)
066 * @author Martin Desruisseaux
067 *
068 * @author last edited by: $Author: bezema $
069 *
070 * @version $Revision: 6259 $, $Date: 2007-03-20 10:15:15 +0100 (Di, 20 Mär 2007) $
071 *
072 * @see "org.opengis.cs.CS_AxisInfo"
073 */
074 public class AxisInfo implements Serializable {
075 /**
076 * Serial number for interoperability with different versions.
077 */
078 private static final long serialVersionUID = 6799874182734710227L;
079
080 /**
081 * Default axis info for <var>x</var> values. Increasing ordinates values go East. This is
082 * usually used with projected coordinate systems.
083 */
084 public static final AxisInfo X = new AxisInfo( "x", AxisOrientation.EAST );
085
086 /**
087 * Default axis info for <var>y</var> values. Increasing ordinates values go North. This is
088 * usually used with projected coordinate systems.
089 */
090 public static final AxisInfo Y = new AxisInfo( "y", AxisOrientation.NORTH );
091
092 /**
093 * Default axis info for longitudes. Increasing ordinates values go East. This is usually used
094 * with geographic coordinate systems.
095 */
096 public static final AxisInfo LONGITUDE = new AxisInfo.Localized( "Longitude",
097 ResourceKeys.LONGITUDE,
098 AxisOrientation.EAST );
099
100 /**
101 * Default axis info for latitudes. Increasing ordinates values go North. This is usually used
102 * with geographic coordinate systems.
103 */
104 public static final AxisInfo LATITUDE = new AxisInfo.Localized( "Latitude",
105 ResourceKeys.LATITUDE,
106 AxisOrientation.NORTH );
107
108 /**
109 * The default axis for altitude values. Increasing ordinates values go up.
110 */
111 public static final AxisInfo ALTITUDE = new AxisInfo.Localized( "Altitude",
112 ResourceKeys.ALTITUDE,
113 AxisOrientation.UP );
114
115 /**
116 * A default axis for time values. Increasing time go toward future.
117 */
118 public static final AxisInfo TIME = new AxisInfo.Localized( "Time", ResourceKeys.TIME,
119 AxisOrientation.FUTURE );
120
121 /**
122 * Human readable name for axis. Possible values are <code>X</code>, <code>Y</code>,
123 * <code>Long</code>, <code>Lat</code> or any other short string.
124 *
125 * @see "org.opengis.cs.CS_AxisInfo#name"
126 */
127 public final String name;
128
129 /**
130 * Enumerated value for orientation.
131 *
132 * @see "org.opengis.cs.CS_AxisInfo#orientation"
133 */
134 public final AxisOrientation orientation;
135
136 /**
137 * Construct an AxisInfo.
138 *
139 * @param name
140 * The axis name. Possible values are <code>X</code>, <code>Y</code>,
141 * <code>Long</code>, <code>Lat</code> or any other short string.
142 * @param orientation
143 * The axis orientation.
144 */
145 public AxisInfo( final String name, final AxisOrientation orientation ) {
146 this.name = name;
147 this.orientation = orientation;
148 Info.ensureNonNull( "name", name );
149 Info.ensureNonNull( "orientation", orientation );
150 }
151
152 /**
153 * Returns the localized name of this axis. The default implementation returns {@link #name}.
154 *
155 * @param locale
156 * The locale, or <code>null</code> for the default locale.
157 * @return The localized string.
158 */
159 public String getName() {
160 return name;
161 }
162
163 /**
164 * Returns a hash value for this axis.
165 *
166 * @return a hash value for this axis.
167 */
168 public int hashCode() {
169 int code = 36972167;
170 if ( orientation != null )
171 code = code * 37 + orientation.hashCode();
172 if ( name != null )
173 code = code * 37 + name.hashCode();
174 return code;
175 }
176
177 /**
178 * Compares the specified object with this axis for equality.
179 *
180 * @return
181 */
182 public boolean equals( final Object object ) {
183 if ( object != null && object.getClass().equals( getClass() ) ) {
184 final AxisInfo that = (AxisInfo) object;
185 return Utilities.equals( this.orientation, that.orientation )
186 && Utilities.equals( this.name, that.name );
187 }
188 return false;
189 }
190
191 /**
192 * Returns the Well Know Text (WKT) for this axis. The WKT is part of OpenGIS's specification
193 * and looks like <code>AXIS["name",NORTH]</code>.
194 *
195 * @return the Well Know Text (WKT) for this axis.
196 */
197 public String toString() {
198 final StringBuffer buffer = new StringBuffer( "AXIS[\"" );
199 buffer.append( name );
200 buffer.append( '"' );
201 if ( orientation != null ) {
202 buffer.append( ',' );
203 buffer.append( orientation.getName() );
204 }
205 buffer.append( ']' );
206 return buffer.toString();
207 }
208
209 /**
210 * Localized {@link AxisInfo}.
211 *
212 * @version 1.0
213 * @author Martin Desruisseaux
214 */
215 private static final class Localized extends AxisInfo {
216 /**
217 * Serial number for interoperability with different versions.
218 */
219 private static final long serialVersionUID = 7625005531024599865L;
220
221 /**
222 * The key for localization.
223 */
224 private final int key;
225
226 /**
227 * Construct a localized axis info.
228 *
229 * @param name
230 * @param key
231 * @param orientation
232 */
233 public Localized( final String name, final int key, final AxisOrientation orientation ) {
234 super( name, orientation );
235 this.key = key;
236 }
237
238 /**
239 * Returns a localized string.
240 *
241 * @param locale
242 * @return a localized string.
243 */
244 public String getName( final Locale locale ) {
245 return Resources.getResources( locale ).getString( key );
246 }
247 }
248 }