Index: topia/src/java/org/codelutin/topia/ui/swing/TopiaTableModel.java diff -u topia/src/java/org/codelutin/topia/ui/swing/TopiaTableModel.java:1.1 topia/src/java/org/codelutin/topia/ui/swing/TopiaTableModel.java:1.2 --- topia/src/java/org/codelutin/topia/ui/swing/TopiaTableModel.java:1.1 Thu Jul 8 13:50:49 2004 +++ topia/src/java/org/codelutin/topia/ui/swing/TopiaTableModel.java Thu Jul 15 14:37:59 2004 @@ -32,145 +32,145 @@ */ public class TopiaTableModel extends AbstractTableModel { - protected static String ASCENDING="ascending"; - protected static String DESCENDING="descending"; - - protected TopiaContext context = null; - protected TopiaQuery query = null; - protected String[] fields = null; - protected String[] columnNames = null; - protected String[] columnOrders = null; - protected List data = null; - - public TopiaTableModel(TopiaContext context, TopiaQuery query, String[] fields) { - this(context, query, fields, fields, new String[fields.length]); - } - - public TopiaTableModel(TopiaContext context, TopiaQuery query, String[] fields, String[] columnNames) { - this(context, query, fields, columnNames, new String[fields.length]); - } - - public TopiaTableModel(TopiaContext context, TopiaQuery query, String[] fields, String[] columnNames, String[] columnOrders) { - this.context = context; - this.query = query; - this.fields = fields; - this.columnNames = columnNames; - this.columnOrders = columnOrders; - try { - // TODO lancer une invocation asynchrone pour la requete - // TODO plus besoin de faire une copie quand on aura une liste renvoyée ! - data = new ArrayList(context.getPersistenceHelper().execute(query)); - } catch (TopiaException eee) { - Logger.getLogger("TopiaTableModel").log(Level.SEVERE, "Can't execute TopiaQuery "+query, eee); - } - } - - public void setQuery(TopiaQuery query) { - this.query = query; - eventOccured(); - } - - public void setFields(String[] fields) { - this.fields = fields; - eventOccured(); - } - - public void setColumnNames(String[] columnNames) { - this.columnNames = columnNames; - eventOccured(); - } - - public void setColumnOrders(String[] columnOrders) { - this.columnOrders = columnOrders; - eventOccured(); - } - - public void eventOccured() { - // TODO : rafraichissement nb column, data, ... - fireTableDataChanged(); - } - - public int getColumnCount() { - return fields.length; - } - - public int getRowCount() { - if (data == null) return 0; - return data.size(); - } - - public Object getValueAt(int x, int y) { - if (data == null) return null; - if (y >= getColumnCount()) { - return null; - } - if (x >= getRowCount()) { - return null; - } - Expression e = new Expression(data.get(x), "get"+Util.toUpperCaseFirstLetter(fields[y]), null); - try { - return e.getValue(); - } catch (Exception eee) { - eee.printStackTrace(); - return null; - } - } - - public String getColumnName(int columnIndex) { - if (columnIndex >= getColumnCount()) { - return null; - } - return fields[columnIndex]; - } - - public Class getColumnClass(int columnIndex) { - if (data == null) return null; - if (columnIndex >= getColumnCount()) { - return Object.class; - } - return getValueAt(0, columnIndex).getClass(); - } - - public boolean isCellEditable(int rowIndex, int columnIndex) { - return false; - } - - public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - } - - public void addMouseListenerToHeaderInTable(JTable table) { - final JTable tableView = table; - tableView.setColumnSelectionAllowed(false); - MouseAdapter listMouseListener = new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - TableColumnModel columnModel = tableView.getColumnModel(); - int viewColumn = columnModel.getColumnIndexAtX(e.getX()); - int column = tableView.convertColumnIndexToModel(viewColumn); - if (e.getClickCount() == 1 && column != -1) { - if (ASCENDING.equals(columnOrders[column])) { - columnOrders[column] = DESCENDING; - } else { - columnOrders[column] = ASCENDING; - } - sortData(); - } - } - }; - JTableHeader th = tableView.getTableHeader(); - th.addMouseListener(listMouseListener); - } - - public Object getObjectAt(int x) { - if (data == null) return null; - if (x >= getRowCount()) { - return null; - } - return data.get(x); - } - - public void sortData() { - // TODO prise en compte du tableau d'ordre des column pour construire une query triée - eventOccured(); - } + protected static String ASCENDING="ascending"; + protected static String DESCENDING="descending"; + + protected TopiaContext context = null; + protected TopiaQuery query = null; + protected String[] fields = null; + protected String[] columnNames = null; + protected String[] columnOrders = null; + protected List data = null; + + public TopiaTableModel(TopiaContext context, TopiaQuery query, String[] fields) { + this(context, query, fields, fields, new String[fields.length]); + } + + public TopiaTableModel(TopiaContext context, TopiaQuery query, String[] fields, String[] columnNames) { + this(context, query, fields, columnNames, new String[fields.length]); + } + + public TopiaTableModel(TopiaContext context, TopiaQuery query, String[] fields, String[] columnNames, String[] columnOrders) { + this.context = context; + this.query = query; + this.fields = fields; + this.columnNames = columnNames; + this.columnOrders = columnOrders; + try { + // TODO lancer une invocation asynchrone pour la requete + // TODO plus besoin de faire une copie quand on aura une liste renvoyée ! + data = new ArrayList(context.getPersistenceHelper().find(query)); + } catch (TopiaException eee) { + Logger.getLogger("TopiaTableModel").log(Level.SEVERE, "Can't execute TopiaQuery "+query, eee); + } + } + + public void setQuery(TopiaQuery query) { + this.query = query; + eventOccured(); + } + + public void setFields(String[] fields) { + this.fields = fields; + eventOccured(); + } + + public void setColumnNames(String[] columnNames) { + this.columnNames = columnNames; + eventOccured(); + } + + public void setColumnOrders(String[] columnOrders) { + this.columnOrders = columnOrders; + eventOccured(); + } + + public void eventOccured() { + // TODO : rafraichissement nb column, data, ... + fireTableDataChanged(); + } + + public int getColumnCount() { + return fields.length; + } + + public int getRowCount() { + if (data == null) return 0; + return data.size(); + } + + public Object getValueAt(int x, int y) { + if (data == null) return null; + if (y >= getColumnCount()) { + return null; + } + if (x >= getRowCount()) { + return null; + } + Expression e = new Expression(data.get(x), "get"+Util.toUpperCaseFirstLetter(fields[y]), null); + try { + return e.getValue(); + } catch (Exception eee) { + eee.printStackTrace(); + return null; + } + } + + public String getColumnName(int columnIndex) { + if (columnIndex >= getColumnCount()) { + return null; + } + return fields[columnIndex]; + } + + public Class getColumnClass(int columnIndex) { + if (data == null) return null; + if (columnIndex >= getColumnCount()) { + return Object.class; + } + return getValueAt(0, columnIndex).getClass(); + } + + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + } + + public void addMouseListenerToHeaderInTable(JTable table) { + final JTable tableView = table; + tableView.setColumnSelectionAllowed(false); + MouseAdapter listMouseListener = new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + TableColumnModel columnModel = tableView.getColumnModel(); + int viewColumn = columnModel.getColumnIndexAtX(e.getX()); + int column = tableView.convertColumnIndexToModel(viewColumn); + if (e.getClickCount() == 1 && column != -1) { + if (ASCENDING.equals(columnOrders[column])) { + columnOrders[column] = DESCENDING; + } else { + columnOrders[column] = ASCENDING; + } + sortData(); + } + } + }; + JTableHeader th = tableView.getTableHeader(); + th.addMouseListener(listMouseListener); + } + + public Object getObjectAt(int x) { + if (data == null) return null; + if (x >= getRowCount()) { + return null; + } + return data.get(x); + } + + public void sortData() { + // TODO prise en compte du tableau d'ordre des column pour construire une query triée + eventOccured(); + } }