/* * Copyright 2002-2010 the original author or authors. * * 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.springframework.integration.file; import java.io.File; import java.util.List; import org.springframework.integration.file.filters.FileListFilter; /** * Strategy for scanning directories. Implementations may select all children * and grandchildren of the scanned directory in any order. This interface is * intended to enable the customization of selection, locking and ordering of * files in a directory like RecursiveDirectoryScanner. If the only requirement * is to ignore certain files a EntryListFilter implementation should suffice. * * @author Iwein Fuld */ public interface DirectoryScanner { /** * Scans the directory according to the strategy particular to this * implementation and returns the selected files as a File array. This * method may never return files that are rejected by the filter. * * @param directory the directory to scan for files * @return a list of files representing the content of the directory * @throws IllegalArgumentException if the input is incorrect */ List<File> listFiles(File directory) throws IllegalArgumentException; /** * Sets a custom filter to be used by this scanner. The filter will get a * chance to reject files before the scanner presents them through its * listFiles method. A scanner may use additional filtering that is out of * the control of the provided filter. * * @param filter * the custom filter to be used */ void setFilter(FileListFilter<File> filter); /** * Sets a custom locker to be used by this scanner. The locker will get a * chance to lock files and reject claims on files that are already locked. * * @param locker * the custom locker to be used */ void setLocker(FileLocker locker); /** * Claim the file to process. It is up to the implementation to decide what * additional safe guards are required to attain a claim to the file. But if * a locker is set implementations MUST invoke its <code>lock</code> method * and MUST return <code>false</code> if the locker did not grant the lock. * * @param file file to be claimed * @return true if the claim was granted false otherwise */ boolean tryClaim(File file); }