/******************************************************************************* * Copyright (c) 2004, 2010 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.properties; import javax.persistence.EntityNotFoundException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jubula.client.core.businessprocess.ProjectNameBP; import org.eclipse.jubula.client.core.model.IProjectPO; 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.ui.rcp.Plugin; import org.eclipse.jubula.client.ui.rcp.i18n.Messages; import org.eclipse.jubula.client.ui.rcp.widgets.CheckedIntText; import org.eclipse.jubula.tools.internal.constants.StringConstants; import org.eclipse.jubula.tools.internal.exception.JBFatalAbortException; import org.eclipse.jubula.tools.internal.exception.ProjectDeletedException; import org.eclipse.jubula.tools.internal.messagehandling.MessageIDs; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.dialogs.PropertyPage; /** * @author BREDEX GmbH * @created 09.11.2005 */ public abstract class AbstractProjectPropertyPage extends PropertyPage { /** * <code>m_editSupport</code> */ private EditSupport m_editSupport = null; /** work version for this session */ private IProjectPO m_workProject = null; /** * @param es the editSupport */ public AbstractProjectPropertyPage(EditSupport es) { m_editSupport = es; } /** * This constructor is needed for the extension point. * * setEditSupport should be called after that. */ public AbstractProjectPropertyPage() { // nothing } /** * @return es The editsupport. * @throws PMException if editSupport cannot */ public static EditSupport createEditSupport() throws PMException { IProjectPO project = GeneralStorage.getInstance().getProject(); EditSupport editSupport = new EditSupport(project.getProjectProperties(), null); editSupport.lockWorkVersion(); ProjectNameBP.getInstance().clearCache(); return editSupport; } /** * @return shared project */ public IProjectPO getProject() { if (m_workProject == null) { try { m_workProject = getEditSupport().getWorkProject(); } catch (PMException e) { throw new JBFatalAbortException( Messages.CantLoadProjectInEditSession, e, MessageIDs.E_DATABASE_GENERAL); } } return m_workProject; } /** * Refreshes the project. */ protected void refreshProject() throws ProjectDeletedException { GeneralStorage storage = GeneralStorage.getInstance(); try { storage.getMasterSession().refresh(storage.getProject()); } catch (EntityNotFoundException enfe) { // Occurs if any Object Mapping information has been deleted while // the Project Properties were being edited. // Refresh the entire master session to ensure that AUT settings // and Object Mappings are in sync storage.reloadMasterSession(new NullProgressMonitor()); } } /** * @return shared edit support */ protected EditSupport getEditSupport() { return m_editSupport; } /** * @param es - the new editsupport */ public void setEditSupport(EditSupport es) { m_editSupport = es; } /** * {@inheritDoc} */ public boolean performCancel() { Plugin.stopLongRunning(); return super.performCancel(); } /** * @param buttonToSyncTo * the button to sync to * @param widgetToEnable * the widget to enable / disable */ protected void enableSelectionAndEnablementDependent(Button buttonToSyncTo, Control widgetToEnable) { if (buttonToSyncTo.isEnabled()) { widgetToEnable.setEnabled(buttonToSyncTo.getSelection()); if (widgetToEnable instanceof CheckedIntText) { if (buttonToSyncTo.getSelection()) { ((CheckedIntText) widgetToEnable).validate(); } else { widgetToEnable.setBackground(null); } } } else { widgetToEnable.setEnabled(false); } } /** * Creates a new composite. * @param parent The parent composite. * @param numColumns the number of columns for this composite. * @param alignment The horizontalAlignment (grabExcess). * @param horizontalSpace The horizontalSpace. * @return The new composite. */ protected Composite createComposite(Composite parent, int numColumns, int alignment, boolean horizontalSpace) { Composite composite = new Composite(parent, SWT.NONE); GridLayout compositeLayout = new GridLayout(); compositeLayout.numColumns = numColumns; compositeLayout.marginHeight = 0; compositeLayout.marginWidth = 0; composite.setLayout(compositeLayout); GridData compositeData = new GridData(); compositeData.horizontalAlignment = alignment; compositeData.grabExcessHorizontalSpace = horizontalSpace; composite.setLayoutData(compositeData); return composite; } /** * @param parent the parent composite */ protected void createEmptyLabel(Composite parent) { createLabel(parent, StringConstants.EMPTY); } /** * Creates a label for this page. * @param text The label text to set. * @param parent The composite. * @return a new label */ protected Label createLabel(Composite parent, String text) { Label label = new Label(parent, SWT.NONE); label.setText(text); GridData labelGrid = new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 1, 1); label.setLayoutData(labelGrid); return label; } /** * Creates a separator line. * @param composite The parent composite. * @param horSpan The horizontal span. */ protected void separator(Composite composite, int horSpan) { createLabel(composite, StringConstants.EMPTY); Label sep = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); GridData sepData = new GridData(); sepData.horizontalAlignment = GridData.FILL; sepData.horizontalSpan = horSpan; sep.setLayoutData(sepData); createLabel(composite, StringConstants.EMPTY); } }