/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.excel.gui.properties; import java.io.File; import java.util.Map; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Widget; import de.rcenvironment.components.excel.common.ExcelAddress; import de.rcenvironment.components.excel.common.ExcelComponentConstants; import de.rcenvironment.components.excel.common.ExcelException; import de.rcenvironment.core.component.model.endpoint.api.EndpointMetaDataDefinition; import de.rcenvironment.core.component.workflow.model.spi.ComponentInstanceProperties; import de.rcenvironment.core.datamodel.api.EndpointActionType; import de.rcenvironment.core.datamodel.api.EndpointType; import de.rcenvironment.core.gui.workflow.editor.properties.EndpointEditDialog; /** * A dialog for defining and editing cells as additional endpoints. * * @author Patrick Schaefer * @author Markus Kunde */ public class VariablesEditDialog extends EndpointEditDialog { private File xlFile; private CellSelectionDialog selectionDialog; public VariablesEditDialog(Shell parentShell, EndpointActionType actionType, ComponentInstanceProperties configuration, EndpointType direction, String id, boolean isStatic, Image icon, EndpointMetaDataDefinition metaData, Map<String, String> metadataValues, final File xlFile) { super(parentShell, actionType, configuration, direction, id, isStatic, metaData, metadataValues); this.xlFile = xlFile; } public File getFile() { return xlFile; } protected void notifyAboutSelection() { if (selectionDialog.getAddress() != null && !selectionDialog.getAddress().isEmpty()) { ExcelAddress addr = null; try { addr = new ExcelAddress(xlFile, selectionDialog.getAddress()); } catch (ExcelException ee) { MessageBox messageBox = new MessageBox(Display.getDefault().getActiveShell(), SWT.ICON_WARNING | SWT.ABORT); messageBox.setText("Invalid Excel Address"); messageBox.setMessage(ee.getMessage()); messageBox.open(); } Widget address = super.getWidget(ExcelComponentConstants.METADATA_ADDRESS); if (addr != null && address instanceof Text) { ((Text) address).setText(addr.getFullAddress()); } } selectionDialog.close(); } @Override protected Control createConfigurationArea(Composite parent) { Control superControl = super.createConfigurationArea(parent); Button selectButton = new Button(parent, SWT.NONE); selectButton.setText(Messages.selectButton); selectButton.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { createExcelDialog(); } }); return superControl; } @Override protected boolean validateMetaDataInputs() { boolean validation = false; if (super.validateMetaDataInputs()) { try { Widget address = super.getWidget(ExcelComponentConstants.METADATA_ADDRESS); if (address instanceof Text) { String rawAddress = ((Text) address).getText(); ExcelAddress addr = new ExcelAddress(xlFile, rawAddress); validation = true; } } catch (ExcelException e) { validation = false; } } return validation; } /** * Creates the Excel-cell choosing dialog. */ private void createExcelDialog() { final Shell excelDialog = new Shell(SWT.ON_TOP); selectionDialog = new CellSelectionDialog(excelDialog, SWT.ON_TOP | SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM, this); excelDialog.setLayout(new FillLayout()); excelDialog.setText(xlFile.getAbsolutePath()); excelDialog.pack(); excelDialog.setSize(0, 0); Rectangle parentSize = excelDialog.getBounds(); Rectangle mySize = excelDialog.getBounds(); int locationX; int locationY; locationX = (parentSize.width - mySize.width) / 2 + parentSize.x; locationY = (parentSize.height - mySize.height) / 2 + parentSize.y; excelDialog.setLocation(new Point(locationX, locationY)); excelDialog.open(); selectionDialog.open(super.getMetadataValues().get(ExcelComponentConstants.METADATA_ADDRESS)); } }