/******************************************************************************* * 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.controllers.propertysources; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.fieldassist.ContentProposalAdapter; import org.eclipse.jface.fieldassist.IContentProposalProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jubula.client.core.businessprocess.IParamNameMapper; import org.eclipse.jubula.client.core.events.DataEventDispatcher; import org.eclipse.jubula.client.core.events.DataEventDispatcher.DataState; import org.eclipse.jubula.client.core.events.DataEventDispatcher.UpdateState; import org.eclipse.jubula.client.core.model.IExecTestCasePO; import org.eclipse.jubula.client.core.model.IParamDescriptionPO; import org.eclipse.jubula.client.core.model.IParamNodePO; import org.eclipse.jubula.client.core.model.IParameterInterfacePO; import org.eclipse.jubula.client.core.model.IProjectPO; import org.eclipse.jubula.client.core.persistence.GeneralStorage; import org.eclipse.jubula.client.ui.rcp.contentassist.TestDataCubeRefContentProposalProvider; import org.eclipse.jubula.client.ui.rcp.controllers.propertydescriptors.ContentAssistedTextPropertyDescriptor; import org.eclipse.jubula.client.ui.rcp.controllers.propertydescriptors.JBPropertyDescriptor; import org.eclipse.jubula.client.ui.rcp.controllers.propertydescriptors.ParamTextPropertyDescriptor; import org.eclipse.jubula.client.ui.rcp.factory.TestDataControlFactory; import org.eclipse.jubula.client.ui.rcp.i18n.Messages; import org.eclipse.jubula.client.ui.rcp.provider.labelprovider.DisabledLabelProvider; import org.eclipse.jubula.client.ui.rcp.provider.labelprovider.ParameterValueLabelProvider; import org.eclipse.jubula.client.ui.rcp.validator.TestDataCubeReferenceValidator; import org.eclipse.jubula.client.ui.rcp.widgets.CheckedText.IValidator; import org.eclipse.jubula.tools.internal.constants.StringConstants; import org.eclipse.jubula.tools.internal.exception.Assert; import org.eclipse.jubula.tools.internal.i18n.I18n; import org.eclipse.jubula.tools.internal.xml.businessmodell.ParamValueSet; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.PropertyDescriptor; import org.eclipse.ui.views.properties.TextPropertyDescriptor; /** * This class is the PropertySource of an ExecTestCase. Its used to display and * edit the properties in the Properties View. * * @author BREDEX GmbH * @created 23.02.2005 */ public class ExecTestCaseGUIPropertySource extends SpecTestCaseGUIPropertySource { /** Constant for the String Specification Name */ public static final String P_SPECNAME_DISPLAY_NAME = Messages.ExecTestCaseGUIPropertySourceSpecificationName; /** Constant for the String Test Case Reference Name */ public static final String P_REFERNCE_DISPLAY_NAME = Messages.ExecTestCaseGUIPropertySourceTestCaseReferenceName; /** cached property descriptor for name */ private IPropertyDescriptor m_namePropDesc = null; /** cached property descriptor for name of referenced Test Case */ private IPropertyDescriptor m_specNamePropDesc = null; /** cached property descriptor for comment */ private IPropertyDescriptor m_commentPropDesc = null; /** cached property descriptor for external data file */ private PropertyDescriptor m_extDataPropDesc = null; /** cached property descriptor for referenced Test Data Cube */ private PropertyDescriptor m_referencedCubePropDesc = null; /** cached property descriptors for parameters */ private List<IPropertyDescriptor> m_paramPropDescList = new ArrayList<IPropertyDescriptor>(); /** * ComboBox for the boolean values that determine if a TestCase is handeled as a JUnit TestSuite by the report generation */ private ComboBoxPropertyDescriptor m_comBoxJUnitTestSuite; /** * */ private boolean m_isTestSuite; /** * Constructor * @param testCase the dependened TestCase. */ public ExecTestCaseGUIPropertySource(IExecTestCasePO testCase) { super(testCase); } /** * * {@inheritDoc} */ protected void initPropDescriptor() { if (!getPropertyDescriptorList().isEmpty()) { clearPropertyDescriptors(); } // TestCase Name if (m_namePropDesc == null) { m_namePropDesc = new TextPropertyDescriptor( new ExecNameController(), P_REFERNCE_DISPLAY_NAME); } addPropertyDescriptor(m_namePropDesc); // Specification Name if (m_specNamePropDesc == null) { JBPropertyDescriptor propDes = new JBPropertyDescriptor( new SpecNameController(), P_SPECNAME_DISPLAY_NAME); propDes.setLabelProvider(new DisabledLabelProvider()); m_specNamePropDesc = propDes; } addPropertyDescriptor(m_specNamePropDesc); // Comment if (m_commentPropDesc == null) { m_commentPropDesc = new TextPropertyDescriptor( new CommentController(), P_ELEMENT_DISPLAY_COMMENT); } addPropertyDescriptor(m_commentPropDesc); // Task ID if (getTaskIdPropDesc() == null) { createJPropertyDescriptor(); } addPropertyDescriptor(getTaskIdPropDesc()); // Data Source addPropertyDescriptor(getDataSourcePropertyDescr( new ExecTestCaseTestDataSourceController(this))); //JUnitTestSuite final JUnitTestSuiteController jsC = new JUnitTestSuiteController(); createJUnitComboBox(jsC); // External data file if (m_extDataPropDesc == null) { m_extDataPropDesc = new TextPropertyDescriptor( new ExternalDataController(this), P_ELEMENT_DISPLAY_DATEFILE); m_extDataPropDesc.setCategory(P_TESTDATA_CAT); } addPropertyDescriptor(m_extDataPropDesc); // Referenced Test Data Cube if (m_referencedCubePropDesc == null) { IProjectPO activeProject = GeneralStorage.getInstance().getProject(); IContentProposalProvider dataCubeRefProposalProvider = null; IValidator dataCubeRefValidator = null; if (activeProject != null) { dataCubeRefProposalProvider = new TestDataCubeRefContentProposalProvider(activeProject, (IParameterInterfacePO)getPoNode()); dataCubeRefValidator = new TestDataCubeReferenceValidator(activeProject); } m_referencedCubePropDesc = new ContentAssistedTextPropertyDescriptor( new ReferenceTestDataController(this), P_ELEMENT_DISPLAY_REFDATA, dataCubeRefProposalProvider, dataCubeRefValidator, ContentProposalAdapter.PROPOSAL_REPLACE); m_referencedCubePropDesc.setCategory(P_TESTDATA_CAT); } addPropertyDescriptor(m_referencedCubePropDesc); // Parameters addPropertyDescriptor(createParamDescriptors()); } /** * Property Descriptor for the Task ID */ private void createJPropertyDescriptor() { JBPropertyDescriptor taskIdPropDesc = new JBPropertyDescriptor(new ReadOnlyTaskIdController(), org.eclipse.jubula.client.ui.i18n. Messages.AbstractGuiNodePropertySourceTaskId); taskIdPropDesc.setLabelProvider(new DisabledLabelProvider()); setTaskIdPropDesc(taskIdPropDesc); } /** * @param jsC instance of {@link JUnitTestSuiteController} */ private void createJUnitComboBox(final JUnitTestSuiteController jsC) { m_comBoxJUnitTestSuite = new ComboBoxPropertyDescriptor(jsC, Messages.ExecTestCaseGUIPropertySourceJUnitTestSuite, jsC.getLabelList()); addPropertyDescriptor(m_comBoxJUnitTestSuite); m_comBoxJUnitTestSuite.setLabelProvider(new LabelProvider() { public String getText(Object element) { if (element instanceof Integer) { if (((Integer) element).intValue() == -1) { return Boolean.toString(false); } return jsC.getLabelList()[((Integer) element)]; } Assert.notReached(Messages.WrongAUT + StringConstants.DOT); return String.valueOf(element); } }); } /** * * @return a List of PropertyDescriptors of parameters. */ protected List<IPropertyDescriptor> createParamDescriptors() { if (m_paramPropDescList.isEmpty()) { PropertyDescriptor propDes; // init Parameters final IParamNodePO paramNodePO = (IParamNodePO)getPoNode(); List <IParamDescriptionPO> paramList = paramNodePO.getParameterList(); IParamNameMapper activeParamNameMapper = getActiveParamNameMapper(); for (IParamDescriptionPO paramDescr : paramList) { ParamValueSet valueSet = ParamTextPropertyDescriptor.getValuesSet( paramNodePO, paramDescr.getUniqueId()); propDes = TestDataControlFactory.createValuePropertyDescriptor( new ParameterValueController(this, paramDescr, activeParamNameMapper), getParameterNameDescr(paramDescr), ParamTextPropertyDescriptor.getValues(valueSet), valueSet != null ? valueSet.isCombinable() : false); propDes.setCategory(P_PARAMETER_CAT); propDes.setLabelProvider( new ParameterValueLabelProvider(INCOMPL_DATA_IMAGE)); m_paramPropDescList.add(propDes); } } return m_paramPropDescList; } /** * @author marcelk * */ protected class JUnitTestSuiteController extends AbstractPropertyController { /** * the dropdownlist that will be displayed */ @SuppressWarnings("nls") private String m_labelList[] = { "false", "true" }; @Override public boolean setProperty(Object value) { if (value instanceof Integer) { Integer integer = (Integer) value; if (integer.intValue() == 0 || integer.intValue() == 1) { boolean isJUnitTestSuite = Boolean. valueOf(m_labelList[integer.intValue()]); getPoNode().setJUnitTestSuite(isJUnitTestSuite); return true; } } return false; } @Override public Object getProperty() { Integer labelIDs = getLabelIDs(); return labelIDs; } /** * @return List of potential */ public String[] getLabelList() { return m_labelList; } /** * @return ID */ Integer getLabelIDs() { Boolean boolJUnitSuite = getPoNode().isJUnitTestSuite(); int autListLength = m_labelList.length; for (int i = 0; i < autListLength; i++) { if (Boolean.parseBoolean(m_labelList[i]) == boolJUnitSuite.booleanValue()) { return Integer.valueOf(i); } } return new Integer(0); } } /** * Class to control the name of the depending SpecTestCasePO. * * @author BREDEX GmbH * @created 23.02.2005 */ protected class SpecNameController extends AbstractPropertyController { /** * {@inheritDoc} */ public boolean setProperty(Object value) { // do nothing, read only return true; } /** * {@inheritDoc} */ public Object getProperty() { IExecTestCasePO exTc = (IExecTestCasePO) getPoNode(); if (exTc.getSpecTestCase() != null) { return exTc.getSpecTestCase().getName(); } return StringConstants.EMPTY; } /** * {@inheritDoc} */ public Image getImage() { return READONLY_IMAGE; } } /** * Class to control the name. * @author BREDEX GmbH * @created 23.02.2005 */ protected class ExecNameController extends ElementNameController { /** * {@inheritDoc} */ public Object getProperty() { if (getPoNode() != null) { IExecTestCasePO exTc = (IExecTestCasePO) getPoNode(); String name = exTc.getRealName(); if (name != null) { return name; } } return StringConstants.EMPTY; } } /** * Class to control the parameter values of the depending ExecTestCase. * @author BREDEX GmbH * @created 20.04.2005 */ public class ParameterValueController extends AbstractParamValueController { /** * The constructor. * @param paramDescr The parameter description. * @param s * AbstractNodePropertySource * @param paramNameMapper the param name mapper */ public ParameterValueController(AbstractNodePropertySource s, IParamDescriptionPO paramDescr, IParamNameMapper paramNameMapper) { super(s, paramDescr, paramNameMapper); } } /** * Class to control the test data source for an exec test case * * @author BREDEX GmbH * @created Aug 30, 2010 */ public class ExecTestCaseTestDataSourceController extends SpecTestCaseTestDataSourceController { /** * <code>DATA_SOURCE_SPEC</code> */ protected static final String DATA_SOURCE_REFERENCED = "TestDataSource.spec"; //$NON-NLS-1$ /** * Constructor * @param s AbstractNodePropertySource */ public ExecTestCaseTestDataSourceController( AbstractNodePropertySource s) { super(s); getDataSource().add(DATA_SOURCE_REFERENCED); } /** * {@inheritDoc} */ public Object getProperty() { getPropertySource().setReadOnly(true); if (getPoNode() instanceof IParamNodePO) { IParamNodePO node = (IParamNodePO)getPoNode(); String dataSource = getDataSource(node); if (dataSource == UNKOWN_DATA_SOURCE && node instanceof IExecTestCasePO) { IExecTestCasePO exec = (IExecTestCasePO)node; getPropertySource().setReadOnly(false); if (exec.getHasReferencedTD()) { return getDataSource().indexOf(DATA_SOURCE_REFERENCED); } return getDataSource().indexOf(DATA_SOURCE_LOCAL); } return getDataSource().indexOf(dataSource); } return getDataSource().indexOf(UNKOWN_DATA_SOURCE); } /** * @return the dataSources human readable */ public String[] getUserChoosableDataSource() { if (getUserChoosableValues().isEmpty()) { getUserChoosableValues().add( I18n.getString(DATA_SOURCE_LOCAL)); getUserChoosableValues().add( I18n.getString(DATA_SOURCE_REFERENCED)); } return getUserChoosableValues().toArray( new String[getUserChoosableValues().size()]); } /** * {@inheritDoc} */ public boolean setProperty(Object value) { if (getPoNode() instanceof IParamNodePO) { IParamNodePO node = (IParamNodePO)getPoNode(); if (node instanceof IExecTestCasePO) { IExecTestCasePO exec = (IExecTestCasePO) node; int index = Integer.valueOf(String.valueOf(value)); if (index >= 0) { final String newDataSource = getUserChoosableValues().get(index); boolean shouldBeLocal = newDataSource == I18n.getString(DATA_SOURCE_LOCAL); boolean isLocal = !exec.getHasReferencedTD(); if (shouldBeLocal == isLocal) { return false; } else if (shouldBeLocal) { exec.resolveTDReference(); } else { exec.setHasReferencedTD(true); } DataEventDispatcher.getInstance() .fireDataChangedListener( node, DataState.StructureModified, UpdateState.onlyInEditor); return true; } } } return false; } } /** * @return the value for determining wether the testcase is viewed as a * testsuite */ public boolean getIsTestSuite() { return m_isTestSuite; } /** * @param isTestSuite boolean value that determines wether a TestCase is to be handeled as a TestSuite */ public void setTestSuite(boolean isTestSuite) { m_isTestSuite = isTestSuite; } /** * @return JUnitComboBox */ public ComboBoxPropertyDescriptor getComBoxJUnitTestSuite() { return m_comBoxJUnitTestSuite; } /** * @param comBoxJUnitTestSuite a combobox */ public void setComBoxJUnitTestSuite( ComboBoxPropertyDescriptor comBoxJUnitTestSuite) { this.m_comBoxJUnitTestSuite = comBoxJUnitTestSuite; } }