/******************************************************************************* * Copyright (c) 2009 Cloudsmith Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cloudsmith Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.equinox.internal.p2.touchpoint.natives; import java.io.File; import java.io.IOException; public interface IBackupStore { /** * Backup the file. * Calling this method with a file that represents a directory is equivalent to calling * {@link #backupDirectory(File)}. * * A file (path) can only be backed up once per IBackupStore instance. * * If a directory is first backed up, and later replaced by a regular file, and this file * is also backed up (or vice versa) - an {@link IllegalArgumentException} is thrown * * A backup can not be performed on a closed IBackupStore. * * @param file - the file (or directory) to backup * @return true if the file was backed up, false if this file (path) has already been backed up (the file is not moved to the store). * @throws IOException - if the backup operation fails, or the file does not exist * @throws IllegalStateException - if the IBackupStore has been closed * @throws IllegalArgumentException - on type mismatch (file vs. directory) of earlier backup, or if file does not exist */ public boolean backup(File file) throws IOException; /** * Same as {@link #backup(File)} except that a copy is kept in the original location. * Can not be used to copy directories. * @param file to backup and copy * @return true if the file was backed up, false if this file (path) has already been backed up (the file is not moved to the store). * @throws IOException - if the backup operation fails, if the file does not exist, or if the copy can not be created. * @throws IllegalStateException - if the IBackupStore has been closed * @throws IllegalArgumentException - on type mismatch (file vs. directory) of earlier backup, or if file is a directory. */ public boolean backupCopy(File file) throws IOException; /** * Performs backup of an empty directory. The directory must be empty before it can be backed up (i.e. * similar to a delete of a directory). Backup the files of the directory first. * A call to backup a directory is really only needed for empty directories as a restore * of a file will also restore all of its parent directories. * @param file - the (empty) directory to back up * @return true if the directory was moved to backup. false if the directory was already backed up and remains. * @throws IllegalArgumentException if file is not a directory, or is not empty. * @throws IOException if directory can not be moved to the backup store, or if the directory is not writeable */ public boolean backupDirectory(File file) throws IOException; /** * Discards and closes this BackupStore. Does nothing if this store is already * restored or discarded. */ public void discard(); /** * Restores all backup files from backup store. * Note that restore of a (non directory) file deletes an existing file or directory found * in the restore location. * When the backup has been restored it can not be * used for further backup or restore. * * If there are unrestorable items (non writeable directories, or general IO exceptions) these items * should be written to the log, and the backup copies should be retained * for manual restore. * * @throws IOException if the backup was not fully restored - unrestored items should have been logged. * @throws IllegalStateException if the backup is already closed. */ public void restore() throws IOException; /** * Returns the unique backup name (this is the name of generated backup directories). * @return the backup name. */ public String getBackupName(); /** * Backs up a file, or everything under a directory. * * @param file - file to backup or directory * @throws IOException if backup operation failed */ public void backupAll(File file) throws IOException; /** * Backs up a file, or everything under a directory. * A copy of the backup is left in the original place. * @param file * @throws IOException */ public void backupCopyAll(File file) throws IOException; }