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