diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java b/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java index 41dcfa998..4083ce900 100644 --- a/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java +++ b/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java @@ -19,7 +19,7 @@ package org.apache.tools.ant.taskdefs.condition; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; -import org.apache.tools.ant.taskdefs.optional.extension.DeweyDecimal; +import org.apache.tools.ant.util.DeweyDecimal; /** * An antversion condition diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/DeweyDecimal.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/DeweyDecimal.java index 0f23698fa..5a67e5214 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/DeweyDecimal.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/extension/DeweyDecimal.java @@ -1,5 +1,5 @@ /* - * Copyright 2002,2004-2005 The Apache Software Foundation + * Copyright 2002,2004-2006 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ */ package org.apache.tools.ant.taskdefs.optional.extension; -import java.util.StringTokenizer; /** * Utility class to contain version numbers in "Dewey Decimal" @@ -25,23 +24,18 @@ import java.util.StringTokenizer; * "1.2.3.4.5.6.7". This allows an extensible number to be used to * represent major, minor, micro, etc versions. The version number * must begin with a number. - * + * + * Original Implementation moved to org.apache.tools.ant.util.DeweyDecimal */ -public final class DeweyDecimal { - /** Array of components that make up DeweyDecimal */ - private int[] components; - +public final class DeweyDecimal extends org.apache.tools.ant.util.DeweyDecimal { + /** * Construct a DeweyDecimal from an array of integer components. * * @param components an array of integer components. */ public DeweyDecimal(final int[] components) { - this.components = new int[components.length]; - - for (int i = 0; i < components.length; i++) { - this.components[i] = components[i]; - } + super(components); } /** @@ -52,159 +46,6 @@ public final class DeweyDecimal { */ public DeweyDecimal(final String string) throws NumberFormatException { - final StringTokenizer tokenizer = new StringTokenizer(string, ".", true); - final int size = tokenizer.countTokens(); - - components = new int[ (size + 1) / 2 ]; - - for (int i = 0; i < components.length; i++) { - final String component = tokenizer.nextToken(); - if (component.equals("")) { - throw new NumberFormatException("Empty component in string"); - } - - components[ i ] = Integer.parseInt(component); - - //Strip '.' token - if (tokenizer.hasMoreTokens()) { - tokenizer.nextToken(); - - //If it ended in a dot, throw an exception - if (!tokenizer.hasMoreTokens()) { - throw new NumberFormatException("DeweyDecimal ended in a '.'"); - } - } - } - } - - /** - * Return number of components in DeweyDecimal. - * - * @return the number of components in dewey decimal - */ - public int getSize() { - return components.length; - } - - /** - * Return the component at specified index. - * - * @param index the index of components - * @return the value of component at index - */ - public int get(final int index) { - return components[ index ]; - } - - /** - * Return true if this DeweyDecimal is - * equal to the other DeweyDecimal. - * - * @param other the other DeweyDecimal - * @return true if equal to other DeweyDecimal, false otherwise - */ - public boolean isEqual(final DeweyDecimal other) { - final int max = Math.max(other.components.length, components.length); - - for (int i = 0; i < max; i++) { - final int component1 = (i < components.length) ? components[ i ] : 0; - final int component2 = (i < other.components.length) ? other.components[ i ] : 0; - - if (component2 != component1) { - return false; - } - } - - return true; // Exact match - } - - /** - * Return true if this DeweyDecimal is - * less than the other DeweyDecimal. - * - * @param other the other DeweyDecimal - * @return true if less than other DeweyDecimal, false otherwise - */ - public boolean isLessThan(final DeweyDecimal other) { - return !isGreaterThanOrEqual(other); - } - - /** - * Return true if this DeweyDecimal is - * less than or equal to the other DeweyDecimal. - * - * @param other the other DeweyDecimal - * @return true if less than or equal to other DeweyDecimal, false otherwise - */ - public boolean isLessThanOrEqual(final DeweyDecimal other) { - return !isGreaterThan(other); - } - - /** - * Return true if this DeweyDecimal is - * greater than the other DeweyDecimal. - * - * @param other the other DeweyDecimal - * @return true if greater than other DeweyDecimal, false otherwise - */ - public boolean isGreaterThan(final DeweyDecimal other) { - final int max = Math.max(other.components.length, components.length); - - for (int i = 0; i < max; i++) { - final int component1 = (i < components.length) ? components[ i ] : 0; - final int component2 = (i < other.components.length) ? other.components[ i ] : 0; - - if (component2 > component1) { - return false; - } - if (component2 < component1) { - return true; - } - } - - return false; // Exact match - } - - /** - * Return true if this DeweyDecimal is - * greater than or equal to the other DeweyDecimal. - * - * @param other the other DeweyDecimal - * @return true if greater than or equal to other DeweyDecimal, false otherwise - */ - public boolean isGreaterThanOrEqual(final DeweyDecimal other) { - final int max = Math.max(other.components.length, components.length); - - for (int i = 0; i < max; i++) { - final int component1 = (i < components.length) ? components[ i ] : 0; - final int component2 = (i < other.components.length) ? other.components[ i ] : 0; - - if (component2 > component1) { - return false; - } - if (component2 < component1) { - return true; - } - } - - return true; // Exact match - } - - /** - * Return string representation of DeweyDecimal. - * - * @return the string representation of DeweyDecimal. - */ - public String toString() { - final StringBuffer sb = new StringBuffer(); - - for (int i = 0; i < components.length; i++) { - if (i != 0) { - sb.append('.'); - } - sb.append(components[ i ]); - } - - return sb.toString(); + super(string); } } diff --git a/src/main/org/apache/tools/ant/util/DeweyDecimal.java b/src/main/org/apache/tools/ant/util/DeweyDecimal.java new file mode 100644 index 000000000..c4aea7019 --- /dev/null +++ b/src/main/org/apache/tools/ant/util/DeweyDecimal.java @@ -0,0 +1,211 @@ +/* + * Copyright 2006 The Apache Software Foundation + * + * Licensed 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.tools.ant.util; + +import java.util.StringTokenizer; + +/** + * Utility class to contain version numbers in "Dewey Decimal" + * syntax. Numbers in the "Dewey Decimal" syntax consist of positive + * decimal integers separated by periods ".". For example, "2.0" or + * "1.2.3.4.5.6.7". This allows an extensible number to be used to + * represent major, minor, micro, etc versions. The version number + * must begin with a number. + * + */ +public class DeweyDecimal { + + /** Array of components that make up DeweyDecimal */ + private int[] components; + + /** + * Construct a DeweyDecimal from an array of integer components. + * + * @param components an array of integer components. + */ + public DeweyDecimal(final int[] components) { + this.components = new int[components.length]; + + for (int i = 0; i < components.length; i++) { + this.components[i] = components[i]; + } + } + + /** + * Construct a DeweyDecimal from string in DeweyDecimal format. + * + * @param string the string in dewey decimal format + * @exception NumberFormatException if string is malformed + */ + public DeweyDecimal(final String string) + throws NumberFormatException { + final StringTokenizer tokenizer = new StringTokenizer(string, ".", true); + final int size = tokenizer.countTokens(); + + components = new int[ (size + 1) / 2 ]; + + for (int i = 0; i < components.length; i++) { + final String component = tokenizer.nextToken(); + if (component.equals("")) { + throw new NumberFormatException("Empty component in string"); + } + + components[ i ] = Integer.parseInt(component); + + //Strip '.' token + if (tokenizer.hasMoreTokens()) { + tokenizer.nextToken(); + + //If it ended in a dot, throw an exception + if (!tokenizer.hasMoreTokens()) { + throw new NumberFormatException("DeweyDecimal ended in a '.'"); + } + } + } + } + + /** + * Return number of components in DeweyDecimal. + * + * @return the number of components in dewey decimal + */ + public int getSize() { + return components.length; + } + + /** + * Return the component at specified index. + * + * @param index the index of components + * @return the value of component at index + */ + public int get(final int index) { + return components[ index ]; + } + + /** + * Return true if this DeweyDecimal is + * equal to the other DeweyDecimal. + * + * @param other the other DeweyDecimal + * @return true if equal to other DeweyDecimal, false otherwise + */ + public boolean isEqual(final DeweyDecimal other) { + final int max = Math.max(other.components.length, components.length); + + for (int i = 0; i < max; i++) { + final int component1 = (i < components.length) ? components[ i ] : 0; + final int component2 = (i < other.components.length) ? other.components[ i ] : 0; + + if (component2 != component1) { + return false; + } + } + + return true; // Exact match + } + + /** + * Return true if this DeweyDecimal is + * less than the other DeweyDecimal. + * + * @param other the other DeweyDecimal + * @return true if less than other DeweyDecimal, false otherwise + */ + public boolean isLessThan(final DeweyDecimal other) { + return !isGreaterThanOrEqual(other); + } + + /** + * Return true if this DeweyDecimal is + * less than or equal to the other DeweyDecimal. + * + * @param other the other DeweyDecimal + * @return true if less than or equal to other DeweyDecimal, false otherwise + */ + public boolean isLessThanOrEqual(final DeweyDecimal other) { + return !isGreaterThan(other); + } + + /** + * Return true if this DeweyDecimal is + * greater than the other DeweyDecimal. + * + * @param other the other DeweyDecimal + * @return true if greater than other DeweyDecimal, false otherwise + */ + public boolean isGreaterThan(final DeweyDecimal other) { + final int max = Math.max(other.components.length, components.length); + + for (int i = 0; i < max; i++) { + final int component1 = (i < components.length) ? components[ i ] : 0; + final int component2 = (i < other.components.length) ? other.components[ i ] : 0; + + if (component2 > component1) { + return false; + } + if (component2 < component1) { + return true; + } + } + + return false; // Exact match + } + + /** + * Return true if this DeweyDecimal is + * greater than or equal to the other DeweyDecimal. + * + * @param other the other DeweyDecimal + * @return true if greater than or equal to other DeweyDecimal, false otherwise + */ + public boolean isGreaterThanOrEqual(final DeweyDecimal other) { + final int max = Math.max(other.components.length, components.length); + + for (int i = 0; i < max; i++) { + final int component1 = (i < components.length) ? components[ i ] : 0; + final int component2 = (i < other.components.length) ? other.components[ i ] : 0; + + if (component2 > component1) { + return false; + } + if (component2 < component1) { + return true; + } + } + + return true; // Exact match + } + + /** + * Return string representation of DeweyDecimal. + * + * @return the string representation of DeweyDecimal. + */ + public String toString() { + final StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < components.length; i++) { + if (i != 0) { + sb.append('.'); + } + sb.append(components[ i ]); + } + + return sb.toString(); + } +}