/* * Copyright 2004 - 2008 Christian Sprajc. All rights reserved. * * This file is part of PowerFolder. * * PowerFolder is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation. * * PowerFolder is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PowerFolder. If not, see <http://www.gnu.org/licenses/>. * * $Id$ */ package de.dal33t.powerfolder.disk; import java.io.File; import de.dal33t.powerfolder.Controller; import de.dal33t.powerfolder.light.FolderInfo; import de.dal33t.powerfolder.util.Reject; /** * Utility class with methods for creating and converting preview folders. */ public class FolderPreviewHelper { /** * The System property name for the tmp dir */ private static final String JAVA_IO_TMPDIR = "java.io.tmpdir"; /** * The powerfolder directory that preview folders are put in. */ private static final String DOT_POWER_FOLDER = ".Preview"; /** * This helper creates FolderSettings for creation of a preview folder. The * local base dir is in the system temp dir and there is no synchronization * for a preview folder. * * @param folderName * @return the settings for previewing the folder. */ public static FolderSettings createPreviewFolderSettings(String folderName) { File localBase = makePreviewBaseDir(folderName); return new FolderSettings(localBase, SyncProfile.NO_SYNC, false, true, null, 0, false); } // Creates a preview folder directory for a folderName. // The folder is put in [java.io.tempdir]/.PowerFolder/folderName/ private static File makePreviewBaseDir(String folderName) { String javaTempDir = System.getProperty(JAVA_IO_TMPDIR); File tempPF = new File(javaTempDir, DOT_POWER_FOLDER); return new File(tempPF, folderName); } /** * Converts a normal folder to a preview folder. * * @param controller * @param folder * @return if succeeded */ public static boolean convertFolderToPreview(Controller controller, Folder folder) { Reject.ifTrue(folder.isPreviewOnly(), "Can not convert a preview folder to preview"); FolderRepository folderRepository = controller.getFolderRepository(); FolderSettings initialFolderSettings = FolderSettings.load(controller, folder.getConfigEntryId()); if (initialFolderSettings == null) { return false; } FolderSettings previewFolderSettings = createPreviewFolderSettings(folder .getName()); FolderInfo folderInfo = new FolderInfo(folder); // Saved FolderSettings are like initial, but preview is true. FolderSettings savedFolderSettings = new FolderSettings( initialFolderSettings.getLocalBaseDir(), initialFolderSettings.getSyncProfile(), false, true, initialFolderSettings.getDownloadScript(), initialFolderSettings.getVersions(), initialFolderSettings.isSyncPatterns()); folderRepository.removeFolder(folder, false); folderRepository.createPreviewFolder(folderInfo, previewFolderSettings); folderRepository .saveFolderConfig(folderInfo, savedFolderSettings, true); return true; } /** * Converts a preview folder to a normal folder. * * @param controller * @param folder * @param newFolderSettings * @param deleteSystemSubDir */ public static void convertFolderFromPreview(Controller controller, Folder folder, FolderSettings newFolderSettings, boolean deleteSystemSubDir) { Reject.ifTrue(!folder.isPreviewOnly(), "Can not convert a non-preview folder to non-previrew"); Reject.ifTrue(newFolderSettings.isPreviewOnly(), "Can not convert to a preview folder"); FolderRepository folderRepository = controller.getFolderRepository(); FolderInfo folderInfo = new FolderInfo(folder); folderRepository.removeFolder(folder, deleteSystemSubDir); Folder f = folderRepository.createFolder(folderInfo, newFolderSettings); f.addDefaultExcludes(); } }