package org.reldb.dbrowser.ui.content.rev.operators;
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.v0.values.StringUtils;
public class Restrict extends Monadic {
public Restrict(Rev rev, String name, int xpos, int ypos) {
super(rev, name, "Restrict", xpos, ypos);
}
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("Boolean 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());
Restrict.this.pack();
}
});
}
@Override
protected void controlPanelOkPressed() {
save();
pack();
}
@Override
protected void controlPanelCancelPressed() {
load();
pack();
}
@Override
public String getQuery() {
String source = getQueryForParameter(0);
if (source == null)
return null;
if (operatorLabel.getText().length() == 0)
return null;
return source + " WHERE " + operatorLabel.getText();
}
}