でも、Astahのままだとチェックリストとして機能としては使えないなぁ
と思ったので、AstahScriptでアクションをリストに落とせるようにしてみました。
JavaScriptはもう疎くなってしまったので、Groovyで書けばもっとすっきりする記述になります。
Astah API
//すべてのアクションの遷移を出力する importPackage(com.change_vision.jude.api.inf.model) //http://members.change-vision.com/javadoc/astah-api/6_6_3/api/en/doc/javadoc/index.html seqs = astah.findElements(IActivityDiagram) println("START") var myObj = {}; for ( var i in seqs ) { var seq = seqs[i]; var startNode = getStartNode(seq); getNext(seq,startNode) // getNext(seq,startNode.getOutgoings()[0].getTarget()) } println("END") function getNext(seq,tmp){ var outgoings=tmp.getOutgoings(); if(outgoings != 0){ for(var index in outgoings) { var id = tmp + outgoings[index].getTarget(); //Setがあれば置き換える if(myObj[id]=="SET"){ continue; } myObj[id]="SET" //printNodeType(tmp) println(tmp+"->"+outgoings[index].getTarget()) //【制限】前のアクションにもどる場合は無限ループになる。 getNext(seq,outgoings[index].getTarget()) } } return } function printNodeType(tmp){ println("========") if( tmp instanceof IAction ){ println("IAction"+tmp.getName()) println(tmp.getInputs()) println(tmp.getOutputs()) println(tmp.isCallBehaviorAction()) }else if (tmp instanceof IObjectNode ){ println("IObjectNode"+tmp.getName()) println(tmp.getInState()) println(tmp.getBase()) }else if ( tmp instanceof IControlNode){ println("ControlNode"+tmp.getName()) println(tmp.isFinalNode()) println(tmp.isForkNode() ) println(tmp.isInitialNode() ) println(tmp.isJoinNode() ) println(tmp.isMergeNode() ) } println("========") } function getStartNode(seq){ var activities=seq.getActivity().getActivityNodes() var startNode; for ( var k in activities) { node = activities[k] if ( node instanceof IControlNode ){ if( node.isInitialNode()){ return node } } } return null; }
0 件のコメント:
コメントを投稿