/** * Implement a basic {@link Resource} selection that delegates to this * {@link FileSelector}. * @param r resource * @return whether the resource is selected */ default boolean isSelected(Resource r) { return r.asOptional(FileProvider.class).map(FileProvider::getFile) .map(f -> isSelected(null, null, f)).orElse(false); } }
private File file(Resource r) { return r.asOptional(FileProvider.class) .orElseThrow(() -> new ClassCastException( r.getClass() + " doesn't provide files")) .getFile(); }
private boolean hasAlreadyBeenImported(Resource importedResource, Vector<Object> importStack) { File importedFile = importedResource.asOptional(FileProvider.class) .map(FileProvider::getFile).orElse(null); URL importedURL = importedResource.asOptional(URLProvider.class) .map(URLProvider::getURL).orElse(null); return importStack.stream().anyMatch( o -> isOneOf(o, importedResource, importedFile, importedURL)); }
/** * Fulfill the ResourceCollection contract. * @return whether this is a filesystem-only resource collection. */ @Override public synchronized boolean isFilesystemOnly() { if (isReference()) { return getCheckedRef().isFilesystemOnly(); } dieOnCircularReference(); //first the easy way, if all children are filesystem-only, return true: if (rc.stream().allMatch(ResourceCollection::isFilesystemOnly)) { return true; } /* now check each Resource in case the child only lets through files from any children IT may have: */ return cacheCollection().stream() .allMatch(r -> r.asOptional(FileProvider.class).isPresent()); }
/** * Get the archive file from which entries will be extracted. * @return the archive in case the archive is a file, null otherwise. */ public File getSrc() { if (isReference()) { return ((ArchiveFileSet) getCheckedRef()).getSrc(); } dieOnCircularReference(); if (src == null) { return null; } return src.asOptional(FileProvider.class).map(FileProvider::getFile).orElse(null); }
Map<String, Resource> dirEntries, Map<String, Resource> matchDirEntries) { File srcFile = src.asOptional(FileProvider.class) .map(FileProvider::getFile).orElseThrow(() -> new BuildException( "Only file provider resources are supported"));