package com.vci.client.uif.engine.client; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.regex.Pattern; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextArea; import javax.swing.tree.TreeModel; import javax.swing.tree.TreeNode; import com.vci.client.LogonApplication; import com.vci.client.bof.ClientBusinessObject; import com.vci.client.bof.ClientLinkObject; import com.vci.client.common.FreeMarkerCommon; import com.vci.client.common.FreemarkerParamObject; import com.vci.client.framework.rightdistribution.object.RoleRightObject; import com.vci.client.framework.util.RightControlUtil; import com.vci.client.omd.provider.BtmProvider; import com.vci.client.portal.utility.DataModelFactory; import com.vci.client.portal.utility.DataModelProcessor; import com.vci.client.portal.utility.PLDefination; import com.vci.client.portal.utility.UITools; import com.vci.client.ui.exception.VCIException; import com.vci.client.ui.swing.components.VCIJPanel; import com.vci.client.uif.actions.client.UIFUtils; import com.vci.client.uif.engine.client.TreeTable.TreeTablePanel; import com.vci.client.uif.engine.client.mainDataArea.MainDataFormPanel; import com.vci.client.uif.engine.client.tableArea.TablePanel; import com.vci.client.uif.engine.client.tree.TreePanel; import com.vci.client.uif.engine.common.CBOHelper; import com.vci.client.uif.engine.common.DefaultTableNode; import com.vci.client.uif.engine.common.GlobalContextParam; import com.vci.client.uif.engine.common.IDataNode; import com.vci.common.exception.VciExceptionTool; import com.vci.corba.common.VCIError; import com.vci.corba.omd.btm.BtmItem; import com.vci.corba.omd.data.BusinessObject; import com.vci.corba.omd.data.LinkObject; import com.vci.corba.portal.data.PLPageDefination; import com.vci.corba.portal.data.PLUILayout; import com.vci.corba.portal.data.PLTabPage; import com.vci.mw.ClientContextVariable; /** * 根据传递的类型、上下文以及参数信息,动态构建显示的Panel * @author VCI_STGK_Lincq * */ public class UILayoutPanel extends UIBaseLayoutPanel{ private static final long serialVersionUID = -889811444944434818L; private PLUILayout curMainPageContext; //当前主界面上下文 private Map contextDefMap = new HashMap(); //Del By ZGY private UILayoutModel layoutModel = new UILayoutModel(); private Component navigatorPanel = null; private Component rightTopPanel = null; private Component rightBottomPanel = null; // private Map> contextCache = new HashMap>(); private Map>> contextCache = new HashMap>>(); private Map>> contextCachePD = new HashMap>>(); /** * 主界面的分隔面板 */ private JSplitPane mainSplitPane = null; public UILayoutPanel(String url, Map parameters) { super(url, parameters); } public UILayoutPanel(Map parameters) { super(parameters); } @Override public boolean prep() { boolean rs = true; if (url != null) { String cparameter = url.substring(url.indexOf("?") + 1); String[] cparameters = cparameter.split("&"); String queryTemplate = ""; String queryType = ""; for (int i = 0; i < cparameters.length; i++) { if (cparameters[i].indexOf("type") == 0) { this.type = cparameters[i].substring(cparameters[i].indexOf("=") + 1); continue; } else if (cparameters[i].indexOf("context") == 0) { this.context = cparameters[i].substring(cparameters[i].indexOf("=") + 1); } else if( cparameters[i].indexOf("querytemplate") == 0){ //从url中获得查询模板 queryTemplate = cparameters[i].substring(cparameters[i].indexOf("=") + 1); }else if ( cparameters[i].indexOf("querytype") ==0 ){ //从url中获得查询模板类型 queryType = cparameters[i].substring(cparameters[i].indexOf("=") + 1); } } if (queryTemplate != null && !queryTemplate.equals("") && queryType != null && !queryType.equals("")) { try { this.sourceDataNode = new DefaultTableNode(); //从查询模板中查询数据 DataModelProcessor processor = new DataModelProcessor(); Map conditionMap = GlobalContextParam.getInstance().getDefaultConditionMap(); if(queryType.equals("0")){ //业务对象查询模板 并设置全局的OID BusinessObject[] bos = processor.getBusinessObjectByQueryTemplate(queryTemplate, conditionMap); if(bos != null && bos.length > 0){ this.paramters.put(UIHelper.OID, bos[0].oid); ClientBusinessObject cbo = new ClientBusinessObject(); cbo.setBusinessObject(bos[0]); sourceDataNode.setMasterObject(cbo); sourceDataNode.setValueMap(CBOHelper.getBOValueMap(cbo.getBusinessObject())); } else { VCIException exp = new VCIException("uifmodel.plm.uif.engine.querytemplate.novalue"); this.showMessage(ClientContextVariable.getFrame(), exp); return false; } } else { LinkObject[] los = processor.getLinkObjectByQueryTemplate(queryTemplate, conditionMap); if(los != null && los.length > 0){ this.paramters.put(UIHelper.OID, los[0].oid); ClientLinkObject clo = new ClientLinkObject(); clo.setLinkObject(los[0]); sourceDataNode.setMasterObject(clo); sourceDataNode.setValueMap(CBOHelper.getLOValueMap(clo.getLinkObject())); } else { VCIException exp = new VCIException("uifmodel.plm.uif.engine.querytemplate.novalue"); this.showMessage(ClientContextVariable.getFrame(), exp); return false; } } } catch (Exception e) { e.printStackTrace(); VCIException exp = new VCIException("uifmodel.plm.uif.engine.querytemplate.queryError", new String[]{VciExceptionTool.getExceptionStr(e), VciExceptionTool.getExceptionDetail(e)}); this.showMessage(ClientContextVariable.getFrame(), exp); return false; } } } else { this.type = this.paramters.get("type"); this.context = this.paramters.get("context"); } return rs; } @Override public void initMainPanel() { try { curMainPageContext = getContext(type, context); if (curMainPageContext == null) { return; } setReflectArea(curMainPageContext); //contextDefMap.put(type, pageContext); // By ZGY if (curMainPageContext.plIsShowNavigator == 1) { navigatorPanel = initNavigator(this.getSourceDataNode(), type, context, this.getDataValueMap(), curMainPageContext.plOId); } if (curMainPageContext.plIsShowForm == 1) { rightTopPanel = initMainDataArea(this.getSourceDataNode(), type, context, this.getDataValueMap(), curMainPageContext.plOId); } if (curMainPageContext.plIsShowTab == 1) { rightBottomPanel = initTabArea(this.getSourceDataNode(), type, context, this.getDataValueMap(), curMainPageContext.plOId); } mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); if(curMainPageContext.plIsShowNavigator == 1){ mainSplitPane.setDividerSize(10); mainSplitPane.setDividerLocation(getNavigatorWidth()); mainSplitPane.setContinuousLayout(true); mainSplitPane.setOneTouchExpandable(true); mainSplitPane.setLeftComponent(navigatorPanel); if(navigatorPanel instanceof TreePanel){ TreePanel tp = (TreePanel)navigatorPanel; TreeModel tm = tp.getTree().getModel(); TreeNode root = (TreeNode)tm.getRoot(); if(root.getChildCount() > 0){ tp.getTree().setSelectionRow(0); } } } JSplitPane rightMainSplitPane = initRightPanel(curMainPageContext); mainSplitPane.setRightComponent(rightMainSplitPane); this.setLayout(new BorderLayout()); this.add(mainSplitPane,BorderLayout.CENTER); // this.add(rightBottomPanel,BorderLayout.CENTER); } catch (VCIError e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } private int getNavigatorWidth() { int width = 248; try { String conf = curMainPageContext.plDesc; if (conf == null || conf.trim().equals("")) { return width; } String[] confs = conf.split(";"); for (String c : confs) { String[] ca = c.split("="); if (ca.length != 2) { continue; } if (ca[0].equalsIgnoreCase("width_n")) { width = Integer.valueOf(ca[1]).intValue(); return width; } } } catch (Throwable e) { e.printStackTrace(); } return width; } /** * 初始化右侧界面 * @param pageContext * @return */ private JSplitPane initRightPanel(PLUILayout pageContext) { JSplitPane rightMainSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); if (pageContext.plIsShowForm == 1 && pageContext.plIsShowTab == 1) {//右上右下区域 rightMainSplitPane.setDividerSize(10); rightMainSplitPane.setDividerLocation(300); rightMainSplitPane.setContinuousLayout(true); rightMainSplitPane.setOneTouchExpandable(true); rightMainSplitPane.setTopComponent(rightTopPanel); rightMainSplitPane.setBottomComponent(rightBottomPanel); } else if (pageContext.plIsShowForm == 1) {//右上区域 rightMainSplitPane.setDividerSize(0); rightMainSplitPane.setDividerLocation(1.0); rightMainSplitPane.setTopComponent(rightTopPanel); } else { //右下区域 rightMainSplitPane.setDividerSize(0); rightMainSplitPane.setDividerLocation(0); rightMainSplitPane.setBottomComponent(rightBottomPanel); } return rightMainSplitPane; } private Map dataValueMap = new HashMap(); public Map getDataValueMap() { return dataValueMap; } public void setDataValueMap(Map dataValueMap) { this.dataValueMap = dataValueMap; } /** * 初始化导航区 * @param areaType * @return * @throws Throwable */ private Component initNavigator(IDataNode dataNode, String type, String context, Map dataMap, String cntextId) throws Throwable { return initTabPage(dataNode, type, context, dataMap, cntextId, (short)1); } /** * 初始化主数据区 * @param areaType * @return * @throws Throwable */ private Component initMainDataArea(IDataNode dataNode, String type, String context, Map dataMap, String cntextId) throws Throwable { return initTabPage(dataNode, type, context, dataMap, cntextId, (short)2); } /** * 初始化页签区 * @param areaType * @return * @throws Throwable */ private Component initTabArea(IDataNode dataNode, String type, String context, Map dataMap, String cntextId) throws Throwable { return initTabPage(dataNode, type, context, dataMap, cntextId, (short)3); } /** * 初始哈具体的tab页签 * @param areaType * @return * @throws Throwable */ private Component initTabPage(IDataNode dataNode, String type, String context, Map dataMap, String contextId, short areaType) throws Throwable { Map> defMap = new LinkedHashMap>(); Map> pageDefMap = new LinkedHashMap>(); if (contextCache.get(contextId + areaType) != null) { defMap = contextCache.get(contextId + areaType); pageDefMap = contextCachePD.get(contextId + areaType); } else { defMap = getTabPage(contextId, areaType, defMap, pageDefMap); contextCache.put(contextId + areaType, defMap); contextCachePD.put(contextId + areaType, pageDefMap); } if (defMap.size() < 1) { return null; } else { return initTabPageDetail(dataNode, type, context, dataMap, areaType, defMap, pageDefMap); } } private Map tabPageMap = new LinkedHashMap(); private Map> tabPageDefsMap = new LinkedHashMap>(); private Map> tabDefsMap = new LinkedHashMap>(); private Map componentTabMap = new LinkedHashMap(); private boolean operationAreaNeedShow = false; private Component initTabPageDetail(IDataNode dataNode, String type, String context, Map dataMap, final int areaType, Map> defMap, Map> pageDefMap) { Iterator itor = defMap.keySet().iterator(); final TabPagePanel tabPanel = new TabPagePanel(); List dataModelsInTabPanel = new ArrayList(); int seq = 0; while (itor.hasNext()) { PLTabPage cPage = itor.next(); //判断页签是否有权限 if (!verifyComponentHasRight(cPage.plOId)) { continue; } if (tabPanel.checkIsLoad(cPage.plOId)) { continue; } //开始页签界面加载 List compts = new LinkedList(); List regionPanelList = new LinkedList(); //页签内UI控件集合 List innerDataModelsInTabPanel = new ArrayList(); Map innerIndexDataModels = new HashMap(); List pageDefinitions = pageDefMap.get(cPage); List definitions = defMap.get(cPage); IDataModel firstDataModel = null; //VCIJPanel pal = new VCIJPanel(new GridLayout(definitions.size(), 1)); IDataModel masterDataModel = null; //每个页签中主控件Model for (int i = 0; i < definitions.size(); i++) { PLDefination definition = definitions.get(i); //判断组件是否有权限 if (!verifyComponentHasRight(pageDefinitions.get(i).plOId)) { continue; } IRegionPanel cTabPanel = getDefinationPanel(dataNode, type, context, dataMap, cPage, definition, areaType, pageDefinitions.get(i)); if(cTabPanel == null){ continue; } if (firstDataModel == null) { firstDataModel = cTabPanel.getDataModel(); dataModelsInTabPanel.add(firstDataModel); } if (i > 0) { innerDataModelsInTabPanel.add(cTabPanel.getDataModel()); innerIndexDataModels.put(definition.getName(), cTabPanel.getDataModel()); } if(areaType == 3){ operationAreaNeedShow = true; } regionPanelList.add(cTabPanel); this.regionPanelMap.put((String.valueOf(areaType)).toLowerCase(), cTabPanel); this.regionPanelMap.put((String.valueOf(areaType) + DOT + cPage.plCode).toLowerCase(), cTabPanel); this.regionPanelMap.put((String.valueOf(areaType) + DOT + cPage.plCode + DOT + definition.getId()).toLowerCase(), cTabPanel);//精确缓存 Component compt = cTabPanel.getComponentPanel(); if (seq == 0 && i < 2) { // seq:当有多个面签时,先只加载第一个 //i: 余下的面签通过loadTabPanel实现加载 cTabPanel.init(); //初始化组件UI界面及数据加载 cTabPanel.getDataModel().setUILayoutModel(layoutModel); cTabPanel.getDataModel().setActive(true); layoutModel.addLayoutModes(areaType, cTabPanel.getDataModel()); if(compt != null && definitions.size() > 1){ // 为面签里多个页面分配高度 int widht = ClientContextVariable.getFrame().getWidth() - 350; int height = ClientContextVariable.getFrame().getHeight() / 2; compt.setPreferredSize(new Dimension(widht, height)); } // 标记 第 seq 个页签,已经加载过 tabPanel.setLoadList(String.valueOf(seq)); if(i == 0){ masterDataModel = cTabPanel.getDataModel();//每个页签中主控件Model this.regionPanelMap.put((String.valueOf(areaType)).toLowerCase(), cTabPanel);//每个页签中主控件 } else { // 注册同一个面签里,第一个UI刷新其它UI(不能刷其它面签下的UI) this.layoutModel.addAreaInnerNotifyModel(masterDataModel, cTabPanel.getDataModel()); } } //pal.add(compt); compts.add(compt); // 当且仅当,只有一个页签,且这个页签里只有一个UI组件时,返回这个唯一的一个UI组件 if(defMap.size() == 1 && definitions.size() == 1 && cTabPanel != null){ return cTabPanel.getComponentPanel(); } } // end for loop definition if(compts.size() == 1){ tabPanel.add(cPage.plName, compts.get(0)); } else if(compts.size() == 2){ JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT); jsp.setDividerSize(10); jsp.setDividerLocation(300); jsp.setContinuousLayout(true); jsp.setOneTouchExpandable(true); jsp.setTopComponent(compts.get(0)); jsp.setRightComponent(compts.get(1)); tabPanel.add(cPage.plName, jsp); } else { JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT); jsp.setDividerSize(10); jsp.setDividerLocation(300); jsp.setContinuousLayout(true); jsp.setOneTouchExpandable(true); jsp.setTopComponent(compts.get(0)); TabPagePanel tpp = new TabPagePanel(); for (int j = 1; j < compts.size(); j++) { tpp.addTab(definitions.get(j).getName(), compts.get(j)); //tpp.addIndexModel(innerIndexDataModels.get(definitions.get(j).getName())) ; } if(seq == 0) {//注册第一页签的子页签事件 addTabPanelActionListener(tpp, areaType, masterDataModel); } jsp.setRightComponent(tpp); if(innerDataModelsInTabPanel != null && innerDataModelsInTabPanel.size() >1){ for (IDataModel innerItem : innerDataModelsInTabPanel) { innerItem.setBrotherModels(innerDataModelsInTabPanel); } if (firstDataModel != null) { firstDataModel.setInnerTabModels(innerDataModelsInTabPanel); } } //tabPanel.addIndexModel(firstDataModel); tabPanel.add(cPage.plName, jsp); componentTabMap.put(seq, tpp); } tabPageMap.put(seq, cPage); tabPageDefsMap.put(seq, pageDefinitions); tabDefsMap.put(seq, definitions); // 将第 seq 个页签里的全部UI对应的 IRegionPanel 存储 tabPanel.getChildPanelMap().put(seq, regionPanelList); // 标记 plOId 对应的页签,已经加载过 tabPanel.setLoadList(cPage.plOId); //dataModelsInTabPanel.add(); seq += 1; }// end loop tabpage for (IDataModel iDataModel : dataModelsInTabPanel) { iDataModel.setBrotherModels(dataModelsInTabPanel); } tabPanel.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { /**点击选项卡空白处时,仍然触发选项卡事件的处理 Begin**/ Point p = arg0.getPoint(); int r = tabPanel.indexAtLocation(p.x, p.y); if(r < 0) { return; } /******End*****************************/ int n = tabPanel.getSelectedIndex(); loadTabPanel(tabPanel, n, areaType); } }); return tabPanel; } /** * 设置当前上下文各区域影响的刷新区域 * @param area * @param context */ private void setReflectArea(PLUILayout context) { String reflectSet = context.plDesc; if (reflectSet == null || reflectSet.trim().equals("")) { return; } String[] rss = reflectSet.split(";"); for (String rs : rss) { String[] rsArea = rs.split(":"); if (rsArea.length != 2) { continue; } String sArea = rsArea[0]; int isArea; try { isArea = Integer.valueOf(sArea).intValue(); } catch (Exception e) { continue; } String[] dAreas = rsArea[1].split(","); for (String dArea : dAreas) { int idArea; try { idArea = Integer.valueOf(dArea).intValue(); } catch (Exception e) { continue; } layoutModel.setReloadEffectArea(isArea, idArea); } } } private boolean verifyComponentHasRight(String compoentId) { String userName = LogonApplication.getUserEntityObject().getUserName(); if (RightControlUtil.isDeveloper(userName) || RightControlUtil.isAdmin(userName)) { return true; } RoleRightObject[] roleRightObjects = RightControlUtil.getRoleRightByUserName(userName, LogonApplication.currentUserRoleRights); for (RoleRightObject RoleRightObject : roleRightObjects) { if (RoleRightObject.getFuncId().equals(compoentId)) { return true; } } return false; } private void addTabPanelActionListener(final TabPagePanel tpp, final int areaType, final IDataModel cMasterDataModel) { tpp.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent arg0) { //**点击选项卡空白处时,仍然触发选项卡事件的处理 Begin**//* Point p = arg0.getPoint(); int r = tpp.indexAtLocation(p.x, p.y); if(r < 0) { return; } //******End*****************************//* int n = tpp.getSelectedIndex(); loadComponentPanel(tpp, n, areaType, cMasterDataModel); } }); } /** * 页签加载 */ private void loadTabPanel(TabPagePanel tabPanel, int index,final int areaType) { List regionPanelList = tabPanel.getChildPanelMap().get(index); //IDataModel indexModel = ((IRegionPanel)tabPanel.getSelectedComponent()).getDataModel(); //indexModel.setActive(true);//激活当前页签UI add by zhonggy 2015-07 /*if (tabPanel.checkIsLoad(String.valueOf(index))) { //indexModel.refreshUI(); return; }*/ //Component compt = null; //List compts = new LinkedList(); IDataModel masterDataModel = null; for (int i = 0; i < regionPanelList.size(); i++) { if (i == 2) { break; } IRegionPanel cTabPanel = regionPanelList.get(i); /*if (cTabPanel.isBuilt()) { cTabPanel.getDataModel().refreshUI(); continue; }*/ IDataNode sourceData = null; if (layoutModel.getAreaSourceDataMap().containsKey(areaType)) { sourceData = layoutModel.getAreaSourceDataMap().get(areaType); } if (sourceData != null) { // cTabPanel.setSourceData(sourceData); cTabPanel.getDataModel().setSourceData(sourceData); } cTabPanel.getDataModel().setActive(true); if (tabPanel.checkIsLoad(String.valueOf(index))) { // by zhonggy 2015-07 cTabPanel.getDataModel().refreshUI(); continue; } cTabPanel.init(); //初始化UI cTabPanel.getDataModel().setUILayoutModel(layoutModel); layoutModel.addLayoutModes(areaType, cTabPanel.getDataModel()); //compt = cTabPanel.getComponentPanel(); //compts.add(compt); if (i == 0) { masterDataModel = cTabPanel.getDataModel(); } else { // 注册同一个面签里,第一个UI刷新其它UI(不能刷其它面签下的UI) this.layoutModel.addAreaInnerNotifyModel(masterDataModel, cTabPanel.getDataModel()); } } // 标记 第 seq 个页签,已经加载过 if (!tabPanel.checkIsLoad(String.valueOf(index))) { // by zhonggy 2015-07 tabPanel.setLoadList(String.valueOf(String.valueOf(index))); } if (componentTabMap.get(index) == null) { return; } addTabPanelActionListener(componentTabMap.get(index), areaType, masterDataModel); } /** * 鼠标点击子页签事件 */ private void loadComponentPanel(TabPagePanel tabPanel, int index, final int areaType, IDataModel masterDataModel) { IRegionPanel cPanel = (IRegionPanel)tabPanel.getSelectedComponent(); if (masterDataModel.getSelectObjects() != null && masterDataModel.getSelectObjects().length > 0) { IDataNode sourceData = (IDataNode)masterDataModel.getSelectObjects()[0]; //cPanel.setSourceData(sourceData); cPanel.getDataModel().setSourceData(sourceData); } if(cPanel.isBuilt()){ cPanel.getDataModel().refreshUI(); return; } cPanel.getDataModel().setActive(true); cPanel.init(); cPanel.getDataModel().setUILayoutModel(layoutModel); layoutModel.addLayoutModes(areaType, cPanel.getDataModel()); this.layoutModel.addAreaInnerNotifyModel(masterDataModel, cPanel.getDataModel()); PLTabPage cPage = cPanel.getTabPage(); PLDefination cDefination = cPanel.getDefination(); this.regionPanelMap.put((String.valueOf(areaType) + DOT + cPage.plCode + DOT + cDefination.getId()).toLowerCase(), cPanel); } /** * 获取具体definition对应的Panel * @param cPage * @param cDefination * @return */ private IRegionPanel getDefinationPanel(IDataNode dataNode, String type, String context, Map dataMap, PLTabPage cPage, PLDefination cDefination, int areaType, PLPageDefination pageDefinition) { IRegionPanel cTabPanel = null; if (cDefination.getTemplateType() == null) { return null; } else if (cDefination.getTemplateType().equals("1")) {//列表 String className = ""; // 根据UI定义,是否需要使用支持可编辑的TablePanel // 支持可以编辑的TablePanel className = "plm.uif.engine.client.tableArea.editable.EditableTablePanel"; // 不支持编辑的TablePanel //className = "plm.uif.engine.client.tableArea.TablePanel.TablePanel"; // 从UI定义中取 //className = cDefination.getTableImplement(); cTabPanel = createTablePanelInstanceObject(className); } else if (cDefination.getTemplateType().equals("2")) {//自定义 cTabPanel = initCustomPanel(cDefination); } else if (cDefination.getTemplateType().equals("3")) {//树表 cTabPanel = new TreeTablePanel(dataNode,type,context,cDefination); } else if (cDefination.getTemplateType().equals("4")) {//主Form MainDataFormPanel mdfm = new MainDataFormPanel(); mdfm.setFromDataMap(getDataValueMap()); cTabPanel = mdfm; } else if (cDefination.getTemplateType().equals("5")) {//树 cTabPanel = new TreePanel(); if (dataNode == null) { dataNode = construstRootFolder(cDefination); //特殊参照树根节点?by zhonggy } } else { return null; } if(cTabPanel == null) return null; cTabPanel.preInit(type, context); //这些数据建议都存放到model中 by zhonggy cTabPanel.setDefination(cDefination); cTabPanel.setTabId(cPage.plOId); cTabPanel.setTab(cPage); cTabPanel.setPageDefinition(pageDefinition); cTabPanel.setFromDataMap(dataMap); cTabPanel.setBaseLayoutPanel(this); // 设置源数据对象 //cTabPanel.setSourceData(dataNode); if (cTabPanel.getDataModel() == null) { Component tabPanel = cTabPanel.getComponentPanel(); if (tabPanel instanceof VCIJPanel) { //Add ZhongGY 2015-07-02? ((VCIJPanel)tabPanel).removeAll(); JTextArea errortxt = new JTextArea(); ((VCIJPanel)tabPanel).setLayout(new BorderLayout(0, 0)); ((VCIJPanel)tabPanel).add(errortxt,BorderLayout.CENTER); errortxt.setLineWrap(true); errortxt.setForeground(Color.RED); errortxt.setEditable(false); Class cls = cTabPanel.getClass(); String errorContent = "UI组件[" + cls.getName() + "]实例化化异常,在组件实例化过程中没有有效实例化其[IDataModel]对象,请将该问题提交开发人员!"; errortxt.setText(errorContent); errortxt.setToolTipText(errorContent); } }else { if (dataNode != null) { cTabPanel.getDataModel().setSourceData(dataNode); //ZhongGY 2015-07-02? } } // cTabPanel.setSourceData(this.getSelectDataNode()); return cTabPanel; } private IRegionPanel createTablePanelInstanceObject(String className){ IRegionPanel cTabPanel = null; boolean isSingleCheckManager = false; if (this.paramters != null && this.paramters.containsKey("tableRowSelectType")) { if (this.paramters.get("tableRowSelectType").equals("singleSelect")) { isSingleCheckManager = true; } } if(UIFUtils.isNullOrEmpty(className)){ cTabPanel = new TablePanel(isSingleCheckManager); } else { Object obj = createObjectInstance(className); if(obj != null && obj instanceof IRegionPanel){ cTabPanel = (IRegionPanel)obj; } else { cTabPanel = new TablePanel(isSingleCheckManager); } } return cTabPanel; } private IDataNode construstRootFolder(PLDefination cDefination) { String linkType = cDefination.getLinkType(); if (linkType != null && !linkType.equals("")) { return null; } String linkStr = cDefination.getShowLinkAbs(); String separator = cDefination.getSeparator(); String[] linkArray = linkStr.split(separator); if (linkArray.length < 2) { return null; } IDataNode dataNode = new DefaultTableNode(); dataNode.setMasterObject(linkArray[1]); return dataNode; } private IRegionPanel initCustomPanel(PLDefination cDefination) { try { String className = cDefination.getControlPath(); IRegionPanel customPanel = (IRegionPanel) createObjectInstance(className); return customPanel; } catch (Exception e) { e.printStackTrace(); } return null; } private Object createObjectInstance(String className){ Object res = null; try { Class cls = Class.forName(className); res = cls.newInstance(); } catch (Exception e) { e.printStackTrace(); } return res; } /** * 获取当前context的详细信息 * @return * @throws Throwable * @throws Exception */ private PLUILayout getContext(String type, String context) throws Exception, Throwable { DataModelFactory factory = new DataModelFactory(); PLUILayout contextDef = factory.getContextDefination(type, context); if (contextDef == null || contextDef.plOId.equals("")) { BtmItem item = BtmProvider.getBtmItemByName(type); if (item.fName == null || item.fName.equals("")) { return null; } return getContext(item.fName, item.fName); } return contextDef; } // /** // * 获得当前上下文的所有tab page definiton // * @return // * @throws Throwable // */ // private Map> getTabPageDefintion(String contextOid, int areaType) throws Throwable { // PLTabPage[] tabs = Tool.getService().getTabPagesByContextIdAndType(contextOid, areaType); // Map> defMap = new LinkedHashMap>(); // for (int i = 0; i < tabs.length; i++) { // if(tabs[i].plIsOpen == 0) { // continue; // } // PLPageDefination[] pageDefinitions = Tool.getService().getPLPageDefinationsByPageContextOId(tabs[i].plOId); // if (pageDefinitions != null && pageDefinitions.length < 1) { // continue; // } // List list = new LinkedList(); // for(PLPageDefination pageDefinition : pageDefinitions){ // list.add(pageDefinition); // } // defMap.put(tabs[i], list); // } // return defMap; // } /** * 获得当前上下文的所有tab page * @return * @throws Throwable */ private Map> getTabPage(String contextOid, short areaType, Map> defMap, Map> pageDefMap) throws Throwable { PLTabPage[] tabs = UITools.getService().getTabPagesByContextIdAndType(contextOid, areaType); for (int i = 0; i < tabs.length; i++) { if(tabs[i].plIsOpen == 0) { continue; } PLPageDefination[] pageDefinitions = UITools.getService().getPLPageDefinationsByPageContextOId(tabs[i].plOId); if (pageDefinitions != null && pageDefinitions.length < 1) { continue; } List list = new LinkedList(); List definitions = new LinkedList(); for(PLPageDefination pageDefinition : pageDefinitions){ list.add(pageDefinition); PLDefination defination = UITools.getPLDefination(pageDefinition.plDefination); defination.setName(pageDefinition.name); defination.setDescription(pageDefinition.desc); defination.setId(String.valueOf(pageDefinition.seq)); definitions.add(defination); } pageDefMap.put(tabs[i], list); defMap.put(tabs[i], definitions); } return defMap; } @Override public void reinitRightPanel(IDataNode dataNode) { reinitRightPanel(dataNode, context); } /** * 重新绘制右侧界面 * @param bo */ @Override public void reinitRightPanel(IDataNode dataNode, String context) { String cType = getBusinessObjectType(dataNode); reinitRightPanel(dataNode, cType, context); } @Override public void reinitRightPanel(IDataNode dataNode, String type, String context) { if(navigatorPanel == null){ this.regionPanelMap.clear(); } else { // 移除非导航区对应的regionpanel Iterator its = this.regionPanelMap.keySet().iterator(); while(its.hasNext()){ String key = its.next(); if(key.startsWith("1.")) { continue; } else { its.remove(); } } } this.setSelectDataNode(dataNode); // add by xchao 2016.09.29 begin // 优先从传入参数中取type, // 如果该传入参数type为空,则 执行 // cType = getBusinessObjectType(dataNode) 以保证向之前的处理逻辑兼容 String cType = type; if(type == null || "".equals(type)){ cType = getBusinessObjectType(dataNode); } // add by xchao 2016.09.29 end try { PLUILayout cContext = null; if (contextDefMap.containsKey(context)) { cContext = contextDefMap.get(context); } else { cContext = this.getContext(cType, context); contextDefMap.put(context, cContext); } int divSize = mainSplitPane.getDividerSize(); Component rightComponent = mainSplitPane.getRightComponent(); if (rightComponent != null) { mainSplitPane.remove(rightComponent); } layoutModel.removeAreaModels(2); layoutModel.removeAreaModels(3); layoutModel.getAreaSourceDataMap().remove(2); layoutModel.getAreaSourceDataMap().remove(3); layoutModel.cleanReloadEffectArea(); setReflectArea(cContext); if (cContext != null) { if (cType.equals(type)) { if (cContext.plIsShowForm == 1) { this.rightTopPanel = this.initMainDataArea(dataNode, cType, context, this.getDataValueMap(), cContext.plOId); } else { this.rightTopPanel = null; } if (cContext.plIsShowTab == 1) { this.rightBottomPanel = this.initTabArea(dataNode, cType, context, this.getDataValueMap(), cContext.plOId); } else { this.rightBottomPanel = null; } } else { if (cContext.plIsShowForm == 1) { this.rightTopPanel = this.initMainDataArea(dataNode, cType, context, null, cContext.plOId); } else { this.rightTopPanel = null; } if (cContext.plIsShowTab == 1) { this.rightBottomPanel = this.initTabArea(dataNode, cType, context, null, cContext.plOId); } else { this.rightBottomPanel = null; } } rightComponent = this.initRightPanel(cContext); mainSplitPane.setRightComponent(rightComponent); } else { mainSplitPane.setRightComponent(new JPanel()); } mainSplitPane.setDividerSize(divSize); mainSplitPane.updateUI(); } catch (VCIError e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } public JSplitPane getMainSplitPane(){ return mainSplitPane; } public Component getNavigatorPanel() { return navigatorPanel; } public Component getMainDataPanel() { return rightTopPanel; } public Component getTabPanel() { return rightBottomPanel; } public Map getRegionPanelMap() { return regionPanelMap; } public void setRegionPanelMap(Map regionPanelMap) { this.regionPanelMap = regionPanelMap; } public Object getObject(String key){ Object res = null; return res; } /** * 根据指定的key,从UILayoutPanel及其三大区域中获取sourcedata、selectdata的数据 *

==================================== UILayoutPanel =====================================

*

u.inputdata. 选择的那条数据对象。(如图1中的产品型号列表中选择的产品)

*

*

sourcedata. 从选择的那条数据对象中取出oid,经合按钮参数中定义的type,将此oid对应数据重新加载出来,作为此UILayoutPanel的sourcedata *

*

*

*

==================================== 导航区 =====================================

*

u.n.sourcedata. 导航区的sourcedata(实际上与 u.sourcedata是同一个对象)

*

u.n.selectdata. 导航区中最后最后点击的数据对象(树上多选时,是第一个点击的对象)

*

u.n.selectdata[0-N]. 导航区中,多选时对应的数据对象(索引从0开始,小于等于 树节点选择数据的长度 – 1),如 u.n.selectdata0.xxx、 u.n.selectdata1.xxx

*

*

u.n.tabpagecode1. 导航区里编码为tabpagecode1的tabpage(导航区当前暂未实现加载多个面签)

*

u.n.tabpagecode1.sourcedata.

*

u.n.tabpagecode1. selectdata.

*

u.n.tabpagecode1. selectdata[0-N].

*

*

u.n.tabpagecodeN. 导航区里编码为tabpagecodeN的tabpage(导航区当前暂未实现加载多个面签)

*

u.n.tabpagecodeN.sourcedata.

*

u.n.tabpagecodeN. selectdata.

*

u.n.tabpagecodeN. selectdata[0-N].

*

*

u.n.tabpagecode1.1. 导航区里编码为tabpagecode1的tabpage里编号为1的defination(form\table\tree\treetable\custom)

*

u.n.tabpagecode1.1.sourcedata.

*

u.n.tabpagecode1.1.selectdata.

*

u.n.tabpagecode1.1.selectdata[0-N].

*

*

u.n.tabpagecode1.N.sourcedata. 导航区里编码为tabpagecode1的tabpage里编号为N的defination(form\table\tree\treetable\custom)

*

u.n.tabpagecode1.N.sourcedata.

*

u.n.tabpagecode1.N.selectdata.

*

u.n.tabpagecode1.N.selectdata[0-N].

*

*

*

*

==================================== 控制区 =====================================

*

u.c.

*

u.c.sourcedata. 导航区的sourcedata(实际上与 u.sourcedata是同一个对象)

*

u.c.selectdata. 导航区中最后最后点击的数据对象(树上多选时,是第一个点击的对象)

*

u.c.selectdata[0-N]. 导航区中,多选时对应的数据对象(索引从0开始,小于等于 树节点选择数据的长度 – 1),如 u.n.selectdata0.xxx、 u.n.selectdata1.xxx

*

*

u.c.tabpagecode1. 导航区里编码为tabpagecode1的tabpage(导航区当前暂未实现加载多个面签)

*

u.c.tabpagecode1.sourcedata.

*

u.c.tabpagecode1. selectdata.

*

u.c.tabpagecode1. selectdata[0-N].

*

*

u.c.tabpagecodeN. 导航区里编码为tabpagecodeN的tabpage(导航区当前暂未实现加载多个面签)

*

u.c.tabpagecodeN.sourcedata.

*

u.c.tabpagecodeN. selectdata.

*

u.c.tabpagecodeN. selectdata[0-N].

*

*

u.c.tabpagecode1.1. 导航区里编码为tabpagecode1的tabpage里编号为1的defination(form\table\tree\treetable\custom)

*

u.c.tabpagecode1.1.sourcedata.

*

u.c.tabpagecode1.1.selectdata.

*

u.c.tabpagecode1.1.selectdata[0-N].

*

*

u.c.tabpagecode1.N.sourcedata. 导航区里编码为tabpagecode1的tabpage里编号为N的defination(form\table\tree\treetable\custom)

*

u.c.tabpagecode1.N.sourcedata.

*

u.c.tabpagecode1.N.selectdata.

*

u.c.tabpagecode1.N.selectdata[0-N].

*

*

*

*

==================================== 操作区 =====================================

*

u.o. 操作区里第一个加载的tabpage对象

*

u.o.sourcedata. 操作区的sourcedata

*

u.o.selectdata. 操作区选择的数据对象(实际上与 u.o.sourcedata是同一个对象)

*

u.o.selectdata[0-N]. 操作区中,多选时对应的数据对象(索引从0开始,小于等于 树节点选择数据的长度 – 1),如 u.o.selectdata0.xxx、 u.o.selectdata1.xxx

*

*

u.o.tabpagecode1. 操作区里编码为tabpagecode1的tabpage

*

u.o.tabpagecode1.sourcedata.

*

u.o.tabpagecodd1.selectdata.

*

u.o.tabpagecode1.selectdata[0-N].

*

*

u.o.tabpagecodeN.sourcedata. 操作区里编码为tabpagecodeN的tabpage

*

u.o.tabpagecodeN.selectdata.

*

u.o.tabpagecoddN.selectdata[0-N].

*

*

u.o.tabpagecode1.1.sourcedata. 操作区里编码为tabpagecode1的tabpage里编号为1的defination(form\table\tree\treetable\custom)

*

u.o.tabpagecode1.1.selectdata.

*

u.o.tabpagecode1.1.selectdata[0- N]

*

*

u.o.tabpagecode1.N.sourcedata. 操作区里编码为tabpagecode1的tabpage里编号为N的defination(form\table\tree\treetable\custom)

*

u.o.tabpagecode1.N.selectdata.

*

u.o.tabpagecode1.N.selectdata[0-N].

*/ @Override public String getValue(String key){ //${u.inputdata.xxx}-${u.inputdata.yyy} //不區分大小學,要求在配置的時候全部是小寫字母 //key = key.toLowerCase(); String res = key; if(isFreemarkTemplateContent(key)){ Map valueMap = new HashMap(); appendToValueMap(key, valueMap); Map rootMap = convertValueMapToFPOMap(valueMap); if(isExistInMap(key, valueMap)){ res = FreeMarkerCommon.getValueByTempRule(rootMap, key.replace(".", "_")); } else { res = key; } } else { res = getValueSingle(key); } return res; } /** * 检查要替换的字段KEY是否全部存在于valueMap中 * @param replaceField 查询模板中替换值的查询属性值 * @param valueMap dataSource.getValueMap() * @return */ private boolean isExistInMap(String replaceField, Map valueMap){ boolean res = true; String field = replaceField; int begin = field.indexOf("${"); int end = field.indexOf("}"); int len = field.length(); String key = ""; while(!"".equals(field) && begin >= 0 && end < len){ key = field.substring(begin + 2, end); if(!valueMap.containsKey(key)){ System.out.println("变量:" + key + " 在 sourceData.getValueMap() 中不存在。"); return false; } field = field.substring(end + 1); begin = field.indexOf("${"); end = field.indexOf("}"); len = field.length(); res = true; } return res; } private Map appendToValueMap(String replaceField, Map valueMap){ String field = replaceField; int begin = field.indexOf("${"); int end = field.indexOf("}"); int len = field.length(); String key = ""; while(!"".equals(field) && begin >= 0 && end < len){ key = field.substring(begin + 2, end); if(!valueMap.containsKey(key)){ valueMap.put(key, key); } field = field.substring(end + 1); begin = field.indexOf("${"); end = field.indexOf("}"); len = field.length(); } return valueMap; } private Map convertValueMapToFPOMap(Map map){ Map rootMap = new LinkedHashMap(); Iterator it = map.keySet().iterator(); while(it.hasNext()){ String key = it.next(); String value = map.get(key); String valueFromUILayout = getValueSingle(key); if(!valueFromUILayout.equals(key)){ value = valueFromUILayout; } if(value == null){ value = ""; } String newKey = key.replace(".", "_"); FreemarkerParamObject fpo = new FreemarkerParamObject(newKey, value); rootMap.put(newKey, fpo); } return rootMap; } private boolean isFreemarkTemplateContent(String itemValue){ int startPos = itemValue.indexOf("${"); int endPos = itemValue.indexOf("}"); return (startPos >= 0 && endPos >= 0 && startPos < endPos); } private String getValueSingle(String key){ String res = key; if(key.startsWith(UILAYOUT_INPUTDATA_PREFIX)){ res = getValueByContextInputData(key); }else if(key.startsWith(UILAYOUT_SOURCEDATA_PREFIX)){ res = getValueByContextSourceData(key); }else if(key.startsWith(UILAYOUT_NAVIGATOR_PREFIX) && navigatorPanel != null) { res = getValueByContextNavigator(key); } else if(key.startsWith(UILAYOUT_CONTROL_PREFIX) && rightTopPanel != null){ res = getValueByContextControl(key); } else if(key.startsWith(UILAYOUT_OPEATION_PREFIX) && rightBottomPanel != null){ res = getValueByContextOperation(key); } return res; } /** * 返回 传入的数据对象的valueMap中指定 key 的值 * @param originKey u.inputdata.xxx * @return */ private String getValueByContextInputData(String originKey){ String key = originKey; String res = key; key = key.replace(UILAYOUT_INPUTDATA_PREFIX, ""); res = getValueFromIDataNode(getInputData(), key, originKey); return res; } /** * 返回 传入的SourceData对象的valueMap中指定 key 的值 * @param originKey u.sourcedata.xxx * @return */ private String getValueByContextSourceData(String originKey){ String key = originKey; String res = key; key = key.replace(UILAYOUT_SOURCEDATA_PREFIX, ""); res = getValueFromIDataNode(getSourceDataNode(), key, originKey); return res; } private String getValueByContextNavigator(String originKey){ String key = originKey; String res = key; key = key.replace(UILAYOUT_NAVIGATOR_PREFIX, ""); IRegionPanel regionPanel = null; regionPanel = (IRegionPanel)navigatorPanel; if(regionPanel == null){ return res; } if(key.toLowerCase().startsWith(UILAYOUT_SOURCEDATA) || key.toLowerCase().startsWith(UILAYOUT_SELECTDATA)){ res = getValueFromRegionPanel(regionPanel, key, originKey); } else{ //TODO 导航区,指定面签里的数据 key = "1" + DOT + key; String[] keys = key.split("\\."); String keyInMap = keys[0] + DOT + keys[1]; key = ""; for(int i = 2; i < keys.length ; i++){ key += keys[i]; if(i != keys.length - 1){ key += DOT; } } if(key.toLowerCase().startsWith(UILAYOUT_SOURCEDATA) || key.toLowerCase().startsWith(UILAYOUT_SELECTDATA)){ regionPanel = regionPanelMap.get(keyInMap); res = getValueFromRegionPanel(regionPanel, key, originKey); } else { keys = key.split("\\."); keyInMap = keyInMap + DOT + keys[0]; regionPanel = regionPanelMap.get(keyInMap); key = key.substring(key.toLowerCase().indexOf(".") + 1); res = getValueFromRegionPanel(regionPanel, key, originKey); } } if(res == null || "".equals(res.trim())){ res = originKey; } return res; } private Pattern ptnNum = Pattern.compile("[0-9]+"); private boolean isNnmber(String str){ return ptnNum.matcher(str).matches(); } private String getValueByContextControl(String originKey){ String key = originKey; String res = key; key = key.replace(UILAYOUT_CONTROL_PREFIX, ""); IRegionPanel regionPanel = null; if(rightTopPanel instanceof IRegionPanel){ regionPanel = (IRegionPanel)rightTopPanel; } else if(rightTopPanel instanceof TabPagePanel){ // there's nothing in here // TabPagePanel tpp = (TabPagePanel)regionPanel; } if(key.toLowerCase().startsWith(UILAYOUT_SOURCEDATA) || key.toLowerCase().startsWith(UILAYOUT_SELECTDATA)){ key = "2" + DOT + key; String[] keys = key.split("\\."); String keyInMap = keys[0]; regionPanel = regionPanelMap.get(keyInMap); } else { key = "2" + DOT + key; String[] keys = key.split("\\."); String keyInMap = keys[0] + DOT + keys[1]; if(keys.length >= 3){ keyInMap = keys[0] + DOT + keys[1] + DOT + keys[2]; } regionPanel = regionPanelMap.get(keyInMap); } if(regionPanel == null){ return res; } if(key.toLowerCase().startsWith(UILAYOUT_SOURCEDATA) || key.toLowerCase().startsWith(UILAYOUT_SELECTDATA)){ res = getValueFromRegionPanel(regionPanel, key, originKey); } else { //TODO 控制区,指定面签里的数据 String[] keys = key.split("\\."); key = ""; for(int i = 3; i < keys.length ; i++){ key += keys[i]; if(i != keys.length - 1){ key += DOT; } } if(key.toLowerCase().startsWith(UILAYOUT_SOURCEDATA) || key.toLowerCase().startsWith(UILAYOUT_SELECTDATA)){ res = getValueFromRegionPanel(regionPanel, key, originKey); } else { keys = key.split("\\."); key = key.substring(key.toLowerCase().indexOf(".") + 1); res = getValueFromRegionPanel(regionPanel, key, originKey); } } return res; } private String getValueByContextOperation(String originKey){ String key = originKey; String res = key; key = key.replace(UILAYOUT_OPEATION_PREFIX, ""); IRegionPanel regionPanel = null; if(key.toLowerCase().startsWith(UILAYOUT_SOURCEDATA) || key.toLowerCase().startsWith(UILAYOUT_SELECTDATA)){ // u.o.sourcedata、u.o.selectdata 取的对象为 操作区第一个iregionpanel if(regionPanelMap.containsKey("3")){ regionPanel = regionPanelMap.get("3"); res = getValueFromRegionPanel(regionPanel, key, originKey); } } else{ //TODO 操作区,指定面签里的数据 res = getValueFromRegionPanelTabpage(3, key, originKey); } return res; } private String getValueFromRegionPanelTabpage(int areaType, String key, String originKey){ String res = originKey; key = String.valueOf(areaType) + DOT + key; String[] keys = key.split("\\."); String keyInMap = keys[0] + DOT + keys[1]; key = ""; for(int i = 2; i < keys.length ; i++){ key += keys[i]; if(i != keys.length - 1){ key += DOT; } } IRegionPanel regionPanel = null; if(key.toLowerCase().startsWith(UILAYOUT_SOURCEDATA) || key.toLowerCase().startsWith(UILAYOUT_SELECTDATA)){ regionPanel = regionPanelMap.get(keyInMap); res = getValueFromRegionPanel(regionPanel, key, originKey); } else { keys = key.split("\\."); keyInMap = keyInMap + DOT + keys[0]; regionPanel = regionPanelMap.get(keyInMap); key = key.substring(key.toLowerCase().indexOf(".") + 1); res = getValueFromRegionPanel(regionPanel, key, originKey); } return res; } /** * 从 IRegionPanel中获取数据 * @param regionPanel * @param key * @return */ private String getValueFromRegionPanel(IRegionPanel regionPanel, String key, String originKey){ String res = originKey; if(regionPanel == null){ return res; } if(key.toLowerCase().startsWith(UILAYOUT_SOURCEDATA_PREFIX)){ key = key.substring(key.toLowerCase().indexOf(".") + 1); res = getValueFromIDataNode(regionPanel.getSourceData(), key, originKey); } else if(key.toLowerCase().startsWith(UILAYOUT_SELECTDATA_PREFIX)){ key = key.substring(key.toLowerCase().indexOf(".") + 1); // TODO 如果选择的数据为多条,则 selectdata 按 第 0 条算 Object[] secObjs = regionPanel.getDataModel().getSelectObjects(); if(secObjs != null && secObjs.length != 0 && secObjs[0] instanceof IDataNode){ res = getValueFromIDataNode((IDataNode)secObjs[0], key, originKey); } } else if(key.toLowerCase().startsWith(UILAYOUT_SELECTDATA)){ key = key.replace(UILAYOUT_SELECTDATA, ""); String indexString = key.split("\\.")[0]; if(isNnmber(indexString)){ Object[] secObjs = regionPanel.getDataModel().getSelectObjects(); int index = Integer.valueOf(indexString); if(secObjs != null && index < secObjs.length){ key = key.substring(key.toLowerCase().indexOf(".") + 1); if(secObjs != null && secObjs.length != 0 && secObjs[index] instanceof IDataNode){ res = getValueFromIDataNode((IDataNode)secObjs[index], key, originKey); } } } } return res; } private String getValueFromIDataNode(IDataNode dataNode, String key, String originKey){ String res = key; if(dataNode == null) return res; Map valueMap = dataNode.getValueMap(); res = valueMap.get(key); if(res == null || res.trim().equals("")){ res = originKey; } return res; } /** * key 前缀 * regionType * regionType.tabCode * regionType.tabCode.formOrListFlagNum * * value:IRegionPanel实例 */ private Map regionPanelMap = new LinkedHashMap(); private final String DOT = "."; private final String UILAYOUT = "u"; private final String UILAYOUT_INPUTDATA_PREFIX = UILAYOUT + DOT + "inputdata" + DOT; private final String UILAYOUT_NAVIGATOR_PREFIX = UILAYOUT + DOT + "n" + DOT; private final String UILAYOUT_CONTROL_PREFIX = UILAYOUT + DOT + "c" + DOT; private final String UILAYOUT_OPEATION_PREFIX = UILAYOUT + DOT + "o" + DOT; private final String UILAYOUT_SOURCEDATA = "sourcedata"; private final String UILAYOUT_SOURCEDATA_PREFIX = UILAYOUT_SOURCEDATA + DOT; private final String UILAYOUT_SELECTDATA = "selectdata"; private final String UILAYOUT_SELECTDATA_PREFIX = UILAYOUT_SELECTDATA + DOT; }