/******************************************************************************* | |
* 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.StringFieldEditor; | |
import org.eclipse.swt.SWT; | |
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 StringFieldEditor fTraceExtensionObjectiveStringField; | |
// BASIC TRACE GENERATION | |
private TestGenerationBasicTraceConfigurationProfile fBasicTracePage; | |
// TTCN TRACE GENERATION | |
private TestGenerationTTCNConfigurationProfile fTTCNTracePage; | |
public TestGenerationConfigurationPage(ILaunchConfigurationGUIelement masterGUIelement) { | |
super(masterGUIelement); | |
fBasicTracePage = new TestGenerationBasicTraceConfigurationProfile(this); | |
fTTCNTracePage = new TestGenerationTTCNConfigurationProfile(this); | |
} | |
// ====================================================================================== | |
// Graphical Components Creation Methods | |
// ====================================================================================== | |
protected void createContent(Composite parent, IWidgetToolkit widgetToolkit) | |
{ | |
createExtensionFormatPage(parent, widgetToolkit); | |
fBasicTracePage.createControl(parent, widgetToolkit); | |
fTTCNTracePage.createControl(parent, widgetToolkit); | |
} | |
public void createExtensionFormatPage(Composite parent, IWidgetToolkit widgetToolkit) { | |
Group group = widgetToolkit.createGroup( | |
parent, "Trace Extension Page", | |
1, 1, GridData.FILL_HORIZONTAL); | |
createExtensionSelectionComponent(group, widgetToolkit); | |
} | |
private void createExtensionSelectionComponent(Composite parent, 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(SelectionEvent e) { | |
handleEnablingTraceExtension(); | |
} | |
}); | |
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"); | |
// comp = SWTFactory.createComposite( | |
// groupExtensionObjective, | |
// 1, 1, GridData.FILL_HORIZONTAL); | |
fTraceExtensionObjectiveStringField = new StringFieldEditor( | |
this, ATTR_TRACE_EXTENSION_OBJECTIVE, | |
"Trace Ending with:", comp, | |
DEFAULT_TRACE_EXTENSION_OBJECTIVE, SWT.MULTI); | |
} | |
private void handleEnablingTraceExtension() { | |
propagateVisibility(groupExtensionObjective, | |
fTraceExtensionEnabledBooleanField.getBooleanValue() ); | |
} | |
// ====================================================================================== | |
// Fields Values Management | |
// ====================================================================================== | |
@Override | |
public void setDefaultFieldValues(ILaunchConfigurationWorkingCopy configuration) { | |
// fTraceExtensionEnabledBooleanField.setDefaults(configuration); | |
configuration.setAttribute( | |
ATTR_ENABLED_TRACE_EXTENSION, false); | |
// fTraceExtensionEvaluationStepsLimitIntegerField.setDefaults( | |
// configuration); | |
configuration.setAttribute( | |
ATTR_TRACE_EXTENSION_EVALUATION_STEPS, -1); | |
// fTraceExtensionObjectiveStringField.setDefaults(configuration); | |
configuration.setAttribute( | |
ATTR_TRACE_EXTENSION_OBJECTIVE, | |
DEFAULT_TRACE_EXTENSION_OBJECTIVE); | |
fBasicTracePage.setDefaults(configuration); | |
fTTCNTracePage.setDefaults(configuration); | |
} | |
@Override | |
public void initializeFieldValuesFrom(ILaunchConfiguration configuration) { | |
fTraceExtensionEnabledBooleanField.initializeFrom(configuration); | |
fTraceExtensionEvaluationStepsLimitIntegerField.initializeFrom(configuration); | |
fTraceExtensionObjectiveStringField.initializeFrom(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 applyUpdatesOnFieldValuesFrom(ILaunchConfigurationWorkingCopy configuration) | |
{ | |
fTraceExtensionEnabledBooleanField.performApply(configuration); | |
fTraceExtensionEvaluationStepsLimitIntegerField.performApply(configuration); | |
fTraceExtensionObjectiveStringField.performApply(configuration); | |
fBasicTracePage.performApply(configuration); | |
fTTCNTracePage.performApply(configuration); | |
} | |
// ====================================================================================== | |
// Fields Validation | |
// ====================================================================================== | |
@Override | |
public FieldValidationReturn areFieldsValid(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); | |
} | |
/////////////////////////////////////////////////////////////////////////// | |
// Model Analysis Profile changed | |
// | |
@Override | |
public void handleModelAnalysisProfileSelectionChanged(String analysisProfile) { | |
switch ( analysisProfile ) { | |
case ANALYSIS_PROFILE_MODEL_TEST_OFFLINE: | |
groupTraceExtension.setEnabled(false); | |
propagateVisibility(groupExtensionObjective, false); | |
setVisibleAndEnabled(fBasicTracePage.getSection(), false); | |
setVisibleAndEnabled(fTTCNTracePage.getSection() , false); | |
break; | |
case ANALYSIS_PROFILE_MODEL_COVERAGE_TRANSITION: | |
case ANALYSIS_PROFILE_MODEL_COVERAGE_BEHAVIOR: | |
case ANALYSIS_PROFILE_MODEL_EXPLORATION: | |
default: | |
groupTraceExtension.setEnabled(true); | |
propagateVisibility(groupExtensionObjective, true); | |
setVisibleAndEnabled(fBasicTracePage.getSection(), true); | |
setVisibleAndEnabled(fTTCNTracePage.getSection() , true); | |
handleEnablingTraceExtension();; | |
break; | |
} | |
} | |
} |