001 //$HeadURL: $
002 /*---------------- FILE HEADER ------------------------------------------
003 This file is part of deegree.
004 Copyright (C) 2001-2008 by:
005 Department of Geography, University of Bonn
006 http://www.giub.uni-bonn.de/deegree/
007 lat/lon GmbH
008 http://www.lat-lon.de
009
010 This library is free software; you can redistribute it and/or
011 modify it under the terms of the GNU Lesser General Public
012 License as published by the Free Software Foundation; either
013 version 2.1 of the License, or (at your option) any later version.
014 This library is distributed in the hope that it will be useful,
015 but WITHOUT ANY WARRANTY; without even the implied warranty of
016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017 Lesser General Public License for more details.
018 You should have received a copy of the GNU Lesser General Public
019 License along with this library; if not, write to the Free Software
020 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
021 Contact:
022
023 Andreas Poth
024 lat/lon GmbH
025 Aennchenstr. 19
026 53177 Bonn
027 Germany
028 E-Mail: poth@lat-lon.de
029
030 Prof. Dr. Klaus Greve
031 Department of Geography
032 University of Bonn
033 Meckenheimer Allee 166
034 53115 Bonn
035 Germany
036 E-Mail: greve@giub.uni-bonn.de
037 ---------------------------------------------------------------------------*/
038
039 package org.deegree.crs;
040
041 import org.deegree.i18n.Messages;
042
043 /**
044 * The <code>Identifiable</code> class can be used to identify a crs, ellipsoid, Datum and primemeridian
045 *
046 * @author <a href="mailto:bezema@lat-lon.de">Rutger Bezema</a>
047 *
048 * @author last edited by: $Author:$
049 *
050 * @version $Revision:$, $Date:$
051 *
052 */
053
054 public class Identifiable {
055
056 private String[] identifiers;
057
058 private String[] versions;
059
060 private String[] names;
061
062 private String[] descriptions;
063
064 private String[] areasOfUse;
065
066 /**
067 * Takes the references of the other object and stores them in this Identifiable Object.
068 * @param other identifiable object.
069 */
070 public Identifiable( Identifiable other ){
071 this( other.getIdentifiers(), other.getNames(), other.getVersions(), other.getDescriptions(), other.getAreasOfUse() );
072 }
073
074 /**
075 *
076 * @param identifiers
077 * @param names the human readable names of the object.
078 * @param versions
079 * @param descriptions
080 * @param areasOfUse
081 * @throws IllegalArgumentException
082 * if no identifier(s) was/were given.
083 */
084 public Identifiable( String[] identifiers, String[] names, String[] versions, String[] descriptions,
085 String[] areasOfUse ) {
086 if ( identifiers == null || identifiers.length == 0 ) {
087 throw new IllegalArgumentException( "An identifiable object must at least have one identifier." );
088 }
089 this.identifiers = identifiers;
090
091 this.names = names;
092 this.versions = versions;
093 this.descriptions = descriptions;
094 this.areasOfUse = areasOfUse;
095 }
096
097 /**
098 * Creates arrays fromt the given identifier and name without setting the versions, descriptions and areasOfUse.
099 *
100 * @param identifiers of the object.
101 */
102 public Identifiable( String[] identifiers ) {
103 this( identifiers, null, null, null, null );
104 }
105
106 // /**
107 // * Creates arrays fromt the given identifier and name without setting the versions, descriptions and areasOfUse.
108 // *
109 // * @param identifier of the object.
110 // * @param name the human readable name of the object.
111 // */
112 // protected Identifiable( String identifier, String name ) {
113 // this( new String[]{identifier}, new String[]{name}, null, null, null );
114 // }
115
116
117 /**
118 * @return the first of all areasOfUse or <code>null</code> if no areasOfUse were given.
119 */
120 public final String getAreaOfUse() {
121 return ( areasOfUse != null && areasOfUse.length > 0 ) ? areasOfUse[0] : null;
122 }
123
124 /**
125 * @return the first of all descriptions or <code>null</code> if no descriptions were given.
126 */
127 public final String getDescription() {
128 return ( descriptions != null && descriptions.length > 0 ) ? descriptions[0] : null;
129 }
130
131 /**
132 * @return the first of all identifiers.
133 */
134 public final String getIdentifier() {
135 return identifiers[0];
136 }
137
138 /**
139 * @return the first of all names or <code>null</code> if no names were given.
140 */
141 public final String getName() {
142 return ( names != null && names.length > 0 ) ? names[0] : null;
143 }
144
145 /**
146 * @return the first of all versions or <code>null</code> if no versions were given.
147 */
148 public final String getVersion() {
149 return ( versions != null && versions.length > 0 ) ? versions[0] : null;
150 }
151
152 /**
153 * throws an InvalidParameterException if the given object is null
154 *
155 * @param toBeChecked
156 * for <code>null</code>
157 * @param message
158 * to put into the exception. If absend, the default message (CRS_INVALID_NULL_PARAMETER) will be
159 * inserted.
160 * @throws IllegalArgumentException
161 * if the given object is <code>null</code>.
162 */
163 protected void checkForNullObject( Object toBeChecked, String message )
164 throws IllegalArgumentException {
165 if ( toBeChecked != null ) {
166 return;
167 }
168 if ( message == null || "".equals( message.trim() ) ) {
169 message = Messages.getMessage( "CRS_INVALID_NULL_PARAMETER" );
170 }
171 throw new IllegalArgumentException( message );
172 }
173
174 /**
175 * throws an IllegalArgumentException if the given object array is null or empty
176 *
177 * @param toBeChecked
178 * for <code>null</code> or empty
179 * @param message
180 * to put into the exception. If absend, the default message (CRS_INVALID_NULL_PARAMETER) will be
181 * inserted.
182 * @throws IllegalArgumentException
183 * if the given object array is <code>null</code> or empty.
184 */
185 protected void checkForNullObject( Object[] toBeChecked, String message )
186 throws IllegalArgumentException {
187 if ( toBeChecked != null && toBeChecked.length != 0 ) {
188 return;
189 }
190 if ( message == null || "".equals( message.trim() ) ) {
191 message = Messages.getMessage( "CRS_INVALID_NULL_ARRAY" );
192 }
193 throw new IllegalArgumentException( message );
194 }
195
196 @Override
197 public String toString() {
198 StringBuilder sb = new StringBuilder( "id: [" );
199 for ( int i = 0; i < identifiers.length; ++i ) {
200 sb.append( identifiers[i] );
201 if ( ( i + 1 ) < identifiers.length ) {
202 sb.append( ", " );
203 }
204 }
205 if ( getName() != null ) {
206 sb.append( "], name: [" );
207 for ( int i = 0; i < names.length; ++i ) {
208 sb.append( names[i] );
209 if ( ( i + 1 ) < names.length ) {
210 sb.append( ", " );
211 }
212 }
213 }
214 if ( getVersion() != null ) {
215 sb.append( "], version: [" );
216 for ( int i = 0; i < versions.length; ++i ) {
217 sb.append( versions[i] );
218 if ( ( i + 1 ) < versions.length ) {
219 sb.append( ", " );
220 }
221 }
222 }
223 if ( getDescription() != null ) {
224 sb.append( "], description: [" );
225 for ( int i = 0; i < descriptions.length; ++i ) {
226 sb.append( descriptions[i] );
227 if ( ( i + 1 ) < descriptions.length ) {
228 sb.append( ", " );
229 }
230 }
231 }
232 if ( getAreaOfUse() != null ) {
233 sb.append( "], areasOfUse: [" );
234 for ( int i = 0; i < areasOfUse.length; ++i ) {
235 sb.append( areasOfUse[i] );
236 if ( ( i + 1 ) < areasOfUse.length ) {
237 sb.append( ", " );
238 }
239 }
240 }
241 return sb.toString();
242 }
243
244 /**
245 * @return the first id and the name (if given) as id: id, name: name.
246 */
247 public String getIdAndName() {
248 StringBuilder sb = new StringBuilder( "id: " ).append( getIdentifier() );
249 if( getName() != null ) {
250 sb.append( ", name: " ).append( getName() );
251 }
252 return sb.toString();
253
254 }
255
256 /**
257 * @return the areasOfUse or <code>null</code> if no areasOfUse were given.
258 */
259 public final String[] getAreasOfUse() {
260 return areasOfUse;
261 }
262
263 /**
264 * @return the descriptions or <code>null</code> if no descriptions were given.
265 */
266 public final String[] getDescriptions() {
267 return descriptions;
268 }
269
270 /**
271 * @return the identifiers, each identifiable object has atleast one id.
272 */
273 public final String[] getIdentifiers() {
274 return identifiers;
275 }
276
277 /**
278 * @return the names or <code>null</code> if no names were given.
279 */
280 public final String[] getNames() {
281 return names;
282 }
283
284 /**
285 * @return the versions or <code>null</code> if no versions were given.
286 */
287 public final String[] getVersions() {
288 return versions;
289 }
290
291 }