package com.vci.client.uif.actions.client;
|
|
import java.awt.Component;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.util.LinkedList;
|
|
import javax.swing.JMenuItem;
|
import javax.swing.JPopupMenu;
|
|
import com.vci.client.bof.ClientBusinessObject;
|
import com.vci.client.bof.ClientLinkObject;
|
import com.vci.client.omd.lifecycle.LifeCycleStart;
|
import com.vci.client.uif.engine.common.DefaultTableNode;
|
import com.vci.corba.common.VCIError;
|
import com.vci.corba.omd.lcm.Bound;
|
import com.vci.corba.omd.lcm.LifeCycle;
|
import com.vci.corba.omd.lcm.TransitionVO;
|
import com.vci.mw.ClientContextVariable;
|
|
/**
|
* 简化版本跃迁Action
|
* @author Administrator
|
*
|
*/
|
public class SimpleTransferAction extends TransferAction{
|
|
@Override
|
public String getKey() {
|
return "simpletransferaction";
|
}
|
|
@Override
|
public boolean checkHasRight(){
|
// 按BO进行数据权限检查
|
setDataRightCheckType(RightCheckConstants.RIGHT_CHECK_TYPE_B);
|
return super.checkHasRight();
|
}
|
|
@Override
|
public boolean doPost() {
|
ClientBusinessObject cbo = getClientBusinessObject();
|
if(cbo == null) return false;
|
|
Component btnCompt = getButtonComponent();
|
JPopupMenu pm = getPopupMenu(cbo);
|
pm.show(btnCompt, btnCompt.getWidth() / 2, btnCompt.getY() + btnCompt.getHeight() / 2);
|
|
return false;
|
}
|
|
private ClientBusinessObject getClientBusinessObject(){
|
Object[] objs = getDataModel().getSelectObjects();
|
DefaultTableNode dtn = (DefaultTableNode) objs[0];
|
ClientBusinessObject cbo = null;
|
//判断主对象类型
|
if(dtn.getMaterObject() instanceof ClientBusinessObject){
|
//如果是业务类型
|
cbo = (ClientBusinessObject) dtn.getMaterObject();
|
if(cbo == null){
|
UIFUtils.showMessage(ClientContextVariable.getFrame(),
|
"uifmodel.plm.uif.actions.notexistmsg",
|
this.getParameterValue(ValueType.RuntimeData, "t_oid.name", 0));
|
return null;
|
}
|
} else if (dtn.getMaterObject() instanceof ClientLinkObject){
|
//如果是link类型
|
String oid = this.getParameterValue(ValueType.RuntimeData, "t_oid", 0);
|
String btmName = this.getParameterValue(ValueType.RuntimeData, "t_btwname", 0);
|
//如果操作所需参数不存在则直接停止操作
|
if(oid == null || oid.equals("") ||btmName == null || btmName.equals("")){
|
UIFUtils.showMessage(ClientContextVariable.getFrame(),
|
"uifmodel.plm.uif.actions.syserror.parmerror.bo");
|
return null;
|
}
|
//需要重新下载cbo对象
|
cbo = operation
|
.reloadClientBusinessObject(ClientContextVariable.getFrame(), oid, btmName);
|
System.out.println("** TS:" + cbo.getBusinessObject().ts);
|
//对象不存在或者已经被删除
|
if(cbo.getBusinessObject().oid == null || cbo.getBusinessObject().oid.equals("")){
|
UIFUtils.showMessage(ClientContextVariable.getFrame(),
|
"uifmodel.plm.uif.actions.notexistmsg",
|
this.getParameterValue(ValueType.RuntimeData, "t_oid.name", 0));
|
return null;
|
}
|
}
|
return cbo;
|
}
|
|
private JPopupMenu getPopupMenu(ClientBusinessObject cbo){
|
LifeCycle lc = getBOLC(cbo);
|
TransitionVO[] tvos = getNextLCStatus(lc, cbo);
|
|
JPopupMenu pm = new JPopupMenu();
|
int height = 10;
|
|
for(TransitionVO tvo : tvos){
|
JMenuItemExt mi = getTransMenuItem(tvo, cbo);
|
pm.add(mi);
|
height += 25;
|
}
|
pm.setPopupSize(100, height);
|
return pm;
|
}
|
|
private JMenuItemExt getTransMenuItem(TransitionVO tvo, ClientBusinessObject cbo){
|
JMenuItemExt mi = new JMenuItemExt(tvo, cbo);
|
mi.setActionCommand(tvo.destination);
|
mi.setText(tvo.destination);
|
mi.addActionListener(new TransitionActionListener());
|
return mi;
|
}
|
|
private class TransitionActionListener implements ActionListener {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
transitionMenuItem_actionPerformed(e);
|
}
|
}
|
|
private void transitionMenuItem_actionPerformed(ActionEvent e){
|
if(e.getSource() instanceof JMenuItemExt){
|
JMenuItemExt mi = (JMenuItemExt)e.getSource();
|
TransitionVO tvo = mi.getTvo();
|
ClientBusinessObject cbo = mi.getCbo();
|
if(tvo == null) return;
|
if(cbo == null) return;
|
|
boolean res = operation.transferBusinessObject(
|
ClientContextVariable.getFrame(), cbo, tvo);
|
if(res){
|
afterPostAfterRefresh();
|
}
|
}
|
}
|
|
private class JMenuItemExt extends JMenuItem {
|
/**
|
*
|
*/
|
private static final long serialVersionUID = 5153288169687055569L;
|
private TransitionVO tvo = null;
|
private ClientBusinessObject cbo = null;
|
public JMenuItemExt(TransitionVO tvo, ClientBusinessObject cbo){
|
this.tvo = tvo;
|
this.cbo = cbo;
|
}
|
public TransitionVO getTvo(){
|
return tvo;
|
}
|
public ClientBusinessObject getCbo(){
|
return cbo;
|
}
|
}
|
|
private LifeCycle getBOLC(ClientBusinessObject cbo){
|
LifeCycle res = null;
|
try {
|
LifeCycle[] lifeCyles = LifeCycleStart.getService().getLifeCycles();
|
for(int i = 0; i < lifeCyles.length; i++){
|
LifeCycle lc = lifeCyles[i];
|
//得到业务对象的生命周期
|
if(lc.name.equals(cbo.getBusinessObject().lctId)){
|
res = lc;
|
break;
|
}
|
}
|
} catch (VCIError e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
return res;
|
}
|
|
private TransitionVO[] getNextLCStatus(LifeCycle lc, ClientBusinessObject cbo){
|
LinkedList<TransitionVO> list = new LinkedList<TransitionVO>();
|
String currentState = cbo.getLcStatus();
|
for (int i = 0; i < lc.routes.length; ++i) {
|
TransitionVO route = lc.routes[i];
|
if (route.source.equals(currentState)){
|
//得到状态
|
if(lc.bounds != null){
|
for(Bound bound : lc.bounds){
|
if(bound.name.equals(route.destination)){
|
list.add(route);
|
}
|
}
|
}
|
}
|
}
|
return list.toArray(new TransitionVO[]{});
|
}
|
}
|