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 list = new LinkedList(); 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[]{}); } }