Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.m2e.refactoring/src/org/eclipse/m2e/refactoring/internal/SaveDirtyFilesDialog.java')
-rw-r--r--org.eclipse.m2e.refactoring/src/org/eclipse/m2e/refactoring/internal/SaveDirtyFilesDialog.java166
1 files changed, 166 insertions, 0 deletions
diff --git a/org.eclipse.m2e.refactoring/src/org/eclipse/m2e/refactoring/internal/SaveDirtyFilesDialog.java b/org.eclipse.m2e.refactoring/src/org/eclipse/m2e/refactoring/internal/SaveDirtyFilesDialog.java
new file mode 100644
index 00000000..ec01227e
--- /dev/null
+++ b/org.eclipse.m2e.refactoring/src/org/eclipse/m2e/refactoring/internal/SaveDirtyFilesDialog.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2010 Sonatype, Inc.
+ * 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:
+ * Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.refactoring.internal;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.m2e.refactoring.Messages;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.ListDialog;
+
+/**
+ * Taken from org.eclipse.wst.common.ui.internal.dialogs
+ *
+ * A generic save files dialog. The bulk of the code for this dialog was taken
+ * from the JDT refactoring support in
+ * org.eclipse.jdt.internal.ui.refactoring.RefactoringSaveHelper. This class is
+ * a good candidate for reuse amoung components.
+ */
+public class SaveDirtyFilesDialog extends ListDialog {
+ public static final String ALL_MODIFIED_RESOURCES_MUST_BE_SAVED_BEFORE_THIS_OPERATION = Messages.SaveDirtyFilesDialog_message_not_saved;
+
+ public static boolean saveDirtyFiles(String mask)
+ {
+ boolean result = true;
+ // TODO (cs) add support for save automatically
+ Shell shell = Display.getCurrent().getActiveShell();
+ IEditorPart[] dirtyEditors = getDirtyEditors(mask);
+ if (dirtyEditors.length > 0)
+ {
+ result = false;
+ SaveDirtyFilesDialog saveDirtyFilesDialog = new SaveDirtyFilesDialog(shell);
+ saveDirtyFilesDialog.setInput(Arrays.asList(dirtyEditors));
+ // Save all open editors.
+ if (saveDirtyFilesDialog.open() == Window.OK)
+ {
+ result = true;
+ int numDirtyEditors = dirtyEditors.length;
+ for (int i = 0; i < numDirtyEditors; i++)
+ {
+ dirtyEditors[i].doSave(null);
+ }
+ }
+ else
+ {
+ MessageDialog dlg = new MessageDialog(shell, Messages.SaveDirtyFilesDialog_title_error, null,
+ ALL_MODIFIED_RESOURCES_MUST_BE_SAVED_BEFORE_THIS_OPERATION,
+ MessageDialog.ERROR, new String[] {IDialogConstants.OK_LABEL}, 0);
+ dlg.open();
+ }
+ }
+ return result;
+ }
+
+ private static IEditorPart[] getDirtyEditors(String mask)
+ {
+ List<IEditorPart> result = new ArrayList<IEditorPart>(0);
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
+ for (int i = 0; i < windows.length; i++) {
+ IWorkbenchPage[] pages = windows[i].getPages();
+ for (int x = 0; x < pages.length; x++) {
+ IEditorPart[] editors = pages[x].getDirtyEditors();
+ for (int z = 0; z < editors.length; z++) {
+ IEditorPart ep = editors[z];
+ if (ep.getTitle().indexOf(mask) > 0) {
+ result.add(ep);
+ }
+ }
+ }
+ }
+ return result.toArray(new IEditorPart[result.size()]);
+ }
+
+ public SaveDirtyFilesDialog(Shell parent)
+ {
+ super(parent);
+ setTitle(Messages.SaveDirtyFilesDialog_title);
+ setAddCancelButton(true);
+ setLabelProvider(createDialogLabelProvider());
+ setMessage(ALL_MODIFIED_RESOURCES_MUST_BE_SAVED_BEFORE_THIS_OPERATION);
+ setContentProvider(new ListContentProvider());
+ }
+
+ protected Control createDialogArea(Composite container)
+ {
+ Composite result = (Composite) super.createDialogArea(container);
+ // TODO... provide preference that supports 'always save'
+ return result;
+ }
+
+
+ private ILabelProvider createDialogLabelProvider()
+ {
+ return new LabelProvider()
+ {
+ public Image getImage(Object element)
+ {
+ return ((IEditorPart) element).getTitleImage();
+ }
+
+ public String getText(Object element)
+ {
+ return ((IEditorPart) element).getTitle();
+ }
+ };
+ }
+
+ /**
+ * A specialized content provider to show a list of editor parts.
+ * This class has been copied from org.eclipse.jdt.internal.ui.viewsupport.ListContentProvider
+ * This class should be removed once a generic solution is made available.
+ */
+ @SuppressWarnings("unchecked")
+ static class ListContentProvider implements IStructuredContentProvider {
+ List fContents;
+
+ public Object[] getElements(Object input) {
+ if(fContents != null && fContents == input)
+ return fContents.toArray();
+ return new Object[0];
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ if(newInput instanceof List) {
+ fContents = (List) newInput;
+ } else {
+ fContents = null;
+ // we use a fixed set.
+ }
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isDeleted(Object o) {
+ return fContents != null && !fContents.contains(o);
+ }
+ }
+}

Back to the top