package com.vci.client.uif.engine.client.tableArea; import java.util.List; import com.vci.client.bof.ClientBusinessObject; import com.vci.client.uif.engine.client.AbstractDataModel; import com.vci.client.uif.engine.client.IDataModel; import com.vci.client.uif.engine.client.tree.TreePanelModel; import com.vci.client.uif.engine.common.IDataNode; public class TablePanelDataModel extends AbstractDataModel { private TablePanel tablePanel = null; private Object[] selectObjs = null; public TablePanelDataModel(TablePanel tablePanel){ this.tablePanel = tablePanel; setRegionPanel(tablePanel); } @Override public int[] getSelectObjectRowIndexs() { return tablePanel.getDataTablePanel().getSelectedRowIndexs(); } @Override public Object[] getSelectObjects() { // TODO 频率调用此接口时,可能会存在性能问题,存在优化的空间 List list = (List)tablePanel.getDataTablePanel().getSelectedRowObjectsList(); int size = list.size(); if(size <= 0) return null; Object[] res = new Object[size]; for (int i = 0; i < res.length; i++) { res[i] = list.get(i); } selectObjs = res; return res; } @Override public Object getRootObject() { return tablePanel.getSourceData(); } @Override public synchronized void refresh(IDataModel fromDataModel) { //super.refreshUI(fromDataModel); by zhonggy 2015-07 if (fromDataModel instanceof TreePanelModel) { TreePanelModel treePanelModel = (TreePanelModel)fromDataModel; Object treeSelectObj = treePanelModel.getClickObject(); if (treeSelectObj == null) { return; } // 当是被动刷新时,重新设置pageIndex为1 tablePanel.getDataTablePanel().setPageIndex(1); if(treeSelectObj instanceof IDataNode){ // 设置RegionPanel的sourceData 为Tree IDataNode sourceData = (IDataNode)treeSelectObj; this.setSourceData(sourceData); } } else if (fromDataModel instanceof TablePanelDataModel) { TablePanelDataModel tablePanelDataModel = (TablePanelDataModel)fromDataModel; Object tableSelectObj = tablePanelDataModel.getClickObject(); // add by xchao 2014.04.16 begin // 刷新时,始终应该使用 初始的 sourceData tableSelectObj = tablePanel.getSourceData(); // add by xchao 2014.04.16 end if (tableSelectObj == null) { tableSelectObj = tablePanelDataModel.getClickObject(); if(tableSelectObj == null){ tablePanel.getDataTablePanel().refreshTableData(); return; } } // update by xchao 2014.03.26 begin // 修复来自Dialog底部的button执行完成后 // 刷新 调用弹出此窗口的button所在的table的数据时,刷新失败的BUG if(tableSelectObj instanceof IDataNode){ // 设置RegionPanel的sourceData 为Tree IDataNode sourceData = (IDataNode)tableSelectObj; this.setSourceData(sourceData); } // update by xchao 2014.03.26 end } tablePanel.getDataTablePanel().refreshTableData(); //改造后的UI刷新机制不能通过Module直接刷新UI? by zhonggy 2015-07 this.getUILayoutModel().notifyRefresh(this); } /** * 处理UI组件的UI刷新(先刷新UI Module,通过UI Module刷新UI组件) add by zhonggy 2015-07 */ public void refreshUI(IDataModel fromDataModel) { this.sourceModel = fromDataModel; needRefreshUI = true; if (regionUIIsActive && regionPanel != null) { refreshUI(); } } @Override /** * 处理UI刷新 */ public void refreshUI() { this.setActive( true); if (needRefreshUI && regionPanel != null) { needRefreshUI = false; //regionPanel.refreshUI(); if (sourceModel instanceof TreePanelModel) { TreePanelModel treePanelModel = (TreePanelModel) sourceModel; Object treeSelectObj = treePanelModel.getClickObject(); if (treeSelectObj == null) { return; } //tablePanel.getDataTablePanel().setPageIndex(1); if (treeSelectObj instanceof IDataNode) { IDataNode sourceData = (IDataNode) treeSelectObj; this.setSourceData(sourceData); } } else if (sourceModel instanceof TablePanelDataModel) { TablePanelDataModel tablePanelDataModel = (TablePanelDataModel) sourceModel; Object tableSelectObj = tablePanelDataModel.getClickObject(); //tableSelectObj = tablePanel.getSourceData(); //??? by zhonggy if (tableSelectObj == null) { //tableSelectObj = tablePanelDataModel.getClickObject(); /*if (tableSelectObj == null) { tablePanel.getDataTablePanel().refreshTableData(); return; }*/ return; } if (tableSelectObj instanceof IDataNode) { IDataNode sourceData = (IDataNode) tableSelectObj; this.setSourceData(sourceData); } } if (regionUIIsActive && regionPanel != null) { /*needRefreshUI = false;*/ //regionPanel.refreshUI(); tablePanel.getDataTablePanel().refreshTableData(); } } } }