001    //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/model/csct/units/resources/SymbolResources.java $
002    /*
003     * Map and oceanographical data visualisation
004     * Copyright (C) 1999 P�ches et Oc�ans Canada
005     *               2000 Institut de Recherche pour le D�veloppement
006     *
007     *
008     *    This library is free software; you can redistribute it and/or
009     *    modify it under the terms of the GNU Library General Public
010     *    License as published by the Free Software Foundation; either
011     *    version 2 of the License, or (at your option) any later version.
012     *
013     *    This library is distributed in the hope that it will be useful,
014     *    but WITHOUT ANY WARRANTY; without even the implied warranty of
015     *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
016     *    Library General Public License for more details (http://www.gnu.org/).
017     *
018     *
019     * Contacts:
020     *     FRANCE: Surveillance de l'Environnement Assist�e par Satellite
021     *             Institut de Recherche pour le D�veloppement / US-Espace
022     *             mailto:seasnet@teledetection.fr
023     *
024     *     CANADA: Observatoire du Saint-Laurent
025     *             Institut Maurice-Lamontagne
026     *             mailto:osl@osl.gc.ca
027     */
028    package org.deegree.model.csct.units.resources;
029    
030    // Utilitaires
031    import java.util.Enumeration;
032    import java.util.NoSuchElementException;
033    
034    /**
035     * Liste de ressources s'adaptant � la langue de l'utilisateur. Cette classe s'apparente � la classe
036     * {@link java.util.ListResourceBundle} standard du Java, except� qu'elle est l�g�rement plus
037     * �conome en m�moire.
038     * 
039     * @version 1.0
040     * @author Martin Desruisseaux
041     */
042    public class SymbolResources extends java.util.ResourceBundle {
043        /**
044         * Table des ressources adapt�es � la langue de l'utilisateur.
045         */
046        final Object[] map;
047    
048        /**
049         * Construit la table des ressources.
050         * 
051         * @param contents
052         *            Liste des cl�s et des valeurs qui y sont associ�es. Cette liste consiste en un
053         *            tableau d'objets. Les objets se trouvant aux index pairs (0, 2, 4...) sont les
054         *            cl�s, et les objets se trouvant aux index impairs sont les valeurs (voyez la
055         *            description de cette classe pour des exemples).
056         * 
057         * @throws IllegalArgumentException
058         *             Si une cl� a �t� r�p�t�e deux fois.
059         */
060        protected SymbolResources( final Object[] contents ) throws IllegalArgumentException {
061            map = contents;
062            for ( int i = 0; i < contents.length; i += 2 ) {
063                final String key = contents[i].toString();
064                for ( int j = i; ( j += 2 ) < contents.length; ) {
065                    if ( key.equals( contents[j] ) )
066                        throw new IllegalArgumentException( "Duplicated key: " + key );
067                }
068            }
069        }
070    
071        /**
072         * Renvoie un �num�rateur qui balayera toutes les cl�s que poss�de cette liste de ressources.
073         */
074        public final Enumeration<String> getKeys() {
075            return new Enumeration<String>() {
076                private int i = 0;
077    
078                public boolean hasMoreElements() {
079                    return i < map.length;
080                }
081    
082                public String nextElement() {
083                    if ( i < map.length ) {
084                        final int i = this.i;
085                        this.i += 2;
086                        return (String) map[i];
087                    }
088                    throw new NoSuchElementException();
089                }
090            };
091        }
092    
093        /**
094         * Renvoie la ressource associ�e � une cl� donn�e. Cette m�thode est d�finie pour r�pondre aux
095         * exigences de la classe {@link java.util.ResourceBundle} et n'a g�n�ralement pas besoin d'�tre
096         * appell�e directement.
097         * 
098         * @param key
099         *            Cl� d�signant la ressouce d�sir�e (ne doit pas �tre <code>null</code>).
100         * @return La ressource demand�e, ou <code>null</code> si aucune ressource n'est d�finie pour
101         *         cette cl�.
102         */
103        protected final Object handleGetObject( final String key ) {
104            for ( int i = 0; i < map.length; i += 2 )
105                if ( key.equals( map[i] ) )
106                    return map[i + 1];
107            return null;
108        }
109    }