com.itgp.gwtviz.client.ui.config.WindowDataSubset.java Source code

Java tutorial

Introduction

Here is the source code for com.itgp.gwtviz.client.ui.config.WindowDataSubset.java

Source

/* 
 * The MIT License
 *
 * Copyright 2015 InsiTech LLC.   gwtvis@insitechinc.com
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package com.itgp.gwtviz.client.ui.config;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.itgp.gwtviz.client.ui.ConfigPanel_1;
import com.itgp.gwtviz.client.ui.MainDesktop;
import com.itgp.gwtviz.client.ui.UIUtility;
import com.itgp.gwtviz.client.ui.widget.WindowBase;
import com.itgp.gwtviz.shared.gconfig.GraphConfigImpl_1;
import com.itgp.gwtviz.shared.gconfig.GraphConfigUtility;
import com.itgp.gwtviz.shared.model.Item;
import com.itgp.gwtviz.shared.model.ItemUtil;
import com.sencha.gxt.core.client.Style.SelectionMode;
import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.TabItemConfig;
import com.sencha.gxt.widget.core.client.TabPanel;
import com.sencha.gxt.widget.core.client.Window;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack;
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer;
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.form.PasswordField;
import com.sencha.gxt.widget.core.client.form.TextField;

public class WindowDataSubset extends WindowBase {

    VerticalLayoutContainer windowPanel;
    ContentPanel parameterPanel;
    int gridPanelCounter = 0;

    TextField userNameTF;
    PasswordField passwordTF;
    Label signOnStatus;

    MainDesktop topWindow;
    Window myWindow;

    DualFieldSelector columnSelector;
    DualFieldSelector dataSelector;
    List<Item> columnData;
    List<Item> dataSelected;
    ItemGrid columnGrid;

    VerticalLayoutContainer previewVLC;

    private TabPanel tabPanelMain;
    private ConfigPanel_1 configPanel_1;
    private GraphConfigImpl_1 graphConfigImpl;
    //private String mRouteURL;

    public enum Type {
        CLEAR
    }

    private List<Item> filteredItems;
    private String initalConfigState;

    public WindowDataSubset(GraphConfigImpl_1 graphConfigImpl, ConfigPanel_1 configPanel_1,
            List<Item> filteredItems) {
        super();
        //this.mRouteURL =MainDesktop.getMRouteURL();
        this.graphConfigImpl = graphConfigImpl;
        this.configPanel_1 = configPanel_1;
        this.filteredItems = filteredItems;
        this.myWindow = this;

        setResizable(false);
        initalConfigState = GraphConfigUtility.toJson_v1(graphConfigImpl);
        MainDesktop.consoleLog("initalConfigState" + initalConfigState);
        init();
    }

    public boolean hasChanges() {
        if (initalConfigState == null) {
            return false;
        }
        String initialConfigFilter = "";
        GraphConfigImpl_1 initialConfig = (GraphConfigImpl_1) GraphConfigUtility
                .graphConfigImplfromJson(initalConfigState);
        List<Item> initialFilter = ItemUtil.convert(initialConfig.getFilterColumns());

        initialConfig.setFilterColumns(ItemUtil.convert(columnSelector.getRightColumnValues()));

        List<Item> existingFilter = ItemUtil.convert(initialConfig.getFilterColumns());

        return hasChanges(initialFilter, existingFilter);

        //      MainDesktop.consoleLog("initialConfigFilter:"+initialConfigFilter);
        //      MainDesktop.consoleLog("currentConfigFilter:"+currentConfigFilter);
        //      if(initialConfigFilter.equals(currentConfigFilter)){
        //         return false;
        //      }else{
        //         return true;
        //      }
    }

    private boolean hasChanges(List<Item> srcList, List<Item> destList) {

        if (srcList.containsAll(destList)) {
            if (destList.containsAll(srcList)) {
                return false;
            } else {
                return true;
            }
        } else {
            return true;
        }
    }

    public void init() {
        // setTitle("Select Columns and Rows");
        setMaximizable(true);
        setResizable(true);
        // setLayout(new FitLayout());
        // setWidth(350);
        // setHeight(130);
        setModal(true);
        setHeadingText("Select Columns and Rows");

        //Viewport viewPort = new Viewport();

        windowPanel = new VerticalLayoutContainer();
        // windowPanel.setHeight("100%");
        windowPanel.setShadow(true);
        // windowPanel.setLayout(new RowLayout());
        // windowPanel.setBorder(true);

        // parameterPanel = getParameterPanel();
        // background-color: #F0F0F0;

        //viewPort.add(windowPanel);

        windowPanel.add(makeTabPanel(), new VerticalLayoutData(1, 1));
        windowPanel.add(getControlButtons(), new VerticalLayoutData(1, -1, new Margins(2, 0, 2, 0)));
        windowPanel.setId("DataSubsetWindow_windowPanel");
        // windowPanel.setStyleName("gwtviz.background.gray", true);
        windowPanel.getElement().getStyle().setProperty("backgroundColor", "#F0F0F0");
        // windowPanel.setBodyStyle("background-color:#F0F0F0;");
        setId("DataSubsetWindow");
        //ContentPanel cp = new ContentPanel();
        //cp.setWidget(viewPort);

        add(windowPanel);

    }

    private void syncDataOnSave() {
        if (dataSelected == null || dataSelected.size() == 0) {
            //if nothing is set to go back, 
            //lets make sure that nothing was selected on the column tab
            dataSelected = new ArrayList<Item>(columnSelector.getRightColumnValues());
        }
    }

    public HBoxLayoutContainer getControlButtons() {
        HBoxLayoutContainer hlc = new HBoxLayoutContainer();
        hlc.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE);
        hlc.setPack(BoxLayoutPack.END);

        //hlc.setHBoxLayoutAlign(HBoxLayoutAlign.BOTTOM);
        TextButton resetButton = new TextButton("Reset");
        resetButton.addSelectHandler(new SelectHandler() {
            @Override
            public void onSelect(SelectEvent event) {
                GraphConfigUtility.clearGCI(graphConfigImpl);
                NotifyPayload np = new NotifyPayload(myWindow, myWindow.getClass().getName(), null);
                np.setType(Type.CLEAR.name());
                configPanel_1.processNotify(np);
                myWindow.hide();
            }
        });

        TextButton saveButton = new TextButton("Save");
        saveButton.addSelectHandler(new SelectHandler() {
            @Override
            public void onSelect(SelectEvent event) {
                int TabNumber = tabPanelMain.getWidgetIndex(tabPanelMain.getActiveWidget());
                syncDataOnSave();

                graphConfigImpl.setFilterColumns(ItemUtil.convert(dataSelected));

                NotifyPayload np = new NotifyPayload(myWindow, myWindow.getClass().getName(), null);
                configPanel_1.processNotify(np);
                initalConfigState = GraphConfigUtility.toJson_v1(graphConfigImpl);
            }
        });

        TextButton closeButton = new TextButton("Close");
        closeButton.addSelectHandler(new SelectHandler() {
            @Override
            public void onSelect(SelectEvent event) {
                myWindow.hide();
            }
        });

        TextButton changesButton = new TextButton("changes");
        changesButton.addSelectHandler(new SelectHandler() {
            @Override
            public void onSelect(SelectEvent event) {
                GraphConfigImpl_1 temp = GraphConfigUtility.makeGraphConfigImpl_1();
                temp.setFilterColumns(ItemUtil.convert(new ArrayList<Item>(columnSelector.getRightColumnValues())));
                String s = GraphConfigUtility.toJson_v1(temp);

                String newVersion = "Changes " + dataSelector.hasChanges() + "  Data: " + s;
                String newOld = GraphConfigUtility.toJson_v1(graphConfigImpl);
                com.google.gwt.user.client.Window.alert(newVersion);
                MainDesktop.consoleLog("NEW:" + newVersion);
                MainDesktop.consoleLog("OLD:" + newOld);

            }
        });

        //      TextButton printButton = new TextButton("Print");
        //      printButton.addSelectHandler(new SelectHandler() {
        //         @Override
        //         public void onSelect(SelectEvent event) {
        //            System.out.println(GraphConfigUtility.toJson_v1(graphConfigImpl));         
        //         }
        //      });
        //hlc.getLayoutData();
        //BoxLayoutData b;
        //hlc.setHBoxLayoutAlign(HBoxLayoutAlign.);
        hlc.add(resetButton, new BoxLayoutData());
        hlc.add(saveButton);
        hlc.add(closeButton);
        //hlc.add(changesButton);
        //hlc.add(printButton);

        return hlc;

    }

    private TabPanel makeTabPanel() {
        tabPanelMain = new TabPanel();
        // tabPanelMain.setPixelSize(600, 250);
        // tabPanelMain.setHeight("100%");
        tabPanelMain.setAnimScroll(true);
        tabPanelMain.setTabScroll(true);
        tabPanelMain.setCloseContextMenu(true);
        tabPanelMain.addSelectionHandler(new SelectionHandler<Widget>() {
            @Override
            public void onSelection(SelectionEvent<Widget> event) {
                TabPanel panel = (TabPanel) event.getSource();
                Widget w = event.getSelectedItem();
                int tabID = panel.getWidgetIndex(w);
                if (tabID == 1) {
                    Item item = columnGrid.getSelectedItem();
                    loadRowData();
                    columnGrid.selectedItem(item);
                } else if (tabID == 2) {
                    makePreviewTable();
                }
            }
        });

        addMyTab(makeColumnsTab(), "Columns");
        addMyTab(makeRowsTab(), "Rows");
        addMyTab(makePreviewTab(), "Filter Summary");

        tabPanelMain.setActiveWidget(tabPanelMain.getWidget(0));
        return tabPanelMain;
    }

    private void addMyTab(IsWidget w, String tabName) {
        tabPanelMain.add(w, new TabItemConfig(tabName, false));
        // tabPanelMain.setActiveWidget(tabPanelMain.getWidget(tabPanelMain.getWidgetCount() - 1));
    }

    public Widget makeColumnsTab() {
        ContentPanel cp = new ContentPanel();
        cp.getHeader().hide();

        //      MRoute mroute = new MRoute();
        //      AutoBean<Columns> columnsBean = AutoBeanCodex.decode(mroute.columnsFactory, Columns.class, MRoute.getJsonColumns());
        //      Columns columns = columnsBean.as();
        //      columnData = ItemUtil.convert(columns);

        columnSelector = new DualFieldSelector(columnData, "Filter Columns...", graphConfigImpl,
                DualFieldSelector.SortType.NUMERIC, DualFieldSelector.SortType.NONE, null);
        cp.setWidget(columnSelector);

        columnSelector.setData(filteredItems);

        //ServerComm.getAllMRouteColumns(mRouteURL, graphConfigImpl.getDataSourceID(), columnSelector);

        VerticalLayoutContainer vlc = new VerticalLayoutContainer();
        vlc.add(columnSelector.asWidget(), new VerticalLayoutData(1, 1, new Margins(5)));
        vlc.forceLayout();
        return vlc;
    }

    public Widget makeRowsTab() {
        // ContentPanel cp = new ContentPanel();
        // cp.getHeader().hide();

        // MRoute mroute = new MRoute();
        // AutoBean<Data> dataBean = AutoBeanCodex.decode(mroute.dataFactory, Data.class, MRoute.getJsonData());
        // Data data = dataBean.as();
        dataSelected = new ArrayList<Item>();
        dataSelector = new DualFieldSelector(dataSelected, "Filter Data...", graphConfigImpl,
                DualFieldSelector.SortType.ALPHA, DualFieldSelector.SortType.ALPHA, null);
        columnGrid = new ItemGrid(dataSelected, true, SelectionMode.SINGLE, dataSelector,
                ItemGrid.GridType.HIDE_CHECKBOX);
        dataSelector.setINotify(columnGrid);

        //      TextButton applyButton = new TextButton("Apply");
        //      applyButton.addSelectHandler(new SelectHandler() {
        //         @Override
        //         public void onSelect(SelectEvent event) {
        //            columnGrid.saveCurrentSelection();         
        //         }
        //      });
        //      

        VerticalLayoutContainer vlc = new VerticalLayoutContainer();
        vlc.add(dataSelector.asWidget(), new VerticalLayoutData(1, .5, new Margins(5)));
        vlc.add(columnGrid.asWidget(), new VerticalLayoutData(1, .5, new Margins(5)));
        //vlc.add(applyButton, new VerticalLayoutData(1, -1, new Margins(5,0,5,16)));
        vlc.forceLayout();
        // cp.setWidget(vlc);

        return vlc;
    }

    private void loadRowData() {
        dataSelected.clear();
        dataSelected.addAll(columnSelector.getRightColumnValues());
        //dataSelector.setLeftColumnData(dataSelected);//,true);

        columnGrid.setData(dataSelected);

    }

    private Widget makePreviewTab() {
        previewVLC = new VerticalLayoutContainer();
        previewVLC.getScrollSupport().setScrollMode(ScrollMode.ALWAYS);

        HBoxLayoutContainer hlc = new HBoxLayoutContainer();
        hlc.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE);
        //hlc.setPack(BoxLayoutPack.END);

        TextButton downloadPreviewButton = new TextButton("Download Data");
        downloadPreviewButton.addSelectHandler(new SelectHandler() {
            @Override
            public void onSelect(SelectEvent event) {
                makeAndDownloadPreviewCSV();
            }
        });
        hlc.add(downloadPreviewButton);

        previewVLC.add(hlc, new VerticalLayoutData(1, -1, new Margins(0, 0, 0, 0)));

        return previewVLC;
    }

    private void makePreviewTable() {
        if (previewVLC.getWidgetCount() > 1) {
            previewVLC.remove(1);
        }
        String table = UIUtility.makeHTMLTable(columnSelector.getRightColumnValues());
        HTML html = new HTML(table);
        previewVLC.add(html);
        previewVLC.forceLayout();

    }

    private void makeAndDownloadPreviewCSV() {
        String scv = UIUtility.makeCSV(columnSelector.getRightColumnValues());
        configPanel_1.setHREFinDownloadElementAnchor(scv);
        configPanel_1.clickDownloadLink();
    }

}