📄 mainframe.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.mainframe.impl;import com.google.gwt.core.client.GWT;import com.google.gwt.core.client.JavaScriptObject;import com.google.gwt.user.client.History;import com.google.gwt.user.client.HistoryListener;import com.google.gwt.user.client.Timer;import com.google.gwt.user.client.Window;import com.google.gwt.user.client.rpc.SerializableException;import com.google.gwt.user.client.ui.Composite;import com.google.gwt.user.client.ui.Widget;import com.queplix.core.client.app.LengthyTaskManager;import com.queplix.core.client.app.rpc.RPC;import com.queplix.core.client.app.vo.AccumulatedEntitiesRequestObject;import com.queplix.core.client.app.vo.AccumulatedEntityDataResponse;import com.queplix.core.client.app.vo.ClearEntityRequestObject;import com.queplix.core.client.app.vo.ContextMenuMeta;import com.queplix.core.client.app.vo.CustomizeGridRequestObject;import com.queplix.core.client.app.vo.EntityData;import com.queplix.core.client.app.vo.EntityIDRequestObject;import com.queplix.core.client.app.vo.FamgMeta;import com.queplix.core.client.app.vo.FamgMeta.Index;import com.queplix.core.client.app.vo.FieldData;import com.queplix.core.client.app.vo.FieldDataRequest;import com.queplix.core.client.app.vo.FieldMeta;import com.queplix.core.client.app.vo.FieldOnDemandData;import com.queplix.core.client.app.vo.FocusMeta;import com.queplix.core.client.app.vo.GridData;import com.queplix.core.client.app.vo.GridSearchProperties;import com.queplix.core.client.app.vo.MetaData;import com.queplix.core.client.app.vo.PrintFormRequestObject;import com.queplix.core.client.app.vo.PrintGridRequestObject;import com.queplix.core.client.app.vo.RowData;import com.queplix.core.client.app.vo.SavedSearchDeleteRequestObject;import com.queplix.core.client.app.vo.SavedSearchObject;import com.queplix.core.client.app.vo.SubFocusMeta;import com.queplix.core.client.app.vo.SubsetData;import com.queplix.core.client.app.vo.TabMeta;import com.queplix.core.client.app.vo.chart.ChartRequestObject;import com.queplix.core.client.app.vo.chart.ChartResponseObject;import com.queplix.core.client.common.CollectionsHelper;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.WindowHelper;import com.queplix.core.client.controls.QButton;import com.queplix.core.client.controls.QFormElementModel;import com.queplix.core.client.controls.QFormElementView;import com.queplix.core.client.controls.chart.QChartController;import com.queplix.core.client.controls.chart.QChartModel;import com.queplix.core.client.controls.form.QForm;import com.queplix.core.client.controls.form.QFormController;import com.queplix.core.client.controls.form.QFormModel;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.frames.AboutFrame;import com.queplix.core.client.frames.email.EmailComposeDialog;import com.queplix.core.client.frames.mainframe.AdhocOperations;import com.queplix.core.client.frames.mainframe.BusinessOperationStrategy;import com.queplix.core.client.frames.mainframe.FormOperations;import com.queplix.core.client.frames.mainframe.FormState;import com.queplix.core.client.frames.mainframe.GridOperations;import com.queplix.core.client.frames.mainframe.IMainFrame;import com.queplix.core.client.frames.mainframe.OperationContext;import com.queplix.core.client.frames.mainframe.OperationTypes;import com.queplix.core.client.frames.mainframe.StrategiesFactory;import com.queplix.core.client.i18n.I18N;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;/** * Application main window contents. * @author Sultan Tezadov, Aliaksandr Melnik * @since 23 Oct 2006 */// TODO: once generics enabled, remove all occurences of '/*]' and '[*/'class MainFrame extends Composite implements RPC.RequestListener, HistoryListener, LengthyTaskManager.LengthyTaskListener, EventListener, OperationContext, FormOperations, GridOperations, AdhocOperations, IMainFrame{ private final static String DEFAULT_HELP_PAGE = "HTML/index.html"; private static final List EMPTY_LIST = new ArrayList(); // -------------------- public events ------------------------ private EventSource eventSource = new EventSource(this); private StrategiesFactory factory; public EventSource getEventSource() { return eventSource; } // ----------------- end of public events -------------------- private AboutFrame aboutFrame; private MetaData appMetaData; private MainFrameSA mainFrameSA; // SA -- Static Area private MainFrameFA mainFrameFA; // FA -- Forms Area private MainFrameGA mainFrameGA; // GA -- Grids Area private FormsDataInjector dataInjector = new FormsDataInjector(); private FamgMeta.Index lastSearchFormIndex; private FieldData[] lastSearchFieldData; //form to print request data todo this object is re-creating each time user select record, or perform search, remove!! private PrintFormRequestObject printFormRequest; private PrintGridRequestObject printGridRequest; private boolean ignoreGridRecordHistory; private GridHistoryRecord gridHistoryRecord; //state of MainToolBar Ad Hoc button //true - all forms on MainToolBar Ad Hoc button event will be in Report Design state on report design button click //false - all forms on MainToolBar Ad Hoc button event will be in state that was before Report Design state on report design button click private boolean isReportDesignState = false; /** * used for ad hoc report */ private FamgMeta.Index initialAdhocFormIndex; /** * Here we store last form searches and when we change some grid props it takes search params from here. * When user do "clean" action map to be cleaned. * Map stores {@link com.queplix.core.client.app.vo.AccumulatedEntitiesRequestObject} objects. The keys is form ids. */ private Map lastFormSearches = new HashMap(); /** * This object is to be sent when report event is occured. Browser has pseudo-single model hence don't need to re-create this event. */ private AdhocData adhocEvent; /** *this list is used for grid pager */ private Collection gridPagerSearchFilters; /** * init is for MetaData-dependent loading * Call when MetaData is received * * @param appMetaData application metadata */ public void init(MetaData appMetaData) { this.appMetaData = appMetaData; RPC.addRequestListener(this); LengthyTaskManager.addLengthyTaskListener(this); mainFrameFA = new MainFrameFA(appMetaData); mainFrameGA = new MainFrameGA(appMetaData); mainFrameSA = new MainFrameSA(appMetaData, mainFrameFA, mainFrameGA); dataInjector.initialize(mainFrameFA, mainFrameGA); dataInjector.onVisualAreaChanged(appMetaData.getTabMeta(mainFrameFA.getActiveFormIndex())); mainFrameGA.getEventSource().addEventListener(this); // listen to events mainFrameFA.getEventSource().addEventListener(this); // listen to events mainFrameSA.getEventSource().addEventListener(this); // listen to events History.addHistoryListener(this); FocusMeta.Index defaultFocusIndex = appMetaData.getDefaultFocusIndex(); if (defaultFocusIndex != null) { selectFocus(defaultFocusIndex); } selectForm(mainFrameFA.getActiveFormIndex(), true); initWidget(mainFrameSA); } protected void performDeleteSavedSearchRequest(Long[] rowIDs){ SavedSearchDeleteRequestObject request = new SavedSearchDeleteRequestObject(rowIDs); RPC.QAsyncCallback callback = new SavedSearchDeleteAsyncCallback(); RPC.getRPC().deleteSavedSearch(request, callback); } private void performUnlockAfterEditRequest(FamgMeta.Index formIndex, Long rowID, String formID, boolean updateAfterUnlock) { RPC.QAsyncCallback callback = new UnlockAterEditAsyncCallback(formIndex, rowID, updateAfterUnlock); EntityIDRequestObject request = new EntityIDRequestObject(formID, rowID); RPC.getRPC().unlockAfterEditRecord(request, callback); } public void initMainFrame(StrategiesFactory factory) { this.factory = factory; } private String performHelpCallEvent() { String link = mainFrameFA.getTab(mainFrameFA.getActiveFormIndex()).getHelpLink(); if(link != null && !link.equals("")) { return link; } else { return DEFAULT_HELP_PAGE; } } protected void performSearchRecordsRequest(FamgMeta.Index famgIndex, boolean localSearch) { GridSearchProperties props = getGridSearchProperties(famgIndex); FamgMeta baseFormMeta = appMetaData.getFamgMeta(famgIndex); ArrayList filterEntities = getFormsFilters(baseFormMeta, localSearch); lastFormSearches.put(appMetaData.getFormID(famgIndex), filterEntities); BusinessOperationStrategy strategy = factory.createStrategy(appMetaData.getFormID(famgIndex)); strategy.searchRecords(filterEntities, props, localSearch); } private void performCustomizeGridRequest(final FamgMeta.Index gridIndex, final SubsetData data) { String formID = appMetaData.getFormID(gridIndex); CustomizeGridRequestObject request = new CustomizeGridRequestObject(formID, data); RPC.QAsyncCallback callback = new RPC.QAsyncCallback() { public void onRequestEnded(boolean success, Object result) { if (success) { QGrid grid = mainFrameGA.getGrid(gridIndex); grid.getModel().customizeGrid(data); performGridDrivenRequest(gridIndex); } } }; RPC.getRPC().customizeGrid(request, callback); } private void performGridDrivenRequest(FamgMeta.Index gridIndex) { String formID = appMetaData.getFormID(gridIndex); List filterEntities = (List) lastFormSearches.get(formID); if(filterEntities != null) {//otherwise do nothing, because grid is empty //get grid data GridSearchProperties props = getGridSearchProperties(gridIndex); //do the request BusinessOperationStrategy strategy = factory.createStrategy(appMetaData.getFormID(gridIndex)); strategy.searchRecords(filterEntities, props, false); } } /** * Set filters for forms. * @param filters list of the {@link com.queplix.core.client.app.vo.EntityData} objects * @param clearFormsBefore should forms be cleaned before data updated */ public void setFormsFilters(Collection filters, boolean clearFormsBefore) { if(clearFormsBefore) { clearAll(getClearingFormState()); } EntityData[] data = new EntityData[filters.size()]; CollectionsHelper.copyToArray(filters, data); dataInjector.onFormsDataUpdated(null, data, null); } public Collection getDirectFormFilters(Index index) { Collection ret = null; QForm form = mainFrameFA.getForm(index); FamgMeta famgMeta = appMetaData.getFamgMeta(index); String entityName = famgMeta.getEntityName(); if (form != null) { ret = form.getModel().getNonEmptyFilters(); } else { EntityData entityData = dataInjector.getEntityData(entityName); if(entityData != null && entityData.countNotEmptyFields() > 0) { FieldData[] filters = entityData.getNotEmptyFields(); ret = new ArrayList(); CollectionsHelper.copyArrayToCollection(filters, ret); } } return ret; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -