package com.vci.client.uif.actions.client; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.vci.client.bof.ClientBusinessObject; import com.vci.client.bof.ClientBusinessObjectOperation; import com.vci.client.bof.ClientLinkObject; import com.vci.client.bof.ClientLinkObjectOperation; import com.vci.client.ui.swing.components.VCIJOptionPane; import com.vci.client.uif.engine.client.ChooseBusinessObjectDialog; import com.vci.client.uif.engine.common.DefaultTableNode; import com.vci.client.uif.engine.common.IDataNode; import com.vci.corba.common.VCIError; import com.vci.mw.ClientContextVariable; public class ChooseReleatedObjAndSaveLinkAction extends DoseNotSelectDataHasRightCheckAction { private Map paramsMap = null; /** * 操作方法 */ private UIFUtils operation = new UIFUtils(); /** * link对象操作方法 */ private ClientLinkObjectOperation loOperation = new ClientLinkObjectOperation(); /** * 业务对象操作方法 */ private ClientBusinessObjectOperation boOperation = new ClientBusinessObjectOperation(); /** * 是否需要先选择数据然后执行创建操作 */ boolean needSelect = false; @Override public String getKey() { return "choosereleatedobjandsavelink"; } @Override public boolean checkHasRight(){ // 按LBO进行数据权限检查 setDataRightCheckType(RightCheckConstants.RIGHT_CHECK_TYPE_FB); return super.checkHasRight(); } /** * 判断执行Action任务之前是否需要先选择数据 */ public boolean beforePost() { //获得按钮参数 paramsMap = getButtonParams(); if(paramsMap.containsKey("needselect")){ String value = paramsMap.get("needselect"); if(value.equalsIgnoreCase("true")){ needSelect = true; } } if(needSelect){ if(!isSelectedObject()) return false; Object[] objs = getDataModel().getSelectObjects(); if(objs.length > 1){ VCIJOptionPane.showMessage(getParentComponent(), "只能选择一条数据执行创建操作!"); return false; } } return true; } @Override public boolean doPost() { try { //获得按钮参数 paramsMap = getButtonParams(); //得到打开窗口的上下文信息 String type = paramsMap.get("type"); String context = paramsMap.get("context"); String linkType = paramsMap.get("linkType"); String directionStr = paramsMap.get("direction"); String isCloneSelectObj = paramsMap.get("isCloneSelectObj"); if(type == null || type.equals("") || context == null || context.equals("")){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.parmerror", ""); return false; } /** * 判断是否是正向还是反向 */ boolean direction = true; if(directionStr != null && directionStr.trim().equalsIgnoreCase("false")){ direction = false; } //构建选择窗口 ChooseBusinessObjectDialog cbd = new ChooseBusinessObjectDialog( ClientContextVariable.getFrame(), type, context, true, ""); if(cbd.isOk()){ //得到用户所选数据 Object[] selectedDatas = cbd.getSelectedData(); if(selectedDatas == null){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.choosesave.noselect"); return false; } //验证选择的数据类型,在选择窗口中只允许选择业务对象数据, //但是如果按钮配置错误有可能会选择成link类型数据 DefaultTableNode dtn = (DefaultTableNode) selectedDatas[0]; if(!(dtn.getMaterObject() instanceof ClientBusinessObject)){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.parmerror", ""); return false; } IDataNode sourceData = null; if(needSelect){ sourceData = (IDataNode)getDataModel().getSelectObjects()[0]; } else { sourceData = getRegionPanel().getSourceData(); } //得到主对象对象,根据主对象得到From BO ClientBusinessObject from = null; Object fromObj = sourceData.getMaterObject(); if(fromObj instanceof ClientBusinessObject){ from = (ClientBusinessObject) fromObj; } else if(fromObj instanceof ClientLinkObject) { //如果是LO对象,使用LO对应TO端BO对象作为创建的From对象 ClientLinkObject fromLO = (ClientLinkObject) fromObj; from = getToBusinessObject(fromLO); } //验证from对象 if(from == null || from.getBusinessObject().oid == null || from.getBusinessObject().oid.equals("")){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.createlinkerror.fromdelete"); return false; } List toBoList = new ArrayList(); for(Object obj : selectedDatas){ //重新下载用户选择的对象 DefaultTableNode dtnc = (DefaultTableNode) obj; //已经在选择的时候经行过数据的类型的校验,此处不再经行校验直接转换 ClientBusinessObject cbo = (ClientBusinessObject) dtnc.getMaterObject(); if(cbo != null && cbo.getBusinessObject().oid != null && !cbo.getBusinessObject().oid.equals("")){ toBoList.add(cbo); } } ClientLinkObject[] clos = new ClientLinkObject[selectedDatas.length]; for (int i = 0; i < clos.length; i++) { ClientLinkObject clo = operation.createEmptyClientLinkObject( ClientContextVariable.getFrame(), linkType); if (direction) { clo.setFromBO(from); clo.setToBO(toBoList.get(i)); } else { clo.setFromBO(toBoList.get(i)); clo.setToBO(from); } clos[i] = clo; } ClientBusinessObject[] cloneObjs = new ClientBusinessObject[0]; if (isCloneSelectObj != null && isCloneSelectObj.equalsIgnoreCase("true")) { cloneObjs = cloneSelectObject(toBoList); } boolean result = boOperation.batchSaveCreateBuinessObject(cloneObjs, clos); if(!result){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.createlinkerror"); return false; } } return true; } catch (Exception e){ UIFUtils.showErrorMessage(ClientContextVariable.getFrame(), e); return false; } } /** * 查询LO对象TO端的BO对象 * @param clo * @return * @throws Exception */ public ClientBusinessObject getToBusinessObject(ClientLinkObject clo) throws Exception{ ClientBusinessObject cbo = null; String btmName = clo.getLinkObject().toBTName; String oid = clo.getLinkObject().toOid; cbo = operation.reloadClientBusinessObject( ClientContextVariable.getFrame(), oid, btmName); return cbo; } public ClientBusinessObject[] cloneSelectObject(List list) throws VCIError { ClientBusinessObject[] cloneObjs = new ClientBusinessObject[list.size()]; for (int i = 0; i < list.size(); i++) { cloneObjs[i] = new ClientBusinessObject(); cloneObjs[i]= operation.cloneDBBusinessObject(list.get(i)); } return cloneObjs; } }