blob: 6cc21192a29f27dba5389694a4b186b10c84343c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 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:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and Implementation
*******************************************************************************/
package org.eclipse.efm.execution.configuration.common.ui.page.overview;
import org.eclipse.core.runtime.CoreException;
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.AbstractConfigurationProfile;
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.page.supervisor.SupervisorEvaluationLimitsSection;
//import org.eclipse.efm.execution.configuration.common.ui.page.supervisor.SupervisorGraphSizeLimitsSection;
import org.eclipse.efm.execution.core.workflow.common.GraphExplorationStrategyKind;
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.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
public class OverviewExplorationConfigurationProfile extends AbstractConfigurationProfile {
private Group groupAnalyzeStrategy;
private Button fBFSButton = null;
private Button fDFSButton = null;
private Button fRFSButton = null;
private GraphExplorationStrategyKind fAnalyzeStrategy =
GraphExplorationStrategyKind.BREADTH_FIRST_SEARCH;
// private SupervisorGraphSizeLimitsSection fGraphSizeLimitsSection;
//
// private SupervisorEvaluationLimitsSection fEvaluationLimitsSection;
private Group fGroupInclusionCriterion;
private BooleanFieldEditor fApplyInclusionBooleanField;
private Composite fLoopDetectionTrivialComposite;
/**
* Constructor
* @param parentTab
*/
public OverviewExplorationConfigurationProfile(AbstractConfigurationPage configurationPage) {
super(configurationPage);
// fGraphSizeLimitsSection = new SupervisorGraphSizeLimitsSection(configurationPage);
//
// fEvaluationLimitsSection = new SupervisorEvaluationLimitsSection(configurationPage);
}
@Override
public String getSectionTitle() {
return "Model Exploration";
}
@Override
public String getSectionDescription() {
return "Choose an exploration strategy and "
+ "set a limitation in Supervisor Tab";
}
private final class TabListener extends SelectionAdapter {
@Override
public void widgetSelected(SelectionEvent e) {
Object source = e.getSource();
// Use case Analysis
if (source == fBFSButton) {
handleBFSButtonSelected();
}
else if (source == fDFSButton) {
handleDFSButtonSelected();
}
else if (source == fRFSButton) {
handleRFSButtonSelected();
}
}
}
private TabListener fListener= new TabListener();
// ======================================================================================
// Buttons handling
// ======================================================================================
public void handleBFSButtonSelected() {
if( fBFSButton.getSelection() ) {
fAnalyzeStrategy = GraphExplorationStrategyKind.BREADTH_FIRST_SEARCH;
}
fConfigurationPage.propagateGUIupdate();
}
public void handleDFSButtonSelected() {
if( fDFSButton.getSelection() ) {
fAnalyzeStrategy = GraphExplorationStrategyKind.DEPTH_FIRST_SEARCH;
}
fConfigurationPage.propagateGUIupdate();
}
public void handleRFSButtonSelected() {
if( fRFSButton.getSelection() ) {
fAnalyzeStrategy = GraphExplorationStrategyKind.RANDOM_FIRST_SEARCH;
}
fConfigurationPage.propagateGUIupdate();
}
@Override
protected void createContent(Composite parent, IWidgetToolkit widgetToolkit)
{
createAnalyzeStrategy(parent, widgetToolkit);
createControlInclusionCriterion(parent, widgetToolkit);
// fGraphSizeLimitsSection.createControl(parent, widgetToolkit);
//
// fEvaluationLimitsSection.createControl(parent, widgetToolkit);
}
private void createControlInclusionCriterion(
Composite parent, IWidgetToolkit widgetToolkit)
{
fGroupInclusionCriterion = widgetToolkit.createGroup(parent,
"Inclusion Criterion", 1, 2, GridData.FILL_HORIZONTAL);
Composite comp = widgetToolkit.createComposite(
fGroupInclusionCriterion, 2, 1, GridData.FILL_HORIZONTAL);
fApplyInclusionBooleanField =
new BooleanFieldEditor(this.fConfigurationPage,
ATTR_ENABLED_REDUNDANCY_INCLUSION_CRITERION,
"&Apply Inclusion", comp, false);
addField(fApplyInclusionBooleanField);
fLoopDetectionTrivialComposite = widgetToolkit.createComposite(
fGroupInclusionCriterion, 2, 1, GridData.FILL_HORIZONTAL);
BooleanFieldEditor loopDetectionTrivialBooleanField =
new BooleanFieldEditor(this.fConfigurationPage,
ATTR_ENABLED_REDUNDANCY_LOOP_DETECTION_TRIVIAL,
"&Loop Detection Trivial",
fLoopDetectionTrivialComposite, false);
addField(loopDetectionTrivialBooleanField);
fApplyInclusionBooleanField.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
handleEnablingRedundancyDetection();
}
});
}
private void handleEnablingRedundancyDetection() {
fConfigurationPage.setVisibleAndEnabled(fLoopDetectionTrivialComposite,
! fApplyInclusionBooleanField.getBooleanValue());
}
protected void createAnalyzeStrategy(Composite parent, IWidgetToolkit widgetToolkit) {
groupAnalyzeStrategy = widgetToolkit.createGroup(
parent, "&Analyze Strategy", 3, 1, GridData.FILL_HORIZONTAL);
fBFSButton = widgetToolkit.createRadioButton(groupAnalyzeStrategy, "&BFS");
fBFSButton.addSelectionListener(fListener);
fBFSButton.setToolTipText("Breadth First Search");
fDFSButton = widgetToolkit.createRadioButton(groupAnalyzeStrategy, "&DFS");
fDFSButton.addSelectionListener(fListener);
fDFSButton.setToolTipText("Depth First Search");
fRFSButton = widgetToolkit.createRadioButton(groupAnalyzeStrategy, "&RFS");
fRFSButton.addSelectionListener(fListener);
fRFSButton.setToolTipText("Random First Search");
}
@Override
protected void setDefaultsImpl(ILaunchConfigurationWorkingCopy configuration)
{
configuration.setAttribute(ATTR_SPECIFICATION_ANALYZE_STRATEGY,
GraphExplorationStrategyKind.BREADTH_FIRST_SEARCH.getLiteral());
configuration.setAttribute(ATTR_ENABLED_REDUNDANCY_INCLUSION_CRITERION, false);
configuration.setAttribute(ATTR_ENABLED_REDUNDANCY_LOOP_DETECTION_TRIVIAL, true);
// fGraphSizeLimitsSection.setDefaults(configuration);
//
// fEvaluationLimitsSection.setDefaults(configuration);
}
@Override
protected void initializeFromImpl(ILaunchConfiguration configuration)
{
// Case Analyze Strategy
//
GraphExplorationStrategyKind oldAnalyzeStrategy = fAnalyzeStrategy;
try {
fAnalyzeStrategy = GraphExplorationStrategyKind.get(
configuration.getAttribute(ATTR_SPECIFICATION_ANALYZE_STRATEGY,
GraphExplorationStrategyKind.BREADTH_FIRST_SEARCH.getLiteral()) );
} catch (CoreException e) {
e.printStackTrace();
}
finally {
if( fAnalyzeStrategy == null ) {
fAnalyzeStrategy = (oldAnalyzeStrategy != null) ? oldAnalyzeStrategy :
GraphExplorationStrategyKind.BREADTH_FIRST_SEARCH;
}
}
// fGraphSizeLimitsSection.initializeFrom(configuration);
//
// fEvaluationLimitsSection.initializeFrom(configuration);
initializeAnalyzeStrategy();
handleEnablingRedundancyDetection();
}
private void initializeAnalyzeStrategy() {
fBFSButton.setSelection(false);
fDFSButton.setSelection(false);
fRFSButton.setSelection(false);
switch( fAnalyzeStrategy ) {
case BREADTH_FIRST_SEARCH:
fBFSButton.setSelection(true);
break;
case DEPTH_FIRST_SEARCH:
fDFSButton.setSelection(true);
break;
case RANDOM_FIRST_SEARCH:
fRFSButton.setSelection(true);
break;
default:
fBFSButton.setSelection(true);
fAnalyzeStrategy =
GraphExplorationStrategyKind.BREADTH_FIRST_SEARCH;
break;
}
}
@Override
protected void performApplyImpl(ILaunchConfigurationWorkingCopy configuration)
{
configuration.setAttribute(
ATTR_SPECIFICATION_ANALYZE_STRATEGY,
fAnalyzeStrategy.getLiteral());
// fGraphSizeLimitsSection.performApply(configuration);
//
// fEvaluationLimitsSection.performApply(configuration);
}
@Override
protected boolean isValidImpl(ILaunchConfiguration launchConfig) {
return true;
}
///////////////////////////////////////////////////////////////////////////
// Property Change
//
@Override
public void handleConfigurationPropertyChange(PropertyChangeEvent event) {
switch( event.getProperty() ) {
case ATTR_SPECIFICATION_MODEL_ANALYSIS_PROFILE:
switch( event.getNewValue().toString() ) {
case ANALYSIS_PROFILE_MODEL_COVERAGE_BEHAVIOR:
case ANALYSIS_PROFILE_MODEL_COVERAGE_TRANSITION:
case ANALYSIS_PROFILE_MODEL_TEST_OFFLINE: {
fDFSButton.setSelection(false);
fRFSButton.setSelection(false);
fBFSButton.setSelection(true); // BREADTH_FIRST_SEARCH
break;
}
case ANALYSIS_PROFILE_MODEL_EXPLORATION:
default:
break;
}
break;
default:
break;
}
}
}