001 /*
002 * GeoAPI - Java interfaces for OGC/ISO standards
003 * http://www.geoapi.org
004 *
005 * Copyright (C) 2004-2013 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½ 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¼ 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 * ¼ 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 element of the given name. The new element is
173 * automatically added to the list returned by {@link #values()}.
174 *
175 * @param name The name of the new element.
176 * This name must not be in use by an other element of this type.
177 */
178 private MediumName(final String name) {
179 super(name, VALUES);
180 }
181
182 /**
183 * Returns the list of {@code MediumName}s.
184 *
185 * @return The list of codes declared in the current JVM.
186 */
187 public static MediumName[] values() {
188 synchronized (VALUES) {
189 return VALUES.toArray(new MediumName[VALUES.size()]);
190 }
191 }
192
193 /**
194 * Returns the list of codes of the same kind than this code list element.
195 * Invoking this method is equivalent to invoking {@link #values()}, except that
196 * this method can be invoked on an instance of the parent {@code CodeList} class.
197 */
198 @Override
199 public MediumName[] family() {
200 return values();
201 }
202
203 /**
204 * Returns the medium name that matches the given string, or returns a
205 * new one if none match it. More specifically, this methods returns the first instance for
206 * which <code>{@linkplain #name() name()}.{@linkplain String#equals equals}(code)</code>
207 * returns {@code true}. If no existing instance is found, then a new one is created for
208 * the given name.
209 *
210 * @param code The name of the code to fetch or to create.
211 * @return A code matching the given name.
212 */
213 public static MediumName valueOf(String code) {
214 return valueOf(MediumName.class, code);
215 }
216 }