blob: 821468b9a06f0ea8998e6025a5d4a110aebc9a62 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Cloudsmith Inc. and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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;
}