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         * The Java version reported by Android. This is not an official Java version number.
030         */
031        JAVA_0_9(1.5f, "0.9"),
032        JAVA_1_1(1.1f, "1.1"),
033        JAVA_1_2(1.2f, "1.2"),
034        JAVA_1_3(1.3f, "1.3"),
035        JAVA_1_4(1.4f, "1.4"),
036        JAVA_1_5(1.5f, "1.5"),
037        JAVA_1_6(1.6f, "1.6"),
038        JAVA_1_7(1.7f, "1.7"),
039        JAVA_1_8(1.8f, "1.8");
040    
041        /**
042         * The float value.
043         */
044        private float value;
045        /**
046         * The standard name.
047         */
048        private String name;
049    
050        /**
051         * Constructor.
052         *
053         * @param value  the float value
054         * @param name  the standard name, not null
055         */
056        JavaVersion(final float value, final String name) {
057            this.value = value;
058            this.name = name;
059        }
060    
061        //-----------------------------------------------------------------------
062        /**
063         * <p>Whether this version of Java is at least the version of Java passed in.</p>
064         *
065         * <p>For example:<br />
066         *  {@code myVersion.atLeast(JavaVersion.JAVA_1_4)}<p>
067         *
068         * @param requiredVersion  the version to check against, not null
069         * @return true if this version is equal to or greater than the specified version
070         */
071        public boolean atLeast(JavaVersion requiredVersion) {
072            return this.value >= requiredVersion.value;
073        }
074    
075        /**
076         * Transforms the given string with a Java version number to the
077         * corresponding constant of this enumeration class. This method is used
078         * internally.
079         *
080         * @param nom the Java version as string
081         * @return the corresponding enumeration constant or <b>null</b> if the
082         * version is unknown
083         */
084        // helper for static importing
085        static JavaVersion getJavaVersion(final String nom) {
086            return get(nom);
087        }
088    
089        /**
090         * Transforms the given string with a Java version number to the
091         * corresponding constant of this enumeration class. This method is used
092         * internally.
093         *
094         * @param nom the Java version as string
095         * @return the corresponding enumeration constant or <b>null</b> if the
096         * version is unknown
097         */
098        static JavaVersion get(final String nom) {
099            if ("0.9".equals(nom)) {
100                return JAVA_0_9;
101            } else if ("1.1".equals(nom)) {
102                return JAVA_1_1;
103            } else if ("1.2".equals(nom)) {
104                return JAVA_1_2;
105            } else if ("1.3".equals(nom)) {
106                return JAVA_1_3;
107            } else if ("1.4".equals(nom)) {
108                return JAVA_1_4;
109            } else if ("1.5".equals(nom)) {
110                return JAVA_1_5;
111            } else if ("1.6".equals(nom)) {
112                return JAVA_1_6;
113            } else if ("1.7".equals(nom)) {
114                return JAVA_1_7;
115            } else if ("1.8".equals(nom)) {
116                return JAVA_1_8;
117            } else {
118                return null;
119            }
120        }
121    
122        //-----------------------------------------------------------------------
123        /**
124         * <p>The string value is overridden to return the standard name.</p>
125         *
126         * <p>For example, <code>"1.5"</code>.</p>
127         *
128         * @return the name, not null
129         */
130        @Override
131        public String toString() {
132            return name;
133        }
134    
135    }