/*******************************************************************************
* Copyright (c) 1998, 2016 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Tomas Kraus, Peter Benedikovic - initial API and implementation
******************************************************************************/
package org.eclipse.persistence.internal.helper;
import java.util.HashMap;
import java.util.Map;
/**
* Java SE platforms supported by EclipseLink.
* @author Tomas Kraus, Peter Benedikovic
*/
public enum JavaSEPlatform implements Comparable<JavaSEPlatform> {
/** Java SE 1.1. */
v1_1(1,1),
/** Java SE 1.2. */
v1_2(1,2),
/** Java SE 1.3. */
v1_3(1,3),
/** Java SE 1.4. */
v1_4(1,4),
/** Java SE 1.5. */
v1_5(1,5),
/** Java SE 1.6. */
v1_6(1,6),
/** Java SE 1.7. */
v1_7(1,7),
/** Java SE 1.8. */
v1_8(1,8),
/** Java SE 9. */
v1_9(1,9),
/** Java SE 9. */
v9_0(9, 0);
/**
* Stored <code>String</code> values for backward <code>String</code>
* conversion.
*/
private static final Map<String, JavaSEPlatform> stringValuesMap
= new HashMap<String, JavaSEPlatform>(values().length);
// Initialize backward String conversion Map.
static {
for (JavaSEPlatform platform : JavaSEPlatform.values()) {
stringValuesMap.put(platform.versionString(), platform);
}
}
/** GlassFish Java SE platform enumeration length. */
public static final int LENGTH = JavaSEPlatform.values().length;
/** Current Java SE platform. */
public static final JavaSEPlatform CURRENT
= JavaVersion.vmVersion().toPlatform();
/** Lowest supported Java SE platform. Currently it's Java SE 1.7. */
public static final JavaSEPlatform MIN_SUPPORTED = v1_7;
/**
* Check whether current Java SE is exactly matching provided platform.
* @param platform Java SE platform to compare with.
*/
public static boolean is(JavaSEPlatform platform) {
return CURRENT.equals(platform);
}
/**
* Returns a <code>JavaSEPlatform</code> with a value represented by the
* specified <code>String</code>. The <code>JavaSEPlatform</code> returned
* represents existing value only if specified <code>String</code>
* matches any <code>String</code> returned by <code>versionString()</code>
* method.
* Otherwise <code>null</code> value is returned.
* @param platformName Value containing <code>JavaSEPlatform</code>
* <code>versionString</code> representation.
* @return <code>JavaSEPlatform</code> value represented
* by <code>String</code> or <code>null</code> if value
* was not recognized.
*/
public static JavaSEPlatform toValue(final String platformName) {
if (platformName != null) {
return (stringValuesMap.get(platformName));
} else {
return null;
}
}
// There are not too many versions yet so direct mapping in code is simple.
/**
* Returns a <code>JavaSEPlatform</code> matching provided
* <code>major</code> and <code>minor</code> version numbers.
* @param major Major version number.
* @param minor Minor version number.
* @return <code>JavaSEPlatform</code> value matching provided
* <code>major</code> and <code>minor</code> version numbers
* or <code>null</code> when such a value does not exist.
*/
public static JavaSEPlatform toValue(final int major, final int minor) {
switch (major) {
case 1:
switch (minor) {
case 1: return v1_1;
case 2: return v1_2;
case 3: return v1_3;
case 4: return v1_4;
case 5: return v1_5;
case 6: return v1_6;
case 7: return v1_7;
case 8: return v1_8;
case 9: return v1_9;
default: return null;
}
case 9:
return v9_0;
default: return null;
}
}
/**
* Generate {@link String} containing minor and major version numbers
* in {@code <major> '.' <minor>} format.
* @param major Major version number.
* @param minor Minor version number.
* @return Generated {@link String}
*/
public static final String versionString(final int major, final int minor) {
StringBuilder sb = new StringBuilder(4);
sb.append(Integer.toString(major));
sb.append(JavaVersion.SEPARATOR);
sb.append(Integer.toString(minor));
return sb.toString();
}
/**
* Constructs an instance of Java SE platform.
* @param major Major version number.
* @param minor Minor version number.
*/
JavaSEPlatform(final int major, final int minor) {
this.major = major;
this.minor = minor;
}
/** Major version number. */
private final int major;
/** Minor version number. */
private final int minor;
/**
* Get major version number.
* @return Major version number.
*/
public final int getMajor() {
return major;
}
/**
* Get minor version number.
* @return Minor version number.
*/
public final int getMinor() {
return minor;
}
/**
* Check if this platform is equal or greater to specified platform.
* @param platform Platform to compare with.
* @return Value of <code>true</code> if this platform is equal
* or greater to specified platform or <code>false</code> otherwise.
*/
public boolean atLeast(final JavaSEPlatform platform) {
return compareTo(platform) >= 0;
}
/**
* Check whether this platform is supported platform.
* @return Value of <code>true</code> when this platform is supported
* platform or <code>false</code> otherwise.
*/
public boolean isSupported() {
return compareTo(MIN_SUPPORTED) >= 0;
}
/**
* Generate {@link String} containing minor and major version numbers
* in {@code <major> '.' <minor>} format.
* @return Generated {@link String}
*/
public String versionString() {
return versionString(major, minor);
}
// Currently this is identical with versionString() method.
/**
* Convert Java SE platform version value to human readable
* <code>String</code>.
* @return A <code>String</code> representation of the value of this object.
*/
@Override
public String toString() {
return versionString(major, minor);
}
}