package com.vci.client.uif.engine.client.TreeTable; import java.util.ArrayList; import java.util.List; import javax.swing.tree.TreePath; import com.vci.client.ui.treeTable.TreeTableModel; import com.vci.client.uif.engine.client.IDataModel; import com.vci.client.uif.engine.client.IRegionPanel; import com.vci.client.uif.engine.client.IUILayoutModel; import com.vci.client.uif.engine.common.IDataNode; import com.vci.common.utility.ObjectUtility; public class TreeTableDataModel extends TreeTableModel implements IDataModel { private TreeTablePanel tablePanel = null; private Object clickObject = null; private IRegionPanel regionPanel = null; private IDataNode sourceData = null; public TreeTableDataModel(Object rootObject, String[] columnNames, Class[] columnClasses, TreeTablePanel tablePanel) { super(rootObject, columnNames, columnClasses); TreeTableModel.TreeTableNode rootNode = new TreeTableNode(rootObject); rootNode.setPropertyValueByName(columnNames[0], rootObject); this.root = rootNode; this.tablePanel = tablePanel; setRegionPanel(tablePanel); } @Override public boolean selectedHasRoot() { boolean res = false; TreePath[] treePaths = tablePanel.getTreeTable().getTree() .getSelectionPaths(); for (TreePath treePath : treePaths) { boolean pathIsRoot = treePathIsRoot(treePath); if (pathIsRoot) { res = true; break; } } return res; } @Override public boolean lastSelectedIsRoot() { return treePathIsRoot(tablePanel.getTreeTable().getTree() .getSelectionPath()); } private boolean treePathIsRoot(TreePath treePath) { boolean res = false; Object lastObject = tablePanel.getTreeTable().getTree() .getLastSelectedPathComponent(); if (lastObject instanceof TreeTableModel.TreeTableNode) { TreeTableModel.TreeTableNode treeNode = (TreeTableModel.TreeTableNode) lastObject; res = (treeNode.getParent() == null); } return res; } /** * 重写父类的 isLeaf,以当前节点设置的是否是叶节点为准 */ public boolean isLeaf(Object node) { return ((TreeTableNode) node).isLeaf(); } private String key = ObjectUtility.getNewObjectID36(); private IUILayoutModel uiLayoutModel = null; @Override public String getKey() { return this.key; } @Override public void setUILayoutModel(IUILayoutModel uiLayoutModel) { this.uiLayoutModel = uiLayoutModel; } @Override public IUILayoutModel getUILayoutModel() { return this.uiLayoutModel; } @Override public int[] getSelectObjectRowIndexs() { return tablePanel.getTreeTable().getSelectedRows(); } @Override public Object[] getSelectObjects() { return tablePanel.getSelectTreeNodeObjects(); } @Override public Object getRootObject() { return tablePanel.getRootBusinessObject(); } @Override public void refreshCache(Object clientObject) { // TODO Auto-generated method stub } @Override public void setClickObject(Object selectObjs) { this.clickObject = selectObjs; } @Override public Object getClickObject() { return this.clickObject; } /** * 返回此 model 所在的 regionPanel */ @Override public IRegionPanel getRegionPanel() { return regionPanel; } /** * 设置此 model 所在的 regionPanel * * @param regionPanel * 此 model 所在的 regionPanel */ @Override public void setRegionPanel(IRegionPanel regionPanel) { this.regionPanel = regionPanel; } @Override public void fireTreeStructureChanged(Object source, Object[] path, int[] childIndices, Object[] children) { super.fireTreeStructureChanged(source, path, childIndices, children); } /** * 返回 此IRegionPanel初始时、唯一恒定不变的SourceData对象 * * @return 此IRegionPanel初始时、唯一恒定不变的SourceData对象 */ public IDataNode getSourceData() { return sourceData; } /** * 设置此IRegionPanel初始时、唯一恒定不变的SourceData对象 * * @param sourceData * 此IRegionPanel初始时、唯一恒定不变的SourceData对象 */ public void setSourceData(IDataNode sourceData) { this.sourceData = sourceData; } private IDataModel sourceModel; @Override public void setSourceModel(IDataModel sourceModel) { this.sourceModel = sourceModel; } @Override public IDataModel getSourceModel() { return sourceModel; } protected List innerDataModelsInTabPanel = null; /** * @Title :设置嵌套子页签 by zhonggy 2015-07 * @Description : * @param innerDataModelsInTabPanel */ public void setInnerTabModels(List innerDataModelsInTabPanel){ this.innerDataModelsInTabPanel = innerDataModelsInTabPanel; } private boolean regionUIIsActive = false; // 默认不需要加载激活界面 protected IDataModel innerActiveDataModel = null; @Override /** * @Title :控件是否激活显示(如果激活界面,当源界面数据变化后刷新时,当前界面数据需要及时刷新,否则不用刷新) * @Description : * @param isActive */ /*public void setActive(boolean isActive) { this.regionUIIsActive = isActive; }*/ public void setActive(boolean isActive) { this.regionUIIsActive = isActive; if (isActive) { //设置兄弟页签为非激活 if (brotherModels != null && brotherModels.size() >0) { for (IDataModel item : brotherModels) { if (item != this) { item.setActive(false); } } } if (innerActiveDataModel != null) { innerActiveDataModel.setActive(true); } }else if(innerDataModelsInTabPanel != null) { innerActiveDataModel = null; for (IDataModel item : innerDataModelsInTabPanel) { if (item.isActive()) { innerActiveDataModel = item; innerActiveDataModel.setActive(false); } } } } @Override /** * @Title :控件是否激活显示(如果激活界面,当源界面数据变化后刷新时,当前界面数据需要及时刷新,否则不用刷新) * @Description : * @return */ public boolean isActive() { return regionUIIsActive; } private boolean needRefreshUI = false; // 当前控件触发刷新 /** * 界面是否需要刷新 * * @Title :isNeedRefreshUI * @Description : * @return */ public boolean isNeedRefreshUI() { return needRefreshUI; } /** * 设置界面是否需要刷新 * @param needRefreshUI */ public void setNeedRefreshUI(boolean needRefreshUI){ this.needRefreshUI = needRefreshUI; } private List brotherModels = null; /** * @Title :兄弟Models * @Description : * @param dataModelsInTabPanel */ public void setBrotherModels(List models){ this.brotherModels = new ArrayList(); for (IDataModel iDataModel : models) { if (iDataModel != this) { brotherModels.add(iDataModel); } } } @Override public void refresh(IDataModel fromDataModel) { this.sourceModel = fromDataModel; if (fromDataModel instanceof TreeTableDataModel) { //? by zhonggy 2015-07 getUILayoutModel().notify(fromDataModel); } tablePanel.reloadCurrenTreeNodeData(); } /** * 处理UI组件的UI刷新(先刷新UI Module,通过UI Module刷新UI组件) add by zhonggy 2015-07 */ public void refreshUI(IDataModel fromDataModel){ this.sourceModel = fromDataModel; if (fromDataModel instanceof TreeTableDataModel) { //? by zhonggy 2015-07 getUILayoutModel().notify(fromDataModel); } needRefreshUI = true; if (regionUIIsActive && regionPanel != null) { needRefreshUI = false; tablePanel.refreshUI(); } } @Override /** * 处理UI刷新 */ public void refreshUI() { this.setActive(true); if (needRefreshUI && regionPanel != null) { needRefreshUI = false; tablePanel.refreshUI(); } } }