com.openkm.frontend.client.widget.massive.PropertyGroupPopup.java Source code

Java tutorial

Introduction

Here is the source code for com.openkm.frontend.client.widget.massive.PropertyGroupPopup.java

Source

/**
 * OpenKM, Open Document Management System (http://www.openkm.com)
 * Copyright (c) 2006-2015 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.openkm.frontend.client.widget.massive;

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

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.openkm.frontend.client.Main;
import com.openkm.frontend.client.bean.GWTDocument;
import com.openkm.frontend.client.bean.GWTPropertyGroup;
import com.openkm.frontend.client.bean.form.GWTFormElement;
import com.openkm.frontend.client.service.OKMMassiveService;
import com.openkm.frontend.client.service.OKMMassiveServiceAsync;
import com.openkm.frontend.client.service.OKMPropertyGroupService;
import com.openkm.frontend.client.service.OKMPropertyGroupServiceAsync;
import com.openkm.frontend.client.widget.form.FormManager;

/**
 * PropertyGroupPopup popup
 * 
 * @author jllort
 */
public class PropertyGroupPopup extends DialogBox {
    private final OKMPropertyGroupServiceAsync propertyGroupService = (OKMPropertyGroupServiceAsync) GWT
            .create(OKMPropertyGroupService.class);
    private final OKMMassiveServiceAsync massiveService = (OKMMassiveServiceAsync) GWT
            .create(OKMMassiveService.class);

    public static final int PHASE_NONE = 0;
    public static final int PHASE_SELECT = 1;
    public static final int PHASE_SHOW_PROPERTIES = 2;
    public static final int PHASE_PROPERTIES_ADDED = 3;

    private FlexTable table;
    private HorizontalPanel hPanel;
    private Button cancel;
    private Button add;
    private ListBox listBox;
    private String path;
    private FormManager manager;
    private HTML propertyGroupName;
    private FlexTable propertyGroupTable;
    private boolean groupsLoaded = false;
    private int phase = PHASE_NONE;
    private Status status;

    /**
     * PropertyGroupPopup popup
     */
    public PropertyGroupPopup() {
        // Establishes auto-close when click outside
        super(false, true);
        setText(Main.i18n("group.label"));

        // Status
        status = new Status(this);
        status.setStyleName("okm-StatusPopup");

        table = new FlexTable();
        table.setCellPadding(4);
        table.setCellSpacing(0);
        table.setWidth("100%");
        hPanel = new HorizontalPanel();
        manager = new FormManager();

        propertyGroupTable = manager.getTable();
        propertyGroupTable.setWidth("100%");

        cancel = new Button(Main.i18n("button.cancel"), new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                if (Main.get().mainPanel.desktop.browser.fileBrowser.isMassive()) {
                    Main.get().mainPanel.topPanel.toolBar.executeRefresh();
                }
                groupsLoaded = false;
                hide();
            }
        });

        add = new Button(Main.i18n("button.add"), new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                addGroup();
            }
        });

        listBox = new ListBox();
        listBox.addChangeHandler(new ChangeHandler() {
            @Override
            public void onChange(ChangeEvent arg0) {
                if (listBox.getSelectedIndex() > 0) {
                    add.setEnabled(true);
                } else {
                    add.setEnabled(false);
                }
            }
        });

        listBox.setStyleName("okm-Select");

        HorizontalPanel grpNamePanel = new HorizontalPanel();
        propertyGroupName = new HTML("");
        grpNamePanel.add(propertyGroupName);
        grpNamePanel.setWidth("100%");
        grpNamePanel.setCellHorizontalAlignment(propertyGroupName, HasAlignment.ALIGN_CENTER);

        cancel.setStyleName("okm-NoButton");
        add.setStyleName("okm-AddButton");
        add.setEnabled(false);

        hPanel.add(cancel);
        hPanel.add(new HTML("  "));
        hPanel.add(add);

        hPanel.setCellHorizontalAlignment(cancel, VerticalPanel.ALIGN_CENTER);
        hPanel.setCellHorizontalAlignment(add, VerticalPanel.ALIGN_CENTER);

        table.setWidget(0, 0, listBox);
        table.setWidget(1, 0, grpNamePanel);
        table.setWidget(2, 0, propertyGroupTable);
        table.setWidget(3, 0, hPanel);

        table.getCellFormatter().setStyleName(1, 0, "okm-Security-Title");
        table.getCellFormatter().addStyleName(1, 0, "okm-Security-Title-RightBorder");

        table.getCellFormatter().setHorizontalAlignment(0, 0, HasAlignment.ALIGN_CENTER);
        table.getCellFormatter().setHorizontalAlignment(1, 0, HasAlignment.ALIGN_CENTER);
        table.getCellFormatter().setHorizontalAlignment(2, 0, HasAlignment.ALIGN_CENTER);
        table.getCellFormatter().setHorizontalAlignment(3, 0, HasAlignment.ALIGN_CENTER);

        super.hide();
        setWidget(table);
    }

    /**
     * Enables close button
     */
    public void enableClose() {
        cancel.setEnabled(true);
        Main.get().mainPanel.setVisible(true); // Shows main panel when all
        // widgets are loaded
    }

    /**
     * Language refresh
     */
    public void langRefresh() {
        setText(Main.i18n("group.label"));
        cancel.setText(Main.i18n("button.cancel"));
        add.setText(Main.i18n("button.add"));
    }

    /**
     * reset
     */
    public void reset() {
        switchPhase(PHASE_SELECT);
        if (!groupsLoaded) {
            groupsLoaded = true;
            getAllGroups(); // Gets all groups
        }
    }

    /**
     * drawPhase
     */
    private void switchPhase(int phase) {
        this.phase = phase;
        switch (phase) {
        case PHASE_PROPERTIES_ADDED:
            listBox.removeItem(listBox.getSelectedIndex());
            listBox.setSelectedIndex(0);
            // not break because continues with phase select
        case PHASE_SELECT:
            table.getCellFormatter().setVisible(0, 0, true);
            table.getCellFormatter().setVisible(1, 0, false);
            table.getCellFormatter().setVisible(2, 0, false);
            add.setEnabled(false);
            break;

        case PHASE_SHOW_PROPERTIES:
            table.getCellFormatter().setVisible(0, 0, false);
            table.getCellFormatter().setVisible(1, 0, true);
            table.getCellFormatter().setVisible(2, 0, true);
            add.setEnabled(true);
            break;
        }
        center();
    }

    /**
     * Gets all property groups
     */
    private void getAllGroups() {
        if (!Main.get().mainPanel.desktop.browser.fileBrowser.isMassive()) {
            path = Main.get().mainPanel.topPanel.toolBar.getActualNodePath();
            if (!path.equals("")) {
                propertyGroupService.getAllGroups(path, new AsyncCallback<List<GWTPropertyGroup>>() {
                    @Override
                    public void onSuccess(List<GWTPropertyGroup> result) {
                        listBox.clear();
                        listBox.addItem("", ""); // Adds empty value

                        for (Iterator<GWTPropertyGroup> it = result.iterator(); it.hasNext();) {
                            GWTPropertyGroup group = it.next();
                            listBox.addItem(group.getLabel(), group.getName());
                        }
                    }

                    @Override
                    public void onFailure(Throwable caught) {
                        Main.get().showError("GetAllGroups", caught);
                    }
                });
            }
        } else {
            propertyGroupService.getAllGroups(new AsyncCallback<List<GWTPropertyGroup>>() {
                @Override
                public void onSuccess(List<GWTPropertyGroup> result) {
                    listBox.clear();
                    listBox.addItem("", ""); // Adds empty value

                    for (Iterator<GWTPropertyGroup> it = result.iterator(); it.hasNext();) {
                        GWTPropertyGroup group = it.next();
                        listBox.addItem(group.getLabel(), group.getName());
                    }
                }

                @Override
                public void onFailure(Throwable caught) {
                    Main.get().showError("GetAllGroups", caught);
                }
            });
        }
    }

    /**
     * Add a group to a document
     */
    private void addGroup() {
        if (listBox.getSelectedIndex() > 0) {
            final String grpName = listBox.getValue(listBox.getSelectedIndex());
            if (phase == PHASE_SHOW_PROPERTIES) {
                if (!Main.get().mainPanel.desktop.browser.fileBrowser.isMassive()) {
                    if (manager.getValidationProcessor().validate()) {
                        status.setFlagAddPropertyGroup();
                        propertyGroupService.addGroup(path, grpName, new AsyncCallback<Object>() {
                            @Override
                            public void onSuccess(Object result) {
                                // Adding properties
                                propertyGroupService.setProperties(path, grpName,
                                        manager.updateFormElementsValuesWithNewer(), new AsyncCallback<Object>() {
                                            @Override
                                            public void onSuccess(Object result) {
                                                PropertyGroupUtils.refreshingActualNode(
                                                        manager.updateFormElementsValuesWithNewer(),
                                                        (listBox.getItemCount() == 1));
                                                switchPhase(PHASE_PROPERTIES_ADDED);
                                                status.unsetFlagAddPropertyGroup();
                                            }

                                            @Override
                                            public void onFailure(Throwable caught) {
                                                status.unsetFlagAddPropertyGroup();
                                                Main.get().showError("setProperties", caught);
                                            }
                                        });
                            }

                            @Override
                            public void onFailure(Throwable caught) {
                                status.unsetFlagAddPropertyGroup();
                                Main.get().showError("AddGroup", caught);
                            }
                        });
                    }
                } else {
                    if (manager.getValidationProcessor().validate()) {
                        status.setFlagAddPropertyGroup();
                        massiveService.addPropertyGroup(
                                Main.get().mainPanel.desktop.browser.fileBrowser.getAllSelectedPaths(), grpName,
                                new AsyncCallback<Object>() {
                                    @Override
                                    public void onSuccess(Object result) {
                                        massiveService.setProperties(
                                                Main.get().mainPanel.desktop.browser.fileBrowser
                                                        .getAllSelectedPaths(),
                                                grpName, manager.updateFormElementsValuesWithNewer(),
                                                new AsyncCallback<Object>() {
                                                    @Override
                                                    public void onSuccess(Object result) {
                                                        PropertyGroupUtils.refreshingActualNode(
                                                                manager.updateFormElementsValuesWithNewer(),
                                                                (listBox.getItemCount() == 1));
                                                        switchPhase(PHASE_PROPERTIES_ADDED);
                                                        status.unsetFlagAddPropertyGroup();
                                                    }

                                                    @Override
                                                    public void onFailure(Throwable caught) {
                                                        Main.get().showError("addPropertyGroup", caught);
                                                        status.unsetFlagAddPropertyGroup();
                                                    }
                                                });
                                    }

                                    @Override
                                    public void onFailure(Throwable caught) {
                                        status.unsetFlagAddPropertyGroup();
                                        Main.get().showError("AddGroup", caught);
                                    }
                                });
                    }
                }

            } else {
                propertyGroupName.setHTML(listBox.getItemText(listBox.getSelectedIndex()));
                // Case massive or non single document selected
                if (Main.get().mainPanel.desktop.browser.fileBrowser.isMassive()
                        || Main.get().mainPanel.topPanel.toolBar.getActualNode() instanceof GWTDocument) {
                    propertyGroupService.getPropertyGroupForm(grpName, new AsyncCallback<List<GWTFormElement>>() {
                        @Override
                        public void onSuccess(List<GWTFormElement> result) {
                            manager.setFormElements(result);
                            manager.edit();
                            switchPhase(PHASE_SHOW_PROPERTIES);
                        }

                        @Override
                        public void onFailure(Throwable caught) {
                            Main.get().showError("getPropertyGroupForm", caught);
                        }
                    });
                } else {
                    // Case single document is selected suggestion should be enabled
                    propertyGroupService.getPropertyGroupForm(grpName, path, true,
                            new AsyncCallback<List<GWTFormElement>>() {
                                @Override
                                public void onSuccess(List<GWTFormElement> result) {
                                    manager.setFormElements(result);
                                    manager.edit();
                                    switchPhase(PHASE_SHOW_PROPERTIES);
                                }

                                @Override
                                public void onFailure(Throwable caught) {
                                    Main.get().showError("getPropertyGroupForm", caught);
                                }
                            });
                }
            }
        }
    }
}