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    }