package com.vci.client.uif.actions.client; import java.util.Map; import com.vci.client.bof.ClientBusinessObject; import com.vci.client.bof.ClientLinkObject; import com.vci.client.portal.utility.PLDefination; import com.vci.client.ui.swing.components.VCIJOptionPane; import com.vci.client.uif.actions.client.ClipboardData.ClipboardDataType; import com.vci.client.uif.actions.client.ClipboardData.ClipboardOperation; import com.vci.client.uif.engine.common.IDataNode; import com.vci.mw.ClientContextVariable; /** * 粘贴操作 * 只粘贴对象之间的关系 * @author VCI-STGK006 * */ public class PasteAction extends DoseNotSelectDataHasRightCheckAction { /** * 操作方法集合 */ private UIFUtils operation = new UIFUtils(); /** * 判断form的类型 * 不同的form类型得到属性的key是不同的 * 0:业务类型,1:链接类型 */ private int operationType = 0; /** * 按钮参数信息 */ private Map paramsMap; /** * 是否需要先选择数据然后执行创建操作 */ boolean needSelect = false; public PasteAction(){ super(); } @Override public String getKey() { return PASTE; } @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 formName= paramsMap.get("formName"); //得到剪切板中的数据信息 ClipboardData cdata = ClientBusinessObjectClipboard.getInstance().getdata(); if(cdata == null){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.parstedatanotexistmsg"); return false; } if(!cdata.isFullData()){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.parstedatanotfullmsg"); return false; } //XXX 暂时去掉Link类型校验 判断复制的链接类型与粘贴的链接类型是否相符 String copyType = cdata.getSrcLoName(); String pasteType = ""; //获得sourceDate,source可能来自用户选择的数据,也可能来自父窗口传递的数据 IDataNode fromDataNode = null; if(needSelect){ fromDataNode = (IDataNode)getDataModel().getSelectObjects()[0]; //XXX 当使用选择的数据时linktype暂时应该没有获取的地方,按时不进行类型的校验 //if(!copyType.equals(pasteType)){ // operation.showMessage(ClientContextVariable.getFrame(), // "uifmodel.plm.uif.actions.cannotparstemsg"); // return false; //} } else { fromDataNode = getRegionPanel().getSourceData(); //当时用源作为粘贴的目标时,粘贴的linktype可从PLDefination中取 PLDefination defination = getDefination(); pasteType = defination.getLinkType(); if(!copyType.equals(pasteType)){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.cannotparstemsg"); return false; } } ClientBusinessObject from = null; Object fromObj = fromDataNode.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; } //判断复制的业务对象还是复制的链接对象 boolean success = false; if(ClipboardDataType.BO.equals(cdata.getCt())){ //得到复制的业务对象 ClientBusinessObject[] cbos = (ClientBusinessObject[]) cdata.getData(); success = operation.pasteBusinessObjects( ClientContextVariable.getFrame(), from, pasteType, cbos); } else if (ClipboardDataType.LO.equals(cdata.getCt())){ //得到复制的链接对象 ClientLinkObject[] clos = (ClientLinkObject[]) cdata.getData(); success = operation.pasteBusinessObjects( ClientContextVariable.getFrame(), from, pasteType, clos); } else { //其它数据类型 暂时不做处理 return false; } // 复制成功 if(success){ //判断是复制操作还是剪切操作 if(cdata.getCo().equals(ClipboardOperation.cut)){ //暂时没有实现剪切操作 ClientLinkObject[] clos = (ClientLinkObject[]) cdata.getData(); //批量删除剪切的link operation.deleteLinkObject(ClientContextVariable.getFrame(), clos, false); //清空剪切板 ClientBusinessObjectClipboard.getInstance().clearClipboard(); } else { //XXX 复制成功后是否需要清空剪切板 } UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.pastesuccessmsg"); } else { UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.pastefailmsg"); } return success; } catch (Exception e){ UIFUtils.showErrorMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.parsterror", 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; } }