/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.optimizer.gui.properties; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TableItem; import de.rcenvironment.components.optimizer.common.OptimizerComponentConstants; import de.rcenvironment.components.optimizer.gui.properties.commands.OptimizerAddDynamicEndpointCommand; import de.rcenvironment.components.optimizer.gui.properties.commands.OptimizerEditDynamicEndpointCommand; import de.rcenvironment.components.optimizer.gui.properties.commands.OptimizerRemoveDynamicEndpointCommand; import de.rcenvironment.core.component.model.endpoint.api.EndpointDescription; import de.rcenvironment.core.component.model.endpoint.api.EndpointMetaDataDefinition; import de.rcenvironment.core.component.workflow.model.spi.ComponentInstanceProperties; import de.rcenvironment.core.datamodel.api.DataType; import de.rcenvironment.core.datamodel.api.EndpointActionType; import de.rcenvironment.core.datamodel.api.EndpointType; import de.rcenvironment.core.gui.utils.common.configuration.VariableNameVerifyListener; import de.rcenvironment.core.gui.workflow.editor.properties.EndpointEditDialog; import de.rcenvironment.core.gui.workflow.editor.properties.EndpointSelectionPane; import de.rcenvironment.core.gui.workflow.editor.properties.WorkflowNodeCommand; /** * A UI part to display and edit a set of endpoints managed by a {@link DynamicEndpointManager). * * @author Sascha Zur */ public class OptimizerEndpointSelectionPane extends EndpointSelectionPane { private EndpointSelectionPane[] allPanes; public OptimizerEndpointSelectionPane(String title, final EndpointType direction, String dynEndpointIdToManage, WorkflowNodeCommand.Executor executor, boolean readOnly) { super(title, direction, dynEndpointIdToManage, new String[] {}, new String[] {}, executor, readOnly, true); } @Override protected void fillTable() { super.fillTable(); Display display = Display.getCurrent(); for (TableItem i : table.getItems()) { if (i.getText(0).contains(OptimizerComponentConstants.GRADIENT_DELTA)) { i.setForeground(display.getSystemColor(SWT.COLOR_DARK_GRAY)); } if (i.getText(0).contains(OptimizerComponentConstants.OPTIMUM_VARIABLE_SUFFIX)) { i.setForeground(display.getSystemColor(SWT.COLOR_DARK_GRAY)); } } } @Override protected void updateButtonActivation() { super.updateButtonActivation(); TableItem[] selection = table.getSelection(); if (selection.length > 0 && (selection[0].getText(0).contains(OptimizerComponentConstants.GRADIENT_DELTA) || (selection[0].getText(0).contains(OptimizerComponentConstants.OPTIMUM_VARIABLE_SUFFIX)))) { buttonEdit.setEnabled(false); buttonRemove.setEnabled(false); } } @Override protected void onAddClicked() { EndpointEditDialog dialog = new OptimizerEndpointEditDialog(Display.getDefault().getActiveShell(), EndpointActionType.ADD, configuration, endpointType, dynEndpointIdToManage, false, endpointManager.getDynamicEndpointDefinition(dynEndpointIdToManage) .getMetaDataDefinition(), new HashMap<String, String>()); super.onAddClicked(dialog); } @Override protected void onEditClicked() { final String name = (String) table.getSelection()[0].getData(); boolean isStaticEndpoint = endpointManager.getEndpointDescription(name).getEndpointDefinition().isStatic(); EndpointDescription endpoint = endpointManager.getEndpointDescription(name); Map<String, String> newMetaData = cloneMetaData(endpoint.getMetaData()); EndpointEditDialog dialog = new OptimizerEndpointEditDialog(Display.getDefault().getActiveShell(), EndpointActionType.EDIT, configuration, endpointType, dynEndpointIdToManage, isStaticEndpoint, endpoint.getEndpointDefinition() .getMetaDataDefinition(), newMetaData); super.onEditClicked(name, dialog, newMetaData); } @Override protected void executeAddCommand(String name, DataType type, Map<String, String> metaData) { WorkflowNodeCommand command = new OptimizerAddDynamicEndpointCommand(endpointType, name, dynEndpointIdToManage, type, metaData, allPanes); execute(command); } @Override protected void executeEditCommand(EndpointDescription oldDescription, EndpointDescription newDescription) { WorkflowNodeCommand command = new OptimizerEditDynamicEndpointCommand(endpointType, dynEndpointIdToManage, oldDescription, newDescription, true, true, allPanes); execute(command); } @Override protected void executeRemoveCommand(List<String> names) { final WorkflowNodeCommand command = new OptimizerRemoveDynamicEndpointCommand(endpointType, names, dynEndpointIdToManage, allPanes); execute(command); } public EndpointSelectionPane[] getAllPanes() { return allPanes; } public void setAllPanes(EndpointSelectionPane[] allPanes) { this.allPanes = allPanes; } /** * * Implementation of {@link EndpointEditDialog}. * * @author Sascha Zur */ private class OptimizerEndpointEditDialog extends EndpointEditDialog { OptimizerEndpointEditDialog(Shell parentShell, EndpointActionType actionType, ComponentInstanceProperties configuration, EndpointType direction, String id, boolean isStatic, EndpointMetaDataDefinition metaData, Map<String, String> metadataValues) { super(parentShell, actionType, configuration, direction, id, isStatic, metaData, metadataValues); } @Override protected void createEndpointSettings(Composite parent) { super.createEndpointSettings(parent); textfieldName.addListener(SWT.Verify, new VariableNameVerifyListener(VariableNameVerifyListener.NO_UNDERSCORE, this.textfieldName)); } @Override protected void validateInput() { super.validateInput(); String text = textfieldName.getText(); getButton(IDialogConstants.OK_ID).setEnabled( getButton(IDialogConstants.OK_ID).isEnabled() && (text != null && !text.isEmpty() && !text.contains(OptimizerComponentConstants.OPTIMIZER_VECTOR_INDEX_SYMBOL))); } } }