return Resources.NONE;
}
source = Union.getInstance(source);
logFuture(logTo, source, granularity);
Union result = new Union();
for (Iterator iter = source.iterator(); iter.hasNext();) {
final Resource sr = (Resource) iter.next();
String srName = sr.getName();
srName = srName == null
? srName : srName.replace('/', File.separatorChar);
String[] targetnames = null;
try {
targetnames = mapper.mapFileName(srName);
} catch (Exception e) {
logTo.log("Caught " + e + " mapping resource " + sr,
Project.MSG_VERBOSE);
}
if (targetnames == null || targetnames.length == 0) {
logTo.log(sr + " skipped - don\'t know how to handle it",
Project.MSG_VERBOSE);
continue;
}
Union targetColl = new Union();
for (int i = 0; i < targetnames.length; i++) {
targetColl.add(targets.getResource(
targetnames[i].replace(File.separatorChar, '/')));
}
//find the out-of-date targets:
Restrict r = new Restrict();
r.add(new ResourceSelector() {
public boolean isSelected(Resource target) {
/* Extra I/O, probably wasted:
if (target.isDirectory()) {
return false;
}
*/
return SelectorUtils.isOutOfDate(sr, target, granularity);
}
});
r.add(targetColl);
if (r.size() > 0) {
result.add(sr);
Resource t = (Resource) (r.iterator().next());
logTo.log(sr.getName() + " added as " + t.getName()
+ (t.isExists() ? " is outdated." : " doesn\'t exist."),
Project.MSG_VERBOSE);
continue;
}
//log uptodateness of all targets:
logTo.log(sr.getName()
+ " omitted as " + targetColl.toString()
+ (targetColl.size() == 1 ? " is" : " are ")
+ " up to date.", Project.MSG_VERBOSE);
}
return result;
}