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

📄 qgridmodelimpl.java

📁 CRM源码This file describes some issues that should be implemented in future and how it should be imple
💻 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.controls.grid;

import com.queplix.core.client.app.vo.GridData;
import com.queplix.core.client.app.vo.GridMeta;
import com.queplix.core.client.app.vo.RowData;
import com.queplix.core.client.app.vo.SortField;
import com.queplix.core.client.app.vo.SortFieldImpl;
import com.queplix.core.client.app.vo.SubsetData;
import com.queplix.core.client.app.vo.uisettings.GridUISettings;
import com.queplix.core.client.common.ui.grid.BaseGridModel;
import com.queplix.core.client.common.ui.grid.DataGridMeta;
import com.queplix.core.client.common.ui.grid.DataGridMetaImpl;
import com.queplix.core.client.common.ui.grid.GridDataProvider;
import com.queplix.core.client.common.ui.grid.GridModel;
import com.queplix.core.client.common.ui.grid.SortColumn;
import com.queplix.core.client.common.ui.grid.TextGridDataProvider;

import java.util.ArrayList;

/**
 * This class contais response data for Load Report Request.
 * @author Sergey Kozmin
 * @since 19 September 2006
 */
class QGridModelImpl implements QGridModel {
    private final static int DEFAULT_PAGE_SIZE = 20;
    private final static boolean DEAFULT_COUNTER_ON = false;
    private final static int UNKNOWN_PAGE_COUNT = 0;
    
    private GridMeta metaData;
    private GridData data;
    private TextGridDataProvider dataProviderForGrid;
    private DataGridMeta dataGridMeta;

    private long recordsTotal;
    private long pagesCount = UNKNOWN_PAGE_COUNT;
    private long currentPage;
    
    private boolean counterToggledOn = DEAFULT_COUNTER_ON;
    private int pageSize = DEFAULT_PAGE_SIZE;
    
    private ArrayList qgridListeners = new ArrayList();

    private BaseGridModel gridModelImpl;

    /**
     * Indicate selected row in grid.
     */
    private Long selectedRecordId;
    /**
     * Indicate, should pager be updated
     */
    private boolean pagerToBeUpdated;

    public QGridModelImpl(GridMeta meta) {
        gridModelImpl = new QDataGridModel();
        initFromUISettings(meta);
        setMetaData(meta);
    }
    
    public int getModelRowCount() {
        if(data != null) {
            return data.getRows().length;
        } else {
            return 0;
        }
    }
    
    public int getModelColumnCount() {
        if(metaData != null) {
            return metaData.getColumnsCount();
        } else {
            return 0;
        }
    }
    
    public void setMetaData(GridMeta metaData) {
        this.metaData = metaData;
        dataGridMeta = DataGridMetaImpl.createDataGridMeta(metaData);
        gridModelImpl.fireDataStructureChanged();
        setPagerData(0, 0);
        fireSelectedRecordChanged(selectedRecordId);
    }
    
    public GridMeta getIncomingMetaData() {
        return metaData;
    }
    
    public void setGridData(GridData data) {
        setGridData(data, UNKNOWN_PAGE_COUNT, 0);
    }

    public void setGridData(GridData data, long recordsTotal, long currentPage) {
        this.data = data;
        initDataProvider(data);
        gridModelImpl.fireDataChanged();
        setPagerData(recordsTotal, currentPage);
        fireSelectedRecordChanged(selectedRecordId);
    }

    private void initDataProvider(GridData data) {
        if(dataProviderForGrid != null) {
            dataProviderForGrid.setData(data);
        } else {
            dataProviderForGrid = new TextGridDataProvider(data);
            gridModelImpl.setDataProvider(dataProviderForGrid);
        }
    }

    private void setPagerData(long recordsTotal, long currentPage) {
        pagerToBeUpdated = pagerToBeUpdated || (this.recordsTotal != recordsTotal);
        this.recordsTotal = recordsTotal;
        pagerToBeUpdated = pagerToBeUpdated || (this.currentPage != currentPage);
        this.currentPage = currentPage;
        this.pagesCount = (long) Math.ceil(recordsTotal / (float) pageSize);

        if(pagerToBeUpdated) {
            firePagerDataChanged();
            pagerToBeUpdated = false;
        }
    }

    public void setRowData(RowData rowData) {
        if(rowData != null) {
            if(data == null) {
                setGridData(new GridData(new RowData[] {rowData}, ""));
            }
            int rowIndex = data.getRowIndexByID(rowData.getId());
            if(rowIndex >= 0) {
                data.getRows()[rowIndex].copyFrom(rowData);
                gridModelImpl.fireRowDataChanged(rowIndex);
                fireSelectedRecordChanged(selectedRecordId);
            } else {
                data.insertRow(rowData);
                gridModelImpl.fireRowsWereInserted();
                fireSelectedRecordChanged(selectedRecordId);
                firePagerDataChanged(); // number of loaded records changed
            }
        }
    }

    public void setSelectedRecordId(Long selectedRecordId) {
        if(this.selectedRecordId != null) {
            if(!this.selectedRecordId.equals(selectedRecordId)) {
                this.selectedRecordId = selectedRecordId;
//                fireSelectedRecordChanged(selectedRecordId);
            }
        } else {
            if(selectedRecordId != null) {
                this.selectedRecordId = selectedRecordId;
//                fireSelectedRecordChanged(selectedRecordId);
            }
        }
        fireSelectedRecordChanged(selectedRecordId);
    }

    public Long getRecordIdByRow(int row) {
        GridData gridData = getGridData();
        return gridData.getRows()[row].getId();
    }

    public int getRowByRecordId(Long recordId) {
        int ret = -1;
        GridData gridData = getGridData();
        if(gridData != null) {
            ret = gridData.getRowIndexByID(recordId);
        }
        return ret;
    }

    public Long getSelectedRecordId() {
        return selectedRecordId;
    }

    public GridDataProvider getData() {
        return dataProviderForGrid;
    }

    public GridData getGridData() {
        return data;
    }
    
    public void setRecordsTotal(long recordsTotal) {
        if(this.recordsTotal != recordsTotal) {
            this.recordsTotal = recordsTotal;
        }
    }
    
    public long getRecordsTotal() {
        return recordsTotal;
    }
    
    public long getPagesCount() {
        return pagesCount;
    }
    
    public void setPagesCount(long pagesCount) {
        this.pagesCount = pagesCount;
    }
    
    public long getCurrentPage() {
        return currentPage;
    }

    public SortField getSortField() {
        return gridModelImpl.getSortField();
    }

    public SortFieldImpl getSortFieldImpl() {
        return gridModelImpl.getSortFieldImpl();
    }

    public SortColumn getSortColumn() {
        return gridModelImpl.getSortColumn();
    }

    public void setCurrentPage(long currentPage) {
        if(this.currentPage != currentPage) {
            this.currentPage = currentPage;
            pagerToBeUpdated = true;
        }
    }
    
    public boolean isCounterToggledOn() {
        return counterToggledOn;
    }
    
    public void setCounterToggledOn(boolean counterToggledOn) {
        if(this.counterToggledOn != counterToggledOn) {
            this.counterToggledOn = counterToggledOn;
            pagerToBeUpdated = true;
        }
    }
    
    public int getPageSize() {
        return pageSize;
    }
    
    public void setPageSize(int pageSize) {
        if(this.pageSize != pageSize) {
            this.pageSize = pageSize;
            pagerToBeUpdated = true;
        }
    }
    
    public void addPagerModelListener(QGridListener listener) {
        qgridListeners.add(listener);
    }
    
    public void removePagerModelListener(QGridListener listener) {
        qgridListeners.remove(listener);
    }

    private void fireSelectedRecordChanged(Long newRecordSelectedId) {
        for (int i = 0; i < qgridListeners.size(); i++) {
            QGridListener listener = (QGridListener) qgridListeners.get(i);
            listener.selectedRecordChanged(newRecordSelectedId);
        }
    }

    private void firePagerDataChanged() {
        for (int i = 0; i < qgridListeners.size(); i++) {
            QGridListener listener = (QGridListener) qgridListeners.get(i);
            listener.pageDataIsChanged();
        }
    }
    
    public DataGridMeta getDataGridMeta() {
        return dataGridMeta;
    }
    
    public void customizeGrid(SubsetData data) {
        metaData.getColumns().setSelectedIDs(data.getSelectedIDs()); // update meta data
        this.data = new GridData();
        dataGridMeta = DataGridMetaImpl.createDataGridMeta(dataGridMeta, metaData);
        gridModelImpl.fireDataStructureChanged();
    }
    
    private void initFromUISettings(GridMeta meta) {
        GridUISettings uiSettings = meta.getUISettings();
        if (uiSettings != null) {
            counterToggledOn = uiSettings.isCounterOn();
            if (uiSettings.isPageSizeSet()) {
                pageSize = uiSettings.getPageSize();
            }
        }
    }
    
    void collectUISettings() {
        if (haveUISettingsChanged()) {
            GridUISettings uiSettings = metaData.getOrCreateUISettings();
            uiSettings.setCounterOn(counterToggledOn);
            if (isPageSizeSet()) {
                uiSettings.setPageSize(pageSize);
            }
            DataGridMetaImpl.collectUISettings(dataGridMeta, metaData);
        }
    }

    private boolean haveUISettingsChanged() {
        return isPageSizeSet()  || (counterToggledOn != DEAFULT_COUNTER_ON) || anyColumnWasResized();
    }

    private boolean anyColumnWasResized() {
        boolean isResized = false;

        long[] ids = metaData.getColumns().getSelectedIDs();
        for (int i = 0; i < ids.length; i++) {
            if (dataGridMeta.getColumn(i).isResized()) {
                isResized = true;
                break;
            }
        }
        return isResized; 
    }

    private boolean isPageSizeSet() {
        return (pageSize != DEFAULT_PAGE_SIZE);
    }


    public GridModel getGridModelImpl() {
        return gridModelImpl;
    }

    private class QDataGridModel extends BaseGridModel {
        protected GridData getData() {
            return data;
        }

        protected GridMeta getMeta() {
            return metaData;
        }

        public DataGridMeta getDataGridMeta() {
            return dataGridMeta;
        }
    }
}

⌨️ 快捷键说明

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