org.eclipse.wst.common.frameworks.internal.ui.SaveHandlerUI.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.wst.common.frameworks.internal.ui.SaveHandlerUI.java

Source

/*******************************************************************************
 * 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;
    }
}