📄 classdefinitionbuilder.java
字号:
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));
line.add(EMPTY_COLUMN);
line.add(EMPTY_COLUMN);
line.add(getSuperClass(iClass));
line.add(getImplementation(iClass));
return line;
}
/**
* 幚憰偡傞僀儞僞乕僼僃乕僗柤傪庢摼偡傞丅
* Get Realization interface names.
* @param iClass
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -