org.eclipse.jubula.client.ui.rcp.handlers.project.ProjectPropertyDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jubula.client.ui.rcp.handlers.project.ProjectPropertyDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2016 BREDEX GmbH.
 * 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:
 *     BREDEX GmbH - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.handlers.project;

import org.eclipse.jface.preference.IPreferenceNode;
import org.eclipse.jface.preference.IPreferencePage;
import org.eclipse.jface.preference.PreferenceManager;
import org.eclipse.jface.preference.PreferenceNode;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jubula.client.core.persistence.EditSupport;
import org.eclipse.jubula.client.core.persistence.GeneralStorage;
import org.eclipse.jubula.client.core.persistence.PMException;
import org.eclipse.jubula.client.core.persistence.PMObjectDeletedException;
import org.eclipse.jubula.client.ui.constants.Constants;
import org.eclipse.jubula.client.ui.rcp.controllers.PMExceptionHandler;
import org.eclipse.jubula.client.ui.rcp.dialogs.JBPropertyDialog;
import org.eclipse.jubula.client.ui.rcp.extensions.ProjectPropertyExtensionHandler;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.rcp.properties.AUTPropertyPage;
import org.eclipse.jubula.client.ui.rcp.properties.AbstractProjectPropertyPage;
import org.eclipse.jubula.client.ui.rcp.properties.ProjectALMPropertyPage;
import org.eclipse.jubula.client.ui.rcp.properties.ProjectGeneralPropertyPage;
import org.eclipse.jubula.client.ui.rcp.properties.ProjectUsedPropertyPage;
import org.eclipse.jubula.client.ui.rcp.properties.ProjectGeneralPropertyPage.IOkListener;
import org.eclipse.jubula.client.ui.utils.DialogUtils;
import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil;
import org.eclipse.jubula.client.ui.utils.DialogUtils.SizeType;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.PropertyPage;

/**
 * @author BREDEX GmbH
 * @created 01.07.2016
 */
public class ProjectPropertyDialog {

    /** Default constructor is not needed */
    private ProjectPropertyDialog() {
        // Default constructor is not needed
    }

    /**
     * @param shell 
     * @param sectionToOpen 
     * @param innerSectionToOpen 
     */
    public static final void showPropertyDialog(Shell shell, String sectionToOpen, String innerSectionToOpen) {
        PreferenceManager mgr = new PreferenceManager();
        ISelection sel = new StructuredSelection(GeneralStorage.getInstance().getProject());
        // add the 1st property page
        try {
            final EditSupport es = AbstractProjectPropertyPage.createEditSupport();
            ProjectGeneralPropertyPage generalPage = createPages(es, mgr);

            // Adds project property pages from extensions
            for (AbstractProjectPropertyPage pg : ProjectPropertyExtensionHandler.createPages(es, mgr)) {
                if (pg instanceof IOkListener) {
                    generalPage.addOkListener((IOkListener) pg);
                }
            }

            JBPropertyDialog dialog = new JBPropertyDialog(shell, mgr, sel);
            dialog.create();
            if (sectionToOpen != null) {
                dialog.setCurrentPageId(sectionToOpen);
                IPreferencePage page = dialog.getCurrentPage();
                if (page instanceof PreferencePage) {
                    ((PreferencePage) page).applyData(innerSectionToOpen);
                }
            }
            DialogUtils.setWidgetNameForModalDialog(dialog);
            //sets the title
            Shell s = dialog.getShell();
            s.setText(Messages.ProjectPropertyPageShellTitle + generalPage.getProject().getName());
            DialogUtils.adjustShellSizeRelativeToClientSize(s, .8f, .9f, SizeType.SIZE);
            dialog.open();
            es.close();
        } catch (PMObjectDeletedException e) {
            // this implies that the project was deleted since the properties
            // are always available
            PMExceptionHandler.handleProjectDeletedException();
        } catch (PMException e) {
            ErrorHandlingUtil.createMessageDialog(e, null, null);
        }
    }

    /**
     * Creates the project property pages.
     * 
     * @param es The edit support.
     * @param mgr The preference manager.
     * @return the created general property page.
     */
    private static final ProjectGeneralPropertyPage createPages(EditSupport es, PreferenceManager mgr) {

        ProjectGeneralPropertyPage generalPage = new ProjectGeneralPropertyPage(es);
        generalPage.setTitle(Messages.PropertiesActionPage1);
        IPreferenceNode generalNode = new PreferenceNode(Constants.PROJECT_PROPERTY_ID, generalPage);
        mgr.addToRoot(generalNode);

        PropertyPage autPage = new AUTPropertyPage(es);
        autPage.setTitle(Messages.PropertiesActionPage3);
        IPreferenceNode autNode = new PreferenceNode(Constants.AUT_PROPERTY_ID, autPage);
        mgr.addToRoot(autNode);

        ProjectUsedPropertyPage usedPage = new ProjectUsedPropertyPage(es);
        usedPage.setTitle(Messages.PropertiesActionPage4);
        IPreferenceNode usedNode = new PreferenceNode(Constants.REUSED_PROJECT_PROPERTY_ID, usedPage);
        mgr.addToRoot(usedNode);

        ProjectALMPropertyPage almPage = new ProjectALMPropertyPage(es);
        almPage.setTitle(Messages.PropertiesActionPage5);
        IPreferenceNode almNode = new PreferenceNode(Constants.ALM_PROJECT_PROPERTY_ID, almPage);
        mgr.addToRoot(almNode);

        generalPage.addOkListener(usedPage);
        generalPage.addOkListener(almPage);

        return generalPage;
    }
}