blob: 19135c8e4101c6153ec5c7f0300a56cc3f7332f6 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.ui.wizards;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.epf.common.ui.util.MsgBox;
import org.eclipse.epf.library.ILibraryService;
import org.eclipse.epf.library.edit.ui.UserInteractionHelper;
import org.eclipse.epf.library.layout.LayoutResources;
import org.eclipse.epf.library.services.SafeUpdateController;
import org.eclipse.epf.library.ui.LibraryUIPlugin;
import org.eclipse.epf.library.ui.LibraryUIResources;
import org.eclipse.epf.library.ui.dialogs.LibraryBackupDialog;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.widgets.Shell;
/**
* Utility class to back up library.
*
* @author Jinhua Xi
* @author Weiping Lu
* @since 1.0
*/
public class LibraryBackupUtil {
private String path = null;
/**
* Prompts to backup the current library
*
* @param shell
*/
public static void promptBackupCurrentLibrary(Shell shell, ILibraryService service) {
String libPathStr = service.getCurrentMethodLibraryLocation();
File libPath = new File(libPathStr);
new LibraryBackupUtil().doBackup(shell, libPath, service);
}
/**
* Prompts to backup library
*
* @param shell
* @param libPath
*/
public static void promptBackupLibrary(Shell shell, File libPath) {
new LibraryBackupUtil().doBackup(shell, libPath, null);
}
private void doBackup(final Shell shell, final File libPath, ILibraryService service) {
path = null;
final ILibraryService fservice = service;
SafeUpdateController.syncExec(new Runnable() {
public void run() {
Shell s = shell;
if (s == null) {
s = MsgBox.getDefaultShell();
}
if (s == null) {
s = new Shell(MsgBox.getDisplay());
}
String title = LibraryUIResources.backupLibraryDialog_title;
String message = LibraryUIResources.backupLibraryDialog_text;
String backupPath = libPath.getAbsolutePath() + ".backup"; //$NON-NLS-1$
LibraryBackupDialog dlg = new LibraryBackupDialog(s, title,
message, backupPath);
if (dlg.open() == Dialog.OK) {
path = dlg.getPath();
}
ProgressMonitorDialog pmDialog = new ProgressMonitorDialog(s);
IRunnableWithProgress op = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException {
monitor.beginTask(
LibraryUIResources.backingUpLibraryTask_name,
IProgressMonitor.UNKNOWN);
if (path != null) {
if (fservice == null) {
backup(libPath, new File(path));
} else {
fservice.getCurrentLibraryManager().backupMethodLibrary(path);
}
}
}
};
try {
pmDialog.run(true, false, op);
} catch (Exception e){
LibraryUIPlugin.getDefault().getLogger().logError(e);
}
}
});
}
/**
* Back up library
*
* @param source
* @param dest
*/
public static void backup(final File source, final File dest) {
Runnable runnable = new Runnable() {
public void run() {
try {
// excude the non-library files that might be locked by rmc.
// these files may cause backup to fail due to file lock.
String excludes = ".lock"; //$NON-NLS-1$
LayoutResources.copyDir(source, dest, "**", excludes); //$NON-NLS-1$
} catch (RuntimeException e) {
LibraryUIPlugin.getDefault().getLogger().logError(e);
}
}
};
UserInteractionHelper.runWithProgress(runnable,
LibraryUIResources.backingUpLibraryTask_name);
}
}