Search in sources :

Example 1 with WTable

use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.

the class WTableOptionsExample method createBasicDataTable.

/**
 * @return a basic table example.
 */
private WTable createBasicDataTable() {
    WTable table = new WTable();
    addColumns(table);
    table.setType(WTable.Type.TABLE);
    table.setRowsPerPage(DEFAULT_ROWS_PER_PAGE);
    table.setCaption("Basic table caption");
    table.setBeanProperty(".");
    // Setup model with column properties
    MyBeanBoundTableModel model = new MyBeanBoundTableModel(new String[] { "firstName", "lastName", "dateOfBirth" });
    model.setSelectable(true);
    model.setEditable(true);
    model.setComparator(0, SimpleBeanBoundTableModel.COMPARABLE_COMPARATOR);
    model.setComparator(1, SimpleBeanBoundTableModel.COMPARABLE_COMPARATOR);
    table.setTableModel(model);
    return table;
}
Also used : WTable(com.github.bordertech.wcomponents.WTable)

Example 2 with WTable

use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.

the class WTableOptionsExample method createHierarchicDataTable.

/**
 * @return a hierarchic table
 */
private WTable createHierarchicDataTable() {
    WTable table = new WTable();
    addColumns(table);
    table.setType(WTable.Type.HIERARCHIC);
    table.setRowsPerPage(DEFAULT_ROWS_PER_PAGE);
    table.setCaption("Hierarchic table caption");
    table.setBeanProperty(".");
    // Setup model with column properties and the "level" to iterate on (ie more details)
    MyBeanBoundTableModel model = new MyBeanBoundTableModel(new String[] { "firstName", "lastName", "dateOfBirth" }, "more");
    model.setIterateFirstLevel(true);
    model.setSelectable(true);
    model.setEditable(true);
    model.setComparator(0, SimpleBeanBoundTableModel.COMPARABLE_COMPARATOR);
    model.setComparator(1, SimpleBeanBoundTableModel.COMPARABLE_COMPARATOR);
    table.setTableModel(model);
    return table;
}
Also used : WTable(com.github.bordertech.wcomponents.WTable)

Example 3 with WTable

use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.

the class WTableRenderer method doRender.

@Override
public void doRender(final WComponent component, final WebXmlRenderContext renderContext) {
    WTable table = (WTable) component;
    XmlStringBuilder xml = renderContext.getWriter();
    xml.appendTagOpen("ui:table");
    xml.appendAttribute("id", component.getId());
    xml.appendOptionalAttribute("class", component.getHtmlClass());
    xml.appendOptionalAttribute("track", component.isTracking(), "true");
    xml.appendOptionalAttribute("hidden", table.isHidden(), "true");
    xml.appendOptionalAttribute("caption", table.getCaption());
    switch(table.getType()) {
        case TABLE:
            xml.appendAttribute("type", "table");
            break;
        case HIERARCHIC:
            xml.appendAttribute("type", "hierarchic");
            break;
        default:
            throw new SystemException("Unknown table type: " + table.getType());
    }
    switch(table.getStripingType()) {
        case ROWS:
            xml.appendAttribute("striping", "rows");
            break;
        case COLUMNS:
            xml.appendAttribute("striping", "cols");
            break;
        case NONE:
            break;
        default:
            throw new SystemException("Unknown striping type: " + table.getStripingType());
    }
    switch(table.getSeparatorType()) {
        case HORIZONTAL:
            xml.appendAttribute("separators", "horizontal");
            break;
        case VERTICAL:
            xml.appendAttribute("separators", "vertical");
            break;
        case BOTH:
            xml.appendAttribute("separators", "both");
            break;
        case NONE:
            break;
        default:
            throw new SystemException("Unknown separator type: " + table.getSeparatorType());
    }
    xml.appendClose();
    // Render margin
    MarginRendererUtil.renderMargin(table, renderContext);
    if (table.getPaginationMode() != PaginationMode.NONE) {
        paintPaginationDetails(table, xml);
    }
    if (table.getSelectMode() != SelectMode.NONE) {
        paintSelectionDetails(table, xml);
    }
    if (table.getExpandMode() != ExpandMode.NONE) {
        paintExpansionDetails(table, xml);
    }
    if (table.isSortable()) {
        paintSortDetails(table, xml);
    }
    paintColumnHeadings(table, renderContext);
    paintRows(table, renderContext);
    paintTableActions(table, renderContext);
    xml.appendEndTag("ui:table");
}
Also used : SystemException(com.github.bordertech.wcomponents.util.SystemException) WTable(com.github.bordertech.wcomponents.WTable) XmlStringBuilder(com.github.bordertech.wcomponents.XmlStringBuilder)

Example 4 with WTable

use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.

the class WTableRenderer method paintTableActions.

/**
 * Paints the table actions of the table.
 *
 * @param table the table to paint the table actions for.
 * @param renderContext the RenderContext to paint to.
 */
private void paintTableActions(final WTable table, final WebXmlRenderContext renderContext) {
    XmlStringBuilder xml = renderContext.getWriter();
    List<WButton> tableActions = table.getActions();
    if (!tableActions.isEmpty()) {
        boolean hasActions = false;
        for (WButton button : tableActions) {
            if (!button.isVisible()) {
                continue;
            }
            if (!hasActions) {
                hasActions = true;
                xml.appendTag("ui:actions");
            }
            xml.appendTag("ui:action");
            List<WTable.ActionConstraint> constraints = table.getActionConstraints(button);
            if (constraints != null) {
                for (WTable.ActionConstraint constraint : constraints) {
                    int minRows = constraint.getMinSelectedRowCount();
                    int maxRows = constraint.getMaxSelectedRowCount();
                    String message = constraint.getMessage();
                    String type = constraint.isError() ? "error" : "warning";
                    xml.appendTagOpen("ui:condition");
                    xml.appendOptionalAttribute("minSelectedRows", minRows > 0, minRows);
                    xml.appendOptionalAttribute("maxSelectedRows", maxRows > 0, maxRows);
                    xml.appendAttribute("selectedOnOther", this.selectedOnOther);
                    xml.appendAttribute("type", type);
                    xml.appendAttribute("message", I18nUtilities.format(null, message));
                    xml.appendEnd();
                }
            }
            button.paint(renderContext);
            xml.appendEndTag("ui:action");
        }
        if (hasActions) {
            xml.appendEndTag("ui:actions");
        }
    }
}
Also used : WTable(com.github.bordertech.wcomponents.WTable) XmlStringBuilder(com.github.bordertech.wcomponents.XmlStringBuilder) WButton(com.github.bordertech.wcomponents.WButton)

Example 5 with WTable

use of com.github.bordertech.wcomponents.WTable in project wcomponents by BorderTech.

the class WTableRowRendererRenderer method renderChildren.

/**
 * @param renderer the WTableRowRenderer to paint.
 * @param renderContext the RenderContext to paint to.
 * @param children the children ids
 */
private void renderChildren(final WTableRowRenderer renderer, final WebXmlRenderContext renderContext, final List<RowIdWrapper> children) {
    XmlStringBuilder xml = renderContext.getWriter();
    WTable table = renderer.getTable();
    WRepeater repeater = table.getRepeater();
    TableModel dataModel = table.getTableModel();
    // If there is a renderer specified by any child, we only paint content that has a specified renderer
    boolean rendererPresent = false;
    for (RowIdWrapper child : children) {
        if (dataModel.getRendererClass(child.getRowIndex()) != null) {
            rendererPresent = true;
            break;
        }
    }
    // Paint immediate children only.
    if (rendererPresent) {
        xml.appendTagOpen("ui:content");
        // Always span all columns
        xml.appendAttribute("spanAllCols", "true");
        xml.appendClose();
        for (RowIdWrapper child : children) {
            UIContext nodeContext = repeater.getRowContext(child, child.getPosition());
            WComponent expandedRenderer = renderer.getExpandedTreeNodeRenderer(dataModel.getRendererClass(child.getRowIndex()));
            if (expandedRenderer != null) {
                UIContextHolder.pushContext(nodeContext);
                try {
                    expandedRenderer.paint(renderContext);
                } finally {
                    UIContextHolder.popContext();
                }
            }
        }
        xml.appendEndTag("ui:content");
    } else {
        for (RowIdWrapper child : children) {
            UIContext nodeContext = repeater.getRowContext(child, child.getPosition());
            UIContextHolder.pushContext(nodeContext);
            try {
                render(renderer, renderContext);
            } finally {
                UIContextHolder.popContext();
            }
        }
    }
}
Also used : WComponent(com.github.bordertech.wcomponents.WComponent) RowIdWrapper(com.github.bordertech.wcomponents.WTable.RowIdWrapper) WTable(com.github.bordertech.wcomponents.WTable) UIContext(com.github.bordertech.wcomponents.UIContext) XmlStringBuilder(com.github.bordertech.wcomponents.XmlStringBuilder) WRepeater(com.github.bordertech.wcomponents.WRepeater) TableModel(com.github.bordertech.wcomponents.WTable.TableModel)

Aggregations

WTable (com.github.bordertech.wcomponents.WTable)38 WTableColumn (com.github.bordertech.wcomponents.WTableColumn)30 Test (org.junit.Test)30 WTextField (com.github.bordertech.wcomponents.WTextField)28 TableModel (com.github.bordertech.wcomponents.WTable.TableModel)25 AdapterBasicTableModel (com.github.bordertech.wcomponents.AdapterBasicTableModel)23 SimpleTableModel (com.github.bordertech.wcomponents.SimpleTableModel)23 WButton (com.github.bordertech.wcomponents.WButton)5 ActionConstraint (com.github.bordertech.wcomponents.WTable.ActionConstraint)4 XmlStringBuilder (com.github.bordertech.wcomponents.XmlStringBuilder)4 UIContext (com.github.bordertech.wcomponents.UIContext)3 RowIdWrapper (com.github.bordertech.wcomponents.WTable.RowIdWrapper)3 ArrayList (java.util.ArrayList)2 Margin (com.github.bordertech.wcomponents.Margin)1 LevelDetails (com.github.bordertech.wcomponents.SimpleBeanBoundTableModel.LevelDetails)1 WComponent (com.github.bordertech.wcomponents.WComponent)1 WRepeater (com.github.bordertech.wcomponents.WRepeater)1 SubUIContext (com.github.bordertech.wcomponents.WRepeater.SubUIContext)1 WTableRowRenderer (com.github.bordertech.wcomponents.WTableRowRenderer)1 WText (com.github.bordertech.wcomponents.WText)1