package rocks.inspectit.ui.rcp.ci.form.page; import java.util.Set; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import rocks.inspectit.shared.cs.ci.business.expression.AbstractExpression; import rocks.inspectit.shared.cs.ci.business.expression.impl.StringMatchingExpression; import rocks.inspectit.shared.cs.ci.business.impl.ApplicationDefinition; import rocks.inspectit.ui.rcp.InspectIT; import rocks.inspectit.ui.rcp.InspectITImages; import rocks.inspectit.ui.rcp.ci.form.input.ApplicationDefinitionEditorInput; import rocks.inspectit.ui.rcp.ci.form.part.business.MatchingRulesEditingElementFactory; import rocks.inspectit.ui.rcp.ci.form.part.business.SelectiveRulesPart; import rocks.inspectit.ui.rcp.formatter.TextFormatter; import rocks.inspectit.ui.rcp.validation.AbstractValidationManager; import rocks.inspectit.ui.rcp.validation.ValidationState; /** * Edit page for {@link ApplicationDefinition}. * * @author Alexander Wert * */ public class ApplicationDefinitionPage extends FormPage implements IPropertyListener { /** * Id of the page. */ private static final String ID = ApplicationDefinitionPage.class.getName(); /** * Page title. */ private static final String TITLE = "Application Definition"; /** * Description text. */ private static final String DESCRIPTION = "Define the matching rule that should be used to match this application"; /** * Main form of this editor page. */ private ScrolledForm mainForm; /** * {@link ApplicationDefinition} instance to be edited. */ private ApplicationDefinition application; /** * Section part for the definition of application matching rules. */ private SelectiveRulesPart applicationMatchingRulesPart; /** * Default constructor. * * @param editor * {@link FormEditor} page belongs to. */ public ApplicationDefinitionPage(FormEditor editor) { super(editor, ID, TITLE); editor.addPropertyListener(this); ApplicationDefinitionEditorInput input = (ApplicationDefinitionEditorInput) getEditor().getEditorInput(); this.application = input.getApplication(); } /** * {@inheritDoc} */ @Override protected void createFormContent(IManagedForm managedForm) { mainForm = managedForm.getForm(); mainForm.setText(TITLE); mainForm.setImage(InspectIT.getDefault().getImage(InspectITImages.IMG_APPLICATION)); FormToolkit toolkit = managedForm.getToolkit(); toolkit.decorateFormHeading(mainForm.getForm()); // body Composite body = mainForm.getBody(); body.setLayout(new GridLayout(1, false)); body.setLayoutData(new GridData(GridData.FILL_BOTH)); // matching rules part applicationMatchingRulesPart = new SelectiveRulesPart("Application Mapping", body, managedForm, new ApplicationValidationManager()); applicationMatchingRulesPart.initContent(application); applicationMatchingRulesPart.setDescriptionText(DESCRIPTION); } /** * {@inheritDoc} * <p> * Manually set focus to form body, otherwise is the tool-bar in focus. */ @Override public void setFocus() { mainForm.getBody().setFocus(); } /** * {@inheritDoc} */ @Override public void propertyChanged(Object source, int propId) { if (propId == IEditorPart.PROP_INPUT) { ApplicationDefinitionEditorInput input = (ApplicationDefinitionEditorInput) getEditor().getEditorInput(); setInput(input); application = input.getApplication(); if (null != mainForm) { mainForm.reflow(true); applicationMatchingRulesPart.initContent(application); applicationMatchingRulesPart.setDescriptionText(DESCRIPTION); } } } /** * Validation Manager for the ApplicationDefinitionPage. Responsible for showing aggregated * validation messages in the page. * * @author Alexander Wert * */ private class ApplicationValidationManager extends AbstractValidationManager<AbstractExpression> { /** * {@inheritDoc} */ @Override protected void notifyUpstream(AbstractExpression key, Set<ValidationState> states) { // no upstream, so nothing to do here } /** * {@inheritDoc} */ @Override protected void showMessage(AbstractExpression expression, Set<ValidationState> states) { String errorsText = TextFormatter.getValidationErrorsCountText(states, "field"); if (null != errorsText) { String concatenatedMessage = TextFormatter.getValidationConcatenatedMessage(states); String message = ((expression instanceof StringMatchingExpression) ? MatchingRulesEditingElementFactory.getMatchingRuleType(expression).toString() + " (" + errorsText + ")" : concatenatedMessage); mainForm.getMessageManager().addMessage(expression, message, null, IMessageProvider.ERROR); } } /** * {@inheritDoc} */ @Override protected void hideMessage(AbstractExpression key) { mainForm.getMessageManager().removeMessage(key); } } }