/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.integration;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Label;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import de.rcenvironment.core.component.integration.ToolIntegrationConstants;
import de.rcenvironment.core.component.model.configuration.api.ReadOnlyConfiguration;
import de.rcenvironment.core.gui.workflow.editor.properties.ValidatingWorkflowNodePropertySection;
/**
* Section for the temp directory behavior properties.
*
* @author Sascha Zur
*/
public class TempDirectorySection extends ValidatingWorkflowNodePropertySection {
private Button neverDeleteTempDirectoryButton;
private Button onceDeleteTempDirectoryButton;
private Button alwaysDeleteTempDirectoryButton;
private Button onSuccessDeleteTempDirectoryButton;
@Override
protected void createCompositeContent(final Composite parent, final TabbedPropertySheetPage aTabbedPropertySheetPage) {
parent.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
parent.setLayout(new GridLayout(1, true));
final Composite composite = getWidgetFactory().createFlatFormComposite(parent);
composite.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
composite.setLayout(new GridLayout(1, true));
final Section scriptSection = getWidgetFactory().createSection(composite, Section.TITLE_BAR);
scriptSection.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
scriptSection.setText(Messages.tempDirectorySection);
Composite scriptComposite = getWidgetFactory().createFlatFormComposite(scriptSection);
scriptComposite.setLayout(new GridLayout(1, true));
scriptComposite.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
new Label(scriptComposite, SWT.None).setText("Choose the deletion behavior for working directory(ies):");
neverDeleteTempDirectoryButton = new Button(scriptComposite, SWT.RADIO);
neverDeleteTempDirectoryButton.setText("Do not delete working directory(ies)");
neverDeleteTempDirectoryButton.addSelectionListener(new DeleteTempDirectorySelectionListener(
ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_NEVER));
onceDeleteTempDirectoryButton = new Button(scriptComposite, SWT.RADIO);
onceDeleteTempDirectoryButton.setText("Delete working directory(ies) after workflow execution");
onceDeleteTempDirectoryButton.addSelectionListener(new DeleteTempDirectorySelectionListener(
ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ONCE));
alwaysDeleteTempDirectoryButton = new Button(scriptComposite, SWT.RADIO);
alwaysDeleteTempDirectoryButton.setText("Delete working directory(ies) after every run");
alwaysDeleteTempDirectoryButton.addSelectionListener(new DeleteTempDirectorySelectionListener(
ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ALWAYS));
onSuccessDeleteTempDirectoryButton = new Button(scriptComposite, SWT.CHECK);
onSuccessDeleteTempDirectoryButton.setText("Keep working directory(ies) in case of failure");
onSuccessDeleteTempDirectoryButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent arg0) {
setProperty(ToolIntegrationConstants.KEY_KEEP_ON_FAILURE, "" + onSuccessDeleteTempDirectoryButton.getSelection());
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
widgetSelected(arg0);
}
});
scriptSection.setClient(scriptComposite);
}
@Override
public void aboutToBeShown() {
super.aboutToBeShown();
ReadOnlyConfiguration readOnlyconfig = getConfiguration().getConfigurationDescription()
.getComponentConfigurationDefinition().getReadOnlyConfiguration();
boolean deleteNeverActive =
Boolean.parseBoolean(readOnlyconfig.getValue(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_NEVER));
boolean deleteOnceActive =
Boolean.parseBoolean(readOnlyconfig.getValue(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ONCE));
boolean deleteAlwaysActive =
Boolean.parseBoolean(readOnlyconfig.getValue(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ALWAYS));
neverDeleteTempDirectoryButton.setEnabled(deleteNeverActive);
onceDeleteTempDirectoryButton.setEnabled(deleteOnceActive);
alwaysDeleteTempDirectoryButton.setEnabled(deleteAlwaysActive);
onceDeleteTempDirectoryButton.setSelection(false);
alwaysDeleteTempDirectoryButton.setSelection(false);
neverDeleteTempDirectoryButton.setSelection(false);
String chosen = getProperty(ToolIntegrationConstants.CHOSEN_DELETE_TEMP_DIR_BEHAVIOR);
if (chosen != null) {
if (chosen.equals(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ONCE) && deleteOnceActive) {
onceDeleteTempDirectoryButton.setSelection(true);
} else if (chosen.equals(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ALWAYS) && deleteAlwaysActive) {
alwaysDeleteTempDirectoryButton.setSelection(true);
} else if (chosen.equals(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_NEVER) && deleteNeverActive) {
neverDeleteTempDirectoryButton.setSelection(true);
} else {
// The chosen behavior is not active anymore, determine an active option to replace it.
determineDeletionBehaviour(deleteNeverActive, deleteOnceActive, deleteAlwaysActive);
}
} else {
determineDeletionBehaviour(deleteNeverActive, deleteOnceActive, deleteAlwaysActive);
}
onSuccessDeleteTempDirectoryButton.setEnabled(isKeepButtonActive());
onSuccessDeleteTempDirectoryButton.setSelection(isKeepButtonActive()
&& Boolean.parseBoolean(getProperty(ToolIntegrationConstants.KEY_KEEP_ON_FAILURE)));
setProperty(ToolIntegrationConstants.KEY_KEEP_ON_FAILURE, "" + onSuccessDeleteTempDirectoryButton.getSelection());
}
private void determineDeletionBehaviour(boolean deleteNeverActive, boolean deleteOnceActive, boolean deleteAlwaysActive) {
if (deleteOnceActive) {
onceDeleteTempDirectoryButton.setSelection(true);
setProperty(ToolIntegrationConstants.CHOSEN_DELETE_TEMP_DIR_BEHAVIOR,
ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ONCE);
} else if (deleteNeverActive) {
neverDeleteTempDirectoryButton.setSelection(true);
setProperty(ToolIntegrationConstants.CHOSEN_DELETE_TEMP_DIR_BEHAVIOR,
ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_NEVER);
} else if (deleteAlwaysActive) {
setProperty(ToolIntegrationConstants.CHOSEN_DELETE_TEMP_DIR_BEHAVIOR,
ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_ALWAYS);
alwaysDeleteTempDirectoryButton.setSelection(true);
}
}
@Override
public void refreshSection() {
super.refreshSection();
aboutToBeShown();
}
/**
* Listener for the delete temp dir radio buttons.
*
* @author Sascha Zur
*/
private class DeleteTempDirectorySelectionListener implements SelectionListener {
private final String key;
DeleteTempDirectorySelectionListener(String key) {
this.key = key;
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
widgetSelected(arg0);
}
@Override
public void widgetSelected(SelectionEvent arg0) {
setProperty(ToolIntegrationConstants.CHOSEN_DELETE_TEMP_DIR_BEHAVIOR, key);
onSuccessDeleteTempDirectoryButton.setEnabled(isKeepButtonActive());
if (!isKeepButtonActive()) {
onSuccessDeleteTempDirectoryButton.setSelection(false);
setProperty(ToolIntegrationConstants.KEY_KEEP_ON_FAILURE, "" + false);
}
}
}
private boolean isKeepButtonActive() {
ReadOnlyConfiguration readOnlyconfig = getConfiguration().getConfigurationDescription()
.getComponentConfigurationDefinition().getReadOnlyConfiguration();
boolean alwaysActiveAndPermitted =
alwaysDeleteTempDirectoryButton.getSelection()
&& Boolean
.parseBoolean(readOnlyconfig
.getValue(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_KEEP_ON_ERROR_ITERATION));
boolean onceActiveAndPermitted =
onceDeleteTempDirectoryButton.getSelection()
&& Boolean.parseBoolean(readOnlyconfig
.getValue(ToolIntegrationConstants.KEY_TOOL_DELETE_WORKING_DIRECTORIES_KEEP_ON_ERROR_ONCE));
return alwaysActiveAndPermitted || onceActiveAndPermitted;
}
}