Created
December 7, 2012 07:36
-
-
Save mas0061/4231525 to your computer and use it in GitHub Desktop.
パッケージなしクラス構造のXMI出力をするastah Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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