package com.eleybourn.bookcatalogue.filechooser; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.util.ArrayList; import java.util.regex.Pattern; import com.eleybourn.bookcatalogue.backup.BackupManager; import com.eleybourn.bookcatalogue.backup.BackupReader; import com.eleybourn.bookcatalogue.filechooser.FileChooserFragment.FileDetails; import com.eleybourn.bookcatalogue.utils.Logger; /** * Object to provide a FileLister specific to archive files. * * @author pjw */ public class BackupLister extends FileLister { /** Pattern to match an archive file spec */ private static Pattern mBackupFilePattern = Pattern.compile(".bcbk$", Pattern.CASE_INSENSITIVE); /** * Constructor * * @param root */ public BackupLister(File root) { super(root); } /** * Construct a file filter to select only directories and backup files. */ private FileFilter mFilter = new FileFilter() { @Override public boolean accept(File f) { return (f.isDirectory() && f.canWrite()) || (f.isFile() && mBackupFilePattern.matcher(f.getName()).find()); } }; /** * Get the file filter we constructed */ protected FileFilter getFilter() { return mFilter; } /** * Process an array of Files into an ArrayList of BackupFileDetails */ protected ArrayList<FileDetails> processList(File[] files) { ArrayList<FileDetails> dirs = new ArrayList<FileDetails>(); if (files != null) { for (File f : files) { BackupFileDetails fd = new BackupFileDetails(f); dirs.add(fd); if (f.getName().toUpperCase().endsWith(".BCBK")) { BackupReader reader = null; try { reader = BackupManager.readBackup(f); fd.setInfo(reader.getInfo()); reader.close(); } catch (IOException e) { Logger.logError(e); if (reader != null) try { reader.close(); } catch (IOException e1) { } } } } } return dirs; } }