com.ikon.frontend.client.widget.thesaurus.ThesaurusPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.ikon.frontend.client.widget.thesaurus.ThesaurusPanel.java

Source

/**
 *  openkm, Open Document Management System (http://www.openkm.com)
 *  Copyright (c) 2006-2013  Paco Avila & Josep Llort
 *
 *  No bytes were intentionally harmed during the development of this application.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *  
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

package com.ikon.frontend.client.widget.thesaurus;

import java.util.Iterator;
import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasAlignment;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.ikon.frontend.client.Main;
import com.ikon.frontend.client.service.OKMThesaurusService;
import com.ikon.frontend.client.service.OKMThesaurusServiceAsync;

/**
 * ThesaurusPanel
 * 
 * @author jllort
 *
 */
public class ThesaurusPanel extends Composite {
    private final OKMThesaurusServiceAsync thesaurusService = (OKMThesaurusServiceAsync) GWT
            .create(OKMThesaurusService.class);

    private static final int TAB_HEIGHT = 20;
    private final int TAB_TREE = 0;
    private final int TAB_KEYWORDS = 1;

    private TabLayoutPanel tabPanel;
    private VerticalPanel vPanel;
    private FolderSelectTree folderSelectTree;
    private VerticalPanel verticalDirectoryPanel;
    public ScrollPanel scrollDirectoryPanel;
    public ScrollPanel scrollKeywordPanel;
    private TextBox keyword;
    private FlexTable keywordTable;
    private VerticalPanel vPanelKeyword;
    private int selectedRow = -1;
    private int selectedTab = TAB_TREE;
    public Status status;

    /**
     * ThesaurusPanel
     */
    public ThesaurusPanel() {
        status = new Status();
        status.setStyleName("okm-StatusPopup");

        // Tree
        folderSelectTree = new FolderSelectTree();
        folderSelectTree.setSize("100%", "100%");
        verticalDirectoryPanel = new VerticalPanel();
        verticalDirectoryPanel.setSize("100%", "100%");
        scrollDirectoryPanel = new ScrollPanel();
        scrollDirectoryPanel.setSize("490", "275");
        scrollDirectoryPanel.addStyleName("okm-Background-White");
        scrollDirectoryPanel.addStyleName("okm-Border-Left");
        scrollDirectoryPanel.addStyleName("okm-Border-Right");
        scrollDirectoryPanel.addStyleName("okm-Border-Bottom");
        verticalDirectoryPanel.add(folderSelectTree);
        verticalDirectoryPanel.setCellHorizontalAlignment(folderSelectTree, HasAlignment.ALIGN_LEFT);
        scrollDirectoryPanel.add(verticalDirectoryPanel);

        // Keywords
        keywordTable = new FlexTable();
        keywordTable.setWidth("100%");
        keywordTable.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                markSelectedRow(keywordTable.getCellForEvent(event).getRowIndex());
                evaluateEnableAction();
            }
        });
        scrollKeywordPanel = new ScrollPanel();
        scrollKeywordPanel.add(keywordTable);
        scrollKeywordPanel.setStyleName("okm-Popup-text");

        keyword = new TextBox();
        keyword.setWidth("492");
        keyword.addKeyUpHandler(new KeyUpHandler() {
            @Override
            public void onKeyUp(KeyUpEvent event) {
                if (keyword.getText().length() >= 3) {
                    getKeywords(keyword.getText().toLowerCase());
                } else {
                    removeAllRows();
                }
            }
        });

        vPanelKeyword = new VerticalPanel();
        vPanelKeyword.add(keyword);
        vPanelKeyword.add(scrollKeywordPanel);

        vPanelKeyword.setCellHeight(keyword, "25");
        vPanelKeyword.setCellVerticalAlignment(keyword, HasAlignment.ALIGN_MIDDLE);

        // Tab Panel
        vPanel = new VerticalPanel();
        tabPanel = new TabLayoutPanel(TAB_HEIGHT, Unit.PX);
        tabPanel.setWidth("492");
        tabPanel.setHeight("300");

        tabPanel.add(scrollDirectoryPanel, Main.i18n("thesaurus.tab.tree"));
        tabPanel.add(vPanelKeyword, Main.i18n("thesaurus.tab.keywords"));
        tabPanel.selectTab(TAB_TREE);
        scrollDirectoryPanel.setPixelSize(490, 275);
        scrollKeywordPanel.setPixelSize(490, 250);

        tabPanel.addSelectionHandler(new SelectionHandler<Integer>() {
            @Override
            public void onSelection(SelectionEvent<Integer> event) {
                selectedTab = event.getSelectedItem().intValue();
                evaluateEnableAction();
            }
        });

        vPanel.add(tabPanel);

        vPanel.addStyleName("okm-DisableSelect");
        keyword.setStyleName("okm-Input");
        keywordTable.setStyleName("okm-NoWrap");
        keywordTable.addStyleName("okm-Table-Row");

        initWidget(vPanel);
    }

    /**
     * reset
     */
    public void reset() {
        folderSelectTree.reset();
        removeAllRows();
        keyword.setText("");
        evaluateEnableAction();
    }

    /**
     * Gets asyncronous root node
     */
    final AsyncCallback<List<String>> callbackGetKeywords = new AsyncCallback<List<String>>() {
        public void onSuccess(List<String> result) {
            removeAllRows();
            for (Iterator<String> it = result.iterator(); it.hasNext();) {
                keywordTable.setHTML(keywordTable.getRowCount(), 0, it.next());
            }
            status.unsetFlagKeywords();
        }

        public void onFailure(Throwable caught) {
            status.unsetFlagKeywords();
            Main.get().showError("getKeywords", caught);
        }
    };

    /**
     * Gets the root
     */
    public void getKeywords(String filter) {
        status.setFlagKeywords();
        thesaurusService.getKeywords(filter, callbackGetKeywords);
    }

    /**
     * langRefresh
     */
    public void langRefresh() {
        selectedTab = tabPanel.getSelectedIndex();

        while (tabPanel.getWidgetCount() > 0) {
            tabPanel.remove(0);
        }
        tabPanel.add(scrollDirectoryPanel, Main.i18n("thesaurus.tab.tree"));
        tabPanel.add(scrollKeywordPanel, Main.i18n("thesaurus.tab.keywords"));
        tabPanel.selectTab(selectedTab);

        scrollDirectoryPanel.setPixelSize(490, 275);
        scrollKeywordPanel.setPixelSize(490, 250);
    }

    /**
     * removeAllRows
     */
    private void removeAllRows() {
        selectedRow = -1;
        evaluateEnableAction();
        while (keywordTable.getRowCount() > 0) {
            keywordTable.removeRow(0);
        }
    }

    /**
     * markSelectedRow
     * 
     * @param row
     */
    private void markSelectedRow(int row) {
        // And row must be other than the selected one
        if (row != selectedRow) {
            styleRow(selectedRow, false);
            styleRow(row, true);
            selectedRow = row;
        }
    }

    /**
     * Change the style row selected or unselected
     * 
     * @param row The row afected
     * @param selected Indicates selected unselected row
     */
    private void styleRow(int row, boolean selected) {
        if (row >= 0) {
            if (selected) {
                keywordTable.getRowFormatter().addStyleName(row, "okm-Table-SelectedRow");
            } else {
                keywordTable.getRowFormatter().removeStyleName(row, "okm-Table-SelectedRow");
            }
        }
    }

    /**
     * evaluateEnableAction
     */
    public void evaluateEnableAction() {
        if (isTabTreeSelected()) {
            Main.get().mainPanel.desktop.navigator.thesaurusTree.thesaurusSelectPopup
                    .enable(folderSelectTree.evaluateEnableActionButton());
        } else if (isTabKeywordSelected()) {
            Main.get().mainPanel.desktop.navigator.thesaurusTree.thesaurusSelectPopup.enable(selectedRow >= 0);
        }
    }

    /**
     * isTabTreeSelected
     */
    public boolean isTabTreeSelected() {
        return (selectedTab == TAB_TREE);
    }

    /**
     * isTabKeywordSelected
     * 
     * @return
     */
    public boolean isTabKeywordSelected() {
        return (selectedTab == TAB_KEYWORDS);
    }

    /**
     * getActualPath
     * 
     * @return
     */
    public String getActualPath() {
        return folderSelectTree.getActualPath();
    }

    /**
     * getSelectedKeyword
     * 
     * @return
     */
    public String getSelectedKeyword() {
        return keywordTable.getText(selectedRow, 0);
    }
}