001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.lang3;
018
019 /**
020 * <p>An enum representing all the versions of the Java specification.
021 * This is intended to mirror available values from the
022 * <em>java.specification.version</em> System property. </p>
023 *
024 * @since 3.0
025 * @version $Id: $
026 */
027 public enum JavaVersion {
028
029 /**
030 * The Java version reported by Android. This is not an official Java version number.
031 */
032 JAVA_0_9(1.5f, "0.9"),
033
034 /**
035 * Java 1.1.
036 */
037 JAVA_1_1(1.1f, "1.1"),
038
039 /**
040 * Java 1.2.
041 */
042 JAVA_1_2(1.2f, "1.2"),
043
044 /**
045 * Java 1.3.
046 */
047 JAVA_1_3(1.3f, "1.3"),
048
049 /**
050 * Java 1.4.
051 */
052 JAVA_1_4(1.4f, "1.4"),
053
054 /**
055 * Java 1.5.
056 */
057 JAVA_1_5(1.5f, "1.5"),
058
059 /**
060 * Java 1.6.
061 */
062 JAVA_1_6(1.6f, "1.6"),
063
064 /**
065 * Java 1.7.
066 */
067 JAVA_1_7(1.7f, "1.7"),
068
069 /**
070 * Java 1.8.
071 */
072 JAVA_1_8(1.8f, "1.8");
073
074 /**
075 * The float value.
076 */
077 private float value;
078 /**
079 * The standard name.
080 */
081 private String name;
082
083 /**
084 * Constructor.
085 *
086 * @param value the float value
087 * @param name the standard name, not null
088 */
089 JavaVersion(final float value, final String name) {
090 this.value = value;
091 this.name = name;
092 }
093
094 //-----------------------------------------------------------------------
095 /**
096 * <p>Whether this version of Java is at least the version of Java passed in.</p>
097 *
098 * <p>For example:<br />
099 * {@code myVersion.atLeast(JavaVersion.JAVA_1_4)}<p>
100 *
101 * @param requiredVersion the version to check against, not null
102 * @return true if this version is equal to or greater than the specified version
103 */
104 public boolean atLeast(JavaVersion requiredVersion) {
105 return this.value >= requiredVersion.value;
106 }
107
108 /**
109 * Transforms the given string with a Java version number to the
110 * corresponding constant of this enumeration class. This method is used
111 * internally.
112 *
113 * @param nom the Java version as string
114 * @return the corresponding enumeration constant or <b>null</b> if the
115 * version is unknown
116 */
117 // helper for static importing
118 static JavaVersion getJavaVersion(final String nom) {
119 return get(nom);
120 }
121
122 /**
123 * Transforms the given string with a Java version number to the
124 * corresponding constant of this enumeration class. This method is used
125 * internally.
126 *
127 * @param nom the Java version as string
128 * @return the corresponding enumeration constant or <b>null</b> if the
129 * version is unknown
130 */
131 static JavaVersion get(final String nom) {
132 if ("0.9".equals(nom)) {
133 return JAVA_0_9;
134 } else if ("1.1".equals(nom)) {
135 return JAVA_1_1;
136 } else if ("1.2".equals(nom)) {
137 return JAVA_1_2;
138 } else if ("1.3".equals(nom)) {
139 return JAVA_1_3;
140 } else if ("1.4".equals(nom)) {
141 return JAVA_1_4;
142 } else if ("1.5".equals(nom)) {
143 return JAVA_1_5;
144 } else if ("1.6".equals(nom)) {
145 return JAVA_1_6;
146 } else if ("1.7".equals(nom)) {
147 return JAVA_1_7;
148 } else if ("1.8".equals(nom)) {
149 return JAVA_1_8;
150 } else {
151 return null;
152 }
153 }
154
155 //-----------------------------------------------------------------------
156 /**
157 * <p>The string value is overridden to return the standard name.</p>
158 *
159 * <p>For example, <code>"1.5"</code>.</p>
160 *
161 * @return the name, not null
162 */
163 @Override
164 public String toString() {
165 return name;
166 }
167
168 }