com.toedter.gwt.demo.contacts.client.ui.ContactListView2.java Source code

Java tutorial

Introduction

Here is the source code for com.toedter.gwt.demo.contacts.client.ui.ContactListView2.java

Source

/*******************************************************************************
 * Copyright (c) 2012 Kai Toedter and others.
 * 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html.
 * 
 * Contributors:
 *     Kai Toedter - initial API and implementation
 ******************************************************************************/

package com.toedter.gwt.demo.contacts.client.ui;

import java.util.Comparator;
import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.CellTable.Resources;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import com.toedter.gwt.demo.contacts.shared.Contact;

public class ContactListView2 extends Composite implements IContactListView {

    private static ContactListView2UiBinder uiBinder = GWT.create(ContactListView2UiBinder.class);

    @UiField(provided = true)
    CellTable<Contact> cellTable = new CellTable<Contact>(1000, (Resources) GWT.create(TableResources.class));

    private List<Contact> list;

    private Presenter presenter;

    interface ContactListView2UiBinder extends UiBinder<Widget, ContactListView2> {
    }

    public ContactListView2() {
        initWidget(uiBinder.createAndBindUi(this));

        cellTable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);

        // Create first name column.
        TextColumn<Contact> firstNameColumn = new TextColumn<Contact>() {
            @Override
            public String getValue(Contact contact) {
                return contact.getFirstName();
            }
        };

        // Make the first name column sortable.
        firstNameColumn.setSortable(true);

        // Create last name column.
        TextColumn<Contact> lastNameColumn = new TextColumn<Contact>() {
            @Override
            public String getValue(Contact contact) {
                return contact.getLastName();
            }
        };

        // Make the last name column sortable.
        lastNameColumn.setSortable(true);

        // Add the columns.
        cellTable.addColumn(firstNameColumn, "First Name");
        cellTable.addColumn(lastNameColumn, "Last Name");

        // Create a data provider.
        ListDataProvider<Contact> dataProvider = new ListDataProvider<Contact>();

        // Connect the table to the data provider.
        dataProvider.addDataDisplay(cellTable);

        list = dataProvider.getList();

        // Add a ColumnSortEvent.ListHandler to connect sorting to the
        // java.util.List.
        ListHandler<Contact> columnSortHandler = new ListHandler<Contact>(list);
        columnSortHandler.setComparator(firstNameColumn, new Comparator<Contact>() {
            @Override
            public int compare(Contact o1, Contact o2) {
                if (o1 == o2) {
                    return 0;
                }

                // Compare the first name columns.
                if (o1 != null) {
                    return (o2 != null) ? o1.getFirstName().compareTo(o2.getFirstName()) : 1;
                }
                return -1;
            }
        });
        columnSortHandler.setComparator(lastNameColumn, new Comparator<Contact>() {
            @Override
            public int compare(Contact o1, Contact o2) {
                if (o1 == o2) {
                    return 0;
                }

                // Compare the last name columns.
                if (o1 != null) {
                    return (o2 != null) ? o1.getLastName().compareTo(o2.getLastName()) : 1;
                }
                return -1;
            }
        });
        cellTable.addColumnSortHandler(columnSortHandler);

        // Add a selection model to handle user selection.
        final SingleSelectionModel<Contact> selectionModel = new SingleSelectionModel<Contact>();
        cellTable.setSelectionModel(selectionModel);
        selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            @Override
            public void onSelectionChange(SelectionChangeEvent event) {
                Contact selectedContact = selectionModel.getSelectedObject();
                System.out.println("ContactListView2 .onSelectionChange()");
                presenter.select(selectedContact);
            }
        });
    }

    @Override
    public void setWidget(IsWidget w) {
        // TODO Auto-generated method stub

    }

    @Override
    public void setPresenter(Presenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public void selectInitialRow(int i) {
        // not used, use setInitialContact instead
    }

    @Override
    public void initialize(List<Contact> contacts) {
        list.clear();
        for (Contact contact : contacts) {
            list.add(contact);
        }
        // sort first names
        cellTable.getColumnSortList().push(cellTable.getColumn(0));

    }

    @Override
    public void selectInitialContact(Contact contact) {
        cellTable.getSelectionModel().setSelected(contact, true);
    }

}