@@ -102,6 +102,10 @@ public class Copy extends Task {
private long granularity = 0;
private long granularity = 0;
private boolean force = false;
private boolean force = false;
// used to store the single non-file resource to copy when the
// tofile attribute has been used
private Resource singleResource = null;
/**
/**
* Copy task constructor.
* Copy task constructor.
*/
*/
@@ -550,11 +554,15 @@ public class Copy extends Task {
}
}
}
}
if (nonFileResources.size() > 0) {
if (nonFileResources.size() > 0 || singleResource != null ) {
Resource[] nonFiles =
Resource[] nonFiles =
(Resource[]) nonFileResources.toArray(new Resource[nonFileResources.size()]);
(Resource[]) nonFileResources.toArray(new Resource[nonFileResources.size()]);
// restrict to out-of-date resources
// restrict to out-of-date resources
Map map = scan(nonFiles, destDir);
Map map = scan(nonFiles, destDir);
if (singleResource != null) {
map.put(singleResource,
new String[] { destFile.getAbsolutePath() });
}
try {
try {
doResourceOperations(map);
doResourceOperations(map);
} catch (BuildException e) {
} catch (BuildException e) {
@@ -568,6 +576,7 @@ public class Copy extends Task {
} finally {
} finally {
// clean up again, so this instance can be used a second
// clean up again, so this instance can be used a second
// time
// time
singleResource = null;
file = savedFile;
file = savedFile;
destFile = savedDestFile;
destFile = savedDestFile;
destDir = savedDestDir;
destDir = savedDestDir;
@@ -661,10 +670,9 @@ public class Copy extends Task {
"Cannot concatenate multiple files into a single file.");
"Cannot concatenate multiple files into a single file.");
} else {
} else {
ResourceCollection rc = (ResourceCollection) rcs.elementAt(0);
ResourceCollection rc = (ResourceCollection) rcs.elementAt(0);
if (!rc.isFilesystemOnly()) {
if (!rc.isFilesystemOnly() && !supportsNonFileResources() ) {
throw new BuildException("Only FileSystem resources are"
throw new BuildException("Only FileSystem resources are"
+ " supported when concatenating"
+ " files.");
+ " supported.");
}
}
if (rc.size() == 0) {
if (rc.size() == 0) {
throw new BuildException(MSG_WHEN_COPYING_EMPTY_RC_TO_FILE);
throw new BuildException(MSG_WHEN_COPYING_EMPTY_RC_TO_FILE);
@@ -672,7 +680,11 @@ public class Copy extends Task {
Resource res = (Resource) rc.iterator().next();
Resource res = (Resource) rc.iterator().next();
FileProvider r = (FileProvider) res.as(FileProvider.class);
FileProvider r = (FileProvider) res.as(FileProvider.class);
if (file == null) {
if (file == null) {
file = r.getFile();
if (r != null) {
file = r.getFile();
} else {
singleResource = res;
}
rcs.removeElementAt(0);
rcs.removeElementAt(0);
} else {
} else {
throw new BuildException(
throw new BuildException(