blob: 72263f5cd58fd94c17a28e0e4459f03c745e9eaa [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 CEA LIST.
*
* 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:
* Alain Faivre (CEA LIST) alain.faivre@cea.fr - Initial Implementation (tab-based, inserted in Run Configurations dialog)
* Erwan Mahe (CEA LIST) erwan.mahe@cea.fr - New API (free-composite-based, no type assumptions on parent)
*******************************************************************************/
package org.eclipse.efm.execution.configuration.common.ui.page.testgen;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.efm.execution.configuration.common.ui.api.AbstractConfigurationPage;
import org.eclipse.efm.execution.configuration.common.ui.api.ILaunchConfigurationGUIelement;
import org.eclipse.efm.execution.configuration.common.ui.api.IWidgetToolkit;
import org.eclipse.efm.execution.configuration.common.ui.editors.BooleanFieldEditor;
import org.eclipse.efm.execution.configuration.common.ui.editors.IntegerFieldEditor;
import org.eclipse.efm.execution.configuration.common.ui.editors.table.TraceElementTableConfigProvider;
import org.eclipse.efm.execution.configuration.common.ui.editors.table.TraceElementTableViewer;
import org.eclipse.efm.execution.core.workflow.common.AnalysisProfileKind;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
public class TestGenerationConfigurationPage extends AbstractConfigurationPage {
private Group groupTraceExtension;
private Group groupExtensionObjective;
private BooleanFieldEditor fTraceExtensionEnabledBooleanField;
private IntegerFieldEditor fTraceExtensionEvaluationStepsLimitIntegerField;
private TraceElementTableViewer fExtensionObjectiveTraceElementTableViewer;
// BASIC TRACE GENERATION
private final TestGenerationBasicTraceConfigurationProfile fBasicTracePage;
// TTCN TRACE GENERATION
private final TestGenerationTTCNConfigurationProfile fTTCNTracePage;
public TestGenerationConfigurationPage(final ILaunchConfigurationGUIelement masterGUIelement) {
super(masterGUIelement);
fBasicTracePage = new TestGenerationBasicTraceConfigurationProfile(this);
fTTCNTracePage = new TestGenerationTTCNConfigurationProfile(this);
}
// ======================================================================================
// Graphical Components Creation Methods
// ======================================================================================
@Override
protected void createContent(final Composite parent, final IWidgetToolkit widgetToolkit)
{
createExtensionFormatPage(parent, widgetToolkit);
fBasicTracePage.createControl(parent, widgetToolkit);
fTTCNTracePage.createControl(parent, widgetToolkit);
}
@Override
public String getSectionTitle() {
return "Test Generation";
}
@Override
public String getSectionDescription() {
return "Test Generation";
}
public void createExtensionFormatPage(final Composite parent, final IWidgetToolkit widgetToolkit) {
final Group group = widgetToolkit.createGroup(
parent, "Trace Extension Page",
1, 1, GridData.FILL_HORIZONTAL);
createExtensionSelectionComponent(group, widgetToolkit);
}
private void createExtensionSelectionComponent(final Composite parent, final IWidgetToolkit widgetToolkit) {
groupTraceExtension = widgetToolkit.createGroup(parent,
"Trace Extension for Test Generation Purpose",
1, 1, GridData.FILL_HORIZONTAL);
Composite comp = widgetToolkit.createComposite(
groupTraceExtension, 1, 1, GridData.FILL_HORIZONTAL);
fTraceExtensionEnabledBooleanField = new BooleanFieldEditor(
this, ATTR_ENABLED_TRACE_EXTENSION,
"&Enabled Extension", comp, false);
fTraceExtensionEnabledBooleanField.addSelectionListener(
new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
handleEnablingTraceExtension();
propertyChange( new PropertyChangeEvent(this, ATTR_ENABLED_TRACE_EXTENSION,
Boolean.valueOf(fTraceExtensionEnabledBooleanField.getBooleanValue()),
Boolean.valueOf(fTraceExtensionEnabledBooleanField.getBooleanValue()) ));
}
});
addFieldEditor(fTraceExtensionEnabledBooleanField);
groupExtensionObjective = widgetToolkit.createGroup(
groupTraceExtension, "Extension of Traces to reach Observables",
1, 1, GridData.FILL_HORIZONTAL);
comp = widgetToolkit.createComposite(
groupExtensionObjective,
1, 1, GridData.FILL_HORIZONTAL);
fTraceExtensionEvaluationStepsLimitIntegerField =
new IntegerFieldEditor(this,
ATTR_TRACE_EXTENSION_EVALUATION_STEPS,
"&Evaluation Steps : ", comp, -1);
fTraceExtensionEvaluationStepsLimitIntegerField.setToolTipText(
"Maximal evaluation steps (-1 <=> no-limit) " +
"during the extension of symbolic execution");
addFieldEditor(fTraceExtensionEvaluationStepsLimitIntegerField);
fExtensionObjectiveTraceElementTableViewer =
new TraceElementTableViewer(null, groupTraceExtension, 1, widgetToolkit,
TraceElementTableConfigProvider.getTraceExtensionObjective(
parent.getFont()));
addTableViewer(fExtensionObjectiveTraceElementTableViewer);
}
private void handleEnablingTraceExtension() {
final boolean visible = fTraceExtensionEnabledBooleanField.getBooleanValue();
propagateVisibility(groupExtensionObjective, visible);
propagateVisibility(
fExtensionObjectiveTraceElementTableViewer.getControl(), visible);
}
// ======================================================================================
// Fields Values Management
// ======================================================================================
@Override
public void setDefaultsImpl(final ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(
ATTR_ENABLED_TRACE_EXTENSION, false);
configuration.setAttribute(
ATTR_TRACE_EXTENSION_EVALUATION_STEPS, -1);
configuration.setAttribute(
ATTR_TRACE_EXTENSION_OBJECTIVE,
DEFAULT_TRACE_EXTENSION_OBJECTIVE);
fBasicTracePage.setDefaults(configuration);
fTTCNTracePage.setDefaults(configuration);
}
@Override
public void initializeFromImpl(final ILaunchConfiguration configuration) {
// String analysisProfile;
// try {
// analysisProfile = configuration.getAttribute(
// ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE, "");
// }
// catch (CoreException e) {
// analysisProfile = "";
//
// e.printStackTrace();
// }
//
// if ( analysisProfile.equals(ANALYSIS_PROFILE_MODEL_TEST_OFFLINE ) ) {
// fTraceExtensionEnabledBooleanField.setEnabled(false);
// }
handleEnablingTraceExtension();
fBasicTracePage.initializeFrom(configuration);
fTTCNTracePage.initializeFrom(configuration);
}
@Override
public void performApplyImpl(final ILaunchConfigurationWorkingCopy configuration)
{
fBasicTracePage.performApply(configuration);
fTTCNTracePage.performApply(configuration);
}
// ======================================================================================
// Fields Validation
// ======================================================================================
@Override
public FieldValidationReturn areFieldsValidImpl(final ILaunchConfiguration launchConfig) {
if( ! fTraceExtensionEvaluationStepsLimitIntegerField.isValid() ) {
return new FieldValidationReturn(false, "Evaluation Steps is not a valid integer");
}
if( ! fBasicTracePage.isValid(launchConfig) ) {
return new FieldValidationReturn(false, null);
}
if( ! fTTCNTracePage.isValid(launchConfig) ) {
return new FieldValidationReturn(false, null);
}
return new FieldValidationReturn(true, null);
}
///////////////////////////////////////////////////////////////////////////
// Property Change
//
@Override
public void handleConfigurationPropertyChange(final PropertyChangeEvent event) {
switch( event.getProperty() ) {
case ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE:
switch ( (AnalysisProfileKind) event.getNewValue() ) {
// case :
// groupTraceExtension.setEnabled(false);
//
// propagateVisibility(groupExtensionObjective, false);
//
// setVisibleAndEnabled(fBasicTracePage.getSection(), false);
// setVisibleAndEnabled(fTTCNTracePage.getSection() , false);
//
// break;
case ANALYSIS_TRANSITION_COVERAGE_PROFILE:
case ANALYSIS_BEHAVIOR_SELECTION_PROFILE:
case ANALYSIS_TEST_OFFLINE_PROFILE:
case ANALYSIS_ACSL_GENERATION_PROFILE:
case ANALYSIS_EXTRANEOUS_PROFILE:
case ANALYSIS_EXPLORATION_PROFILE:
default:
groupTraceExtension.setEnabled(true);
propagateVisibility(groupExtensionObjective, true);
setVisibleAndEnabled(fBasicTracePage.getSection(), true);
setVisibleAndEnabled(fTTCNTracePage.getSection() , true);
handleEnablingTraceExtension();
break;
}
break;
default:
break;
}
}
}