org.kino.client.clean.CleantProjectsWidget.java Source code

Java tutorial

Introduction

Here is the source code for org.kino.client.clean.CleantProjectsWidget.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package org.kino.client.clean;

import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.DateCell;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.http.client.Request;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.core.client.Style;
import com.sencha.gxt.core.client.dom.ScrollSupport;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.event.StoreUpdateEvent;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer;
import com.sencha.gxt.widget.core.client.container.CardLayoutContainer;
import com.sencha.gxt.widget.core.client.container.CenterLayoutContainer;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.form.FieldLabel;
import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
import com.sencha.gxt.widget.core.client.info.Info;
import com.sencha.gxt.widget.core.client.selection.SelectionChangedEvent;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.kino.client.CallbackWithFailureDialog;
import org.kino.client.ReadOnlyValueProvider;
import org.kino.client.Resources;
import org.kino.client.rpc.GWTServiceAsync;
import org.kino.client.theater.TheaterW;

/**
 *
 * @author kirio
 */

public class CleantProjectsWidget implements IsWidget {

    CardLayoutContainer cartLay = new CardLayoutContainer();
    BorderLayoutContainer border = new BorderLayoutContainer();
    VerticalLayoutContainer vert = new VerticalLayoutContainer();

    @Override
    public Widget asWidget() {
        return cartLay;
    }

    Integer current_id;

    public CleantProjectsWidget(String clinet_id) {

        try {
            int id = Integer.parseInt(clinet_id);
            current_id = id;
        } catch (NumberFormatException e) {
            CenterLayoutContainer msg_bg = new CenterLayoutContainer();
            HTML html = new HTML(
                    "<font color='red'>?  ?</font>");
            msg_bg.add(html);
            cartLay.add(msg_bg);
            cartLay.setActiveWidget(msg_bg);
            return;
        }

        CenterLayoutContainer msg_bg = new CenterLayoutContainer();
        VerticalPanel panel = new VerticalPanel();
        panel.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
        panel.add(new HTML("?..."));
        panel.add(new Image(Resources.INSTANCE.loading_bar()));
        msg_bg.add(panel, new MarginData(15));

        cartLay.add(msg_bg);
        cartLay.add(border);

        HorizontalPanel hor = new HorizontalPanel();
        hor.setHeight("40px");
        hor.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);
        hor.setVerticalAlignment(VerticalPanel.ALIGN_MIDDLE);
        hor.add(new HTML("? ?"));

        hor.getElement().getStyle().setBackgroundColor("#FDD");

        border.setNorthWidget(hor, new BorderLayoutContainer.BorderLayoutData(25));
        final ContentPanel cenPanel = new ContentPanel();
        cenPanel.setHeaderVisible(false);

        cenPanel.add(vert);
        cenPanel.addResizeHandler(new ResizeHandler() {

            @Override
            public void onResize(ResizeEvent event) {
                vert.forceLayout();
            }
        });

        border.setCenterWidget(cenPanel);

        GWTServiceAsync.instance.getTheaterMainData(current_id,
                new CallbackWithFailureDialog<TheaterW.TheaterMainData>(
                        "? ?   ") {

                    @Override
                    public void onSuccess(TheaterW.TheaterMainData result) {
                        if (result != null) {

                            init(result);
                            cartLay.setActiveWidget(border);
                            cartLay.forceLayout();
                        } else {

                            CenterLayoutContainer msg_bg = new CenterLayoutContainer();
                            HTML html = new HTML("<font color='red'>  </font>");
                            msg_bg.add(html);
                            cartLay.add(msg_bg);
                            cartLay.setActiveWidget(msg_bg);

                        }

                    }
                });

    }

    static public class Item implements IsSerializable {
        public int id;
        public String name;
        public long date_done;
        public long size;
        public String status;

        public Item(int id, String name, long date_done, long size, String status) {
            this.id = id;
            this.name = name;
            this.date_done = date_done;
            this.size = size;
            this.status = status;
        }

        public Item() {
        }

    }

    void init(TheaterW.TheaterMainData proj) {

        vert.setScrollMode(ScrollSupport.ScrollMode.AUTO);
        ToolBar bar = new ToolBar();
        vert.add(bar, new VerticalLayoutContainer.VerticalLayoutData(1, -1));

        // vert.add(new Label("?: "+proj.name),new VerticalLayoutContainer.VerticalLayoutData(1, -1, new Margins(10)));

        //HBoxLayoutContainer hbox = new HBoxLayoutContainer();

        //  vert.add(hbox,new VerticalLayoutContainer.VerticalLayoutData(1, -1));
        Label lab_county = new Label(proj.city);
        Label lab_city = new Label(proj.county);
        Label lab_name = new Label(proj.name);

        vert.add(new FieldLabel(lab_county, ""),
                new VerticalLayoutContainer.VerticalLayoutData(1, -1, new Margins(10, 10, 0, 10)));
        vert.add(new FieldLabel(lab_city, ""),
                new VerticalLayoutContainer.VerticalLayoutData(1, -1, new Margins(10, 10, 0, 10)));
        vert.add(new FieldLabel(lab_name, "?"),
                new VerticalLayoutContainer.VerticalLayoutData(1, -1, new Margins(10, 10, 0, 10)));
        // 
        //        hbox.add(lab_all_count,new BoxLayoutContainer.BoxLayoutData(new Margins(10)));
        //        hbox.add(lab_done_count,new BoxLayoutContainer.BoxLayoutData(new Margins(10)));
        //        hbox.add(lab_error_count,new BoxLayoutContainer.BoxLayoutData(new Margins(10)));
        //        

        final ProjectsGrid projectGrid = new ProjectsGrid(proj.uniqIdent);

        vert.add(projectGrid, new VerticalLayoutContainer.VerticalLayoutData(1, 1));
        projectGrid.load();

        TextButton but_refresh = new TextButton("", Resources.INSTANCE.refresh());
        final TextButton but_remove = new TextButton("", Resources.INSTANCE.cross_16());
        //   final TextButton but_play = new TextButton("?", Resources.INSTANCE.control_play());
        //  final TextButton but_pause = new TextButton("", Resources.INSTANCE.control_pause());
        //   but_play.setEnabled(false);
        //  but_pause.setEnabled(false);
        bar.add(but_refresh);
        bar.add(but_remove);
        //    bar.add(but_play);
        //    bar.add(but_pause);
        projectGrid.grid.getSelectionModel().setSelectionMode(Style.SelectionMode.MULTI);
        projectGrid.grid.getSelectionModel()
                .addSelectionChangedHandler(new SelectionChangedEvent.SelectionChangedHandler<Item>() {
                    @Override
                    public void onSelectionChanged(SelectionChangedEvent<Item> event) {
                        but_remove.setEnabled(!projectGrid.grid.getSelectionModel().getSelectedItems().isEmpty());

                    }
                });
        but_refresh.addSelectHandler(new SelectEvent.SelectHandler() {

            @Override
            public void onSelect(SelectEvent event) {
                //conreteProjectGrid.load(true);
                Window.Location.reload();

            }
        });
        but_remove.setEnabled(false);
        but_remove.addSelectHandler(new SelectEvent.SelectHandler() {

            @Override
            public void onSelect(SelectEvent event) {
                final List<Item> selectedItems = projectGrid.grid.getSelectionModel().getSelectedItems();
                if (selectedItems.isEmpty())
                    return;
                ArrayList<Integer> idList = new ArrayList<>(selectedItems.size());
                for (Item item : selectedItems) {
                    idList.add(item.id);
                    //  item.status = "removing";
                }
                //projectGrid.grid.getStore().fireEvent(new StoreUpdateEvent<Item>(selectedItems)); 
                if (idList.isEmpty())
                    return;
                GWTServiceAsync.instance.markForRemove(idList,
                        new CallbackWithFailureDialog<Void>(" ") {
                            @Override
                            public void onSuccess(Void result) {
                                //Window.alert("   ");
                                for (Item item : selectedItems) {
                                    projectGrid.grid.getStore().remove(item);
                                }

                                Info.display("",
                                        "?   !");

                            }
                        });
            }
        });

    }

    class ProjectsGrid implements IsWidget {

        Grid<Item> grid;

        @Override
        public Widget asWidget() {
            return grid;
        }

        Request last_request;
        static final int PAGE_SIZE = 20;

        public ProjectsGrid(String client_uniq_ident) {
            this.client_uniq_ident = client_uniq_ident;
            final ColumnConfig<Item, String> col_name = new ColumnConfig<Item, String>(
                    new ReadOnlyValueProvider<Item, String>("name") {

                        @Override
                        public String getValue(Item object) {
                            return object.name;
                        }
                    }, 200, "?");

            final ColumnConfig<Item, Long> col_size = new ColumnConfig<Item, Long>(
                    new ReadOnlyValueProvider<Item, Long>("name") {

                        @Override
                        public Long getValue(Item object) {
                            return object.size;
                        }
                    }, 200, "");

            final ColumnConfig<Item, Date> col_date_done = new ColumnConfig<Item, Date>(
                    new ReadOnlyValueProvider<Item, Date>("date_accept") {

                        @Override
                        public Date getValue(Item object) {
                            return new Date(object.date_done);
                        }
                    }, 100, " ");
            final ColumnConfig<Item, Boolean> col_remove = new ColumnConfig<Item, Boolean>(
                    new ReadOnlyValueProvider<Item, Boolean>("remove_tag") {

                        @Override
                        public Boolean getValue(Item object) {
                            return (!object.status.equals("done"));
                        }
                    }, 100, "?");

            CheckBoxSelectionModel<Item> checkSelectionModel = new CheckBoxSelectionModel<Item>();
            List<ColumnConfig<Item, ?>> listColumns = new ArrayList<ColumnConfig<Item, ?>>();
            listColumns.add(col_name);
            listColumns.add(col_size);
            listColumns.add(col_date_done);
            listColumns.add(col_remove);

            col_size.setCell(new AbstractCell<Long>() {
                com.google.gwt.i18n.client.NumberFormat decimalFormat = com.google.gwt.i18n.client.NumberFormat
                        .getFormat(".##");

                @Override
                public void render(Cell.Context context, Long value, SafeHtmlBuilder sb) {

                    double val;
                    String suffix;
                    if (value == 0) {
                        val = 0;
                        suffix = "";
                    } else if (value < 1024) {
                        val = value;
                        suffix = " ";

                    } else if (value < (1024 * 1024)) {
                        val = ((double) value) / (1024);
                        suffix = " ";
                    } else if (value < (1024 * 1024 * 1024)) {
                        val = ((double) value) / (1024 * 1024);
                        suffix = " M";
                    } else {
                        val = ((double) value) / (1024 * 1024 * 1024);
                        suffix = " ";

                    }
                    sb.appendHtmlConstant(decimalFormat.format(val) + suffix);

                }
            });
            listColumns.add(checkSelectionModel.getColumn());
            col_date_done.setCell(new DateCell(DateTimeFormat.getFormat("MM/dd/yyyy hh:mm:ss")) {

                @Override
                public void render(Cell.Context context, Date value, SafeHtmlBuilder sb) {
                    if (value.getTime() == 0)
                        sb.appendEscaped("-");
                    else
                        super.render(context, value, sb); //To change body of generated methods, choose Tools | Templates.
                }

            });

            col_remove.setCell(new AbstractCell<Boolean>() {

                @Override
                public void render(Cell.Context context, Boolean value, SafeHtmlBuilder sb) {
                    if (value == false)
                        return;

                    sb.appendHtmlConstant(" ?...");

                }

            });

            for (ColumnConfig<Item, ?> columnConfig : listColumns) {
                columnConfig.setSortable(false);
                columnConfig.setMenuDisabled(true);
            }
            ColumnModel<Item> cm = new ColumnModel<Item>(listColumns);

            final ListStore<Item> store = new ListStore<Item>(new ModelKeyProvider<Item>() {

                @Override
                public String getKey(Item item) {
                    return String.valueOf(item.id);
                }
            });

            grid = new Grid<Item>(store, cm);
            grid.setSelectionModel(checkSelectionModel);

            grid.getView().setEmptyText("?");

        }

        String client_uniq_ident;

        private void load() {

            //last_request = 

            grid.mask("...");
            if (last_request != null)
                last_request.cancel();
            last_request = GWTServiceAsync.instance.getClientsNotRemovedProjects(client_uniq_ident,
                    new CallbackWithFailureDialog<ArrayList<Item>>(
                            "? ?  ") {

                        @Override
                        public void onSuccess(ArrayList<Item> result) {
                            grid.unmask();
                            grid.getStore().replaceAll(result);

                        }
                    });

        }
    }

}