📄 adhocreportframe.java
字号:
/*
* 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 + -