GWT Java

package com.rntsoft.gwt.client;
import java.util.*;
import java.util.Set;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.SourcesTableEvents;
import com.google.gwt.user.client.ui.TableListener;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.HistoryListener;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SourcesTableEvents;
import com.google.gwt.user.client.ui.TableListener;
public class GWTClient implements EntryPoint, HistoryListener {
    private Table table;
    
    private void getData(){
        ArrayList values = new ArrayList();
        
        values.add( new Person ("A", "H", "E", "6" ));
        values.add( new Person("B", "G",  "E", "19" ));
        values.add( new Person("C", "F", "A", "17" ));
        values.add( new Person( "D", "E", "A" , "17"));
        
        table.setSource( new SimpleDataSource( (Person[]) values.toArray( new Person[values.size()]) ) );
    }
    
    public void onModuleLoad() {
        table = new Table( null, "myTable" );
        table.setStyleName("myTable");
        RootPanel.get().add(table);
        getData();
        
        table.addTableListener( new TableListener(){
            public void onCellClicked(SourcesTableEvents sender, 
                int row, int cell) {
                History.newItem( ""+row );
            }
        });
        History.addHistoryListener( this );
    }
    
    public void onHistoryChanged(String historyToken){
        table.onCellClicked( table, Integer.parseInt( historyToken ), 0);
    }
    
}
 class Person {
    
    public String firstName;
    public String lastName;
    public String company;
    public String counts;
    
    public Person() {
    }
    
    public Person( String firstName, String lastName, String company, String counts ){
        this.firstName = firstName;
        this.lastName = lastName;
        this.company = company;
        this.counts = counts;
    }
    
}
class Table extends FlexTable implements TableListener {
    private String headerStyle;
    private String selectedStyle;
    private TableDataSource source;
    private int selectedRow;
    
    public Table(TableDataSource source, String stylePrefix) {
        super();
        this.setCellPadding(1);
        this.setCellSpacing(0);
        this.setWidth("100%");
        this.selectedStyle = stylePrefix + "-selected";
        this.headerStyle = stylePrefix + "-header";
        this.addTableListener(this);
        this.setSource( source );
        
        sinkEvents(Event.ONMOUSEDOWN | Event.ONMOUSEUP | Event.ONMOUSEOVER |Event.ONMOUSEOUT);         
    }
    public void onBrowserEvent(Event event) {
            Element td = getEventTargetCell(event);
            if (td == null) return;
            Element tr = DOM.getParent(td);
            switch (DOM.eventGetType(event)) {
                    case Event.ONMOUSEDOWN: {
                            DOM.setStyleAttribute(tr, "backgroundColor", "#ffce00");
                            onRowClick(tr);
                            break;
                    }
                    case Event.ONMOUSEUP: {
                            DOM.setStyleAttribute(tr, "backgroundColor", "#ffffff");
                            break;
                    }
                    case Event.ONMOUSEOVER: {
                            DOM.setStyleAttribute(tr, "backgroundColor", "#ffce00");
                            onRowRollover(tr);
                            break;
                    }
                    case Event.ONMOUSEOUT: {
                            DOM.setStyleAttribute(tr, "backgroundColor","#ffffff");
                            break;
                }
        }
    
    }
    public void onRowClick(Element event){
           
    
    }
    public void onRowRollover(Element event){
           
    
    }
    public void onCellClicked(SourcesTableEvents sender, 
                int row, int cell) {
        this.getRowFormatter()
                .removeStyleName(selectedRow, selectedStyle);
        if ((source.getHeaderRow() == null) || (row > 0)) {
            this.getRowFormatter()
                .addStyleName(row, selectedStyle);
            selectedRow = row;
        }
    }
    
    public void setSource( TableDataSource source ){
        for( int i = this.getRowCount(); i > 0; i-- ){
            this.removeRow( 0 );
        }
        if( source == null ){
            return;
        }
        
        int row = 0;
        String[] headers = source.getHeaderRow();
        if( headers != null ){
            for( int i=0; i < headers.length; i++ ){
                this.setText( row, i , headers[i] );
            }
            this.getRowFormatter().addStyleName( row, headerStyle );
            row++;
        }
        int rows = source.getRowCount();
        for( int i=0 ; i             String[] values = source.getRow(i);
            for( int col=0; col < values.length; col++ ){
                this.setText( row, col, values[col] );
            }
            row++;
        }
        this.selectedRow = 0;
        this.source = source;
    }
}
 class SimpleDataSource implements TableDataSource {
    
    private String[] headers; 
    private String[][] data;
    
    public SimpleDataSource(Person[] people) {
        super();
        String[] headers = { "First Name", "Last Name", "Company", "Counts" };
        this.headers = headers;
        this.data = new String[people.length][4];
        for( int i=0; i < people.length ; i++ ){
            Person p = people[i];
            this.data[i][0] = p.firstName;
            this.data[i][1] = p.lastName;
            this.data[i][2] = p.company;
            this.data[i][3] = p.counts;
        }
    }
    public int getRowCount() {
        return data.length;
    }
    public String[] getRow(int i) {
        return data[i];
    }
    public String[] getHeaderRow() {
        return headers;
    }
   
}
interface TableDataSource {
    
    public String[] getHeaderRow();
    
    public int getRowCount();
    
    public String[] getRow(int row);
    
}
           
         
  
GWT-TableonBrowserEvent.zip( 4 k)