stevel 2005/05/16 07:58:47 Modified: src/main/org/apache/tools/ant/taskdefs defaults.properties Added: src/main/org/apache/tools/ant/taskdefs CopyPath.java Log: utterly without documents or tests, a utility task to extract a path to a dir, by way of a mapper. Revision Changes Path 1.168 +1 -0 ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties Index: defaults.properties =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v retrieving revision 1.167 retrieving revision 1.168 diff -u -r1.167 -r1.168 --- defaults.properties 28 Mar 2005 23:22:11 -0000 1.167 +++ defaults.properties 16 May 2005 14:58:47 -0000 1.168 @@ -82,6 +82,7 @@ libraries=org.apache.tools.ant.taskdefs.repository.Libraries length=org.apache.tools.ant.taskdefs.Length clone=org.apache.tools.ant.taskdefs.Clone +copypath=org.apache.tools.ant.taskdefs.CopyPath # optional tasks image=org.apache.tools.ant.taskdefs.optional.image.Image 1.1 ant/src/main/org/apache/tools/ant/taskdefs/CopyPath.java Index: CopyPath.java =================================================================== /* * Copyright 2005 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.taskdefs; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.util.FileUtils; import org.apache.tools.ant.util.SourceFileScanner; import org.apache.tools.ant.util.FileNameMapper; import org.apache.tools.ant.types.Mapper; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Reference; import org.apache.tools.ant.types.FilterSetCollection; import org.apache.tools.ant.types.FilterSet; import java.io.File; import java.io.IOException; import java.util.Enumeration; import java.util.Vector; import java.util.Hashtable; /** * Copy the contents of a path to a destination, using the mapper of choice * @since Ant 1.7 * * @ant.task category="filesystem" */ public class CopyPath extends Task { private FileNameMapper mapper; private Path path; private File destDir; protected FileUtils fileUtils; private long granularity = 0; protected boolean preserveLastModified = false; public CopyPath() { fileUtils = FileUtils.getFileUtils(); granularity = fileUtils.getFileTimestampGranularity(); } public static final String ERROR_NO_DESTDIR = "No destDir specified"; public static final String ERROR_NO_PATH = "No path specified"; public static final String ERROR_NO_MAPPER = "No mapper specified"; public void setDestDir(File destDir) { this.destDir = destDir; } /** * add a mapper * @param newmapper */ public void add(FileNameMapper newmapper) { if(mapper!=null) { throw new BuildException("Only one mapper allowed"); } mapper=newmapper; } /** * Set the path to be used when running the Java class. * * @param s an Ant Path object containing the path. */ public void setPath(Path s) { createPath().append(s); } /** * Set the path to use by reference. * * @param r a reference to an existing path. */ public void setPathRef(Reference r) { createPath().setRefid(r); } /** * Create a path. * * @return a path to be configured. */ public Path createPath() { if (path == null) { path = new Path(getProject()); } return path; } public void setGranularity(long granularity) { this.granularity = granularity; } public void setPreserveLastModified(boolean preserveLastModified) { this.preserveLastModified = preserveLastModified; } /** * Ensure we have a consistent and legal set of attributes, and set any * internal flags necessary based on different combinations of attributes. * * @throws BuildException if an error occurs. */ protected void validateAttributes() throws BuildException { if(destDir==null) { throw new BuildException(ERROR_NO_DESTDIR); } if(mapper==null) { throw new BuildException(ERROR_NO_MAPPER); } if(path==null) { throw new BuildException(ERROR_NO_PATH); } } /** * This is a very minimal derivative of the nomal copy logic. * * @throws BuildException if something goes wrong with the build. */ public void execute() throws BuildException { validateAttributes(); String[] sourceFiles = path.list(); if (sourceFiles.length == 0) { log("Path is empty", Project.MSG_VERBOSE); return; } for (int sources = 0; sources < sourceFiles.length; sources++) { String sourceFileName = sourceFiles[sources]; File sourceFile=new File(sourceFileName); String[] toFiles = (String[]) mapper.mapFileName(sourceFileName); for (int i = 0; i < toFiles.length; i++) { String destFileName = toFiles[i]; File destFile=new File(destDir,destFileName); if (sourceFile.equals(destFile)) { log("Skipping self-copy of " + sourceFileName, Project.MSG_VERBOSE); continue; } try { log("Copying " + sourceFile + " to " + destFile, Project.MSG_VERBOSE); fileUtils.copyFile(sourceFile, destFile, null, null, false, preserveLastModified, null, null, getProject()); } catch (IOException ioe) { String msg = "Failed to copy " + sourceFile + " to " + destFile + " due to " + ioe.getMessage(); if (destFile.exists() && !destFile.delete()) { msg += " and I couldn't delete the corrupt " + destFile; } throw new BuildException(msg, ioe, getLocation()); } } } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]