/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.workflow.execute; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Button; import de.rcenvironment.core.component.workflow.model.api.WorkflowNode; import de.rcenvironment.core.gui.resources.api.ImageManager; import de.rcenvironment.core.gui.resources.api.StandardImages; /** * Default Implementation of the Interface. Implements common functions of Tree and Table. * * @author Goekhan Guerkan * */ public abstract class AbstractUpdateBehavior implements Updatable { /** * One boolean for both table types. */ public static boolean allCheckboxesClicked = false; protected boolean columnImageActive = true; protected List<CCombo> comboList; protected List<Button> btnList; protected WorkflowNodeTargetPlatformLabelProvider instanceProvider; protected TargetNodeEditingSupport editingSupport; protected CheckboxLabelProvider checkProvider; protected CCombo masterCombo; protected boolean noCheckboxSelected = true; protected Button masterButton; protected Image uncheckedImg; protected Image checkDisabled; protected String savedIndex; public AbstractUpdateBehavior(WorkflowNodeTargetPlatformLabelProvider instanceProvider, CheckboxLabelProvider checkboxProvider) { this.btnList = checkboxProvider.getBtnList(); this.instanceProvider = instanceProvider; this.comboList = instanceProvider.getComboList(); this.editingSupport = instanceProvider.getEditingSupport(); this.checkProvider = checkboxProvider; uncheckedImg = ImageManager.getInstance().getSharedImage(StandardImages.CHECK_UNCHECKED); checkDisabled = ImageManager.getInstance().getSharedImage(StandardImages.CHECK_DISABLED); } @Override public void setComboColor(Color color) {} @Override public void disposeWidgets() { checkProvider.clearButtonList(); instanceProvider.clearComboList(); } void prepareValuesForMasterCombo() { // find the combo with most values. if (comboList != null && comboList.get(0) != null && masterCombo != null) { List<Button> enabledButtons = new ArrayList<Button>(); for (Button b : btnList) { if (b.isEnabled() && b.getSelection()) { enabledButtons.add(b); } } if (enabledButtons.isEmpty()) { enableOrDisableMasterCombo(); return; } WorkflowNode node = null; if (enabledButtons.get(0).getData(KEY_CHECK) instanceof WorkflowNode) { node = (WorkflowNode) enabledButtons.get(0).getData(KEY_CHECK); setComboValues(node, enabledButtons); } else { TreeNode treeNode = (TreeNode) enabledButtons.get(0).getData(KEY_CHECK); if (treeNode.isChildElement()) { node = treeNode.getWorkflowNode(); setComboValues(node, enabledButtons); } else { for (TreeNode n : treeNode.getChildrenNodes()) { WorkflowNode wfNode = n.getWorkflowNode(); setComboValues(wfNode, enabledButtons); } } } enableOrDisableMasterCombo(); } } private void setComboValues(WorkflowNode node, List<Button> enabledButtons) { if (node != null) { List<String> commonValues = editingSupport.getValues(node); WorkflowNode enabledNode = null; for (int i = 1; i < enabledButtons.size(); i++) { if (enabledButtons.get(i).getData(KEY_CHECK) instanceof WorkflowNode) { enabledNode = (WorkflowNode) enabledButtons.get(i).getData(KEY_CHECK); } else { TreeNode n = (TreeNode) enabledButtons.get(i).getData(KEY_CHECK); if (n.isChildElement()) { enabledNode = n.getWorkflowNode(); } } if (enabledNode != null) { List<String> values = editingSupport.getValues(enabledNode); commonValues.retainAll(values); } } Set<String> treeSet = new TreeSet<String>(); for (String item : commonValues) { treeSet.add(item); } commonValues.clear(); treeSet.addAll(commonValues); masterCombo.removeAll(); for (String string : treeSet) { masterCombo.add(string); } boolean containsSetAnyAlready = false; for (int i = 0; i < masterCombo.getItemCount(); i++) { if (masterCombo.getItem(i).equals(Messages.anyRemote)) { containsSetAnyAlready = true; break; } } if (!containsSetAnyAlready) { masterCombo.add(Messages.anyRemote); } } } private void enableOrDisableMasterCombo() { masterCombo.select(0); if (noCheckboxSelected) { masterCombo.setEnabled(false); } } /** * Sets the apply Instance Button to disabled if no checkbox is clicked. * * @return true if widgets need to be disabled. */ protected void checkIfDisableMasterBtn() { if (masterButton != null) { boolean isThereAnyButtonChecked = false; for (Button btn : btnList) { if (btn.getSelection()) { isThereAnyButtonChecked = true; noCheckboxSelected = false; break; } else { noCheckboxSelected = true; } } if (!isThereAnyButtonChecked) { masterButton.setEnabled(false); masterCombo.setEnabled(false); } else { masterCombo.setEnabled(true); masterButton.setEnabled(true); } } } protected boolean isCheckBoxColumnEnabled() { for (Button b : btnList) { if (b.isEnabled()) { columnImageActive = true; return true; } } columnImageActive = false; return false; } public void setMasterCombo(CCombo masterCombo) { this.masterCombo = masterCombo; } public void setMasterButton(Button masterButton) { this.masterButton = masterButton; } /** * Saves the current selection index, before refresh is invoked. */ public void saveIndexOfComboBeforeRefresh() { savedIndex = masterCombo.getText(); } /** * Sets the saved index. */ public void setSavedComboIndex() { for (int i = 0; i < masterCombo.getItemCount(); i++) { if (masterCombo.getItem(i).equals(savedIndex)) { masterCombo.select(i); return; } } } }