package org.reldb.dbrowser.ui.content.rev.operators; import org.reldb.dbrowser.ui.content.rev.OperatorWithControlPanel; import org.reldb.dbrowser.ui.content.rev.Rev; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.reldb.rel.client.Tuple; import org.reldb.rel.client.Tuples; import org.reldb.rel.utilities.StringUtils; public class Expression extends OperatorWithControlPanel { public Expression(Rev rev, String name, int xpos, int ypos) { super(rev, name, "Expression", xpos, ypos); load(); pack(); notifyArgumentChanged(true); } protected void load() { Tuples tuples = getDatabase().getPreservedStateOperator(getID()); Tuple tuple = tuples.iterator().next(); if (tuple == null) operatorLabel.setText("true"); else { String definition = StringUtils.unquote(tuple.getAttributeValue("Definition").toString()); operatorLabel.setText(definition); } } private void save() { String quotedDefinition = StringUtils.quote(operatorLabel.getText()); getDatabase().updatePreservedStateOperator(getID(), quotedDefinition); } @Override protected void buildControlPanel(Composite container) { container.setLayout(new GridLayout(2, false)); Label label = new Label(container, SWT.None); label.setText("Expression:"); Text expression = new Text(container, SWT.None); expression.setText(operatorLabel.getText()); expression.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); expression.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { operatorLabel.setText(expression.getText()); Expression.this.pack(); } }); } @Override protected void controlPanelOkPressed() { save(); pack(); } @Override protected void controlPanelCancelPressed() { load(); pack(); } @Override public String getQuery() { return operatorLabel.getText(); } protected void delete() { getDatabase().removeOperator(getID()); super.delete(); } }