NOTE: This is outdated information that only applies to Tapestry 4.1 and earlier. |
This is a simple implementation of contrib:table. for those of you looking for example code:
How to implement tapestry contrib:Table ======================================= HTML part --------- :: <table jwcid="table@contrib:Table" source="ognl:model" columns="ognl:columnModel" pageSize="50" class="style-normal" pagesClass="style-normal" columnsClass="style-normal" rowsClass="style-normal" valuesClass="style-normal"> </table> Java component part ------------------- :: public abstract class Logs extends BasePage implements PageBeginRenderListener { //getter and setters for data and column model: public abstract IBasicTableModel getModel(); public abstract void setModel(IBasicTableModel model); public abstract ITableColumnModel getColumnModel(); public abstract void setColumnModel(ITableColumnModel columnModel); //persist model for request scope public void pageBeginRender(final PageEvent event) { final IBasicTableModel newModel = createDataModel(); final ITableColumnModel columnModel = getLogsLogic().createColumnModel(); setModel(newModel); setColumnModel(columnModel); } private IBasicTableModel createDataModel() { return new IBasicTableModel() { private List list; private long count = -1; public Iterator getCurrentPageRows(final int offset, final int pageSize, final ITableColumn iTableColumn, final boolean orderDirection) { if (null == list) { //retrieve data on a row basis from business logic list = getLogsLogic().retrieveDbData(offset, pageSize, iTableColumn, orderDirection); } return list.iterator(); } public int getRowCount() { if (-1 == count) { count = getLogsLogic().retrieveDbDataCount(); } return (int) count; } }; } //map business logic service public abstract LogsLogic getLogsLogic(); } Java business logic part ------------------------ :: public List retrieveDbData(int offset, int pageSize, ITableColumn orderColumn, boolean ascending) { String queryString = "select \n" + " t.id, \n" + //0 " t.targetIdAsString, \n" + //1 " c.id, \n" + //2 " ts.id, \n" + //3 " ts.type, \n" + //4 " ts.status, \n" + //5 " ts.startOccurrence, \n" + //6 " ts.endOccurrence, \n" + //7 " tss.id, \n" + //8 " tss.type, \n" + //9 " tss.occurrence, \n" + //10 " tss.message\n" + //11 "from \n" + " Target t, \n" + " ChainRun c, \n" + " Task ts, \n" + " TaskStep tss \n" + "where t.id = c.targetId \n" + "and c.id = ts.chainRunId \n" + "and ts.id = tss.taskId"; if (null != orderColumn) { queryString += " order by " + orderColumn.getColumnName() + (ascending ? " ASC" : " DESC"); } org.hibernate.classic.Session session = HibernateTool.getSessionFactory().getCurrentSession(); session.beginTransaction(); Query query = session.createQuery(queryString); query.setFirstResult(offset); query.setMaxResults(pageSize); List list = query.list(); return list; } public long retrieveDbDataCount(){ String queryString = "select count(*)\n" + "from \n" + " Target t, \n" + " ChainRun c, \n" + " Task ts, \n" + " TaskStep tss \n" + "where t.id = c.targetId \n" + "and c.id = ts.chainRunId \n" + "and ts.id = tss.taskId"; org.hibernate.classic.Session session = HibernateTool.getSessionFactory().getCurrentSession(); session.beginTransaction(); Query query = session.createQuery(queryString); Long count = (Long) query.uniqueResult(); return count; } public ITableColumnModel createColumnModel() { return new ITableColumnModel() { //use a sorted set to have the columns sorted by key... private SortedMap<Integer, ITableColumn> mapping = new TreeMap<Integer, ITableColumn>(); { ITableColumnEvaluator columnEvaluator = new ITableColumnEvaluator() { public Object getColumnValue(ITableColumn iTableColumn, Object row) { Object[] dataSet = (Object[]) row; for (Map.Entry<Integer, ITableColumn> e : mapping.entrySet()) { Integer idx = e.getKey(); ITableColumn column = e.getValue(); if (column.getColumnName().equals(iTableColumn.getColumnName())) { Object value = dataSet[idx]; if (value instanceof Date) return DateUtil.dateTimeFormatCH.format(value); else return value; } } return null; } }; mapping.put(1, new SimpleTableColumn("t.targetIdAsString", "LIID", columnEvaluator, true)); mapping.put(2, new SimpleTableColumn("c.id", "Chain Run Id", columnEvaluator, true)); mapping.put(4, new SimpleTableColumn("ts.type", "Task Type", columnEvaluator, true)); mapping.put(5, new SimpleTableColumn("ts.status", "Status", columnEvaluator, true)); mapping.put(9, new SimpleTableColumn("tss.type", "Type", columnEvaluator, true)); mapping.put(10, new SimpleTableColumn("tss.occurrence", "Occurrence", columnEvaluator, true)); mapping.put(11, new SimpleTableColumn("tss.message", "Message", columnEvaluator, true)); } public ITableColumn getColumn(final String s) { for (ITableColumn iTableColumn : mapping.values()) { if (iTableColumn.getColumnName().equals(s)) return iTableColumn; } return null; } public int getColumnCount() { return mapping.size(); } public Iterator<ITableColumn> getColumns() { return mapping.values().iterator(); } }; } |