Skip to content

Instantly share code, notes, and snippets.

@mas0061
Created December 7, 2012 07:36
Show Gist options
  • Save mas0061/4231525 to your computer and use it in GitHub Desktop.
Save mas0061/4231525 to your computer and use it in GitHub Desktop.
パッケージなしクラス構造のXMI出力をするastah Script
/*
* ExportFlatClassXMI
* パッケージに分かれたクラス構造から、パッケージのないフラットなクラス構造の
* XMI出力をします。
*
* 【制限事項】
* ・パッケージを全てなくしてしまうため、パッケージをまたがって同じクラス名があった場合は、
* 最初に発見したクラスを優先します
* ・Macにおいて、円マークをファイル名やディレクトリ名に使用した場合の動作は保証できません
*/
importPackage(com.change_vision.jude.api.inf.model);
importPackage(com.change_vision.jude.api.inf.editor);
if (!isSupportedAstah()) {
println('This edition is not supported');
}
movePackageToFlat();
exportXMI();
reopen();
// ------------------------------------- //
function movePackageToFlat() {
TransactionManager.beginTransaction();
var basicModelEditor = ModelEditorFactory.getBasicModelEditor();
var topPackage = astah.getProject();
var classes = astah.findElements(IClass);
var classNameList = new Array();
for(var i in classes) {
if (indexOf(classNameList, classes[i].getName()) == -1) {
classNameList[classNameList.length] = classes[i].getName();
basicModelEditor.changeParent(topPackage, classes[i]);
} else {
println("duplicate class -> " + classes[i].getName());
}
}
TransactionManager.endTransaction();
}
// export xmi
function exportXMI() {
var dirName = getCurrentDirectory(astah.getProjectPath());
astah.exportXMI(dirName + "exportFlat.xml");
}
// reopen(not save)
function reopen() {
var orgFileName = astah.getProjectPath();
astah.close();
astah.open(orgFileName);
}
// Get current directory path
// [Constraint]
// - Operation when the yen symbol is contained in the file name by Mac is not guaranteed.
function getCurrentDirectory(fullPath) {
var enPos = fullPath.lastIndexOf("\\");
var slaPos = fullPath.lastIndexOf("/");
return fullPath.substring(0, enPos >= slaPos ? enPos + 1 : slaPos + 1);
}
// from astah* official sample
function isSupportedAstah() {
var edition = astah.getAstahEdition();
if (edition == 'professional') {
return true;
} else {
return false;
}
}
function indexOf(org, element) {
for (var i in org) {
if (org[i].equals(element)) {
return i;
}
}
return -1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment