package net.sourceforge.pmd.eclipse.ui.preferences.editors;
import java.util.HashMap;
import java.util.Map;
import net.sourceforge.pmd.PropertyDescriptor;
import net.sourceforge.pmd.PropertySource;
import net.sourceforge.pmd.eclipse.ui.preferences.br.EditorFactory;
import net.sourceforge.pmd.eclipse.ui.preferences.br.RuleSelection;
import net.sourceforge.pmd.eclipse.ui.preferences.br.SizeChangeListener;
import net.sourceforge.pmd.eclipse.ui.preferences.br.ValueChangeListener;
import net.sourceforge.pmd.eclipse.ui.preferences.panelmanagers.FormArranger;
import net.sourceforge.pmd.eclipse.ui.preferences.panelmanagers.PerRulePropertyPanelManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
/**
*
* @author Brian Remedios
*/
public class EditorTester implements ValueChangeListener, SizeChangeListener {
// these are the ones we've tested, the others may work but might not make sense in the xpath source context...
private static final Class<?>[] validEditorTypes = new Class[] { String.class, Integer.class, Boolean.class };
public static Map<Class<?>, EditorFactory> withOnly(Map<Class<?>, EditorFactory> factoriesByType, Class<?>[] legalTypeKeys) {
Map<Class<?>, EditorFactory> results = new HashMap<Class<?>, EditorFactory>(legalTypeKeys.length);
for (Class<?> type : legalTypeKeys) {
if (factoriesByType.containsKey(type)) {
results.put(type, factoriesByType.get(type));
}
}
return results;
}
public EditorTester() {
Display d = new Display();
Shell s = new Shell(d);
GridLayout gl = new GridLayout();
gl.numColumns = 2;
s.setLayout(gl);
s.setSize(850, 595);
s.setText("Type Editor Tester");
s.setLayout(gl);
Composite panel = new Composite(s, SWT.BORDER);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 4;
panel.setLayoutData(gd);
gd = new GridData();
Composite c1 = new Composite(s, SWT.NO_FOCUS);
gd = new GridData(GridData.FILL_HORIZONTAL);
c1.setLayoutData(gd);
Composite c2 = new Composite(s, SWT.NO_FOCUS);
gd = new GridData(GridData.FILL_HORIZONTAL);
c2.setLayoutData(gd);
Composite c = new Composite(s, SWT.NO_FOCUS); c.setLayout(new RowLayout());
Button b1 = new Button(c, SWT.PUSH | SWT.BORDER); b1.setText("OK");
Button b2 = new Button(c, SWT.PUSH | SWT.BORDER); b2.setText("Cancel");
gd = new GridData(GridData.FILL_HORIZONTAL);
c.setLayoutData(gd);
FormArranger formArranger = new FormArranger(panel, PerRulePropertyPanelManager.editorFactoriesByPropertyType, this, this);
formArranger.arrangeFor(new NonRuleWithAllPropertyTypes());
s.open();
while (!s.isDisposed()) {
if (!d.readAndDispatch())
d.sleep();
}
d.dispose();
}
public static void main(String[] arg) {
new EditorTester();
}
// ignore these callbacks
public void changed(RuleSelection rule, PropertyDescriptor<?> desc, Object newValue) { }
public void changed(PropertySource source, PropertyDescriptor<?> desc, Object newValue) { }
public void addedRows(int newRowCount) { }
}