| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| |
| package org.apache.flex.compiler.fxg; |
| |
| import java.lang.Long; |
| |
| /** |
| * FXGVersion is an enumeration of the different versions of FXG Specification. |
| */ |
| public final class FXGVersion |
| { |
| private static final double k_1_0 = 1.0D; |
| private static final double k_2_0 = 2.0D; |
| |
| // Versions publicly supported by this compiler |
| public static final FXGVersion v1_0 = new FXGVersion(k_1_0); |
| public static final FXGVersion v2_0 = new FXGVersion(k_2_0); |
| |
| // Internal representation |
| private final double version; |
| |
| private FXGVersion(double version) throws FXGVersionException |
| { |
| if (Double.isNaN(version) || version < 1.0D) |
| throw new FXGVersionException(String.valueOf(version)); |
| |
| this.version = version; |
| } |
| |
| /** |
| * Returns a FXGVersion object representing 'version' or null if 'version' |
| * is not a properly formatted version string. This routine is intended to |
| * be called internally and is suitable for use with version strings |
| * extracted from FXG files. |
| * |
| * @param version - the version double value. |
| * @throws FXGVersionException if the version is invalid. |
| */ |
| public static FXGVersion newInstance(double version) throws FXGVersionException |
| { |
| return new FXGVersion(version); |
| } |
| |
| /** |
| * Returns the version represented by this FXGVersion instance as a String |
| * value (e.g., "1.0", "1.2", etc.). |
| * |
| * @return String |
| */ |
| public String asString() |
| { |
| return String.valueOf(version); |
| } |
| |
| /** |
| * Compares whether this FXGVersion's value is equal to the value of the |
| * version parameter. |
| * |
| * @param version The version of FXG. |
| * @return true if this object's value is equal to the 'version' object's |
| * value; false otherwise |
| */ |
| public boolean equalTo(FXGVersion version) |
| { |
| return (compareTo(version) == 0); |
| } |
| |
| /** |
| * Compares whether this FXGVersion's value is equal to the version value of |
| * the object. If object is not a FXGVersion, then false is returned. This |
| * method exists to provide compatibility with the common usage case of |
| * using equals(obj) to test object instance equality. It's use is |
| * discouraged because it is not a strongly typed method. The method |
| * equalTo(FXGVersion) is the preferred method to use for equality testing. |
| * |
| * @param object The object. |
| * @return true if this object's value is equal to the 'version' object's |
| * value; false otherwise |
| */ |
| @Override |
| public boolean equals(Object object) |
| { |
| if (!(object instanceof FXGVersion)) |
| return false; |
| return equalTo((FXGVersion)object); |
| } |
| |
| /** |
| * Returns the hashCode |
| */ |
| @Override |
| public int hashCode() |
| { |
| return (Long.valueOf(Double.doubleToLongBits(version))).hashCode(); |
| } |
| |
| /** |
| * Compares whether this FXGVersion's value is greater than the value of the |
| * version parameter. |
| * |
| * @param version A version of FXG. |
| * @return true if this object's value is greater than the 'version' |
| * object's value; false otherwise |
| */ |
| public boolean greaterThan(FXGVersion version) |
| { |
| return (compareTo(version) > 0); |
| } |
| |
| |
| /** |
| * @param version |
| * @return -1, 0, or 1 depending on whether this object's value is less |
| * than, equal to, or greater than to specified version, respectively. |
| */ |
| private int compareTo(FXGVersion version) |
| { |
| if (version == null) |
| throw new RuntimeException("Cannot compare FXGVersion to a null value."); |
| |
| if (version == this) |
| return 0; |
| |
| double thisVersion = this.asDouble(); |
| double compareVersion = version.asDouble(); |
| if (thisVersion < compareVersion) |
| return -1; |
| else if (thisVersion > compareVersion) |
| return 1; |
| else |
| return 0; |
| } |
| |
| /** |
| * @return the version double value. |
| */ |
| public double asDouble() |
| { |
| return this.version; |
| } |
| |
| /** |
| * @return the major version. |
| */ |
| public long getMajorVersion() |
| { |
| return (long)this.version; |
| } |
| |
| public class FXGVersionException extends RuntimeException |
| { |
| private static final long serialVersionUID = 9034248618973261847L; |
| |
| private final String version; |
| |
| public FXGVersionException(String version) |
| { |
| super(); |
| this.version = version; |
| } |
| |
| public String getVersion() |
| { |
| return version; |
| } |
| } |
| |
| } |