/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.outputwriter.gui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
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.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import de.rcenvironment.components.outputwriter.common.OutputWriterComponentConstants;
import de.rcenvironment.core.component.workflow.model.spi.ComponentInstanceProperties;
import de.rcenvironment.core.datamodel.api.EndpointType;
import de.rcenvironment.core.gui.resources.api.ImageManager;
import de.rcenvironment.core.gui.resources.api.StandardImages;
import de.rcenvironment.core.gui.workflow.editor.properties.DefaultEndpointPropertySection;
/**
* Creates a "Properties" view tab for configuring endpoints (only inputs).
*
* @author Hendrik Abbenhaus
* @author Sascha Zur
* @author Brigitte Boden
*
*/
public class OutputWriterPropertiesSection extends DefaultEndpointPropertySection {
private Button workflowStartCheckbox;
private Text rootText;
private Button rootButton;
private Composite noteComposite;
private OutputLocationPane outputLocationPane;
public OutputWriterPropertiesSection() {
OutputWriterEndpointSelectionPane outputPane =
new OutputWriterEndpointSelectionPane(Messages.inputs, EndpointType.INPUT, "default", this);
setColumns(1);
setPanes(outputPane);
outputLocationPane = new OutputLocationPane(this);
outputPane.setOutputLocationPane(outputLocationPane);
}
@Override
public void refreshSection() {
super.refreshSection();
final ComponentInstanceProperties configuration = getConfiguration();
outputLocationPane.setConfiguration(configuration);
outputLocationPane.refresh();
}
@Override
public void createCompositeContent(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
parent.setLayout(new FillLayout(SWT.VERTICAL | SWT.V_SCROLL));
super.createCompositeContent(parent, aTabbedPropertySheetPage);
GridData layoutData;
TabbedPropertySheetWidgetFactory toolkit = aTabbedPropertySheetPage.getWidgetFactory();
Composite content = new LayoutComposite(parent);
Composite outputComposite = toolkit.createFlatFormComposite(content);
outputComposite.setLayout(new GridLayout(1, true));
outputLocationPane.createControl(outputComposite, Messages.outputLocationPaneTitle, toolkit);
layoutData = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
outputLocationPane.getControl().setLayoutData(layoutData);
Composite root = new LayoutComposite(parent);
Composite rootComposite = toolkit.createFlatFormComposite(root);
rootComposite.setLayout(new GridLayout(1, true));
createRootSection(rootComposite, toolkit);
rootComposite.layout();
outputComposite.layout();
}
private Composite createRootSection(final Composite parent, FormToolkit toolkit) {
final Section sectionProperties = toolkit.createSection(parent, Section.TITLE_BAR | Section.EXPANDED);
sectionProperties.setText(Messages.rootFolderSectionTitle);
GridData layoutData = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
sectionProperties.setLayoutData(layoutData);
Composite rootgroup = toolkit.createComposite(sectionProperties);
rootgroup.setLayout(new GridLayout(2, false));
workflowStartCheckbox = new Button(rootgroup, SWT.CHECK);
workflowStartCheckbox.setText(Messages.selectAtStart);
workflowStartCheckbox.setLayoutData(new GridData(SWT.LEFT,
SWT.TOP, true, false, 2, 1));
workflowStartCheckbox.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent arg0) {
setEnabilityRoot(!workflowStartCheckbox.getSelection());
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
widgetSelected(arg0);
}
});
workflowStartCheckbox.setData(CONTROL_PROPERTY_KEY, OutputWriterComponentConstants.CONFIG_KEY_ONWFSTART);
rootText = new Text(rootgroup, SWT.BORDER);
GridData gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.grabExcessHorizontalSpace = true;
rootText.setLayoutData(gridData);
rootText.setEditable(true);
rootText.setData(CONTROL_PROPERTY_KEY, OutputWriterComponentConstants.CONFIG_KEY_ROOT);
rootButton = new Button(rootgroup, SWT.NONE);
rootButton.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false,
false, 1, 1));
rootButton.setText("...");
rootButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent arg0) {
DirectoryDialog dialog = new DirectoryDialog(parent.getShell());
dialog.setText(Messages.selectRootFolder);
dialog.setMessage(Messages.selectRootFolder);
String result = dialog.open();
if (result != null) {
rootText.setText(result);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
widgetSelected(arg0);
}
});
noteComposite = new Composite(rootgroup, SWT.NONE);
gridData = new GridData();
gridData.horizontalSpan = 2;
noteComposite.setLayoutData(gridData);
noteComposite.setLayout(new GridLayout(2, false));
Label warnLabel = new Label(noteComposite, SWT.READ_ONLY);
warnLabel.setImage(ImageManager.getInstance().getSharedImage(StandardImages.WARNING_16));
Label noteLabel = new Label(noteComposite, SWT.READ_ONLY);
warnLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
noteLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
noteLabel.setText(Messages.note);
sectionProperties.setClient(rootgroup);
sectionProperties.setVisible(true);
return rootgroup;
}
@Override
public void aboutToBeShown() {
super.aboutToBeShown();
setEnabilityRoot(!workflowStartCheckbox.getSelection());
}
private void setEnabilityRoot(boolean enabled) {
noteComposite.setVisible(enabled);
rootText.setEnabled(enabled);
rootButton.setEnabled(enabled);
}
}