org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.WarningAndLinkDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.papyrus.uml.diagram.activity.edit.dialogs.WarningAndLinkDialog.java

Source

/*****************************************************************************
 * Copyright (c) 2010 Atos Origin.
 *
 *    
 * 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:
 *   Atos Origin - Initial API and implementation
 *
 *****************************************************************************/
package org.eclipse.papyrus.uml.diagram.activity.edit.dialogs;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
import org.eclipse.papyrus.infra.core.utils.EditorUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Hyperlink;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.uml2.uml.NamedElement;

/**
 * This dialog provide a message and a link to navigate to a model element.
 */
public class WarningAndLinkDialog extends MessageDialog {

    /** The element to link */
    private NamedElement element;

    /** The label of the link */
    private String label;

    /** Whether the dialog closes on navigation */
    private boolean allowNavigation;

    /**
     * Construct a new dialog to open a warning message and a link to an element.
     * 
     * @param parentShell
     *        the parent shell
     * @param dialogTitle
     *        the title
     * @param dialogMessage
     *        the message
     * @param linkElement
     *        the element link redirects to
     * @param linkLabel
     *        the label of the link
     */
    public WarningAndLinkDialog(Shell parentShell, String dialogTitle, String dialogMessage,
            NamedElement linkElement, String linkLabel) {
        super(parentShell, dialogTitle, null, dialogMessage, WARNING, new String[] { IDialogConstants.OK_LABEL },
                0);
        element = linkElement;
        label = linkLabel;
        allowNavigation = true;
    }

    /**
     * Construct a new dialog to open a warning message and a link to an element.
     * 
     * @param parentShell
     *        the parent shell
     * @param dialogTitle
     *        the dialog title, or <code>null</code> if none
     * @param dialogTitleImage
     *        the dialog title image, or <code>null</code> if none
     * @param dialogMessage
     *        the dialog message
     * @param dialogImageType
     *        one of the following values:
     *        <ul>
     *        <li><code>MessageDialog.NONE</code> for a dialog with no image</li>
     *        <li><code>MessageDialog.ERROR</code> for a dialog with an error image</li>
     *        <li><code>MessageDialog.INFORMATION</code> for a dialog with an information image</li>
     *        <li><code>MessageDialog.QUESTION </code> for a dialog with a question image</li>
     *        <li><code>MessageDialog.WARNING</code> for a dialog with a warning image</li>
     *        </ul>
     * @param dialogButtonLabels
     *        an array of labels for the buttons in the button bar
     * @param defaultIndex
     *        the index in the button label array of the default button
     * @param linkElement
     *        the element link redirects to
     * @param linkLabel
     *        the label of the link
     */
    protected WarningAndLinkDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage,
            String dialogMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex,
            NamedElement linkElement, String linkLabel, boolean closeAfterNavigation) {
        super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels,
                defaultIndex);
        element = linkElement;
        label = linkLabel;
        allowNavigation = closeAfterNavigation;
    }

    /**
     * Create the link to the element
     * 
     * @see org.eclipse.jface.dialogs.MessageDialog#createCustomArea(org.eclipse.swt.widgets.Composite)
     * 
     * @param parent
     *        the parent composite
     * @return the hyperlink control
     */
    @Override
    protected Control createCustomArea(Composite parent) {
        FormToolkit toolkit = new FormToolkit(parent.getDisplay());
        Hyperlink hyperLink = toolkit.createHyperlink(parent, label, SWT.UNDERLINE_LINK);
        hyperLink.setBackground(parent.getBackground());
        hyperLink.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false));
        if (allowNavigation) {
            hyperLink.addHyperlinkListener(new HyperlinkAdapter() {

                @Override
                public void linkActivated(HyperlinkEvent e) {
                    navigateToElement();
                    okPressed();
                }

            });
        }
        return hyperLink;
    }

    /**
     * Navigate to the linked element. Open it in model editor and print its properties.
     */
    protected void navigateToElement() {
        IMultiDiagramEditor editor = EditorUtils.getMultiDiagramEditor();
        IViewReference[] views = editor.getSite().getPage().getViewReferences();
        for (IViewReference view : views) {
            IWorkbenchPart part = view.getPart(false);
            if (part instanceof CommonNavigator) {
                CommonNavigator navigator = (CommonNavigator) part;
                // set focus to navigator, otherwise, diagram view will reset the selection
                navigator.setFocus();
                navigator.selectReveal(new StructuredSelection(element));
            }
        }
    }
}