com.goodow.web.dev.client.ui.TreeNodeListView.java Source code

Java tutorial

Introduction

Here is the source code for com.goodow.web.dev.client.ui.TreeNodeListView.java

Source

/*
 * Copyright 2012 Goodow.com
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.goodow.web.dev.client.ui;

import com.goodow.web.mvp.shared.ActivityAware;
import com.goodow.web.mvp.shared.ActivityState;
import com.goodow.web.mvp.shared.BasePlace;
import com.goodow.web.mvp.shared.tree.TreeNodeProxy;
import com.goodow.web.mvp.shared.tree.rpc.TreeNodeDataProvider;
import com.goodow.web.mvp.shared.tree.rpc.TreeNodeFactory;

import com.google.gwt.cell.client.TextCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.place.shared.PlaceController;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.HasName;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.inject.Inject;
import com.google.inject.Provider;

public class TreeNodeListView extends Composite implements ActivityAware {
    interface Binder extends UiBinder<Widget, TreeNodeListView> {
    }

    interface TableResources extends DataGrid.Resources {
        @Override
        @Source(value = { DataGrid.Style.DEFAULT_CSS, "DataGridPatch.css" })
        DataGrid.Style dataGridStyle();
    }

    private static class NameCol extends TextColumn<TreeNodeProxy> implements HasName {

        private String name;

        @Override
        public String getName() {
            return name;
        }

        @Override
        public String getValue(final TreeNodeProxy object) {
            return object.getName();
        }

        @Override
        public void setName(final String name) {
            this.name = name;
        }

    }

    private static class PathCol extends Column<TreeNodeProxy, String> implements HasName {
        private String name;

        public PathCol() {
            super(new TextCell());
        }

        @Override
        public String getName() {
            return name;
        }

        @Override
        public String getValue(final TreeNodeProxy object) {
            return object.getPath();
        }

        @Override
        public void setName(final String name) {
            this.name = name;
        }
    }

    private static final int NUM_ROWS = 10;

    private static Binder binder = GWT.create(Binder.class);

    @UiField
    DockLayoutPanel dock;

    @UiField(provided = true)
    SimplePager pager = new SimplePager();

    @UiField(provided = true)
    DataGrid<TreeNodeProxy> grid;

    private final PlaceController placeController;

    private final TreeNodeFactory f;

    private final Provider<BasePlace> place;

    private ActivityState state;

    private final TreeNodeDataProvider dtatProvider;

    @Inject
    TreeNodeListView(final TreeNodeFactory f, final SingleSelectionModel<TreeNodeProxy> selectionModel,
            final PlaceController placeController, final Provider<BasePlace> place,
            final TreeNodeDataProvider dtatProvider) {
        this.placeController = placeController;
        this.place = place;
        this.dtatProvider = dtatProvider;
        this.f = f;

        grid = new DataGrid<TreeNodeProxy>(NUM_ROWS, GWT.<TableResources>create(TableResources.class));

        grid.setSelectionModel(selectionModel);
        grid.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED);

        PathCol pathCol = new PathCol();
        // ?????
        pathCol.setName("path");
        pathCol.setSortable(true);
        grid.addColumn(pathCol, "Path");
        grid.setColumnWidth(pathCol, "40ex");

        NameCol nameCol = new NameCol();
        nameCol.setName("name");
        nameCol.setSortable(true);
        grid.addColumn(nameCol, "Name");
        grid.setColumnWidth(nameCol, "25ex");

        grid.addColumnSortHandler(new ColumnSortEvent.AsyncHandler(grid));
        grid.setRowCount(NUM_ROWS, false);
        dtatProvider.addDataDisplay(grid);
        pager.setDisplay(grid);
        selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            @Override
            public void onSelectionChange(final SelectionChangeEvent event) {
                TreeNodeProxy proxy = selectionModel.getSelectedObject();
                BasePlace newPlace = place.get().setParameter(state.getName(), f.getHistoryToken(proxy.stableId()));
                placeController.goTo(newPlace);
            }
        });
        initWidget(binder.createAndBindUi(this));
    }

    @Override
    public void onStart(final ActivityState state) {
        this.state = state;
    }

    @UiHandler("create")
    void onCreate(final ClickEvent event) {
        placeController.goTo(place.get().setParameter(state.getName(), f.getHistoryToken(TreeNodeProxy.class)));
    }
}