Skip to content

Instantly share code, notes, and snippets.

@y-matsuda
Last active December 8, 2017 08:15
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save y-matsuda/bbafc6fd5f31fe5ba67e to your computer and use it in GitHub Desktop.
Astah Script プラグイン サンプルコード(Java7用)

このページにはAstah scriptプラグイン用のコードを書き溜めてあります。 astah* professional/UML/community 7.0.0 未満のバージョンが対象です。

astah* professional/UML/community 7.0.0, astah* GSN 1.1 以降では、 動作推奨jreのバージョンが8に変更されています。 上記はjre7用のスクリプトなので、jre8で実行する場合は適宜修正が必要です。 詳しくは http://astah.change-vision.com/ja/feature/script-plugin.html#jre をご覧ください。

今後新しく書いたスクリプトはほとんどがjava8用になるかと思いますので、java8用のページに公開していきます。 java7のバージョンで利用するには書き換えが必要になりますが、参考までに残しておきます。

// [定義]欄に同じキーワードを含むプレゼンテーションを指定した色に塗り替えます。
// 現在開いている図のプレゼンテーションが対象です。
importPackage(com.change_vision.jude.api.inf.model);
importPackage(com.change_vision.jude.api.inf.editor);
importPackage(com.change_vision.jude.api.inf.presentation);
// 塗り替えたい色
var COLOR = "#BBCCFF";
// 定義欄のキーワード
var IDENTICAL_STRING = "a";
// 以下スクリプト
run();
function run() {
var currentDiagram = getCurrentDiagram();
if (currentDiagram == null) {
println("error: 図を開いていません\n\n図を開いてください。");
return;
}
var presentations = getPresentations(currentDiagram);
var chengeColorPresentations = getIdenticalDefinitionPresentations(presentations, IDENTICAL_STRING);
setColor(chengeColorPresentations, COLOR);
}
function getCurrentDiagram() {
try{
var viewManager = astah.getViewManager();
var diagramViewManager = viewManager.getDiagramViewManager();
return diagramViewManager.getCurrentDiagram();
} catch(e) {
return null;
}
}
function getPresentations(currentDiagram) {
try {
return currentDiagram.getPresentations();
} catch (e) {
return new IPresentation[0];
}
}
function getIdenticalDefinitionPresentations(presentations, identicalString) {
var regularExpression = new RegExp("(.*)(" + identicalString + ")(.*)");
var identicalDefinitionPresentations = [];
for(var i in presentations) {
var presentation = presentations[i];
if (presentation == null) {
continue;
}
var model = presentation.getModel();
if (model == null) {
continue;
}
if (!(model instanceof INamedElement)) {
continue;
}
var definition = model.getDefinition();
if (definition.match(regularExpression)) {
identicalDefinitionPresentations.push(presentation);
}
}
return identicalDefinitionPresentations;
}
function setColor(presentations, color) {
try {
TransactionManager.beginTransaction();
for(var i in presentations) {
var presentation = presentations[i];
presentation.setProperty(PresentationPropertyConstants.Key.FILL_COLOR, color);
}
TransactionManager.endTransaction();
println("info: " + presentations.length + "個の要素の色を変更しました。");
} catch (e) {
TransactionManager.abortTransaction();
println("error: 要素の色を変更できませんでした。");
println(e);
}
}
// ドメインの定義をIERAttributeの定義にコピーする
importPackage(com.change_vision.jude.api.inf.model);
var eRAttributes = astah.findElements(IERAttribute);
try {
TransactionManager.beginTransaction();
for each(var eRAttribute in eRAttributes) {
var domain = eRAttribute.getDomain();
if(domain == null) {
continue;
}
eRAttribute.setDefinition(domain.getDefinition());
}
TransactionManager.endTransaction();
} catch (e) {
TransactionManager.abortTransaction();
println(e);
}
var viewManager = astah.getViewManager();
var diagramViewManager = viewManager.getDiagramViewManager();
var selectedPresentations = diagramViewManager.getSelectedPresentations();
for each(var presentation in selectedPresentations) {
var model = presentation.getModel();
var presentations = model.getPresentations();
println("Presentation with the same model as " + presentation + " is " + presentations.length + ".");
}
// シーケンス図の作成、ライフラインの作成、相互作用の利用の作成
// 仕様確認用に書いたソースなので例外処理等していません
importPackage(java.awt);
importPackage(com.change_vision.jude.api.inf.editor);
importPackage(com.change_vision.jude.api.inf.presentation);
var de = astah.getDiagramEditorFactory().getSequenceDiagramEditor();
TransactionManager.beginTransaction();
var refersTo = de.createSequenceDiagram(astah.getProject(), "refersTo");
var diagram = de.createSequenceDiagram(astah.getProject(), "SequenceDiagram");
var lifeline = de.createLifeline("aaa", 10.0);
lifeline.setProperty(PresentationPropertyConstants.Key.LIFELINE_LENGTH, 300.0);
//lifeline.setProperty(PresentationPropertyConstants.Key.LIFELINE_LENGTH, 30.0);
de.createInteractionUse("InteractionUse", "", refersTo, new Point(10, 100), 110.0, 50.0)
TransactionManager.endTransaction();
importPackage(com.change_vision.jude.api.inf.model);
importPackage(com.change_vision.jude.api.inf.editor);
run();
function run() {
var targets = astah.findElements(IClass);
try{
TransactionManager.beginTransaction();
for each(var target in targets) {
deleteVoidParameters(target);
}
TransactionManager.endTransaction();
} catch(e) {
TransactionManager.abortTransaction();
}
}
function deleteVoidParameters(target) {
var attributes = target.getAttributes();
for each(var attribute in attributes) {
if(attribute.getType() != "void") {
continue;
}
deleteElement(attribute);
}
var operations = target.getOperations();
for each(var operation in operations) {
for each(var parameter in operation.getParameters()) {
if(parameter.getType() != "void") {
continue;
}
deleteElement(parameter);
}
}
}
function deleteElement (element) {
var modelEditor = astah.getModelEditorFactory().getBasicModelEditor();
(modelEditor)['delete'](element);
}
// 6.9不具合回避
// 外部エンティティの取得
importPackage(com.change_vision.jude.api.inf.model);
function findExternalEntitys() {
var allExternalEntitys = astah.findElements(IExternalEntity);
var externalEntitys = new Array();
for(var i in allExternalEntitys) {
if(contains(externalEntitys, allExternalEntitys[i])) {
continue;
}
externalEntitys.push(allExternalEntitys[i]);
}
return externalEntitys;
}
function contains(array, obj) {
for(var i in array) {
if(array[i].getFullName("/") == obj.getFullName("/")) {
return true;
}
}
return false;
}
// ドメインの初期値を取得(API不具合回避)
importPackage(com.change_vision.jude.api.inf.model);
function getDomainDefaultValue(domain) {
var taggedValues = domain.getTaggedValues();
for (var i in taggedValues) {
var taggedValue = taggedValues[i];
if(taggedValue.getKey() == "jude.domain.default" )
return taggedValue.getValue();
}
return "";
}
importPackage(com.change_vision.jude.api.inf.model);
function getStateMachineDiagram(element) {
for each(var diagram in element.getDiagrams()) {
if (diagram instanceof IStateMachineDiagram) {
return diagram;
}
}
return null;
}
importPackage(java.lang);
println("AstahVersion : " + astah.getAstahVersion());
println("AstahEdition : " + astah.getAstahEdition());
println("AstahInstallPath : " + astah.getAstahInstallPath());
println("UserHome : " + System.getProperty("user.home"));
println("AstahModelVersion : " + astah.getAstahModelVersion());
println("AstahAPIVersion : " + astah.getAstahAPIVersion());
println("AstahAPIModelVersion : " + astah.getAstahAPIModelVersion());
//println("ProjectModelVersion : " + astah.getProjectModelVersion());
//カレントダイアグラムの名前を表示
importPackage(com.change_vision.jude.api.inf.model);
var viewManager = astah.getViewManager();
var diagramViewManager = viewManager.getDiagramViewManager();
var currentDiagram = diagramViewManager.getCurrentDiagram();
println(currentDiagram.getName());
//プロジェクト内の図の名前をリスト形式で表示
importPackage(com.change_vision.jude.api.inf.model);
var diagrams = astah.findElements(IDiagram);
for(var i in diagrams) {
println(diagrams[i].getName());
}
var viewManager = astah.getViewManager();
var diagramViewManager = viewManager.getDiagramViewManager();
var selectedPresentations = diagramViewManager.getSelectedPresentations();
for each(var presentation in selectedPresentations) {
println(presentation.getLabel());
}
// ユーザホームを表示
importPackage(java.lang);
var userHomePath = System.getProperty("user.home");
println(userHomePath);
function printVertexesInSubMachineState(state) {
if(state == null) {
return;
}
if(!state.isSubmachineState()) {
return;
}
var submachine = state.getSubmachine();
var vertexes = submachine.getVertexes();
for each(var vertex in vertexes) {
println(vertex);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment