package com.vci.client.uif.actions.client; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.swing.JOptionPane; import com.vci.client.bof.ClientBusinessObject; import com.vci.client.bof.ClientBusinessObjectOperation; import com.vci.client.bof.ClientLinkObject; import com.vci.client.ui.swing.VCIOptionPane; import com.vci.client.uif.engine.common.DefaultTableNode; import com.vci.mw.ClientContextVariable; /** * 升级版本操作 * 参数信息: * oid(升版对象的oid) * btmname(升版对象的类型) * name(升版对象的名称、用于显示信息) * @author VCI-STGK006 * */ public class RevisionAction extends AbstractBatchBusionessOperationAction { /** * 方法集合 */ UIFUtils operation = new UIFUtils(); private ClientBusinessObjectOperation boOperation = new ClientBusinessObjectOperation(); public RevisionAction(){ super(); } @Override public String getKey() { return REVISION; } @Override public boolean checkHasRight(){ // 按LBO进行数据权限检查 setDataRightCheckType(RightCheckConstants.RIGHT_CHECK_TYPE_B); return super.checkHasRight(); } @Override public boolean doPost() { //获得按钮参数,校验并设置默认值 Map params = getButtonParams(); boolean direction = true;//如果是link是,是对from还是to进行升版 boolean copyLink = false;//是否复制链接 String linkType = "";//复制链接的名称 String linkdirection = "to"; if(params.containsKey("direction") && params.get("direction").trim().equalsIgnoreCase("false")) { direction = false; } if(params.containsKey("copylink") && params.get("copylink").trim().equalsIgnoreCase("true")) { copyLink = true; } if(copyLink) { linkType = params.get("linktype"); if(linkType == null || linkType.trim().equals("")) { UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.configerror.paramserror", "linktype"); return false; } if(params.containsKey("linkdirection")) { linkdirection = params.get("linkdirection").trim(); if(!linkdirection.equalsIgnoreCase("from") && !linkdirection.equalsIgnoreCase("to") && !linkdirection.equalsIgnoreCase("all")) { UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.configerror.paramserror", "linkdirection"); return false; } } } //获得业务对象数据 Object[] objs = getDataModel().getSelectObjects(); if(objs == null || objs.length < 1){ return false; } List cboList = new ArrayList(); for(int i = 0; i < objs.length; i++){ DefaultTableNode dtn = (DefaultTableNode) objs[i]; try { //判断主对象类型 if(dtn.getMaterObject() instanceof ClientBusinessObject){ //如果是业务类型 ClientBusinessObject tempCbo = (ClientBusinessObject) dtn.getMaterObject(); String oid = tempCbo.getBusinessObject().oid; String btmName = tempCbo.getBusinessObject().btName; String name = tempCbo.getBusinessObject().name; if(name == null || name.equals("")){ name = "选择的第" + (i + 1) + "行数据"; } ClientBusinessObject cbo = boOperation.readBusinessObjectById(oid, btmName); if(cbo == null){ int confirm = VCIOptionPane.showConfirmDialog(ClientContextVariable.getFrame(), "" + name + "不存在或者已经被删除,继续执行升版操作系统将会忽略该对象" +".\n是否继续执行升版操作?", "系统提示",JOptionPane.YES_NO_OPTION); if(confirm == JOptionPane.NO_OPTION || objs.length == 1){ return false; } } cboList.add(cbo); } else if (dtn.getMaterObject() instanceof ClientLinkObject){ //如果是link类型 ClientLinkObject tempLink = (ClientLinkObject) dtn.getMaterObject(); String oid = ""; String btmName = ""; String name = ""; if (direction) { oid = tempLink.getLinkObject().toOid; btmName = tempLink.getLinkObject().toBTName; name = dtn.getValueMap().get("t_oid.name"); } else { oid = tempLink.getLinkObject().fromOid; btmName = tempLink.getLinkObject().fromBTName; name = dtn.getValueMap().get("f_oid.name"); } if(name == null || name.equals("")){ name = "选择的第" + (i + 1) + "行数据"; } //如果操作所需参数不存在则直接停止操作 //正常的数据不会出现这种情况 if(oid == null || oid.equals("") ||btmName == null || btmName.equals("")){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.parmerror.bo", ""); return false; } //需要重新下载cbo对象 ClientBusinessObject cbo = boOperation.readBusinessObjectById(oid, btmName); //对象不存在或者已经被删除 if(cbo == null || cbo.getBusinessObject().oid == null || cbo.getBusinessObject().oid.equals("")){ int confirm = VCIOptionPane.showConfirmDialog(ClientContextVariable.getFrame(), "" + name + "不存在或者已经被删除,继续执行升版操作系统将会忽略该对象" +".\n是否继续执行升版操作?", "系统提示",JOptionPane.YES_NO_OPTION); if(confirm == JOptionPane.NO_OPTION || objs.length == 1){ return false; } } else { cboList.add(cbo); } } } catch (Exception e){ UIFUtils.showErrorMessage( ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.editboerror", e); int confirm = VCIOptionPane.showConfirmDialog(ClientContextVariable.getFrame(), "系统在加载对象时发生异常,升级版本操作可能会失败\n是否继续执行升级版本操作?", "系统提示",JOptionPane.YES_NO_OPTION); if(confirm == JOptionPane.NO_OPTION){ return false; } } } //得到需要升版的业务对象 当为多个时 有升级成功的就算成功 boolean success = false; try { if(!cboList.isEmpty()){ batchRevisonBusinessObject(cboList, copyLink, linkType, linkdirection); success = true; } if(success){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.revisionsuccessmsg"); } } catch (Exception e) { UIFUtils.showErrorMessage(ClientContextVariable.getFrame(), e); } return success; } /** * 升级版本 * @param cboList 待升版对象 * @param linkTypes 复制link的类型 * @param copyLink 是否复制link * @param linkdirection 复制哪端的link * @throws Exception */ private void batchRevisonBusinessObject(List cboList, boolean copyLink, String linkTypes, String linkdirection) throws Exception { if(copyLink) { String[] linkType = linkTypes.split(","); boolean isRev = true; boolean isSave = true; boolean isFromLinkCopy = false; boolean isToLinkCopy = false; if(linkdirection.equalsIgnoreCase("to")) { isFromLinkCopy = true; } else if (linkdirection.equalsIgnoreCase("from")) { isToLinkCopy = true; } else if (linkdirection.equalsIgnoreCase("all")) { isFromLinkCopy = true; isToLinkCopy = true; } for(ClientBusinessObject cbo : cboList) { boOperation.revisionBusinessObject( cbo, linkType, isRev, isSave, isFromLinkCopy, isToLinkCopy); } } else { //获得OID列表 String[] oids = new String[cboList.size()]; String btmName = ""; for(int i = 0; i < cboList.size(); i++) { ClientBusinessObject cbo = cboList.get(i); if(btmName.equals("")) { btmName = cbo.getBusinessObject().btName; } oids[i] = cbo.getBusinessObject().oid; } boOperation.batchRevisonBusinessObject(oids, btmName); } } }