import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.change_vision.jude.api.inf.exception.LicenseNotFoundException;
import com.change_vision.jude.api.inf.exception.NonCompatibleException;
import com.change_vision.jude.api.inf.exception.ProjectNotFoundException;
import com.change_vision.jude.api.inf.exception.ProjectLockedException;
import com.change_vision.jude.api.inf.model.IAttribute;
import com.change_vision.jude.api.inf.model.IClass;
import com.change_vision.jude.api.inf.model.IConstraint;
import com.change_vision.jude.api.inf.model.IElement;
import com.change_vision.jude.api.inf.model.IGeneralization;
import com.change_vision.jude.api.inf.model.IModel;
import com.change_vision.jude.api.inf.model.INamedElement;
import com.change_vision.jude.api.inf.model.IOperation;
import com.change_vision.jude.api.inf.model.IPackage;
import com.change_vision.jude.api.inf.model.IParameter;
import com.change_vision.jude.api.inf.model.IRealization;
import com.change_vision.jude.api.inf.project.ProjectAccessor;
import com.change_vision.jude.api.inf.project.ProjectAccessorFactory;
/**
* 指定されたプロジェクトから、クラス情報構築するクラス。
* Class to build class definition from selected project.
*/
public class ClassDefinitionBuilder {
private static final String EMPTY_COLUMN = "";
private String inputFile;
/**
* @param inputFile
* 入力するプロジェクト
* File to input
*/
public ClassDefinitionBuilder(String inputFile) {
this.inputFile = inputFile;
}
/**
* クラス情報を取得する。
* Get class information.
*
* @return クラス情報(Listに格納されたStringのList)
* Class information (String List stored in the List)
* @throws LicenseNotFoundException
* ライセンスが見つかりません
* License cannot be found
* @throws ProjectNotFoundException
* プロジェクトが見つかりません
* Project cannot be found
* @throws NonCompatibleException
* モデルバージョンが古い(プロジェクトを最後に編集したJUDEよりもAPIのバージョンが古い)です
* Old Model Version (The version of API is older than the version of JUDE that the project has been last edited with)
* @throws ClassNotFoundException
* 読み込めないモデルがあります
* Cannot read some models
* @throws IOException
* 入出力エラーです
* Input/Output error
* @throws ProjectLockedException
* プロジェクトファイルがロックされています
* Project file has been locked
*/
public List getContents() throws LicenseNotFoundException, ProjectNotFoundException,
NonCompatibleException, IOException, ClassNotFoundException, ProjectLockedException, Throwable {
// プロジェクトを開いて、起点となるモデルを取得する
ProjectAccessor prjAccessor = ProjectAccessorFactory.getProjectAccessor();
prjAccessor.open(inputFile);
IModel iModel = prjAccessor.getProject();
List contents = new ArrayList();
contents.add(getHeader());
// プロジェクトに含まれる全てのパッケージを取得する
List iPackages = getAllPackages(iModel);
// パッケージ毎に情報を構築する
for (Iterator iter = iPackages.iterator(); iter.hasNext();) {
IPackage iPackage = (IPackage)iter.next();
contents.addAll(getClassInfos(iPackage));
}
// プロジェクトを閉じる
prjAccessor.close();
return contents;
}
/**
* ヘッダ情報を取得する。
* Get header information.
* @return ヘッダ情報(StringのList)
* Header information (String List)
*/
private List getHeader() {
List header = new ArrayList();
header.add("Class");
header.add("Attribute/Operation");
header.add("Definition");
header.add("Generalization");
header.add("Realization");
return header;
}
/**
* プロジェクト配下の全てのパッケージを取得する。
* Get all packages in project.
* @param project
* プロジェクト
* Project
* @return パッケージリスト
* Package list
*/
private List getAllPackages(IModel project) {
List packages = new ArrayList();
packages.add(project);
return getPackages(project, packages);
}
/**
* 指定パッケージ配下のパッケージを、再帰的に全て取得する。
* How to get packages under Package recursively
* @param iPackage
* 指定パッケージ
* Selected package
* @param iPackages
* パッケージ一覧を格納するリスト
* List of all stored packages
* @return パッケージ一覧を格納したリスト
* List of all stored packages
*/
private List getPackages(IPackage iPackage, List iPackages) {
INamedElement[] iNamedElements = iPackage.getOwnedElements();
for (int i = 0; i < iNamedElements.length; i++) {
INamedElement iNamedElement = iNamedElements[i];
if (iNamedElement instanceof IPackage) {
iPackages.add(iNamedElement);
getPackages((IPackage)iNamedElement, iPackages);
}
}
return iPackages;
}
/**
* 指定パッケージ配下のクラス情報を取得する。
* Get class information in selected package.
* @param iPackage
* 指定パッケージ
* Selected package
* @return クラス情報(Listに格納されたStringのList)
* Class information (String List stored in the list)
*/
private List getClassInfos(IPackage iPackage) {
List classInfos = new ArrayList();
List classes = getIClasses(iPackage);
for (Iterator iter = classes.iterator(); iter.hasNext();) {
IClass iClass = (IClass)iter.next();
classInfos.addAll(getClassInfo(iClass));
}
return classInfos;
}
/**
* 指定パッケージ配下のクラスを取得する。
* Get classes in selected package.
* @param iPackage
* 指定パッケージ
* Selected package
* @return クラス一覧を格納したリスト
* List of all stored classes
*/
private List getIClasses(IPackage iPackage) {
List iClasses = new ArrayList();
INamedElement[] iNamedElements = iPackage.getOwnedElements();
for (int i = 0; i < iNamedElements.length; i++) {
INamedElement iNamedElement = iNamedElements[i];
if (iNamedElement instanceof IClass) {
iClasses.add(iNamedElement);
}
}
return iClasses;
}
/**
* 指定クラスの情報を取得する。
* Get information of selected class.
* @param iClass
* 指定クラス
* Selected class
* @return クラス情報(Listに格納されたStringのList)
* Class information (Strings list stored in the list)
*/
private List getClassInfo(IClass iClass) {
List lines = new ArrayList();
lines.add(getClassNameLine(iClass));
lines.addAll(getAttributeLines(iClass));
lines.addAll(getOperationLines(iClass));
return lines;
}
/**
* クラス名の行の情報を取得する。
* Get class name line.
* @param iClass
* クラス
* Class
* @return クラス名の行の情報(StringのList)
* Information of Class name lines (String list)
*/
private List getClassNameLine(IClass iClass) {
List line = new ArrayList();
line.add(getFullName(iClass
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
一个不错的免费UML工具:JUDE community (640个子文件)
JudeAPI.jude.bak 66KB
JudeAPI.jude.bak 64KB
jude.bat 2KB
run.bat 1KB
run.bat 1KB
compile.bat 574B
compile.bat 574B
ClassDefinitionBuilder.class 7KB
ClassDefinitionBuilder.class 7KB
CsvWriter.class 1KB
CsvWriter.class 1KB
ClassDefinitionExporter.class 893B
ClassDefinitionExporter.class 893B
stylesheet.css 1KB
stylesheet.css 1KB
outer.gif 195B
outer.gif 195B
inner.gif 191B
inner.gif 191B
ext.gif 138B
ext.gif 138B
inherit.gif 57B
inherit.gif 57B
index-all.html 141KB
index-all.html 136KB
ReleaseNote.html 108KB
ReleaseNote-e.html 101KB
uml-INamedElement.html 47KB
uml-INamedElement.html 47KB
index.html 35KB
index.html 33KB
IERAttribute.html 27KB
package-summary.html 27KB
IERAttribute.html 26KB
package-summary.html 25KB
INamedElement.html 25KB
overview-tree.html 25KB
overview-tree.html 25KB
INamedElement.html 25KB
IClass.html 25KB
IMatrixDiagram.html 24KB
IClass.html 24KB
IMatrixDiagram.html 24KB
package-tree.html 24KB
IMessage.html 23KB
package-tree.html 23KB
IMessage.html 23KB
IEREntity.html 23KB
IAttribute.html 22KB
IEREntity.html 22KB
IAttribute.html 22KB
ICombinedFragment.html 22KB
ICombinedFragment.html 22KB
IERRelationship.html 22KB
IERRelationship.html 22KB
ProjectAccessor.html 20KB
IUseCase.html 20KB
IPseudostate.html 20KB
IPseudostate.html 19KB
IState.html 19KB
ProjectAccessor.html 19KB
IUseCase.html 19KB
IState.html 19KB
IERSubtypeRelationship.html 19KB
IPartition.html 19KB
IERSubtypeRelationship.html 19KB
IPartition.html 18KB
IERDomain.html 18KB
IERDomain.html 18KB
IOperation.html 17KB
IOperation.html 17KB
IControlNode.html 17KB
IControlNode.html 17KB
ITransition.html 17KB
ILifeline.html 17KB
IInteractionUse.html 16KB
ITransition.html 16KB
ILifeline.html 16KB
IInteractionUse.html 16KB
IProcessBox.html 16KB
IERDatatype.html 16KB
IFlow.html 16KB
IERDatatype.html 16KB
IProcessBox.html 16KB
allclasses-frame.html 16KB
IFlow.html 16KB
ITemplateBinding.html 16KB
IERSchema.html 16KB
IActivity.html 16KB
IDataFlowDiagram.html 15KB
ITemplateBinding.html 15KB
IClassifierTemplateParameter.html 15KB
allclasses-frame.html 15KB
IDataFlowNode.html 15KB
IActivity.html 15KB
IERSchema.html 15KB
IObjectNode.html 15KB
IActivityDiagram.html 15KB
IDataFlowDiagram.html 15KB
IClassifierTemplateParameter.html 15KB
共 640 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
- yinfeng199003122012-01-09这个软件不错但是要在java平台下运行
- 梅德2012-06-07没找到可执行文件,不知道java怎么玩
- lrlzzl2012-09-10用不好怎么办啊
- Androider1232012-08-08软件不错 要在java平台下运行
penghaiyu
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功