1 /*
2  *    GeoAPI - Java interfaces for OGC/ISO standards
3  *    http://www.geoapi.org
4  *
5  *    Copyright (C) 2004-2011 Open Geospatial Consortium, Inc.
6  *    All Rights Reserved. http://www.opengeospatial.org/ogc/legal
7  *
8  *    Permission to use, copy, and modify this software and its documentation, with
9  *    or without modification, for any purpose and without fee or royalty is hereby
10  *    granted, provided that you include the following on ALL copies of the software
11  *    and documentation or portions thereof, including modifications, that you make:
12  *
13  *    1. The full text of this NOTICE in a location viewable to users of the
14  *       redistributed or derivative work.
15  *    2. Notice of any changes or modifications to the OGC files, including the
16  *       date changes were made.
17  *
18  *    THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
19  *    NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
20  *    TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
21  *    THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
22  *    PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
23  *
24  *    COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
25  *    CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
26  *
27  *    The name and trademarks of copyright holders may NOT be used in advertising or
28  *    publicity pertaining to the software without specific, written prior permission.
29  *    Title to copyright in this software and any associated documentation will at all
30  *    times remain with copyright holders.
31  */
32 package org.opengis.metadata.distribution;
33 
34 import java.util.List;
35 import java.util.ArrayList;
36 import org.opengis.util.CodeList;
37 import org.opengis.annotation.UML;
38 
39 import static org.opengis.annotation.Obligation.*;
40 import static org.opengis.annotation.Specification.*;
41 
42 
43 /**
44  * Name of the medium.
45  *
46  * @author  Martin Desruisseaux (IRD)
47  * @version 3.0
48  * @since   2.0
49  */
50 @UML(identifier="MD_MediumNameCode", specification=ISO_19115)
51 public final class MediumName extends CodeList<MediumName> {
52     /**
53      * Serial number for compatibility with different versions.
54      */
55     private static final long serialVersionUID = 2634504971646621701L;
56 
57     /**
58      * List of all enumerations of this type.
59      * Must be declared before any enum declaration.
60      */
61     private static final List<MediumName> VALUES = new ArrayList<MediumName>(18);
62 
63     /**
64      * Read-only optical disk.
65      */
66     @UML(identifier="cdRom", obligation=CONDITIONAL, specification=ISO_19115)
67     public static final MediumName CD_ROM = new MediumName("CD_ROM");
68 
69     /**
70      * Digital versatile disk.
71      */
72     @UML(identifier="dvd", obligation=CONDITIONAL, specification=ISO_19115)
73     public static final MediumName DVD = new MediumName("DVD");
74 
75     /**
76      * Digital versatile disk digital versatile disk, read only.
77      */
78     @UML(identifier="dvdRom", obligation=CONDITIONAL, specification=ISO_19115)
79     public static final MediumName DVD_ROM = new MediumName("DVD_ROM");
80 
81     /**
82      * 3&frac12; inch magnetic disk.
83      */
84     @UML(identifier="3halfInchFloppy", obligation=CONDITIONAL, specification=ISO_19115)
85     public static final MediumName FLOPPY_3_HALF_INCH = new MediumName("FLOPPY_3_HALF_INCH");
86 
87     /**
88      * 5&frac14; inch magnetic disk.
89      */
90     @UML(identifier="5quarterInchFloppy", obligation=CONDITIONAL, specification=ISO_19115)
91     public static final MediumName FLOPPY_5_QUARTER_INCH = new MediumName("FLOPPY_5_QUARTER_INCH");
92 
93     /**
94      * 7 track magnetic tape.
95      */
96     @UML(identifier="7trackTape", obligation=CONDITIONAL, specification=ISO_19115)
97     public static final MediumName TAPE_7_TRACK = new MediumName("TAPE_7_TRACK");
98 
99     /**
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      */
MediumName(final String name)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      */
values()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      */
family()195     public MediumName[] family() {
196         return values();
197     }
198 
199     /**
200      * Returns the medium name that matches the given string, or returns a
201      * new one if none match it.
202      *
203      * @param code The name of the code to fetch or to create.
204      * @return A code matching the given name.
205      */
valueOf(String code)206     public static MediumName valueOf(String code) {
207         return valueOf(MediumName.class, code);
208     }
209 }
210