package rocks.inspectit.ui.rcp.ci.form.part.business; import java.util.Iterator; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.IDetailsPage; import org.eclipse.ui.forms.IFormPart; import org.eclipse.ui.forms.IManagedForm; import rocks.inspectit.shared.cs.ci.business.expression.AbstractExpression; import rocks.inspectit.shared.cs.ci.business.expression.IContainerExpression; import rocks.inspectit.ui.rcp.ci.form.part.business.rules.AbstractRuleEditingElement; import rocks.inspectit.ui.rcp.util.RemoveSelection; /** * Details part for individual matching rules. * * @author Alexander Wert * */ public class AdvancedMatchingRulesDetails implements IDetailsPage { /** * The {@link AbstractRuleEditingElement} to display and edit rule contents. */ private AbstractRuleEditingElement<?> ruleEditingElement; /** * Main composite. */ private Composite main; /** * Current {@link AbstractExpression} instance under modification. */ private AbstractExpression currentExpression; /** * The master {@link AdvancedMatchingRulesPart}. */ private final AdvancedMatchingRulesPart master; /** * {@link IManagedForm}. */ private IManagedForm managedForm; /** * Constructor. * * @param master * the master {@link AdvancedMatchingRulesPart}. */ public AdvancedMatchingRulesDetails(AdvancedMatchingRulesPart master) { this.master = master; } /** * {@inheritDoc} */ @Override public void initialize(IManagedForm form) { managedForm = form; } /** * {@inheritDoc} */ @Override public void dispose() { } /** * {@inheritDoc} */ @Override public boolean isDirty() { return false; } /** * {@inheritDoc} */ @Override public void commit(boolean onSave) { } /** * {@inheritDoc} */ @Override public boolean setFormInput(Object input) { return false; } /** * {@inheritDoc} */ @Override public void setFocus() { } /** * {@inheritDoc} */ @Override public boolean isStale() { return false; } /** * {@inheritDoc} */ @Override public void refresh() { } /** * {@inheritDoc} */ @Override public void selectionChanged(IFormPart part, ISelection selection) { StructuredSelection structuredSelection = (StructuredSelection) selection; if (!selection.isEmpty()) { if (structuredSelection instanceof RemoveSelection) { Iterator<?> iterator = structuredSelection.iterator(); while (iterator.hasNext()) { AbstractExpression deletedExpression = (AbstractExpression) iterator.next(); expressionDeleted(deletedExpression); } } else { if (null != ruleEditingElement) { ruleEditingElement.dispose(); } currentExpression = (AbstractExpression) structuredSelection.getFirstElement(); ruleEditingElement = MatchingRulesEditingElementFactory.createRuleComposite(currentExpression, master.isEditable(), master.getValidationManager()); ruleEditingElement.addModifyListener(master); ruleEditingElement.createControls(main, managedForm.getToolkit(), false); main.layout(true, true); ruleEditingElement.initialize(); } } } /** * {@inheritDoc} */ @Override public void createContents(Composite parent) { parent.setLayout(new GridLayout(1, false)); main = managedForm.getToolkit().createComposite(parent); main.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridLayout layout = new GridLayout(AbstractRuleEditingElement.NUM_GRID_COLUMNS, false); layout.horizontalSpacing = 8; main.setLayout(layout); } /** * This method needs to be notified whenever an {@link AbstractExpression} instance has been * deleted from the tree. This method performs an update of corresponding control validators. * * @param deletedExpression * deleted {@link AbstractExpression} instance */ private void expressionDeleted(AbstractExpression deletedExpression) { if (deletedExpression.equals(currentExpression)) { ruleEditingElement.dispose(); } else if (deletedExpression instanceof IContainerExpression) { for (AbstractExpression childExpression : ((IContainerExpression) deletedExpression).getOperands()) { expressionDeleted(childExpression); } } } }