/** * <p>Copyright: Copyright (c) 2009</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.internal.ui.refactoring; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.log4j.Logger; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.window.Window; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorInput; 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; import org.eclipse.ui.part.MultiEditorInput; /** * * @author liaogc */ public class RefactoringSaveHelper { private static final Logger logger = Logger.getLogger(RefactoringSaveHelper.class); public boolean saveEditors(Shell shell) { final IEditorPart[] dirtyEditors =getDirtyEditors(); if(dirtyEditors==null || dirtyEditors.length==0){ return true; } ListDialog dialog= new ListDialog(shell) {}; dialog.setTitle("���뱣�����¼���Դ"); dialog.setLabelProvider(createDialogLabelProvider()); dialog.setMessage("���뱣�����¼���Դ"); dialog.setContentProvider(new ArrayContentProvider()); dialog.setInput(Arrays.asList(dirtyEditors)); int state = dialog.open() ; if(state == Window.OK){ int count= dirtyEditors.length; for (int i= 0; i < count; i++) { IEditorPart editor= dirtyEditors[i]; try{ editor.doSave(new NullProgressMonitor()); }catch(Exception e){ e.printStackTrace(); } } } return state== Window.OK; } private ILabelProvider createDialogLabelProvider() { return new LabelProvider() { public Image getImage(Object element) { return ((IEditorPart) element).getTitleImage(); } public String getText(Object element) { return ((IEditorPart) element).getTitle(); } }; } public IEditorPart[] getDirtyEditors() { Set<IEditorInput> inputs= new HashSet<IEditorInput>(); 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]; IEditorInput input= ep.getEditorInput(); if (inputs.add(input)) { if (isResourceEditorInput(input)) { result.add(ep); } } } } } return (IEditorPart[])result.toArray(new IEditorPart[result.size()]); } private boolean isResourceEditorInput(IEditorInput input) { if (input instanceof MultiEditorInput) { IEditorInput[] inputs= ((MultiEditorInput) input).getInput(); for (int i= 0; i < inputs.length; i++) { if (inputs[i].getAdapter(IResource.class) != null) { return true; } } } else if (input.getAdapter(IResource.class) != null) { return true; } return false; } }