/** * */ package org.objectstyle.wolips.eomodeler.editors.qualifier; import java.util.List; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; 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.swt.widgets.Text; import org.objectstyle.wolips.eomodeler.core.model.EOQualifierFactory; import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOAggregateQualifier; import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOKeyComparisonQualifier; import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOKeyValueQualifier; import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOQualifier; import org.objectstyle.wolips.eomodeler.core.model.qualifier.EOTruePredicate; public class KeyValueQualifierTypeEditor extends AbstractQualifierTypeEditor { private String _key; private ComboViewer _operatorCombo; private Text _valueText; public KeyValueQualifierTypeEditor(Composite parent, int style) { super(parent, style); GridLayout layout = new GridLayout(2, false); layout.marginLeft = 0; layout.marginRight = 0; layout.marginWidth = 0; layout.marginTop = 0; layout.marginBottom = 0; layout.marginHeight = 0; layout.horizontalSpacing = 0; setLayout(layout); _operatorCombo = new ComboViewer(this, SWT.READ_ONLY); _operatorCombo.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { String text; if (element == null) { text = ""; } else { text = ((EOQualifier.Comparison) element).getDisplayName(); } return text; } }); _operatorCombo.add(new EOQualifier.Comparison("=")); _operatorCombo.add(new EOQualifier.Comparison("<>", "!=")); _operatorCombo.add(new EOQualifier.Comparison("<")); _operatorCombo.add(new EOQualifier.Comparison("<=")); _operatorCombo.add(new EOQualifier.Comparison(">")); _operatorCombo.add(new EOQualifier.Comparison(">=")); _operatorCombo.add(new EOQualifier.Comparison("contains")); _operatorCombo.add(new EOQualifier.Comparison("like")); _operatorCombo.add(new EOQualifier.Comparison("caseinsensitivelike", "like (any case)")); _operatorCombo.getCombo().setLayoutData(new GridData()); _valueText = new Text(this, SWT.BORDER); _valueText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } public void setQualifier(EOQualifier qualifier) { EOQualifier finalQualifier = qualifier; if (finalQualifier instanceof EOAggregateQualifier) { List<EOQualifier> qualifiers = ((EOAggregateQualifier) finalQualifier).getQualifiers(); if (!qualifiers.isEmpty()) { finalQualifier = qualifiers.get(0); } } if (finalQualifier instanceof EOKeyValueQualifier) { EOKeyValueQualifier kvQualifier = (EOKeyValueQualifier) finalQualifier; _key = kvQualifier.getKey(); _operatorCombo.setSelection(new StructuredSelection(kvQualifier.getComparison())); String valueStr; Object value = kvQualifier.getValue(); if (value instanceof String) { String escapedValue = (String) value; escapedValue = escapedValue.replaceAll("'", "\\'"); valueStr = "'" + escapedValue + "'"; } else if (value instanceof Number) { valueStr = value.toString(); } else { valueStr = (value == null) ? "" : value.toString(); } _valueText.setText(valueStr); } else if (finalQualifier instanceof EOKeyComparisonQualifier) { EOKeyComparisonQualifier kcQualifier = (EOKeyComparisonQualifier) finalQualifier; _key = kcQualifier.getLeftKey(); _operatorCombo.setSelection(new StructuredSelection(kcQualifier.getComparison())); String valueStr = (kcQualifier.getRightKey() == null) ? "" : kcQualifier.getRightKey(); _valueText.setText(valueStr); } else { _operatorCombo.setSelection(new StructuredSelection(_operatorCombo.getElementAt(0))); _valueText.setText(""); } } public EOQualifier getQualifier() { EOQualifier qualifier; if (_key == null) { qualifier = null; } else { EOQualifier.Comparison comparison = (EOQualifier.Comparison) ((IStructuredSelection) _operatorCombo.getSelection()).getFirstElement(); String value = _valueText.getText(); qualifier = EOQualifierFactory.fromString(_key + " " + comparison + " " + value); } if (qualifier == null) { qualifier = new EOTruePredicate(); } return qualifier; } }