git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274773 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -97,9 +97,9 @@ public class AndSelector extends BaseSelectorContainer { | |||||
| Enumeration e = selectorElements(); | Enumeration e = selectorElements(); | ||||
| boolean result; | boolean result; | ||||
| while(e.hasMoreElements()) { | |||||
| result = ((FileSelector)e.nextElement()).isSelected(basedir, | |||||
| filename,file); | |||||
| while (e.hasMoreElements()) { | |||||
| result = ((FileSelector) e.nextElement()).isSelected(basedir, | |||||
| filename, file); | |||||
| if (!result) { | if (!result) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -54,6 +54,7 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
| @@ -67,8 +68,8 @@ import org.apache.tools.ant.types.Parameter; | |||||
| * @since 1.5 | * @since 1.5 | ||||
| */ | */ | ||||
| public abstract class BaseExtendSelector | public abstract class BaseExtendSelector | ||||
| extends BaseSelector | |||||
| implements ExtendFileSelector { | |||||
| extends BaseSelector | |||||
| implements ExtendFileSelector { | |||||
| /** The passed in parameter array. */ | /** The passed in parameter array. */ | ||||
| protected Parameter[] parameters = null; | protected Parameter[] parameters = null; | ||||
| @@ -55,6 +55,7 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.types.DataType; | import org.apache.tools.ant.types.DataType; | ||||
| @@ -111,7 +112,6 @@ public abstract class BaseSelector extends DataType implements FileSelector { | |||||
| } | } | ||||
| /** | /** | ||||
| * Subclasses can use this to throw the requisite exception | * Subclasses can use this to throw the requisite exception | ||||
| * in isSelected() in the case of an error condition. | * in isSelected() in the case of an error condition. | ||||
| @@ -137,7 +137,7 @@ public abstract class BaseSelector extends DataType implements FileSelector { | |||||
| * @return whether the file should be selected or not | * @return whether the file should be selected or not | ||||
| */ | */ | ||||
| public abstract boolean isSelected(File basedir, String filename, | public abstract boolean isSelected(File basedir, String filename, | ||||
| File file); | |||||
| File file); | |||||
| } | } | ||||
| @@ -57,6 +57,7 @@ package org.apache.tools.ant.types.selectors; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import java.util.Vector; | import java.util.Vector; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| @@ -118,7 +119,7 @@ public abstract class BaseSelectorContainer extends BaseSelector | |||||
| StringBuffer buf = new StringBuffer(); | StringBuffer buf = new StringBuffer(); | ||||
| Enumeration e = selectorElements(); | Enumeration e = selectorElements(); | ||||
| if (e.hasMoreElements()) { | if (e.hasMoreElements()) { | ||||
| while(e.hasMoreElements()) { | |||||
| while (e.hasMoreElements()) { | |||||
| buf.append(e.nextElement().toString()); | buf.append(e.nextElement().toString()); | ||||
| if (e.hasMoreElements()) { | if (e.hasMoreElements()) { | ||||
| buf.append(", "); | buf.append(", "); | ||||
| @@ -161,10 +162,10 @@ public abstract class BaseSelectorContainer extends BaseSelector | |||||
| throw new BuildException(errmsg); | throw new BuildException(errmsg); | ||||
| } | } | ||||
| Enumeration e = selectorElements(); | Enumeration e = selectorElements(); | ||||
| while(e.hasMoreElements()) { | |||||
| while (e.hasMoreElements()) { | |||||
| Object o = e.nextElement(); | Object o = e.nextElement(); | ||||
| if (o instanceof BaseSelector) { | if (o instanceof BaseSelector) { | ||||
| ((BaseSelector)o).validate(); | |||||
| ((BaseSelector) o).validate(); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -290,14 +291,14 @@ public abstract class BaseSelectorContainer extends BaseSelector | |||||
| public void addDifferent(DifferentSelector selector) { | public void addDifferent(DifferentSelector selector) { | ||||
| appendSelector(selector); | appendSelector(selector); | ||||
| } | } | ||||
| /** | /** | ||||
| * adds a type selector to the selector list | * adds a type selector to the selector list | ||||
| */ | */ | ||||
| public void addType(TypeSelector selector) { | public void addType(TypeSelector selector) { | ||||
| appendSelector(selector); | appendSelector(selector); | ||||
| } | } | ||||
| /** | /** | ||||
| * add a regular expression selector entry on the selector list | * add a regular expression selector entry on the selector list | ||||
| */ | */ | ||||
| @@ -305,7 +306,7 @@ public abstract class BaseSelectorContainer extends BaseSelector | |||||
| appendSelector(selector); | appendSelector(selector); | ||||
| } | } | ||||
| /** | /** | ||||
| * add an arbitary selector | * add an arbitary selector | ||||
| * @since Ant 1.6 | * @since Ant 1.6 | ||||
| @@ -82,7 +82,8 @@ public class ContainsRegexpSelector extends BaseExtendSelector { | |||||
| } | } | ||||
| public String toString() { | public String toString() { | ||||
| StringBuffer buf = new StringBuffer("{containsregexpselector expression: "); | |||||
| StringBuffer buf = new StringBuffer( | |||||
| "{containsregexpselector expression: "); | |||||
| buf.append(userProvidedExpression); | buf.append(userProvidedExpression); | ||||
| buf.append("}"); | buf.append("}"); | ||||
| return buf.toString(); | return buf.toString(); | ||||
| @@ -91,8 +92,7 @@ public class ContainsRegexpSelector extends BaseExtendSelector { | |||||
| /** | /** | ||||
| * The regular expression used to search the file. | * The regular expression used to search the file. | ||||
| * | * | ||||
| * @param regular expression that must match a line in the file to | |||||
| * be selected. | |||||
| * @param theexpression this must match a line in the file to be selected. | |||||
| */ | */ | ||||
| public void setExpression(String theexpression) { | public void setExpression(String theexpression) { | ||||
| this.userProvidedExpression = theexpression; | this.userProvidedExpression = theexpression; | ||||
| @@ -139,15 +139,15 @@ public class ContainsRegexpSelector extends BaseExtendSelector { | |||||
| public boolean isSelected(File basedir, String filename, File file) { | public boolean isSelected(File basedir, String filename, File file) { | ||||
| String teststr = null; | String teststr = null; | ||||
| BufferedReader in = null; | BufferedReader in = null; | ||||
| // throw BuildException on error | // throw BuildException on error | ||||
| validate(); | validate(); | ||||
| if (file.isDirectory()) { | if (file.isDirectory()) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| if (myRegExp == null) { | if (myRegExp == null) { | ||||
| myRegExp = new RegularExpression(); | myRegExp = new RegularExpression(); | ||||
| myRegExp.setPattern(userProvidedExpression); | myRegExp.setPattern(userProvidedExpression); | ||||
| @@ -155,20 +155,20 @@ public class ContainsRegexpSelector extends BaseExtendSelector { | |||||
| } | } | ||||
| try { | try { | ||||
| in = new BufferedReader(new InputStreamReader( | |||||
| in = new BufferedReader(new InputStreamReader( | |||||
| new FileInputStream(file))); | new FileInputStream(file))); | ||||
| teststr = in.readLine(); | |||||
| while (teststr != null) { | |||||
| if (myExpression.matches(teststr) == true) { | |||||
| return true; | |||||
| } | |||||
| teststr = in.readLine(); | |||||
| } | |||||
| return false; | |||||
| teststr = in.readLine(); | |||||
| while (teststr != null) { | |||||
| if (myExpression.matches(teststr) == true) { | |||||
| return true; | |||||
| } | |||||
| teststr = in.readLine(); | |||||
| } | |||||
| return false; | |||||
| } catch (IOException ioe) { | } catch (IOException ioe) { | ||||
| throw new BuildException("Could not read file " + filename); | throw new BuildException("Could not read file " + filename); | ||||
| } finally { | } finally { | ||||
| @@ -59,6 +59,7 @@ import java.io.File; | |||||
| import java.io.FileInputStream; | import java.io.FileInputStream; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.InputStreamReader; | import java.io.InputStreamReader; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
| @@ -123,7 +124,7 @@ public class ContainsSelector extends BaseExtendSelector { | |||||
| /** | /** | ||||
| * Whether to ignore whitespace in the string being searched. | * Whether to ignore whitespace in the string being searched. | ||||
| * | * | ||||
| * @param whitespace whether to ignore any whitespace (spaces, tabs, etc.) in the searchstring | |||||
| * @param ignorewhitespace whether to ignore any whitespace (spaces, tabs, etc.) in the searchstring | |||||
| */ | */ | ||||
| public void setIgnorewhitespace(boolean ignorewhitespace) { | public void setIgnorewhitespace(boolean ignorewhitespace) { | ||||
| this.ignorewhitespace = ignorewhitespace; | this.ignorewhitespace = ignorewhitespace; | ||||
| @@ -142,16 +143,13 @@ public class ContainsSelector extends BaseExtendSelector { | |||||
| String paramname = parameters[i].getName(); | String paramname = parameters[i].getName(); | ||||
| if (CONTAINS_KEY.equalsIgnoreCase(paramname)) { | if (CONTAINS_KEY.equalsIgnoreCase(paramname)) { | ||||
| setText(parameters[i].getValue()); | setText(parameters[i].getValue()); | ||||
| } | |||||
| else if (CASE_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (CASE_KEY.equalsIgnoreCase(paramname)) { | |||||
| setCasesensitive(Project.toBoolean( | setCasesensitive(Project.toBoolean( | ||||
| parameters[i].getValue())); | |||||
| } | |||||
| else if (WHITESPACE_KEY.equalsIgnoreCase(paramname)) { | |||||
| parameters[i].getValue())); | |||||
| } else if (WHITESPACE_KEY.equalsIgnoreCase(paramname)) { | |||||
| setIgnorewhitespace(Project.toBoolean( | setIgnorewhitespace(Project.toBoolean( | ||||
| parameters[i].getValue())); | |||||
| } | |||||
| else { | |||||
| parameters[i].getValue())); | |||||
| } else { | |||||
| setError("Invalid parameter " + paramname); | setError("Invalid parameter " + paramname); | ||||
| } | } | ||||
| } | } | ||||
| @@ -212,15 +210,12 @@ public class ContainsSelector extends BaseExtendSelector { | |||||
| teststr = in.readLine(); | teststr = in.readLine(); | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | |||||
| catch (IOException ioe) { | |||||
| } catch (IOException ioe) { | |||||
| throw new BuildException("Could not read file " + filename); | throw new BuildException("Could not read file " + filename); | ||||
| } | |||||
| finally { | |||||
| } finally { | |||||
| try { | try { | ||||
| in.close(); | in.close(); | ||||
| } | |||||
| catch (Exception e) { | |||||
| } catch (Exception e) { | |||||
| throw new BuildException("Could not close file " + filename); | throw new BuildException("Could not close file " + filename); | ||||
| } | } | ||||
| } | } | ||||
| @@ -58,6 +58,7 @@ import java.io.File; | |||||
| import java.text.DateFormat; | import java.text.DateFormat; | ||||
| import java.text.ParseException; | import java.text.ParseException; | ||||
| import java.util.Locale; | import java.util.Locale; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.taskdefs.condition.Os; | import org.apache.tools.ant.taskdefs.condition.Os; | ||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| @@ -94,8 +95,7 @@ public class DateSelector extends BaseExtendSelector { | |||||
| buf.append(" compare: "); | buf.append(" compare: "); | ||||
| if (cmp == 0) { | if (cmp == 0) { | ||||
| buf.append("before"); | buf.append("before"); | ||||
| } | |||||
| else if (cmp == 1) { | |||||
| } else if (cmp == 1) { | |||||
| buf.append("after"); | buf.append("after"); | ||||
| } else { | } else { | ||||
| buf.append("equal"); | buf.append("equal"); | ||||
| @@ -133,18 +133,18 @@ public class DateSelector extends BaseExtendSelector { | |||||
| this.dateTime = dateTime; | this.dateTime = dateTime; | ||||
| if (dateTime != null) { | if (dateTime != null) { | ||||
| DateFormat df = DateFormat.getDateTimeInstance( | DateFormat df = DateFormat.getDateTimeInstance( | ||||
| DateFormat.SHORT, | |||||
| DateFormat.SHORT, | |||||
| Locale.US); | |||||
| DateFormat.SHORT, | |||||
| DateFormat.SHORT, | |||||
| Locale.US); | |||||
| try { | try { | ||||
| setMillis(df.parse(dateTime).getTime()); | setMillis(df.parse(dateTime).getTime()); | ||||
| if (millis < 0) { | if (millis < 0) { | ||||
| setError("Date of " + dateTime | setError("Date of " + dateTime | ||||
| + " results in negative milliseconds value relative" | |||||
| + " to epoch (January 1, 1970, 00:00:00 GMT)."); | |||||
| + " results in negative milliseconds value relative" | |||||
| + " to epoch (January 1, 1970, 00:00:00 GMT)."); | |||||
| } | } | ||||
| } catch (ParseException pe) { | } catch (ParseException pe) { | ||||
| setError("Date of " + dateTime | |||||
| setError("Date of " + dateTime | |||||
| + " Cannot be parsed correctly. It should be in" | + " Cannot be parsed correctly. It should be in" | ||||
| + " MM/DD/YYYY HH:MM AM_PM format."); | + " MM/DD/YYYY HH:MM AM_PM format."); | ||||
| } | } | ||||
| @@ -192,33 +192,28 @@ public class DateSelector extends BaseExtendSelector { | |||||
| if (MILLIS_KEY.equalsIgnoreCase(paramname)) { | if (MILLIS_KEY.equalsIgnoreCase(paramname)) { | ||||
| try { | try { | ||||
| setMillis(new Long(parameters[i].getValue() | setMillis(new Long(parameters[i].getValue() | ||||
| ).longValue()); | |||||
| ).longValue()); | |||||
| } catch (NumberFormatException nfe) { | } catch (NumberFormatException nfe) { | ||||
| setError("Invalid millisecond setting " + | setError("Invalid millisecond setting " + | ||||
| parameters[i].getValue()); | |||||
| parameters[i].getValue()); | |||||
| } | } | ||||
| } | |||||
| else if (DATETIME_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (DATETIME_KEY.equalsIgnoreCase(paramname)) { | |||||
| setDatetime(parameters[i].getValue()); | setDatetime(parameters[i].getValue()); | ||||
| } | |||||
| else if (CHECKDIRS_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (CHECKDIRS_KEY.equalsIgnoreCase(paramname)) { | |||||
| setCheckdirs(Project.toBoolean(parameters[i].getValue())); | setCheckdirs(Project.toBoolean(parameters[i].getValue())); | ||||
| } | |||||
| else if (GRANULARITY_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (GRANULARITY_KEY.equalsIgnoreCase(paramname)) { | |||||
| try { | try { | ||||
| setGranularity(new Integer(parameters[i].getValue() | setGranularity(new Integer(parameters[i].getValue() | ||||
| ).intValue()); | |||||
| ).intValue()); | |||||
| } catch (NumberFormatException nfe) { | } catch (NumberFormatException nfe) { | ||||
| setError("Invalid granularity setting " + | setError("Invalid granularity setting " + | ||||
| parameters[i].getValue()); | |||||
| parameters[i].getValue()); | |||||
| } | } | ||||
| } | |||||
| else if (WHEN_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (WHEN_KEY.equalsIgnoreCase(paramname)) { | |||||
| TimeComparisons cmp = new TimeComparisons(); | TimeComparisons cmp = new TimeComparisons(); | ||||
| cmp.setValue(parameters[i].getValue()); | cmp.setValue(parameters[i].getValue()); | ||||
| setWhen(cmp); | setWhen(cmp); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| setError("Invalid parameter " + paramname); | setError("Invalid parameter " + paramname); | ||||
| } | } | ||||
| } | } | ||||
| @@ -232,12 +227,11 @@ public class DateSelector extends BaseExtendSelector { | |||||
| public void verifySettings() { | public void verifySettings() { | ||||
| if (dateTime == null && millis < 0) { | if (dateTime == null && millis < 0) { | ||||
| setError("You must provide a datetime or the number of " | setError("You must provide a datetime or the number of " | ||||
| + "milliseconds."); | |||||
| } | |||||
| else if (millis < 0) { | |||||
| + "milliseconds."); | |||||
| } else if (millis < 0) { | |||||
| setError("Date of " + dateTime | setError("Date of " + dateTime | ||||
| + " results in negative milliseconds" | |||||
| + " value relative to epoch (January 1, 1970, 00:00:00 GMT)."); | |||||
| + " results in negative milliseconds value" | |||||
| + " relative to epoch (January 1, 1970, 00:00:00 GMT)."); | |||||
| } | } | ||||
| } | } | ||||
| @@ -257,12 +251,10 @@ public class DateSelector extends BaseExtendSelector { | |||||
| } | } | ||||
| if (cmp == 0) { | if (cmp == 0) { | ||||
| return ((file.lastModified() - granularity) < millis); | return ((file.lastModified() - granularity) < millis); | ||||
| } | |||||
| else if (cmp == 1) { | |||||
| } else if (cmp == 1) { | |||||
| return ((file.lastModified() + granularity) > millis); | return ((file.lastModified() + granularity) > millis); | ||||
| } | |||||
| else { | |||||
| return (Math.abs(file.lastModified() - millis) <= granularity); | |||||
| } else { | |||||
| return (Math.abs(file.lastModified() - millis) <= granularity); | |||||
| } | } | ||||
| } | } | ||||
| @@ -272,7 +264,7 @@ public class DateSelector extends BaseExtendSelector { | |||||
| */ | */ | ||||
| public static class TimeComparisons extends EnumeratedAttribute { | public static class TimeComparisons extends EnumeratedAttribute { | ||||
| public String[] getValues() { | public String[] getValues() { | ||||
| return new String[] {"before", "after", "equal"}; | |||||
| return new String[]{"before", "after", "equal"}; | |||||
| } | } | ||||
| } | } | ||||
| @@ -75,8 +75,7 @@ public class DependSelector extends MappingSelector { | |||||
| StringBuffer buf = new StringBuffer("{dependselector targetdir: "); | StringBuffer buf = new StringBuffer("{dependselector targetdir: "); | ||||
| if (targetdir == null) { | if (targetdir == null) { | ||||
| buf.append("NOT YET SET"); | buf.append("NOT YET SET"); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| buf.append(targetdir.getName()); | buf.append(targetdir.getName()); | ||||
| } | } | ||||
| buf.append(" granularity: "); | buf.append(" granularity: "); | ||||
| @@ -84,8 +83,7 @@ public class DependSelector extends MappingSelector { | |||||
| if (map != null) { | if (map != null) { | ||||
| buf.append(" mapper: "); | buf.append(" mapper: "); | ||||
| buf.append(map.toString()); | buf.append(map.toString()); | ||||
| } | |||||
| else if (mapperElement != null) { | |||||
| } else if (mapperElement != null) { | |||||
| buf.append(" mapper: "); | buf.append(" mapper: "); | ||||
| buf.append(mapperElement.toString()); | buf.append(mapperElement.toString()); | ||||
| } | } | ||||
| @@ -101,7 +99,8 @@ public class DependSelector extends MappingSelector { | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| public boolean selectionTest(File srcfile, File destfile) { | public boolean selectionTest(File srcfile, File destfile) { | ||||
| boolean selected=SelectorUtils.isOutOfDate(srcfile, destfile, granularity); | |||||
| boolean selected = SelectorUtils.isOutOfDate(srcfile, destfile, | |||||
| granularity); | |||||
| return selected; | return selected; | ||||
| } | } | ||||
| @@ -56,6 +56,7 @@ package org.apache.tools.ant.types.selectors; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
| @@ -97,7 +98,7 @@ public class DepthSelector extends BaseExtendSelector { | |||||
| /** | /** | ||||
| * The minimum depth below the basedir before a file is selected. | * The minimum depth below the basedir before a file is selected. | ||||
| * | * | ||||
| * @param min maximum directory levels below basedir to go | |||||
| * @param max maximum directory levels below basedir to go | |||||
| */ | */ | ||||
| public void setMax(int max) { | public void setMax(int max) { | ||||
| this.max = max; | this.max = max; | ||||
| @@ -117,22 +118,18 @@ public class DepthSelector extends BaseExtendSelector { | |||||
| if (MIN_KEY.equalsIgnoreCase(paramname)) { | if (MIN_KEY.equalsIgnoreCase(paramname)) { | ||||
| try { | try { | ||||
| setMin(Integer.parseInt(parameters[i].getValue())); | setMin(Integer.parseInt(parameters[i].getValue())); | ||||
| } | |||||
| catch (NumberFormatException nfe1) { | |||||
| } catch (NumberFormatException nfe1) { | |||||
| setError("Invalid minimum value " | setError("Invalid minimum value " | ||||
| + parameters[i].getValue()); | |||||
| + parameters[i].getValue()); | |||||
| } | } | ||||
| } | |||||
| else if (MAX_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (MAX_KEY.equalsIgnoreCase(paramname)) { | |||||
| try { | try { | ||||
| setMax(Integer.parseInt(parameters[i].getValue())); | setMax(Integer.parseInt(parameters[i].getValue())); | ||||
| } | |||||
| catch (NumberFormatException nfe1) { | |||||
| } catch (NumberFormatException nfe1) { | |||||
| setError("Invalid maximum value " | setError("Invalid maximum value " | ||||
| + parameters[i].getValue()); | |||||
| + parameters[i].getValue()); | |||||
| } | } | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| setError("Invalid parameter " + paramname); | setError("Invalid parameter " + paramname); | ||||
| } | } | ||||
| } | } | ||||
| @@ -145,8 +142,8 @@ public class DepthSelector extends BaseExtendSelector { | |||||
| */ | */ | ||||
| public void verifySettings() { | public void verifySettings() { | ||||
| if (min < 0 && max < 0) { | if (min < 0 && max < 0) { | ||||
| setError("You must set at least one of the min or the " + | |||||
| "max levels."); | |||||
| setError("You must set at least one of the min or the " | |||||
| + "max levels."); | |||||
| } | } | ||||
| if (max < min && max > -1) { | if (max < min && max > -1) { | ||||
| setError("The maximum depth is lower than the minimum."); | setError("The maximum depth is lower than the minimum."); | ||||
| @@ -174,19 +171,21 @@ public class DepthSelector extends BaseExtendSelector { | |||||
| // If you felt daring, you could cache the basedir absolute path | // If you felt daring, you could cache the basedir absolute path | ||||
| String abs_base = basedir.getAbsolutePath(); | String abs_base = basedir.getAbsolutePath(); | ||||
| String abs_file = file.getAbsolutePath(); | String abs_file = file.getAbsolutePath(); | ||||
| StringTokenizer tok_base = new StringTokenizer(abs_base, File.separator); | |||||
| StringTokenizer tok_file = new StringTokenizer(abs_file, File.separator); | |||||
| StringTokenizer tok_base = new StringTokenizer(abs_base, | |||||
| File.separator); | |||||
| StringTokenizer tok_file = new StringTokenizer(abs_file, | |||||
| File.separator); | |||||
| while (tok_file.hasMoreTokens()) { | while (tok_file.hasMoreTokens()) { | ||||
| String filetoken = tok_file.nextToken(); | String filetoken = tok_file.nextToken(); | ||||
| if (tok_base.hasMoreTokens()) { | if (tok_base.hasMoreTokens()) { | ||||
| String basetoken = tok_base.nextToken(); | String basetoken = tok_base.nextToken(); | ||||
| // Sanity check. Ditch it if you want faster performance | // Sanity check. Ditch it if you want faster performance | ||||
| if (!basetoken.equals(filetoken)) { | if (!basetoken.equals(filetoken)) { | ||||
| throw new BuildException("File " + filename + | |||||
| " does not appear within " + abs_base + "directory"); | |||||
| throw new BuildException("File " + filename | |||||
| + " does not appear within " + abs_base | |||||
| + "directory"); | |||||
| } | } | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| depth += 1; | depth += 1; | ||||
| if (max > -1 && depth > max) { | if (max > -1 && depth > max) { | ||||
| return false; | return false; | ||||
| @@ -195,7 +194,7 @@ public class DepthSelector extends BaseExtendSelector { | |||||
| } | } | ||||
| if (tok_base.hasMoreTokens()) { | if (tok_base.hasMoreTokens()) { | ||||
| throw new BuildException("File " + filename + | throw new BuildException("File " + filename + | ||||
| " is outside of " + abs_base + "directory tree"); | |||||
| " is outside of " + abs_base + "directory tree"); | |||||
| } | } | ||||
| if (min > -1 && depth < min) { | if (min > -1 && depth < min) { | ||||
| return false; | return false; | ||||
| @@ -61,27 +61,29 @@ import java.io.File; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| /** | /** | ||||
| * This selector selects files against a mapped set of target files, selecting all those | |||||
| * files which are different. A byte-by-byte comparision is performed on equal length files; | |||||
| * files with different lengths are deemed different automatically; files with identical timestamps | |||||
| * are viewed as matching by default, unless you specify otherwise. | |||||
| * This selector selects files against a mapped set of target files, selecting | |||||
| * all those files which are different. A byte-by-byte comparision is performed | |||||
| * on equal length files; files with different lengths are deemed different | |||||
| * automatically; files with identical timestamps are viewed as matching by | |||||
| * default, unless you specify otherwise. | |||||
| * <p> | * <p> | ||||
| * This is a useful selector to work with programs and tasks that don't handle | * This is a useful selector to work with programs and tasks that don't handle | ||||
| * dependency checking properly; Even if a predecessor task always creates its | * dependency checking properly; Even if a predecessor task always creates its | ||||
| * output files, followup tasks can be driven off copies made with a different selector, | |||||
| * so their dependencies are driven on the absolute state of the files, not a timestamp. | |||||
| * output files, followup tasks can be driven off copies made with a different | |||||
| * selector, so their dependencies are driven on the absolute state of the | |||||
| * files, not a timestamp. | |||||
| * <p> | * <p> | ||||
| * Clearly, however, bulk file comparisons is inefficient; anything that can use | |||||
| * timestamps is to be preferred. If this selector must be used, use it over as few files | |||||
| * as possible, perhaps following it with an <uptodate;> to keep the descendent | |||||
| * routines conditional. | |||||
| * Clearly, however, bulk file comparisons is inefficient; anything that can | |||||
| * use timestamps is to be preferred. If this selector must be used, use it | |||||
| * over as few files as possible, perhaps following it with an <uptodate;> | |||||
| * to keep the descendent routines conditional. | |||||
| * | * | ||||
| */ | */ | ||||
| public class DifferentSelector extends MappingSelector { | public class DifferentSelector extends MappingSelector { | ||||
| private FileUtils fileUtils= FileUtils.newFileUtils(); | |||||
| private FileUtils fileUtils = FileUtils.newFileUtils(); | |||||
| private boolean ignoreFileTimes=true; | |||||
| private boolean ignoreFileTimes = true; | |||||
| /** | /** | ||||
| @@ -114,19 +116,20 @@ public class DifferentSelector extends MappingSelector { | |||||
| //same date if dest timestamp is within granularity of the srcfile | //same date if dest timestamp is within granularity of the srcfile | ||||
| boolean sameDate; | boolean sameDate; | ||||
| sameDate = destfile.lastModified() >= srcfile.lastModified() - granularity | sameDate = destfile.lastModified() >= srcfile.lastModified() - granularity | ||||
| && destfile.lastModified() <= srcfile.lastModified() + granularity; | |||||
| && destfile.lastModified() <= srcfile.lastModified() + granularity; | |||||
| // different dates => different files | // different dates => different files | ||||
| if(!sameDate) { | |||||
| if (!sameDate) { | |||||
| return true; | return true; | ||||
| } | } | ||||
| } | } | ||||
| //here do a bulk comparison | //here do a bulk comparison | ||||
| try { | try { | ||||
| return !fileUtils.contentEquals(srcfile,destfile); | |||||
| return !fileUtils.contentEquals(srcfile, destfile); | |||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| throw new BuildException("while comparing "+srcfile+" and "+destfile,e); | |||||
| throw new BuildException("while comparing " + srcfile + " and " | |||||
| + destfile, e); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -70,7 +70,7 @@ import org.apache.tools.ant.types.Parameterizable; | |||||
| */ | */ | ||||
| public interface ExtendFileSelector extends FileSelector, Parameterizable { | public interface ExtendFileSelector extends FileSelector, Parameterizable { | ||||
| // No further methods necessary. This is just an amalgamation of two other | |||||
| // interfaces. | |||||
| // No further methods necessary. This is just an amalgamation of two other | |||||
| // interfaces. | |||||
| } | } | ||||
| @@ -56,6 +56,7 @@ package org.apache.tools.ant.types.selectors; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.util.Vector; | import java.util.Vector; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.AntClassLoader; | import org.apache.tools.ant.AntClassLoader; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| @@ -102,25 +103,22 @@ public class ExtendSelector extends BaseSelector { | |||||
| c = Class.forName(classname); | c = Class.forName(classname); | ||||
| } else { | } else { | ||||
| AntClassLoader al | AntClassLoader al | ||||
| = getProject().createClassLoader(classpath); | |||||
| = getProject().createClassLoader(classpath); | |||||
| c = al.loadClass(classname); | c = al.loadClass(classname); | ||||
| AntClassLoader.initializeClass(c); | AntClassLoader.initializeClass(c); | ||||
| } | } | ||||
| dynselector = (FileSelector) c.newInstance(); | dynselector = (FileSelector) c.newInstance(); | ||||
| final Project project = getProject(); | final Project project = getProject(); | ||||
| if ( project != null ) { | |||||
| project.setProjectReference( dynselector ); | |||||
| if (project != null) { | |||||
| project.setProjectReference(dynselector); | |||||
| } | } | ||||
| } | |||||
| catch (ClassNotFoundException cnfexcept) { | |||||
| } catch (ClassNotFoundException cnfexcept) { | |||||
| setError("Selector " + classname + | setError("Selector " + classname + | ||||
| " not initialized, no such class"); | " not initialized, no such class"); | ||||
| } | |||||
| catch (InstantiationException iexcept) { | |||||
| } catch (InstantiationException iexcept) { | |||||
| setError("Selector " + classname + | setError("Selector " + classname + | ||||
| " not initialized, could not create class"); | " not initialized, could not create class"); | ||||
| } | |||||
| catch (IllegalAccessException iaexcept) { | |||||
| } catch (IllegalAccessException iaexcept) { | |||||
| setError("Selector " + classname + | setError("Selector " + classname + | ||||
| " not initialized, class not accessible"); | " not initialized, class not accessible"); | ||||
| } | } | ||||
| @@ -198,11 +196,9 @@ public class ExtendSelector extends BaseSelector { | |||||
| } | } | ||||
| if (classname == null || classname.length() < 1) { | if (classname == null || classname.length() < 1) { | ||||
| setError("The classname attribute is required"); | setError("The classname attribute is required"); | ||||
| } | |||||
| else if (dynselector == null) { | |||||
| } else if (dynselector == null) { | |||||
| setError("Internal Error: The custom selector was not created"); | setError("Internal Error: The custom selector was not created"); | ||||
| } | |||||
| else if (!(dynselector instanceof ExtendFileSelector) && | |||||
| } else if (!(dynselector instanceof ExtendFileSelector) && | |||||
| (paramVec.size() > 0)) { | (paramVec.size() > 0)) { | ||||
| setError("Cannot set parameters on custom selector that does not " | setError("Cannot set parameters on custom selector that does not " | ||||
| + "implement ExtendFileSelector"); | + "implement ExtendFileSelector"); | ||||
| @@ -224,9 +220,9 @@ public class ExtendSelector extends BaseSelector { | |||||
| Parameter[] paramArray = new Parameter[paramVec.size()]; | Parameter[] paramArray = new Parameter[paramVec.size()]; | ||||
| paramVec.copyInto(paramArray); | paramVec.copyInto(paramArray); | ||||
| // We know that dynselector must be non-null if no error message | // We know that dynselector must be non-null if no error message | ||||
| ((ExtendFileSelector)dynselector).setParameters(paramArray); | |||||
| ((ExtendFileSelector) dynselector).setParameters(paramArray); | |||||
| } | } | ||||
| return dynselector.isSelected(basedir,filename,file); | |||||
| return dynselector.isSelected(basedir, filename, file); | |||||
| } | } | ||||
| } | } | ||||
| @@ -55,6 +55,7 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| /** | /** | ||||
| @@ -55,6 +55,7 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
| @@ -103,7 +104,7 @@ public class FilenameSelector extends BaseExtendSelector { | |||||
| * against in order to be selected. | * against in order to be selected. | ||||
| */ | */ | ||||
| public void setName(String pattern) { | public void setName(String pattern) { | ||||
| pattern = pattern.replace('/',File.separatorChar).replace('\\', | |||||
| pattern = pattern.replace('/', File.separatorChar).replace('\\', | |||||
| File.separatorChar); | File.separatorChar); | ||||
| if (pattern.endsWith(File.separator)) { | if (pattern.endsWith(File.separator)) { | ||||
| pattern += "**"; | pattern += "**"; | ||||
| @@ -145,15 +146,12 @@ public class FilenameSelector extends BaseExtendSelector { | |||||
| String paramname = parameters[i].getName(); | String paramname = parameters[i].getName(); | ||||
| if (NAME_KEY.equalsIgnoreCase(paramname)) { | if (NAME_KEY.equalsIgnoreCase(paramname)) { | ||||
| setName(parameters[i].getValue()); | setName(parameters[i].getValue()); | ||||
| } | |||||
| else if (CASE_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (CASE_KEY.equalsIgnoreCase(paramname)) { | |||||
| setCasesensitive(Project.toBoolean( | setCasesensitive(Project.toBoolean( | ||||
| parameters[i].getValue())); | |||||
| } | |||||
| else if (NEGATE_KEY.equalsIgnoreCase(paramname)) { | |||||
| parameters[i].getValue())); | |||||
| } else if (NEGATE_KEY.equalsIgnoreCase(paramname)) { | |||||
| setNegate(Project.toBoolean(parameters[i].getValue())); | setNegate(Project.toBoolean(parameters[i].getValue())); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| setError("Invalid parameter " + paramname); | setError("Invalid parameter " + paramname); | ||||
| } | } | ||||
| } | } | ||||
| @@ -186,7 +184,7 @@ public class FilenameSelector extends BaseExtendSelector { | |||||
| public boolean isSelected(File basedir, String filename, File file) { | public boolean isSelected(File basedir, String filename, File file) { | ||||
| validate(); | validate(); | ||||
| return (SelectorUtils.matchPath(pattern,filename, | |||||
| return (SelectorUtils.matchPath(pattern, filename, | |||||
| casesensitive) == !(negated)); | casesensitive) == !(negated)); | ||||
| } | } | ||||
| @@ -111,21 +111,18 @@ public class MajoritySelector extends BaseSelectorContainer { | |||||
| Enumeration e = selectorElements(); | Enumeration e = selectorElements(); | ||||
| boolean result; | boolean result; | ||||
| while(e.hasMoreElements()) { | |||||
| result = ((FileSelector)e.nextElement()).isSelected(basedir, | |||||
| filename,file); | |||||
| while (e.hasMoreElements()) { | |||||
| result = ((FileSelector) e.nextElement()).isSelected(basedir, | |||||
| filename, file); | |||||
| if (result) { | if (result) { | ||||
| yesvotes = yesvotes + 1; | yesvotes = yesvotes + 1; | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| novotes = novotes + 1; | novotes = novotes + 1; | ||||
| } | } | ||||
| } | } | ||||
| if (yesvotes > novotes) | |||||
| { | |||||
| if (yesvotes > novotes) { | |||||
| return true; | return true; | ||||
| } | |||||
| else if (novotes > yesvotes) { | |||||
| } else if (novotes > yesvotes) { | |||||
| return false; | return false; | ||||
| } | } | ||||
| // At this point, we know we have a tie. | // At this point, we know we have a tie. | ||||
| @@ -110,8 +110,7 @@ public abstract class MappingSelector extends BaseSelector { | |||||
| } | } | ||||
| if (mapperElement == null) { | if (mapperElement == null) { | ||||
| map = new IdentityMapper(); | map = new IdentityMapper(); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| map = mapperElement.getImplementation(); | map = mapperElement.getImplementation(); | ||||
| } | } | ||||
| if (map == null) { | if (map == null) { | ||||
| @@ -143,10 +142,10 @@ public abstract class MappingSelector extends BaseSelector { | |||||
| // Sanity check | // Sanity check | ||||
| if (destfiles.length != 1 || destfiles[0] == null) { | if (destfiles.length != 1 || destfiles[0] == null) { | ||||
| throw new BuildException("Invalid destination file results for " | throw new BuildException("Invalid destination file results for " | ||||
| + targetdir.getName() + " with filename " + filename); | |||||
| + targetdir.getName() + " with filename " + filename); | |||||
| } | } | ||||
| String destname = destfiles[0]; | String destname = destfiles[0]; | ||||
| File destfile = new File(targetdir,destname); | |||||
| File destfile = new File(targetdir, destname); | |||||
| boolean selected = selectionTest(file, destfile); | boolean selected = selectionTest(file, destfile); | ||||
| return selected; | return selected; | ||||
| @@ -162,8 +161,8 @@ public abstract class MappingSelector extends BaseSelector { | |||||
| /** | /** | ||||
| * Sets the number of milliseconds leeway we will give before we consider | * Sets the number of milliseconds leeway we will give before we consider | ||||
| * a file out of date. Defaults to 2000 on MS-DOS derivatives as the FAT file | |||||
| * system. | |||||
| * a file out of date. Defaults to 2000 on MS-DOS derivatives as the FAT | |||||
| * file system. | |||||
| */ | */ | ||||
| public void setGranularity(int granularity) { | public void setGranularity(int granularity) { | ||||
| this.granularity = granularity; | this.granularity = granularity; | ||||
| @@ -98,9 +98,9 @@ public class NoneSelector extends BaseSelectorContainer { | |||||
| Enumeration e = selectorElements(); | Enumeration e = selectorElements(); | ||||
| boolean result; | boolean result; | ||||
| while(e.hasMoreElements()) { | |||||
| result = ((FileSelector)e.nextElement()).isSelected(basedir, | |||||
| filename,file); | |||||
| while (e.hasMoreElements()) { | |||||
| result = ((FileSelector) e.nextElement()).isSelected(basedir, | |||||
| filename, file); | |||||
| if (result) { | if (result) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -55,7 +55,6 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| /** | /** | ||||
| * This selector has one other selectors whose meaning it inverts. It | * This selector has one other selectors whose meaning it inverts. It | ||||
| * actually relies on NoneSelector for its implementation of the | * actually relies on NoneSelector for its implementation of the | ||||
| @@ -98,9 +98,9 @@ public class OrSelector extends BaseSelectorContainer { | |||||
| boolean result; | boolean result; | ||||
| // First, check that all elements are correctly configured | // First, check that all elements are correctly configured | ||||
| while(e.hasMoreElements()) { | |||||
| result = ((FileSelector)e.nextElement()).isSelected(basedir, | |||||
| filename,file); | |||||
| while (e.hasMoreElements()) { | |||||
| result = ((FileSelector) e.nextElement()).isSelected(basedir, | |||||
| filename, file); | |||||
| if (result) { | if (result) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -55,6 +55,7 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.Mapper; | import org.apache.tools.ant.types.Mapper; | ||||
| @@ -84,8 +85,7 @@ public class PresentSelector extends BaseSelector { | |||||
| StringBuffer buf = new StringBuffer("{presentselector targetdir: "); | StringBuffer buf = new StringBuffer("{presentselector targetdir: "); | ||||
| if (targetdir == null) { | if (targetdir == null) { | ||||
| buf.append("NOT YET SET"); | buf.append("NOT YET SET"); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| buf.append(targetdir.getName()); | buf.append(targetdir.getName()); | ||||
| } | } | ||||
| buf.append(" present: "); | buf.append(" present: "); | ||||
| @@ -96,8 +96,7 @@ public class PresentSelector extends BaseSelector { | |||||
| } | } | ||||
| if (map != null) { | if (map != null) { | ||||
| buf.append(map.toString()); | buf.append(map.toString()); | ||||
| } | |||||
| else if (mapperElement != null) { | |||||
| } else if (mapperElement != null) { | |||||
| buf.append(mapperElement.toString()); | buf.append(mapperElement.toString()); | ||||
| } | } | ||||
| buf.append("}"); | buf.append("}"); | ||||
| @@ -154,8 +153,7 @@ public class PresentSelector extends BaseSelector { | |||||
| } | } | ||||
| if (mapperElement == null) { | if (mapperElement == null) { | ||||
| map = new IdentityMapper(); | map = new IdentityMapper(); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| map = mapperElement.getImplementation(); | map = mapperElement.getImplementation(); | ||||
| } | } | ||||
| if (map == null) { | if (map == null) { | ||||
| @@ -187,10 +185,10 @@ public class PresentSelector extends BaseSelector { | |||||
| // Sanity check | // Sanity check | ||||
| if (destfiles.length != 1 || destfiles[0] == null) { | if (destfiles.length != 1 || destfiles[0] == null) { | ||||
| throw new BuildException("Invalid destination file results for " | throw new BuildException("Invalid destination file results for " | ||||
| + targetdir + " with filename " + filename); | |||||
| + targetdir + " with filename " + filename); | |||||
| } | } | ||||
| String destname = destfiles[0]; | String destname = destfiles[0]; | ||||
| File destfile = new File(targetdir,destname); | |||||
| File destfile = new File(targetdir, destname); | |||||
| return destfile.exists() == destmustexist; | return destfile.exists() == destmustexist; | ||||
| } | } | ||||
| @@ -200,7 +198,7 @@ public class PresentSelector extends BaseSelector { | |||||
| */ | */ | ||||
| public static class FilePresence extends EnumeratedAttribute { | public static class FilePresence extends EnumeratedAttribute { | ||||
| public String[] getValues() { | public String[] getValues() { | ||||
| return new String[] {"srconly", "both"}; | |||||
| return new String[]{"srconly", "both"}; | |||||
| } | } | ||||
| } | } | ||||
| @@ -153,7 +153,6 @@ public class SelectSelector extends BaseSelectorContainer { | |||||
| * Add a new selector into this container. | * Add a new selector into this container. | ||||
| * | * | ||||
| * @param selector the new selector to add | * @param selector the new selector to add | ||||
| * @return the selector that was added | |||||
| */ | */ | ||||
| public void appendSelector(FileSelector selector) { | public void appendSelector(FileSelector selector) { | ||||
| if (isReference()) { | if (isReference()) { | ||||
| @@ -163,7 +162,6 @@ public class SelectSelector extends BaseSelectorContainer { | |||||
| } | } | ||||
| /** | /** | ||||
| * Makes sure that there is only one entry, sets an error message if | * Makes sure that there is only one entry, sets an error message if | ||||
| * not. | * not. | ||||
| @@ -172,7 +170,7 @@ public class SelectSelector extends BaseSelectorContainer { | |||||
| int cnt = selectorCount(); | int cnt = selectorCount(); | ||||
| if (cnt < 0 || cnt > 1) { | if (cnt < 0 || cnt > 1) { | ||||
| setError("Only one selector is allowed within the " + | setError("Only one selector is allowed within the " + | ||||
| "<selector> tag"); | |||||
| "<selector> tag"); | |||||
| } | } | ||||
| } | } | ||||
| @@ -182,10 +180,10 @@ public class SelectSelector extends BaseSelectorContainer { | |||||
| */ | */ | ||||
| public boolean passesConditions() { | public boolean passesConditions() { | ||||
| if (ifProperty != null && | if (ifProperty != null && | ||||
| getProject().getProperty(ifProperty) == null) { | |||||
| getProject().getProperty(ifProperty) == null) { | |||||
| return false; | return false; | ||||
| } else if (unlessProperty != null && | } else if (unlessProperty != null && | ||||
| getProject().getProperty(unlessProperty) != null) { | |||||
| getProject().getProperty(unlessProperty) != null) { | |||||
| return false; | return false; | ||||
| } | } | ||||
| return true; | return true; | ||||
| @@ -232,8 +230,8 @@ public class SelectSelector extends BaseSelectorContainer { | |||||
| if (!(e.hasMoreElements())) { | if (!(e.hasMoreElements())) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| FileSelector f = (FileSelector)e.nextElement(); | |||||
| return f.isSelected(basedir,filename,file); | |||||
| FileSelector f = (FileSelector) e.nextElement(); | |||||
| return f.isSelected(basedir, filename, file); | |||||
| } | } | ||||
| } | } | ||||
| @@ -55,6 +55,7 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| /** | /** | ||||
| @@ -97,7 +98,6 @@ public interface SelectorContainer { | |||||
| * Add a new selector into this container. | * Add a new selector into this container. | ||||
| * | * | ||||
| * @param selector the new selector to add | * @param selector the new selector to add | ||||
| * @return the selector that was added | |||||
| */ | */ | ||||
| public void appendSelector(FileSelector selector); | public void appendSelector(FileSelector selector); | ||||
| @@ -172,7 +172,7 @@ public interface SelectorContainer { | |||||
| * add a depends selector entry on the selector list | * add a depends selector entry on the selector list | ||||
| */ | */ | ||||
| public void addDepend(DependSelector selector); | public void addDepend(DependSelector selector); | ||||
| /** | /** | ||||
| * add a regular expression selector entry on the selector list | * add a regular expression selector entry on the selector list | ||||
| */ | */ | ||||
| @@ -71,14 +71,14 @@ public interface SelectorScanner { | |||||
| /** | /** | ||||
| * Directories which were selected out of a scan. | * Directories which were selected out of a scan. | ||||
| * | * | ||||
| * @param selectors list selector objects | |||||
| * @return list of directories not selected | |||||
| */ | */ | ||||
| public String[] getDeselectedDirectories(); | public String[] getDeselectedDirectories(); | ||||
| /** | /** | ||||
| * Files which were selected out of a scan. | * Files which were selected out of a scan. | ||||
| * | * | ||||
| * @param selectors list selector objects | |||||
| * @return list of files not selected | |||||
| */ | */ | ||||
| public String[] getDeselectedFiles(); | public String[] getDeselectedFiles(); | ||||
| @@ -84,9 +84,10 @@ public final class SelectorUtils { | |||||
| private SelectorUtils() { | private SelectorUtils() { | ||||
| } | } | ||||
| /** | |||||
| * Retrieves the instance of the Singleton. | |||||
| */ | |||||
| /** | |||||
| * Retrieves the instance of the Singleton. | |||||
| * @return singleton instance | |||||
| */ | |||||
| public static SelectorUtils getInstance() { | public static SelectorUtils getInstance() { | ||||
| return instance; | return instance; | ||||
| } | } | ||||
| @@ -110,6 +111,7 @@ public final class SelectorUtils { | |||||
| public static boolean matchPatternStart(String pattern, String str) { | public static boolean matchPatternStart(String pattern, String str) { | ||||
| return matchPatternStart(pattern, str, true); | return matchPatternStart(pattern, str, true); | ||||
| } | } | ||||
| /** | /** | ||||
| * Tests whether or not a given path matches the start of a given | * Tests whether or not a given path matches the start of a given | ||||
| * pattern up to the first "**". | * pattern up to the first "**". | ||||
| @@ -129,13 +131,13 @@ public final class SelectorUtils { | |||||
| * pattern up to the first "**". | * pattern up to the first "**". | ||||
| */ | */ | ||||
| public static boolean matchPatternStart(String pattern, String str, | public static boolean matchPatternStart(String pattern, String str, | ||||
| boolean isCaseSensitive) { | |||||
| boolean isCaseSensitive) { | |||||
| // When str starts with a File.separator, pattern has to start with a | // When str starts with a File.separator, pattern has to start with a | ||||
| // File.separator. | // File.separator. | ||||
| // When pattern starts with a File.separator, str has to start with a | // When pattern starts with a File.separator, str has to start with a | ||||
| // File.separator. | // File.separator. | ||||
| if (str.startsWith(File.separator) != | |||||
| pattern.startsWith(File.separator)) { | |||||
| if (str.startsWith(File.separator) | |||||
| != pattern.startsWith(File.separator)) { | |||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -143,9 +145,9 @@ public final class SelectorUtils { | |||||
| String[] strDirs = tokenizePathAsArray(str); | String[] strDirs = tokenizePathAsArray(str); | ||||
| int patIdxStart = 0; | int patIdxStart = 0; | ||||
| int patIdxEnd = patDirs.length-1; | |||||
| int patIdxEnd = patDirs.length - 1; | |||||
| int strIdxStart = 0; | int strIdxStart = 0; | ||||
| int strIdxEnd = strDirs.length-1; | |||||
| int strIdxEnd = strDirs.length - 1; | |||||
| // up to first '**' | // up to first '**' | ||||
| while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) { | while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) { | ||||
| @@ -153,8 +155,7 @@ public final class SelectorUtils { | |||||
| if (patDir.equals("**")) { | if (patDir.equals("**")) { | ||||
| break; | break; | ||||
| } | } | ||||
| if (!match(patDir,strDirs[strIdxStart], | |||||
| isCaseSensitive)) { | |||||
| if (!match(patDir, strDirs[strIdxStart], isCaseSensitive)) { | |||||
| return false; | return false; | ||||
| } | } | ||||
| patIdxStart++; | patIdxStart++; | ||||
| @@ -203,13 +204,13 @@ public final class SelectorUtils { | |||||
| * or <code>false</code> otherwise. | * or <code>false</code> otherwise. | ||||
| */ | */ | ||||
| public static boolean matchPath(String pattern, String str, | public static boolean matchPath(String pattern, String str, | ||||
| boolean isCaseSensitive) { | |||||
| boolean isCaseSensitive) { | |||||
| // When str starts with a File.separator, pattern has to start with a | // When str starts with a File.separator, pattern has to start with a | ||||
| // File.separator. | // File.separator. | ||||
| // When pattern starts with a File.separator, str has to start with a | // When pattern starts with a File.separator, str has to start with a | ||||
| // File.separator. | // File.separator. | ||||
| if (str.startsWith(File.separator) != | |||||
| pattern.startsWith(File.separator)) { | |||||
| if (str.startsWith(File.separator) | |||||
| != pattern.startsWith(File.separator)) { | |||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -217,9 +218,9 @@ public final class SelectorUtils { | |||||
| String[] strDirs = tokenizePathAsArray(str); | String[] strDirs = tokenizePathAsArray(str); | ||||
| int patIdxStart = 0; | int patIdxStart = 0; | ||||
| int patIdxEnd = patDirs.length-1; | |||||
| int patIdxEnd = patDirs.length - 1; | |||||
| int strIdxStart = 0; | int strIdxStart = 0; | ||||
| int strIdxEnd = strDirs.length-1; | |||||
| int strIdxEnd = strDirs.length - 1; | |||||
| // up to first '**' | // up to first '**' | ||||
| while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) { | while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) { | ||||
| @@ -227,9 +228,9 @@ public final class SelectorUtils { | |||||
| if (patDir.equals("**")) { | if (patDir.equals("**")) { | ||||
| break; | break; | ||||
| } | } | ||||
| if (!match(patDir,strDirs[strIdxStart], | |||||
| isCaseSensitive)) { | |||||
| patDirs = null; strDirs = null; | |||||
| if (!match(patDir, strDirs[strIdxStart], isCaseSensitive)) { | |||||
| patDirs = null; | |||||
| strDirs = null; | |||||
| return false; | return false; | ||||
| } | } | ||||
| patIdxStart++; | patIdxStart++; | ||||
| @@ -239,7 +240,8 @@ public final class SelectorUtils { | |||||
| // String is exhausted | // String is exhausted | ||||
| for (int i = patIdxStart; i <= patIdxEnd; i++) { | for (int i = patIdxStart; i <= patIdxEnd; i++) { | ||||
| if (!patDirs[i].equals("**")) { | if (!patDirs[i].equals("**")) { | ||||
| patDirs = null; strDirs = null; | |||||
| patDirs = null; | |||||
| strDirs = null; | |||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| @@ -247,7 +249,8 @@ public final class SelectorUtils { | |||||
| } else { | } else { | ||||
| if (patIdxStart > patIdxEnd) { | if (patIdxStart > patIdxEnd) { | ||||
| // String not exhausted, but pattern is. Failure. | // String not exhausted, but pattern is. Failure. | ||||
| patDirs = null; strDirs = null; | |||||
| patDirs = null; | |||||
| strDirs = null; | |||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| @@ -258,9 +261,9 @@ public final class SelectorUtils { | |||||
| if (patDir.equals("**")) { | if (patDir.equals("**")) { | ||||
| break; | break; | ||||
| } | } | ||||
| if (!match(patDir,strDirs[strIdxEnd], | |||||
| isCaseSensitive)) { | |||||
| patDirs = null; strDirs = null; | |||||
| if (!match(patDir, strDirs[strIdxEnd], isCaseSensitive)) { | |||||
| patDirs = null; | |||||
| strDirs = null; | |||||
| return false; | return false; | ||||
| } | } | ||||
| patIdxEnd--; | patIdxEnd--; | ||||
| @@ -270,7 +273,8 @@ public final class SelectorUtils { | |||||
| // String is exhausted | // String is exhausted | ||||
| for (int i = patIdxStart; i <= patIdxEnd; i++) { | for (int i = patIdxStart; i <= patIdxEnd; i++) { | ||||
| if (!patDirs[i].equals("**")) { | if (!patDirs[i].equals("**")) { | ||||
| patDirs = null; strDirs = null; | |||||
| patDirs = null; | |||||
| strDirs = null; | |||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| @@ -279,48 +283,50 @@ public final class SelectorUtils { | |||||
| while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) { | while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) { | ||||
| int patIdxTmp = -1; | int patIdxTmp = -1; | ||||
| for (int i = patIdxStart+1; i <= patIdxEnd; i++) { | |||||
| for (int i = patIdxStart + 1; i <= patIdxEnd; i++) { | |||||
| if (patDirs[i].equals("**")) { | if (patDirs[i].equals("**")) { | ||||
| patIdxTmp = i; | patIdxTmp = i; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| if (patIdxTmp == patIdxStart+1) { | |||||
| if (patIdxTmp == patIdxStart + 1) { | |||||
| // '**/**' situation, so skip one | // '**/**' situation, so skip one | ||||
| patIdxStart++; | patIdxStart++; | ||||
| continue; | continue; | ||||
| } | } | ||||
| // Find the pattern between padIdxStart & padIdxTmp in str between | // Find the pattern between padIdxStart & padIdxTmp in str between | ||||
| // strIdxStart & strIdxEnd | // strIdxStart & strIdxEnd | ||||
| int patLength = (patIdxTmp-patIdxStart-1); | |||||
| int strLength = (strIdxEnd-strIdxStart+1); | |||||
| int foundIdx = -1; | |||||
| strLoop: | |||||
| for (int i = 0; i <= strLength - patLength; i++) { | |||||
| for (int j = 0; j < patLength; j++) { | |||||
| String subPat = patDirs[patIdxStart+j+1]; | |||||
| String subStr = strDirs[strIdxStart+i+j]; | |||||
| if (!match(subPat,subStr, isCaseSensitive)) { | |||||
| continue strLoop; | |||||
| } | |||||
| } | |||||
| foundIdx = strIdxStart+i; | |||||
| break; | |||||
| } | |||||
| int patLength = (patIdxTmp - patIdxStart - 1); | |||||
| int strLength = (strIdxEnd - strIdxStart + 1); | |||||
| int foundIdx = -1; | |||||
| strLoop: | |||||
| for (int i = 0; i <= strLength - patLength; i++) { | |||||
| for (int j = 0; j < patLength; j++) { | |||||
| String subPat = patDirs[patIdxStart + j + 1]; | |||||
| String subStr = strDirs[strIdxStart + i + j]; | |||||
| if (!match(subPat, subStr, isCaseSensitive)) { | |||||
| continue strLoop; | |||||
| } | |||||
| } | |||||
| foundIdx = strIdxStart + i; | |||||
| break; | |||||
| } | |||||
| if (foundIdx == -1) { | if (foundIdx == -1) { | ||||
| patDirs = null; strDirs = null; | |||||
| patDirs = null; | |||||
| strDirs = null; | |||||
| return false; | return false; | ||||
| } | } | ||||
| patIdxStart = patIdxTmp; | patIdxStart = patIdxTmp; | ||||
| strIdxStart = foundIdx+patLength; | |||||
| strIdxStart = foundIdx + patLength; | |||||
| } | } | ||||
| for (int i = patIdxStart; i <= patIdxEnd; i++) { | for (int i = patIdxStart; i <= patIdxEnd; i++) { | ||||
| if (!patDirs[i].equals("**")) { | if (!patDirs[i].equals("**")) { | ||||
| patDirs = null; strDirs = null; | |||||
| patDirs = null; | |||||
| strDirs = null; | |||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| @@ -364,13 +370,13 @@ strLoop: | |||||
| * or <code>false</code> otherwise. | * or <code>false</code> otherwise. | ||||
| */ | */ | ||||
| public static boolean match(String pattern, String str, | public static boolean match(String pattern, String str, | ||||
| boolean isCaseSensitive) { | |||||
| boolean isCaseSensitive) { | |||||
| char[] patArr = pattern.toCharArray(); | char[] patArr = pattern.toCharArray(); | ||||
| char[] strArr = str.toCharArray(); | char[] strArr = str.toCharArray(); | ||||
| int patIdxStart = 0; | int patIdxStart = 0; | ||||
| int patIdxEnd = patArr.length-1; | |||||
| int patIdxEnd = patArr.length - 1; | |||||
| int strIdxStart = 0; | int strIdxStart = 0; | ||||
| int strIdxEnd = strArr.length-1; | |||||
| int strIdxEnd = strArr.length - 1; | |||||
| char ch; | char ch; | ||||
| boolean containsStar = false; | boolean containsStar = false; | ||||
| @@ -390,12 +396,12 @@ strLoop: | |||||
| ch = patArr[i]; | ch = patArr[i]; | ||||
| if (ch != '?') { | if (ch != '?') { | ||||
| if (isCaseSensitive && ch != strArr[i]) { | if (isCaseSensitive && ch != strArr[i]) { | ||||
| return false;// Character mismatch | |||||
| } | |||||
| if (!isCaseSensitive && Character.toUpperCase(ch) != | |||||
| Character.toUpperCase(strArr[i])) { | |||||
| return false; // Character mismatch | return false; // Character mismatch | ||||
| } | } | ||||
| if (!isCaseSensitive && Character.toUpperCase(ch) | |||||
| != Character.toUpperCase(strArr[i])) { | |||||
| return false; // Character mismatch | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| return true; // String matches against pattern | return true; // String matches against pattern | ||||
| @@ -406,14 +412,14 @@ strLoop: | |||||
| } | } | ||||
| // Process characters before first star | // Process characters before first star | ||||
| while((ch = patArr[patIdxStart]) != '*' && strIdxStart <= strIdxEnd) { | |||||
| while ((ch = patArr[patIdxStart]) != '*' && strIdxStart <= strIdxEnd) { | |||||
| if (ch != '?') { | if (ch != '?') { | ||||
| if (isCaseSensitive && ch != strArr[strIdxStart]) { | if (isCaseSensitive && ch != strArr[strIdxStart]) { | ||||
| return false;// Character mismatch | |||||
| return false; // Character mismatch | |||||
| } | } | ||||
| if (!isCaseSensitive && Character.toUpperCase(ch) != | |||||
| Character.toUpperCase(strArr[strIdxStart])) { | |||||
| return false;// Character mismatch | |||||
| if (!isCaseSensitive && Character.toUpperCase(ch) | |||||
| != Character.toUpperCase(strArr[strIdxStart])) { | |||||
| return false; // Character mismatch | |||||
| } | } | ||||
| } | } | ||||
| patIdxStart++; | patIdxStart++; | ||||
| @@ -431,14 +437,14 @@ strLoop: | |||||
| } | } | ||||
| // Process characters after last star | // Process characters after last star | ||||
| while((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= strIdxEnd) { | |||||
| while ((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= strIdxEnd) { | |||||
| if (ch != '?') { | if (ch != '?') { | ||||
| if (isCaseSensitive && ch != strArr[strIdxEnd]) { | if (isCaseSensitive && ch != strArr[strIdxEnd]) { | ||||
| return false;// Character mismatch | |||||
| return false; // Character mismatch | |||||
| } | } | ||||
| if (!isCaseSensitive && Character.toUpperCase(ch) != | |||||
| Character.toUpperCase(strArr[strIdxEnd])) { | |||||
| return false;// Character mismatch | |||||
| if (!isCaseSensitive && Character.toUpperCase(ch) | |||||
| != Character.toUpperCase(strArr[strIdxEnd])) { | |||||
| return false; // Character mismatch | |||||
| } | } | ||||
| } | } | ||||
| patIdxEnd--; | patIdxEnd--; | ||||
| @@ -459,38 +465,40 @@ strLoop: | |||||
| // always to a '*'. | // always to a '*'. | ||||
| while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) { | while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) { | ||||
| int patIdxTmp = -1; | int patIdxTmp = -1; | ||||
| for (int i = patIdxStart+1; i <= patIdxEnd; i++) { | |||||
| for (int i = patIdxStart + 1; i <= patIdxEnd; i++) { | |||||
| if (patArr[i] == '*') { | if (patArr[i] == '*') { | ||||
| patIdxTmp = i; | patIdxTmp = i; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| if (patIdxTmp == patIdxStart+1) { | |||||
| if (patIdxTmp == patIdxStart + 1) { | |||||
| // Two stars next to each other, skip the first one. | // Two stars next to each other, skip the first one. | ||||
| patIdxStart++; | patIdxStart++; | ||||
| continue; | continue; | ||||
| } | } | ||||
| // Find the pattern between padIdxStart & padIdxTmp in str between | // Find the pattern between padIdxStart & padIdxTmp in str between | ||||
| // strIdxStart & strIdxEnd | // strIdxStart & strIdxEnd | ||||
| int patLength = (patIdxTmp-patIdxStart-1); | |||||
| int strLength = (strIdxEnd-strIdxStart+1); | |||||
| int foundIdx = -1; | |||||
| int patLength = (patIdxTmp - patIdxStart - 1); | |||||
| int strLength = (strIdxEnd - strIdxStart + 1); | |||||
| int foundIdx = -1; | |||||
| strLoop: | strLoop: | ||||
| for (int i = 0; i <= strLength - patLength; i++) { | for (int i = 0; i <= strLength - patLength; i++) { | ||||
| for (int j = 0; j < patLength; j++) { | for (int j = 0; j < patLength; j++) { | ||||
| ch = patArr[patIdxStart+j+1]; | |||||
| ch = patArr[patIdxStart + j + 1]; | |||||
| if (ch != '?') { | if (ch != '?') { | ||||
| if (isCaseSensitive && ch != strArr[strIdxStart+i+j]) { | |||||
| if (isCaseSensitive && ch != strArr[strIdxStart + i | |||||
| + j]) { | |||||
| continue strLoop; | continue strLoop; | ||||
| } | } | ||||
| if (!isCaseSensitive && Character.toUpperCase(ch) != | if (!isCaseSensitive && Character.toUpperCase(ch) != | ||||
| Character.toUpperCase(strArr[strIdxStart+i+j])) { | |||||
| Character.toUpperCase(strArr[strIdxStart + i | |||||
| + j])) { | |||||
| continue strLoop; | continue strLoop; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| foundIdx = strIdxStart+i; | |||||
| foundIdx = strIdxStart + i; | |||||
| break; | break; | ||||
| } | } | ||||
| @@ -499,7 +507,7 @@ strLoop: | |||||
| } | } | ||||
| patIdxStart = patIdxTmp; | patIdxStart = patIdxTmp; | ||||
| strIdxStart = foundIdx+patLength; | |||||
| strIdxStart = foundIdx + patLength; | |||||
| } | } | ||||
| // All characters in the string are used. Check if only '*'s are left | // All characters in the string are used. Check if only '*'s are left | ||||
| @@ -520,15 +528,15 @@ strLoop: | |||||
| * | * | ||||
| * @return a Vector of path elements from the tokenized path | * @return a Vector of path elements from the tokenized path | ||||
| */ | */ | ||||
| public static Vector tokenizePath (String path) { | |||||
| public static Vector tokenizePath(String path) { | |||||
| Vector ret = new Vector(); | Vector ret = new Vector(); | ||||
| StringTokenizer st = new StringTokenizer(path,File.separator); | |||||
| StringTokenizer st = new StringTokenizer(path, File.separator); | |||||
| while (st.hasMoreTokens()) { | while (st.hasMoreTokens()) { | ||||
| ret.addElement(st.nextToken()); | ret.addElement(st.nextToken()); | ||||
| } | } | ||||
| return ret; | return ret; | ||||
| } | } | ||||
| /** | /** | ||||
| * Same as {@link #tokenizePath tokenizePath} but hopefully faster. | * Same as {@link #tokenizePath tokenizePath} but hopefully faster. | ||||
| */ | */ | ||||
| @@ -609,7 +617,7 @@ strLoop: | |||||
| * determining out of dateness | * determining out of dateness | ||||
| * @return whether the target is out of date | * @return whether the target is out of date | ||||
| */ | */ | ||||
| public static boolean isOutOfDate(Resource src, Resource target, | |||||
| public static boolean isOutOfDate(Resource src, Resource target, | |||||
| int granularity) { | int granularity) { | ||||
| if (!src.isExists()) { | if (!src.isExists()) { | ||||
| return false; | return false; | ||||
| @@ -623,7 +631,7 @@ strLoop: | |||||
| return false; | return false; | ||||
| } | } | ||||
| /** | |||||
| /** | |||||
| * "Flattens" a string by removing all whitespace (space, tab, linefeed, | * "Flattens" a string by removing all whitespace (space, tab, linefeed, | ||||
| * carriage return, and formfeed). This uses StringTokenizer and the | * carriage return, and formfeed). This uses StringTokenizer and the | ||||
| * default set of tokens as documented in the single arguement constructor. | * default set of tokens as documented in the single arguement constructor. | ||||
| @@ -634,10 +642,10 @@ strLoop: | |||||
| public static String removeWhitespace(String input) { | public static String removeWhitespace(String input) { | ||||
| StringBuffer result = new StringBuffer(); | StringBuffer result = new StringBuffer(); | ||||
| if (input != null) { | if (input != null) { | ||||
| StringTokenizer st = new StringTokenizer(input); | |||||
| while (st.hasMoreTokens()){ | |||||
| result.append(st.nextToken()); | |||||
| } | |||||
| StringTokenizer st = new StringTokenizer(input); | |||||
| while (st.hasMoreTokens()) { | |||||
| result.append(st.nextToken()); | |||||
| } | |||||
| } | } | ||||
| return result.toString(); | return result.toString(); | ||||
| } | } | ||||
| @@ -55,6 +55,7 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
| @@ -83,8 +84,7 @@ public class SizeSelector extends BaseExtendSelector { | |||||
| buf.append("compare: "); | buf.append("compare: "); | ||||
| if (cmp == 0) { | if (cmp == 0) { | ||||
| buf.append("less"); | buf.append("less"); | ||||
| } | |||||
| else if (cmp == 1) { | |||||
| } else if (cmp == 1) { | |||||
| buf.append("more"); | buf.append("more"); | ||||
| } else { | } else { | ||||
| buf.append("equal"); | buf.append("equal"); | ||||
| @@ -138,26 +138,19 @@ public class SizeSelector extends BaseExtendSelector { | |||||
| multiplier = 0; | multiplier = 0; | ||||
| if ((i > -1) && (i < 4)) { | if ((i > -1) && (i < 4)) { | ||||
| multiplier = 1000; | multiplier = 1000; | ||||
| } | |||||
| else if ((i > 3) && (i < 9)) { | |||||
| } else if ((i > 3) && (i < 9)) { | |||||
| multiplier = 1024; | multiplier = 1024; | ||||
| } | |||||
| else if ((i > 8) && (i < 13)) { | |||||
| } else if ((i > 8) && (i < 13)) { | |||||
| multiplier = 1000000; | multiplier = 1000000; | ||||
| } | |||||
| else if ((i > 12) && (i < 18)) { | |||||
| } else if ((i > 12) && (i < 18)) { | |||||
| multiplier = 1048576; | multiplier = 1048576; | ||||
| } | |||||
| else if ((i > 17) && (i < 22)) { | |||||
| } else if ((i > 17) && (i < 22)) { | |||||
| multiplier = 1000000000L; | multiplier = 1000000000L; | ||||
| } | |||||
| else if ((i > 21) && (i < 27)) { | |||||
| } else if ((i > 21) && (i < 27)) { | |||||
| multiplier = 1073741824L; | multiplier = 1073741824L; | ||||
| } | |||||
| else if ((i > 26) && (i < 31)) { | |||||
| } else if ((i > 26) && (i < 31)) { | |||||
| multiplier = 1000000000000L; | multiplier = 1000000000000L; | ||||
| } | |||||
| else if ((i > 30) && (i < 36)) { | |||||
| } else if ((i > 30) && (i < 36)) { | |||||
| multiplier = 1099511627776L; | multiplier = 1099511627776L; | ||||
| } | } | ||||
| if ((multiplier > 0) && (size > -1)) { | if ((multiplier > 0) && (size > -1)) { | ||||
| @@ -190,23 +183,20 @@ public class SizeSelector extends BaseExtendSelector { | |||||
| if (SIZE_KEY.equalsIgnoreCase(paramname)) { | if (SIZE_KEY.equalsIgnoreCase(paramname)) { | ||||
| try { | try { | ||||
| setValue(new Long(parameters[i].getValue() | setValue(new Long(parameters[i].getValue() | ||||
| ).longValue()); | |||||
| ).longValue()); | |||||
| } catch (NumberFormatException nfe) { | } catch (NumberFormatException nfe) { | ||||
| setError("Invalid size setting " | setError("Invalid size setting " | ||||
| + parameters[i].getValue()); | |||||
| + parameters[i].getValue()); | |||||
| } | } | ||||
| } | |||||
| else if (UNITS_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (UNITS_KEY.equalsIgnoreCase(paramname)) { | |||||
| ByteUnits units = new ByteUnits(); | ByteUnits units = new ByteUnits(); | ||||
| units.setValue(parameters[i].getValue()); | units.setValue(parameters[i].getValue()); | ||||
| setUnits(units); | setUnits(units); | ||||
| } | |||||
| else if (WHEN_KEY.equalsIgnoreCase(paramname)) { | |||||
| } else if (WHEN_KEY.equalsIgnoreCase(paramname)) { | |||||
| SizeComparisons cmp = new SizeComparisons(); | SizeComparisons cmp = new SizeComparisons(); | ||||
| cmp.setValue(parameters[i].getValue()); | cmp.setValue(parameters[i].getValue()); | ||||
| setWhen(cmp); | setWhen(cmp); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| setError("Invalid parameter " + paramname); | setError("Invalid parameter " + paramname); | ||||
| } | } | ||||
| } | } | ||||
| @@ -226,11 +216,9 @@ public class SizeSelector extends BaseExtendSelector { | |||||
| public void verifySettings() { | public void verifySettings() { | ||||
| if (size < 0) { | if (size < 0) { | ||||
| setError("The value attribute is required, and must be positive"); | setError("The value attribute is required, and must be positive"); | ||||
| } | |||||
| else if (multiplier < 1) { | |||||
| } else if (multiplier < 1) { | |||||
| setError("Invalid Units supplied, must be K,Ki,M,Mi,G,Gi,T,or Ti"); | setError("Invalid Units supplied, must be K,Ki,M,Mi,G,Gi,T,or Ti"); | ||||
| } | |||||
| else if (sizelimit < 0) { | |||||
| } else if (sizelimit < 0) { | |||||
| setError("Internal error: Code is not setting sizelimit correctly"); | setError("Internal error: Code is not setting sizelimit correctly"); | ||||
| } | } | ||||
| } | } | ||||
| @@ -255,17 +243,14 @@ public class SizeSelector extends BaseExtendSelector { | |||||
| } | } | ||||
| if (cmp == 0) { | if (cmp == 0) { | ||||
| return (file.length() < sizelimit); | return (file.length() < sizelimit); | ||||
| } | |||||
| else if (cmp == 1) { | |||||
| } else if (cmp == 1) { | |||||
| return (file.length() > sizelimit); | return (file.length() > sizelimit); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| return (file.length() == sizelimit); | return (file.length() == sizelimit); | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * Enumerated attribute with the values for units. | * Enumerated attribute with the values for units. | ||||
| * <p> | * <p> | ||||
| @@ -286,15 +271,15 @@ public class SizeSelector extends BaseExtendSelector { | |||||
| */ | */ | ||||
| public static class ByteUnits extends EnumeratedAttribute { | public static class ByteUnits extends EnumeratedAttribute { | ||||
| public String[] getValues() { | public String[] getValues() { | ||||
| return new String[] {"K", "k", "kilo", "KILO", | |||||
| "Ki", "KI", "ki", "kibi", "KIBI", | |||||
| "M", "m", "mega", "MEGA", | |||||
| "Mi", "MI", "mi", "mebi", "MEBI", | |||||
| "G", "g", "giga", "GIGA", | |||||
| "Gi", "GI", "gi", "gibi", "GIBI", | |||||
| "T", "t", "tera", "TERA", | |||||
| /* You wish! */ "Ti", "TI", "ti", "tebi", "TEBI" | |||||
| }; | |||||
| return new String[]{"K", "k", "kilo", "KILO", | |||||
| "Ki", "KI", "ki", "kibi", "KIBI", | |||||
| "M", "m", "mega", "MEGA", | |||||
| "Mi", "MI", "mi", "mebi", "MEBI", | |||||
| "G", "g", "giga", "GIGA", | |||||
| "Gi", "GI", "gi", "gibi", "GIBI", | |||||
| "T", "t", "tera", "TERA", | |||||
| /* You wish! */ "Ti", "TI", "ti", "tebi", "TEBI" | |||||
| }; | |||||
| } | } | ||||
| } | } | ||||
| @@ -303,7 +288,7 @@ public class SizeSelector extends BaseExtendSelector { | |||||
| */ | */ | ||||
| public static class SizeComparisons extends EnumeratedAttribute { | public static class SizeComparisons extends EnumeratedAttribute { | ||||
| public String[] getValues() { | public String[] getValues() { | ||||
| return new String[] {"less", "more", "equal"}; | |||||
| return new String[]{"less", "more", "equal"}; | |||||
| } | } | ||||
| } | } | ||||
| @@ -55,6 +55,7 @@ | |||||
| package org.apache.tools.ant.types.selectors; | package org.apache.tools.ant.types.selectors; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.Parameter; | import org.apache.tools.ant.types.Parameter; | ||||
| @@ -102,8 +103,7 @@ public class TypeSelector extends BaseExtendSelector { | |||||
| FileType type = new FileType(); | FileType type = new FileType(); | ||||
| type.setValue(parameters[i].getValue()); | type.setValue(parameters[i].getValue()); | ||||
| setType(type); | setType(type); | ||||
| } | |||||
| else { | |||||
| } else { | |||||
| setError("Invalid parameter " + paramname); | setError("Invalid parameter " + paramname); | ||||
| } | } | ||||
| } | } | ||||
| @@ -137,17 +137,20 @@ public class TypeSelector extends BaseExtendSelector { | |||||
| if (file.isDirectory()) { | if (file.isDirectory()) { | ||||
| return type.equals(FileType.DIR); | return type.equals(FileType.DIR); | ||||
| } else return type.equals(FileType.FILE); | |||||
| } else { | |||||
| return type.equals(FileType.FILE); | |||||
| } | |||||
| } | } | ||||
| /** | /** | ||||
| * Enumerated attribute with the values for types of file | * Enumerated attribute with the values for types of file | ||||
| */ | */ | ||||
| public static class FileType extends EnumeratedAttribute { | public static class FileType extends EnumeratedAttribute { | ||||
| public static final String FILE="file"; | |||||
| public static final String DIR="dir"; | |||||
| public static final String FILE = "file"; | |||||
| public static final String DIR = "dir"; | |||||
| public String[] getValues() { | public String[] getValues() { | ||||
| return new String[] {FILE, DIR}; | |||||
| return new String[]{FILE, DIR}; | |||||
| } | } | ||||
| } | } | ||||