package com.vci.client.uif.engine.client.combobox;
|
|
import java.awt.Component;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.LinkedList;
|
import java.util.Map;
|
|
import com.vci.client.bof.ClientBusinessObject;
|
import com.vci.client.bof.ClientBusinessObjectOperation;
|
import com.vci.client.logon.base.TabPanelManage;
|
import com.vci.client.uif.actions.client.UIFUtils;
|
import com.vci.client.uif.engine.client.UILayoutPanel;
|
import com.vci.client.uif.engine.client.controls.VCIJComboBoxModelValueObject;
|
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.corba.common.VCIError;
|
import com.vci.mw.ClientContextVariable;
|
|
/**
|
* 提供在UI框架中,从已经打开的UILayoutPanel中,返回满足条件的InputData
|
* @author xiongchao
|
*
|
*/
|
public class TabInputDataProvider extends AbstractComboBoxDataProvider {
|
|
public TabInputDataProvider(){
|
this("");
|
}
|
public TabInputDataProvider(String param){
|
super(param);
|
}
|
|
/**
|
* 返回 UI框架中,已经打开的UILayoutPanel中,其InputData的业务类型等于传入参数btmname的数据,作为ComBox的数据源(下拉列表)
|
*/
|
@Override
|
public VCIJComboBoxModelValueObject[] getDatas() {
|
VCIJComboBoxModelValueObject[] res = new VCIJComboBoxModelValueObject[0];
|
LinkedList<VCIJComboBoxModelValueObject> list = new LinkedList<VCIJComboBoxModelValueObject>();
|
Map<String, String> paramMap = super.getParamKeyValueMap();
|
String btmname = paramMap.get("btmname");
|
String showForamt = paramMap.get("name");
|
Map<String, String> btmFilterAttrMap = getBtmFilterAttrs(paramMap);
|
if(btmname == null || "".equals(btmname)) return res;
|
if(showForamt == null || "".equals(showForamt)) {
|
showForamt = "name";
|
}
|
Map<String, ClientBusinessObject> cboMap = new HashMap<String, ClientBusinessObject>();
|
Component[] compts = TabPanelManage.getInstance().getTabPanel().getComponents();
|
for(Component compt : compts){
|
if(!(compt instanceof UILayoutPanel)) continue;
|
UILayoutPanel uilp = (UILayoutPanel)compt;
|
IDataNode inputData = uilp.getInputData();
|
if(inputData == null) continue;
|
if(!(inputData.getMaterObject() instanceof ClientBusinessObject)) continue;
|
ClientBusinessObject cboInptuData = null;
|
try {
|
cboInptuData = getReloadedCBO(inputData.getClientBusinessObject());
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
if(cboInptuData == null) continue;
|
if(!btmname.equals(cboInptuData.getBtmName())) continue;
|
// add by xchao 2014.07.31 加上根据btm的属性值进行过滤 begin
|
if(btmFilterAttrMap.size() > 0 && !isMatched(cboInptuData, btmFilterAttrMap)) continue;
|
// add by xchao 2014.07.31 加上根据btm的属性值进行过滤 end
|
String name = UIFUtils.getRuleValue(showForamt, inputData, null);
|
String value = cboInptuData.getOid();
|
if(cboMap.containsKey(value)) continue;
|
list.add(new VCIJComboBoxModelValueObject(value, name));
|
cboMap.put(value, cboInptuData);
|
}
|
res = list.toArray(new VCIJComboBoxModelValueObject[]{});
|
return res;
|
}
|
|
/**
|
* 返回 重新加载的 CBO 对象
|
* @param cbo
|
* @return
|
* @throws VCIError
|
*/
|
private ClientBusinessObject getReloadedCBO(ClientBusinessObject cbo) throws VCIError{
|
ClientBusinessObjectOperation cboOperation = new ClientBusinessObjectOperation();
|
return cboOperation.readBusinessObjectById(cbo.getOid(), cbo.getBtmName());
|
}
|
|
/**
|
* 检查指定的ClientBusinessObject的属性值是否满足过滤条件
|
* @param cbo
|
* @param btmFilterAttrMap key:bo的属性名 value:要过滤的属性值
|
* @return
|
*/
|
private boolean isMatched(ClientBusinessObject cbo, Map<String, String> btmFilterAttrMap){
|
boolean res = true;
|
Iterator<String> its = btmFilterAttrMap.keySet().iterator();
|
while(its.hasNext()){
|
String key = its.next();
|
String value = btmFilterAttrMap.get(key);
|
String attrVal = cbo.getAttributeValue(key);
|
// 严格按值是否相等进行匹配(区分大小写)
|
res &= value.equals(attrVal);
|
}
|
return res;
|
}
|
|
|
/**
|
* 返回由此控件创建出的数据,在修改时需要显示的数据
|
*/
|
@Override
|
public String getDataByCreateValue(String value) {
|
String res = "";
|
Map<String, String> paramMap = super.getParamKeyValueMap();
|
String btmname = paramMap.get("btmname");
|
String showForamt = paramMap.get("name");
|
if(btmname == null || "".equals(btmname)) return res;
|
if(showForamt == null || "".equals(showForamt)) {
|
showForamt = "name";
|
}
|
String oid = value;
|
try {
|
ClientBusinessObject cbo = new ClientBusinessObjectOperation().readBusinessObjectById(oid, btmname);
|
IDataNode inputData = new DefaultTableNode();
|
inputData.setForward(true);
|
inputData.setMasterObject(cbo);
|
Map<String, String> valueMap = CBOHelper.getBOValueMap(cbo.getBusinessObject());
|
inputData.setValueMap(valueMap);
|
String nameValue = UIFUtils.getRuleValue(showForamt, inputData, null);
|
res = nameValue;
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
return res;
|
}
|
|
/**
|
* 从按钮参数中,取出对BTM进行过滤的属性
|
* @param paramMap
|
* @return
|
*/
|
private Map<String, String> getBtmFilterAttrs(Map<String, String> paramMap){
|
Map<String, String> conditionMap = GlobalContextParam.getInstance().getDefaultConditionMap();
|
Map<String, String> res = new HashMap<String, String>();
|
Iterator<String> its = paramMap.keySet().iterator();
|
while(its.hasNext()){
|
String key = its.next();
|
String value = paramMap.get(key);
|
if(conditionMap.containsKey(value.replace("#", ""))){
|
value = conditionMap.get(value.replace("#", ""));
|
} else if(conditionMap.containsKey(value)){
|
value = conditionMap.get(value);
|
}
|
if(key.contains("btm.")){
|
res.put(key.replace("btm.", ""), value);
|
}
|
}
|
return res;
|
}
|
|
}
|