Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java')
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java125
1 files changed, 125 insertions, 0 deletions
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
new file mode 100644
index 000000000..7e8e9f107
--- /dev/null
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
@@ -0,0 +1,125 @@
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+package org.eclipse.compare.internal;
+
+import java.util.ResourceBundle;
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.IActionDelegate;
+
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+
+
+public class AddFromHistoryAction implements IActionDelegate {
+
+ private static final String BUNDLE_NAME= "org.eclipse.compare.internal.AddFromHistoryAction"; //$NON-NLS-1$
+
+ private ISelection fSelection;
+
+ public AddFromHistoryAction() {
+ }
+
+ public void selectionChanged(IAction a, ISelection s) {
+ fSelection= s;
+ }
+
+ public void run(IAction action) {
+
+ ResourceBundle bundle= ResourceBundle.getBundle(BUNDLE_NAME);
+ String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$
+
+ Shell parentShell= CompareUIPlugin.getShell();
+ AddFromHistoryDialog dialog= null;
+
+ Object[] s= Utilities.getResources(fSelection);
+
+ for (int i= 0; i < s.length; i++) {
+ Object o= s[i];
+ if (o instanceof IContainer) {
+ IContainer container= (IContainer) o;
+
+ ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(parentShell);
+ IProgressMonitor pm= pmdialog.getProgressMonitor();
+ IFile[] states= null;
+ try {
+ states= container.findDeletedMembersWithHistory(IContainer.DEPTH_INFINITE, pm);
+ } catch (CoreException ex) {
+ pm.done();
+ }
+
+ if (states == null || states.length <= 0) {
+ String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$
+ MessageDialog.openInformation(parentShell, title, msg);
+ return;
+ }
+
+ if (dialog == null)
+ dialog= new AddFromHistoryDialog(parentShell, bundle);
+
+ if (dialog.select(container, states)) {
+ IFile file= dialog.getSelectedFile();
+ IFileState fileState= dialog.getSelectedFileState();
+ if (file != null && fileState != null) {
+ try {
+ updateWorkspace(bundle, parentShell, file, fileState);
+
+ } catch (InterruptedException x) {
+ // Do nothing. Operation has been canceled by user.
+
+ } catch (InvocationTargetException x) {
+ String reason= x.getTargetException().getMessage();
+ MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason)); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void createContainers(IResource resource) throws CoreException {
+ IContainer container= resource.getParent();
+ if (container instanceof IFolder) {
+ IFolder parent= (IFolder) container;
+ if (parent != null && !parent.exists()) {
+ createContainers(parent);
+ parent.create(false, true, null);
+ }
+ }
+ }
+
+ private void updateWorkspace(final ResourceBundle bundle, Shell shell,
+ final IFile file, final IFileState fileState)
+ throws InvocationTargetException, InterruptedException {
+
+ WorkspaceModifyOperation operation= new WorkspaceModifyOperation() {
+ public void execute(IProgressMonitor pm) throws InvocationTargetException {
+ try {
+ String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$
+ pm.beginTask(taskName, IProgressMonitor.UNKNOWN);
+
+ createContainers(file);
+ file.create(fileState.getContents(), false, pm);
+
+ } catch (CoreException e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ pm.done();
+ }
+ }
+ };
+
+ ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell);
+ pmdialog.run(false, true, operation);
+ }
+}

Back to the top