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<String, String> 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;
|
}
|
}
|