⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classdefinitionbuilder.java

📁 是高效开发JAVA的XML工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -