001: package org.osbl.client.wings.devtools.hibernate;
002:
003: import org.osbl.client.wings.form.*;
004: import org.osbl.client.wings.form.layouter.*;
005: import org.conform.BeanMeta;
006: import org.wings.*;
007: import org.wings.table.SDefaultTableCellRenderer;
008: import org.wings.border.SLineBorder;
009: import org.wingx.XTable;
010: import org.wingx.XScrollPane;
011:
012: import javax.swing.table.AbstractTableModel;
013: import java.awt.*;
014: import java.beans.PropertyDescriptor;
015: import java.lang.reflect.Method;
016:
017: public class HibernateQueryForm extends GenericObjectForm {
018: private PropertiesTableModel propertiesTableModel;
019: private XTable propertiesTable;
020:
021: protected Instruction createLayoutInstruction() {
022: return new PageSet(new Page(new Division(new Column(new Title(
023: "Properties"), new CustomEditor("duplicate")))));
024: }
025:
026: protected SComponent createCustomComponent(String key) {
027: propertiesTableModel = new PropertiesTableModel();
028: propertiesTable = new XTable(propertiesTableModel);
029: propertiesTable.setEditable(false);
030: propertiesTable.setBorder(new SLineBorder(Color.BLACK, 1));
031: propertiesTable.setDefaultRenderer(new ValueCellRenderer());
032: return new XScrollPane(propertiesTable);
033: }
034:
035: protected Object getObject(String path) {
036: return propertiesTableModel.getBean();
037: }
038:
039: protected void setObject(String path, Object object) {
040: propertiesTableModel.setBean(object);
041: }
042:
043: protected BeanMeta createBeanMeta(String path) {
044: return null;
045: }
046:
047: class PropertiesTableModel extends AbstractTableModel {
048: Object bean;
049: PropertyDescriptor[] descriptors = new PropertyDescriptor[0];
050:
051: public void setBean(Object bean) {
052: this .bean = bean;
053: fireTableDataChanged();
054: }
055:
056: public Object getBean() {
057: return bean;
058: }
059:
060: public void setDescriptors(PropertyDescriptor[] descriptors) {
061: this .descriptors = descriptors;
062: fireTableStructureChanged();
063: }
064:
065: public int getRowCount() {
066: return descriptors.length;
067: }
068:
069: public int getColumnCount() {
070: return 2;
071: }
072:
073: public String getColumnName(int column) {
074: return new String[] { "name", "value" }[column];
075: }
076:
077: public Object getValueAt(int rowIndex, int columnIndex) {
078: switch (columnIndex) {
079: case 0:
080: return descriptors[rowIndex].getName();
081: case 1:
082: PropertyDescriptor descriptor = descriptors[rowIndex];
083: Method getter = descriptor.getReadMethod();
084: try {
085: return getter.invoke(bean);
086: } catch (Exception e) {
087: e.printStackTrace();
088: return e.getMessage();
089: }
090: default:
091: return "";
092: }
093: }
094: }
095:
096: private class ValueCellRenderer extends SDefaultTableCellRenderer {
097: public ValueCellRenderer() {
098: setStyle("SLabel wrap");
099: }
100:
101: public SComponent getTableCellRendererComponent(STable table,
102: Object value, boolean selected, int row, int col) {
103: if (value instanceof Throwable) {
104: Throwable throwable = (Throwable) value;
105: StringBuffer buffer = new StringBuffer(throwable
106: .getMessage());
107: buffer.append("\n");
108: for (int i = 0; i < throwable.getStackTrace().length; i++) {
109: StackTraceElement traceElement = throwable
110: .getStackTrace()[i];
111: buffer.append(traceElement.toString());
112: buffer.append("\n");
113: }
114: setText(buffer.toString());
115: } else
116: setText("" + value);
117:
118: return this;
119: }
120: }
121: }
|