001    /*
002     *    GeoAPI - Java interfaces for OGC/ISO standards
003     *    http://www.geoapi.org
004     *
005     *    Copyright (C) 2004-2012 Open Geospatial Consortium, Inc.
006     *    All Rights Reserved. http://www.opengeospatial.org/ogc/legal
007     *
008     *    Permission to use, copy, and modify this software and its documentation, with
009     *    or without modification, for any purpose and without fee or royalty is hereby
010     *    granted, provided that you include the following on ALL copies of the software
011     *    and documentation or portions thereof, including modifications, that you make:
012     *
013     *    1. The full text of this NOTICE in a location viewable to users of the
014     *       redistributed or derivative work.
015     *    2. Notice of any changes or modifications to the OGC files, including the
016     *       date changes were made.
017     *
018     *    THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
019     *    NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
020     *    TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
021     *    THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
022     *    PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
023     *
024     *    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
025     *    CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
026     *
027     *    The name and trademarks of copyright holders may NOT be used in advertising or
028     *    publicity pertaining to the software without specific, written prior permission.
029     *    Title to copyright in this software and any associated documentation will at all
030     *    times remain with copyright holders.
031     */
032    package org.opengis.metadata.distribution;
033    
034    import java.util.List;
035    import java.util.ArrayList;
036    import org.opengis.util.CodeList;
037    import org.opengis.annotation.UML;
038    
039    import static org.opengis.annotation.Obligation.*;
040    import static org.opengis.annotation.Specification.*;
041    
042    
043    /**
044     * Name of the medium.
045     *
046     * @author  Martin Desruisseaux (IRD)
047     * @version 3.0
048     * @since   2.0
049     */
050    @UML(identifier="MD_MediumNameCode", specification=ISO_19115)
051    public final class MediumName extends CodeList<MediumName> {
052        /**
053         * Serial number for compatibility with different versions.
054         */
055        private static final long serialVersionUID = 2634504971646621701L;
056    
057        /**
058         * List of all enumerations of this type.
059         * Must be declared before any enum declaration.
060         */
061        private static final List<MediumName> VALUES = new ArrayList<MediumName>(18);
062    
063        /**
064         * Read-only optical disk.
065         */
066        @UML(identifier="cdRom", obligation=CONDITIONAL, specification=ISO_19115)
067        public static final MediumName CD_ROM = new MediumName("CD_ROM");
068    
069        /**
070         * Digital versatile disk.
071         */
072        @UML(identifier="dvd", obligation=CONDITIONAL, specification=ISO_19115)
073        public static final MediumName DVD = new MediumName("DVD");
074    
075        /**
076         * Digital versatile disk digital versatile disk, read only.
077         */
078        @UML(identifier="dvdRom", obligation=CONDITIONAL, specification=ISO_19115)
079        public static final MediumName DVD_ROM = new MediumName("DVD_ROM");
080    
081        /**
082         * 3&frac12; inch magnetic disk.
083         */
084        @UML(identifier="3halfInchFloppy", obligation=CONDITIONAL, specification=ISO_19115)
085        public static final MediumName FLOPPY_3_HALF_INCH = new MediumName("FLOPPY_3_HALF_INCH");
086    
087        /**
088         * 5&frac14; inch magnetic disk.
089         */
090        @UML(identifier="5quarterInchFloppy", obligation=CONDITIONAL, specification=ISO_19115)
091        public static final MediumName FLOPPY_5_QUARTER_INCH = new MediumName("FLOPPY_5_QUARTER_INCH");
092    
093        /**
094         * 7 track magnetic tape.
095         */
096        @UML(identifier="7trackTape", obligation=CONDITIONAL, specification=ISO_19115)
097        public static final MediumName TAPE_7_TRACK = new MediumName("TAPE_7_TRACK");
098    
099        /**
100         * 9 track magnetic tape.
101         */
102        @UML(identifier="9trackTape", obligation=CONDITIONAL, specification=ISO_19115)
103        public static final MediumName TAPE_9_TRACK = new MediumName("TAPE_9_TRACK");
104    
105        /**
106         * 3480 cartridge tape drive.
107         */
108        @UML(identifier="3480Cartridge", obligation=CONDITIONAL, specification=ISO_19115)
109        public static final MediumName CARTRIDGE_3480 = new MediumName("CARTRIDGE_3480");
110    
111        /**
112         * 3490 cartridge tape drive.
113         */
114        @UML(identifier="3490Cartridge", obligation=CONDITIONAL, specification=ISO_19115)
115        public static final MediumName CARTRIDGE_3490 = new MediumName("CARTRIDGE_3490");
116    
117        /**
118         * 3580 cartridge tape drive.
119         */
120        @UML(identifier="3580Cartridge", obligation=CONDITIONAL, specification=ISO_19115)
121        public static final MediumName CARTRIDGE_3580 = new MediumName("CARTRIDGE_3580");
122    
123        /**
124         * 4 millimetre magnetic tape.
125         */
126        @UML(identifier="4mmCartridgeTape", obligation=CONDITIONAL, specification=ISO_19115)
127        public static final MediumName CARTRIDGE_TAPE_4mm = new MediumName("CARTRIDGE_TAPE_4mm");
128    
129        /**
130         * 8 millimetre magnetic tape.
131         */
132        @UML(identifier="8mmCartridgeTape", obligation=CONDITIONAL, specification=ISO_19115)
133        public static final MediumName CARTRIDGE_TAPE_8mm = new MediumName("CARTRIDGE_TAPE_8mm");
134    
135        /**
136         * &frac14; inch magnetic tape.
137         */
138        @UML(identifier="1quarterInchCartridgeTape", obligation=CONDITIONAL, specification=ISO_19115)
139        public static final MediumName CARTRIDGE_TAPE_1_QUARTER_INCH = new MediumName("CARTRIDGE_TAPE_1_QUARTER_INCH");
140    
141        /**
142         * Half inch cartridge streaming tape drive.
143         */
144        @UML(identifier="digitalLinearTape", obligation=CONDITIONAL, specification=ISO_19115)
145        public static final MediumName DIGITAL_LINEAR_TAPE = new MediumName("DIGITAL_LINEAR_TAPE");
146    
147        /**
148         * Direct computer linkage.
149         */
150        @UML(identifier="onLine", obligation=CONDITIONAL, specification=ISO_19115)
151        public static final MediumName ON_LINE = new MediumName("ON_LINE");
152    
153        /**
154         * Linkage through a satellite communication system.
155         */
156        @UML(identifier="satellite", obligation=CONDITIONAL, specification=ISO_19115)
157        public static final MediumName SATELLITE = new MediumName("SATELLITE");
158    
159        /**
160         * Communication through a telephone network.
161         */
162        @UML(identifier="telephoneLink", obligation=CONDITIONAL, specification=ISO_19115)
163        public static final MediumName TELEPHONE_LINK = new MediumName("TELEPHONE_LINK");
164    
165        /**
166         * Pamphlet or leaflet giving descriptive information.
167         */
168        @UML(identifier="hardcopy", obligation=CONDITIONAL, specification=ISO_19115)
169        public static final MediumName HARDCOPY = new MediumName("HARDCOPY");
170    
171        /**
172         * Constructs an enum with the given name. The new enum is
173         * automatically added to the list returned by {@link #values}.
174         *
175         * @param name The enum name. This name must not be in use by an other enum of this type.
176         */
177        private MediumName(final String name) {
178            super(name, VALUES);
179        }
180    
181        /**
182         * Returns the list of {@code MediumName}s.
183         *
184         * @return The list of codes declared in the current JVM.
185         */
186        public static MediumName[] values() {
187            synchronized (VALUES) {
188                return VALUES.toArray(new MediumName[VALUES.size()]);
189            }
190        }
191    
192        /**
193         * Returns the list of enumerations of the same kind than this enum.
194         */
195        @Override
196        public MediumName[] family() {
197            return values();
198        }
199    
200        /**
201         * Returns the medium name that matches the given string, or returns a
202         * new one if none match it. More specifically, this methods returns the first instance for
203         * which <code>{@linkplain #name() name()}.{@linkplain String#equals equals}(code)</code>
204         * returns {@code true}. If no existing instance is found, then a new one is created for
205         * the given name.
206         *
207         * @param code The name of the code to fetch or to create.
208         * @return A code matching the given name.
209         */
210        public static MediumName valueOf(String code) {
211            return valueOf(MediumName.class, code);
212        }
213    }