⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adhocreportframe.java

📁 CRM源码This file describes some issues that should be implemented in future and how it should be imple
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Copyright 2006-2007 Queplix Corp.
 *
 * Licensed under the Queplix Public License, Version 1.1.1 (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.queplix.com/solutions/commercial-open-source/queplix-public-license/
 *
 * 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.queplix.core.client.frames.adhoc;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.WindowResizeListener;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
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.queplix.core.client.i18n.I18N;
import com.queplix.core.client.app.rpc.RPC;
import com.queplix.core.client.app.vo.AdhocPrintRequestObject;
import com.queplix.core.client.app.vo.AdhocSearchGridRecordsRequest;
import com.queplix.core.client.app.vo.EntityElement;
import com.queplix.core.client.app.vo.FieldMeta;
import com.queplix.core.client.app.vo.GridMeta;
import com.queplix.core.client.app.vo.LoadReportResponseObject;
import com.queplix.core.client.app.vo.MetaData;
import com.queplix.core.client.app.vo.SaveAdhocReportRequestObject;
import com.queplix.core.client.app.vo.SearchGridRecordsResponseObject;
import com.queplix.core.client.app.vo.SortFieldImpl;
import com.queplix.core.client.app.vo.GridSearchProperties;
import com.queplix.core.client.common.StringUtil;
import com.queplix.core.client.common.crossframes.AdhocData;
import com.queplix.core.client.common.event.Event;
import com.queplix.core.client.common.event.EventListener;
import com.queplix.core.client.common.event.EventSource;
import com.queplix.core.client.common.ui.DialogHelper;
import com.queplix.core.client.common.ui.OkayCancelPopup;
import com.queplix.core.client.common.ui.WindowHelper;
import com.queplix.core.client.common.ui.grid.SortColumn;
import com.queplix.core.client.controls.QButton;
import com.queplix.core.client.controls.grid.QGrid;
import com.queplix.core.client.controls.grid.QGridController;
import com.queplix.core.client.controls.grid.QGridModel;
import com.queplix.core.client.controls.grid.QGridView;
import com.queplix.core.client.frames.QFrame;

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

/**
 * This frame allows to create ad hoc own designed reports.
 *
 * @author Aliaksandr Melnik
 * @author Sergey Kozmin
 * @since 13 Nov 2006
 */
public class AdhocReportFrame extends VerticalPanel
        implements QFrame, EventListener, WindowResizeListener {
    private static final String REPORT_LOADED_LABEL = I18N.getMessages()
            .adhocReportLoaded();

    /**
     * Dialog saving messages
     */
    private static final String SAVE_REPORT_MESSAGE = I18N.getMessages()
            .adhocSaveReport();
    private static final String NONE_REPORT_NAME = I18N.getMessages()
            .adhocNoneReportName();
    private static final String REPORT_NAME_MESSAGE = I18N.getMessages()
            .adhocReportName();
    private static final String FILL_REPORT_NAME_FIRST_MESSAGE = I18N
            .getMessages().adhocFillReportFirstError();
    private static final String SUCCESSFULLY_SAVED_REPORT_MESSAGE = I18N
            .getMessages().adhocReportsSavedSuccesfully();

    /**
     * Field renaming messages
     */
    private static final String FIELD_NAME_MESSAGE = I18N.getMessages()
            .adhocSaveReport();
    private static final String NEW_FIELD_NAME_INPUT_MESSAGE = I18N
            .getMessages().adhocNewFieldName();
    private static final String FILL_FIELD_NAME_FIRST_MESSAGE = I18N
            .getMessages().adhocFillFieldFirstError();

    /**
     * Button names
     */
    private static final String CLEAR_ALL_BUTTON = I18N.getMessages()
            .adhocClearAllColumnButton();
    private static final String CLEAR_ALL_TOOLTIP_BUTTON = I18N.getMessages()
            .adhocClearAllColumnButtonTooltip();
    private static final String RUN_REPORT_BUTTON = I18N.getMessages()
            .adhocRunReportButton();
    private static final String RUN_REPORT_TOOLTIP_BUTTON = I18N.getMessages()
            .adhocRunReportButtonTooltip();
    private static final String DELETE_COLUMN_BUTTON = I18N.getMessages()
            .adhocDeleteColumnButton();
    private static final String DELETE_COLUMN_TOOLTIP_BUTTON = I18N
            .getMessages().adhocDeleteColumnButtonTooltip();
    private static final String RENAME_COLUMN_BUTTON = I18N.getMessages()
            .adhocRenameColumnButton();
    private static final String RENAME_COLUMN_TOOLTIP_BUTTON = I18N
            .getMessages().adhocRenameColumnButtonTooltip();
    private static final String SAVE_REPORT_BUTTON = I18N.getMessages()
            .adhocSaveReportButton();
    private static final String SAVE_REPORT_TOOLTIP_BUTTON = I18N.getMessages()
            .adhocSaveReportButtonTooltip();
    private static final String LOAD_REPORT_BUTTON = I18N.getMessages()
            .adhocLoadReportButton();
    private static final String LOAD_REPORT_TOOLTIP_BUTTON = I18N.getMessages()
            .adhocLoadReportButtonTooltip();
    private static final String MOVE_COLUMN_LEFT_BUTTON = "<<";
    private static final String MOVE_COLUMN_LEFT_TOOLTIP_BUTTON = I18N
            .getMessages().adhocMoveColumnToLeftButtonTooltip();
    private static final String MOVE_COLUMN_RIGHT_BUTTON = ">>";
    private static final String MOVE_COLUMN_RIGHT_TOOLTIP_BUTTON = I18N
            .getMessages().adhocMoveColumnToRightButtonTooltip();

    private static final String REPORT_MAY_BE_INCORRECT_WARNING = I18N
            .getMessages().adhocReportIncorrectWarning();

    private static final String HTML_TYPE = "html";
    private static final String WORD_TYPE = "word";
    private static final String EXCEL_TYPE = "excel";

    private QButton clearAllButton;
    private QButton runButton;
    private QButton moveLeftButton;
    private QButton delButton;
    private QButton renButton;
    private QButton moveRightButton;
    private QButton saveButton;
    private QButton loadButton;
    private Label loadedReportLabel;

    private List/*]<AdhocData>[*/ reportElements
            = new ArrayList/*]<AdhocData>[*/();

    private SingleLineInputDialog saveReportPopup;
    private LoadingReportDialog loadReportPopup;
    private SingleLineInputDialog fieldRenamingPopup;

    private AdhocPrintRequestObject printRequest;
    private SaveAdhocReportRequestObject saveReportRequest;

    //    private TextBox reportNameTextBox;
    private HorizontalPanel buttonsPanel;
    private FrameLinks frameLinks;

    /**
     * Application metaData
     */
    private MetaData metaData;
    /**
     * is this form active
     */
    private boolean isActive = false;
    /**
     * main adhocGrid
     */
    private QGrid adhocGrid;

    /**
     * was adhocGrid elements changed
     */
    private boolean wasElementsChanged = true;

    // -------------------- public events ------------------------
    public static interface Events extends FrameLinks.Events {
        Event ELEMENT_REMOVED_EVENT = new Event();
        Event EXPORT_GRID_HTML = new Event();
        Event EXPORT_GRID_WORD = new Event();
        Event EXPORT_GRID_EXCEL = new Event();
        Event REPORT_RUN = new Event();
        Event SAVE_REPORT = new Event();
        Event/*]<LoadReportResponseObject>[*/ REPORT_LOADED
                = new Event/*]<LoadReportResponseObject>[*/();
    }

    private EventSource eventSource = new EventSource(this);

    public EventSource getEventSource() {
        return eventSource;
    }
    // ----------------- end of public events --------------------

    public AdhocReportFrame(MetaData metaData) {
        this.metaData = metaData;
        initGUI();
        addListeners();
        setButtonsState();
    }

    public int reportElementsSize() {
        return reportElements.size();
    }

    public void addAllReportElements(List data) {
        for(int i = 0; i < data.size(); i++) {
            AdhocData adhocData = (AdhocData) data.get(i);
            reportElements.add(adhocData.cloneElement());
        }
        wasElementsChanged = true;
        refresh();
    }

    public void addReportElement(AdhocData data) {
        reportElements.add(data.cloneElement());
        wasElementsChanged = true;
        refresh();
    }

    public void removeReportElement(AdhocData data) {
        reportElements.remove(data);
        wasElementsChanged = true;
        refresh();
    }

    public void moveReportElement(int fromPos, int toPos) {
        if(fromPos != toPos) {
            reportElements.add(toPos, reportElements.remove(fromPos));
            wasElementsChanged = true;
            refresh();
        }
    }

    private void removeReportElement(int index) {
        reportElements.remove(index);
        wasElementsChanged = true;
        refresh();
    }

    private void removeAllReportElements() {
        reportElements.clear();
        wasElementsChanged = true;
        refresh();
    }

    private void removeAllElementsWithNotifications() {
        int size = reportElements.size();
        for(int i = 0; i < size; i++) {
            Object element = reportElements.remove(0);
            Events.ELEMENT_REMOVED_EVENT.setData(element);
            eventSource.fireEvent(Events.ELEMENT_REMOVED_EVENT);
            reportElements.remove(element);
        }
        wasElementsChanged = true;
        refresh();
    }

    private void setColumnSelected(int column) {
        adhocGrid.getView().setSelectedColumn(column);
    }

    private void setFieldCaption() {
        int selectedColumn = adhocGrid.getView().getSelectedColumn();
        AdhocData data = (AdhocData) reportElements.get(selectedColumn);
        data.getFieldSent().setCaption(getFieldRenamingPopup().getInputText());

        wasElementsChanged = true;
        refreshGrid();
    }

    private void refresh() {
        setButtonsState();
        refreshGrid();
    }

    private void refreshGrid() {
        if(isActive) {
            if(wasElementsChanged) {
                FieldMeta[] metas = new FieldMeta[reportElements.size()];
                long[] selectedElements = new long[metas.length];

                for(int i = 0; i < reportElements.size(); i++) {
                    selectedElements[i] = i;
                    AdhocData reportData = (AdhocData) reportElements.get(i);
                    metas[i] = reportData.getFieldSent();
                }
                GridMeta gm = new GridMeta(metas, selectedElements);
                adhocGrid.getModel().setGridData(null);
                adhocGrid.getModel().setMetaData(gm);

                //reset report state
                loadedReportLabel.setText(
                        REPORT_LOADED_LABEL + NONE_REPORT_NAME);
                QGridView gridView = adhocGrid.getView();
                gridView.setOffsetWidth(Window.getClientWidth());
                setHeight(StringUtil.pixelToSize(Window.getClientHeight()));
                wasElementsChanged = false;
            }
        }
    }

    public void onEvent(Event event, Widget sender) {
        if(QGridController.Events.GRID_COLUMN_SELECTED == event) {
            setButtonsState();
        } else if(QGridController.Events.GRID_EXPORT_TO_WORD == event) {
            getEventSource().fireEvent(Events.EXPORT_GRID_WORD);
        } else if(QGridController.Events.GRID_EXPORT_TO_EXCEL == event) {
            getEventSource().fireEvent(Events.EXPORT_GRID_EXCEL);
        } else if(QGridController.Events.GRID_PRINT == event) {
            getEventSource().fireEvent(Events.EXPORT_GRID_HTML);
        } else if(QGridController.Events.GRID_REFRESH == event
                || QGridController.Events.GRID_NEED_DATA == event) {
            if(adhocGrid.getModel().getModelRowCount() > 0) {
                getEventSource().fireEvent(Events.REPORT_RUN);
            }
        }
    }

    private void setButtonsState() {
        if(isActive) {
            int selectedColumn = adhocGrid.getView().getSelectedColumn();
            int elementsSize = reportElements.size();

            moveLeftButton.setEnabled(selectedColumn >= 1);
            moveRightButton.setEnabled((selectedColumn < elementsSize - 1) && (
                    selectedColumn >= 0));
            delButton.setEnabled(selectedColumn >= 0);
            renButton.setEnabled(selectedColumn >= 0);

            clearAllButton.setEnabled(elementsSize > 0);

            runButton.setEnabled(elementsSize > 0);
            saveButton.setEnabled(elementsSize > 0);
        }
    }

    private void addListeners() {
        clearAllButton.addClickListener(new ClickListener() {
            public void onClick(Widget sender) {
                removeAllElementsWithNotifications();
            }
        });
        runButton.addClickListener(new ClickListener() {
            public void onClick(Widget sender) {
                getEventSource().fireEvent(Events.REPORT_RUN);
            }
        });
        moveLeftButton.addClickListener(new ClickListener() {
            public void onClick(Widget sender) {
                int selectedColumn = adhocGrid.getView()
                        .getSelectedColumn();//selected column is more than 0, otherwise see column selection events
                moveReportElement(selectedColumn, selectedColumn - 1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -