*/
package org.opendaylight.controller.config.persist.storage.directory.xml;
+import com.google.common.base.Optional;
+import com.google.common.io.Files;
import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder;
import org.opendaylight.controller.config.persist.api.Persister;
import org.opendaylight.controller.config.persist.storage.file.xml.model.ConfigSnapshot;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.File;
+import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
import java.util.SortedSet;
import static com.google.common.base.Preconditions.checkArgument;
private static final Logger logger = LoggerFactory.getLogger(XmlDirectoryPersister.class);
private final File storage;
+ private final Optional<FilenameFilter> extensionsFilter;
+ /**
+ * Creates XmlDirectoryPersister that picks up all files in specified folder
+ */
public XmlDirectoryPersister(File storage) {
+ this(storage, Optional.<FilenameFilter>absent());
+ }
+
+ /**
+ * Creates XmlDirectoryPersister that picks up files only with specified file extension
+ */
+ public XmlDirectoryPersister(File storage, Set<String> fileExtensions) {
+ this(storage, Optional.of(getFilter(fileExtensions)));
+ }
+
+ private XmlDirectoryPersister(File storage, Optional<FilenameFilter> extensionsFilter) {
checkArgument(storage.exists() && storage.isDirectory(), "Storage directory does not exist: " + storage);
this.storage = storage;
+ this.extensionsFilter = extensionsFilter;
}
@Override
@Override
public List<ConfigSnapshotHolder> loadLastConfigs() throws IOException {
- File[] filesArray = storage.listFiles();
+ File[] filesArray = extensionsFilter.isPresent() ? storage.listFiles(extensionsFilter.get()) : storage.listFiles();
if (filesArray == null || filesArray.length == 0) {
return Collections.emptyList();
}
};
}
+ private static FilenameFilter getFilter(final Set<String>fileExtensions) {
+ checkArgument(fileExtensions.isEmpty() == false, "No file extension provided", fileExtensions);
+
+ return new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ String ext = Files.getFileExtension(name);
+ return fileExtensions.contains(ext);
+ }
+ };
+ }
@Override
public void close() {