it.filosganga.mobile.widgets.component.TableHeader.java Source code

Java tutorial

Introduction

Here is the source code for it.filosganga.mobile.widgets.component.TableHeader.java

Source

/*
 * $Id$
 * 
 * This file is released under the GNU General Public License. 
 * Refer to the COPYING file distributed with this package.
 *
 * Copyright (c) 2008 WURFL-Pro S.r.l.
 */
package it.filosganga.mobile.widgets.component;

import static ch.lambdaj.Lambda.*;

import java.util.*;

import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.*;

/**
 * @author Filippo De Luca
 * @version $Id$
 */
public class TableHeader extends Component {

    private static final long serialVersionUID = 10L;

    private List<TableColumn> columns = new ArrayList<TableColumn>();

    public TableHeader(List<TableColumn> columns) {

        if (columns != null) {
            setColumns(columns);
        }
    }

    public List<TableColumn> getColumns() {
        return columns;
    }

    public int getColumnsSize() {

        return sum(extractProperty(columns, "colspan")).intValue();
    }

    // Business methods ***************************************************

    @Override
    public void accept(final ComponentVisitor visitor) throws ComponentException {

        super.accept(visitor);
        forEach(columns).accept(visitor);
    }

    public Table getTable() {
        return (Table) getParent();
    }

    public TableColumn getColumnAtIndex(int index) {

        TableColumn column = null;

        int columnIndex = 0;
        Iterator<TableColumn> columnIt = columns.iterator();
        while (columnIndex <= index && columnIt.hasNext()) {
            column = columnIt.next();
            columnIndex = columnIndex + column.getColspan();
        }

        return column;
    }

    public int getColumnIndex(TableColumn column) {

        Validate.isTrue(columns.contains(column), "The given cell must be child of this row");

        return sum(extractProperty(columns.subList(0, columns.indexOf(column)), "colspan")).intValue();
    }

    // Support methods ****************************************************

    private void setColumns(List<TableColumn> columns) {

        for (TableColumn column : columns) {
            addColumn(column);
        }

    }

    private void addColumn(TableColumn column) {

        Validate.notNull(column);

        if (columns.add(column)) {
            column.setParent(this);
        }
    }

    // Common methods *****************************************************

    @Override
    public boolean equals(Object obj) {
        EqualsBuilder builder = new EqualsBuilder();

        builder.appendSuper(super.equals(obj));
        if (builder.isEquals() && obj instanceof TableHeader) {
            TableHeader other = (TableHeader) obj;
            builder.append(columns, other.columns);
        }

        return builder.isEquals();
    }

    @Override
    public int hashCode() {
        HashCodeBuilder builder = new HashCodeBuilder();
        builder.appendSuper(super.hashCode());

        builder.append(columns);

        return builder.toHashCode();
    }

    @Override
    public String toString() {
        ToStringBuilder builder = new ToStringBuilder(this);

        builder.appendSuper(super.toString());
        builder.append(columns);

        return builder.toString();
    }
}