Java tutorial
/******************************************************************************* * Copyright (c) 2001, 2005 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 API and implementation *******************************************************************************/ package org.eclipse.wst.common.frameworks.internal.ui; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.wst.common.frameworks.internal.ISaveHandler; import org.eclipse.wst.common.frameworks.internal.SaveFailedException; import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin; public class SaveHandlerUI implements ISaveHandler { public static final String SAVE_FAILED = WTPCommonPlugin.getResourceString("16"); //$NON-NLS-1$ public static final String BEGINNING_MESSAGE = WTPCommonPlugin.getResourceString("17"); //$NON-NLS-1$ protected boolean isYesToAll = false; protected int referenceCount = 0; /** * SaveHandlerUI constructor comment. */ public SaveHandlerUI() { super(); } /** * access method comment. */ public void access() { referenceCount++; } protected Shell getParentShellForDialog() { if (Display.getCurrent() != null) return Display.getCurrent().getActiveShell(); return null; } protected Display getDisplay() { Display result = Display.getCurrent(); return result == null ? Display.getDefault() : result; } public void handleSaveFailed(SaveFailedException ex, IProgressMonitor monitor) { if (referenceCount > 1) //Let the outermost reference handle it throw ex; String exMsg = ex.getInnerMostNestedException() == null ? ex.getMessage() : ex.getInnerMostNestedException().getMessage(); final String message = BEGINNING_MESSAGE + ":\n" + exMsg;//$NON-NLS-1$ getDisplay().syncExec(new Runnable() { public void run() { MessageDialog.openError(getParentShellForDialog(), SAVE_FAILED, message); } }); if (monitor != null) monitor.setCanceled(true); else throw ex; } protected boolean promptUserToSaveReadOnly(IFile aFile) { String[] buttonStrings = { WTPCommonPlugin.getResourceString("Yes_UI_"), //$NON-NLS-1$ WTPCommonPlugin.getResourceString("Yes_To_All_UI_"), WTPCommonPlugin.getResourceString("No_UI_") }; //$NON-NLS-2$ = "No" //$NON-NLS-1$ = "Yes To All" = "Yes" String title = WTPCommonPlugin.getResourceString("Saving_Read-Only_File_UI_"); //$NON-NLS-1$ = "Saving Read-Only File" String message = WTPCommonPlugin.getResourceString("2concat_INFO_", (new Object[] { aFile.getFullPath() })); //$NON-NLS-1$ = "The file {0} is read-only and cannot be saved. Would you like to make it editable and save anyway?" final MessageDialog dialog = new MessageDialog(getParentShellForDialog(), title, null, // accept // the // default // window // icon message, MessageDialog.QUESTION, buttonStrings, 0); // Yes is the default final int[] ret = new int[1]; getDisplay().syncExec(new Runnable() { public void run() { dialog.setBlockOnOpen(true); ret[0] = dialog.open(); } }); switch (ret[0]) { case 0: { return true; } case 1: { isYesToAll = true; return true; } case 2: { return false; } } return false; } /** * release method comment. */ public void release() { referenceCount--; if (referenceCount == 0) isYesToAll = false; } /** * shouldContinueAndMakeFileEditable method comment. */ public boolean shouldContinueAndMakeFileEditable(IFile aFile) { boolean yes = isYesToAll || promptUserToSaveReadOnly(aFile); if (yes) aFile.getResourceAttributes().setReadOnly(false); return yes; } }