astah* API 利用ガイド


【プロジェクトの言語情報】

astah*のJava,C#,C++等の言語情報は、各モデルのステレオタイプ、タグ付き値、モデルの属性で表現します。

プロジェクトの言語情報一覧

プロジェクトモデル(IModel)は言語情報を持つかどうかのタグ付き値を保持します。
言語 項目 タグ付き値 ステレオタイプ モデルの属性 付加されるモデル
Java Javaプロジェクト [キー]jude.profile.java[値]true/false - - プロジェクトモデル(IModel)
C# C#プロジェクト [キー]jude.profile.c_sharp[値]true/false - - プロジェクトモデル(IModel)
C++ C++プロジェクト [キー]jude.profile.c_plus[値]true/false - - プロジェクトモデル(IModel)

Java、C#の判定(クラス、属性、操作)

astah*のクラス、属性、操作のプロパティビューの言語タブにJava、C#のチェックボックスがあります。
例えば、クラスのプロパティビューの言語タブでjavaのチェックボックスがONの場合、クラスに"Java Class" のステレオタイプが設定されます。(ただし、ダイアグラムエディタやプロパティビューのステレオタイプには表示されません。)
言語 モデル ステレオタイプ
Java クラス(IClass) Java Class
Java 属性(IAttribute) Java Attribute
Java 操作(IOperation) Java Method
C# クラス(IClass) C# Class
C# 属性(IAttribute) C# Attribute
C# 操作(IOperation) C# Method
C++ クラス(IClass) C++ Class
C++ 属性(IAttribute) C++ Attribute
C++ 操作(IOperation) C++ Method

クラス、属性、操作の言語情報一覧

astah*のクラス、属性、操作のプロパティビューの言語タブに表示される設定項目は、各モデルのタグ付き値、ステレオタイプ、モデルの属性のいずれかに設定されます。
対象となるモデル: クラス(IClass)、属性(IAttribute)、操作(IOperation)
言語 項目 ステレオタイプ タグ付き値 モデルの属性 付加されるモデル
Java <<enum>> <<enum>> - - クラス(IClass)
Java annotations - [キー]jude.java.annotations[値]任意 - クラス(IClass)、属性(IAttribute)、操作(IOperation)
Java @interface - [キー]jude.java.atmark_interface[値]true/false - クラス(IClass)
Java strictfp - [キー]jude.java.strictfp[値]true/false - クラス(IClass)、操作(IOperation)
Java [クラス]final - - IClass.isLeaf() クラス(IClass)
Java <<enum constant>> <<enum constant>> - - 属性(IAttribute)
Java transient - [キー]jude.java.transient[値]true/false - 属性(IAttribute)
Java volatile - [キー]jude.java.volatile[値]true/false - 属性(IAttribute)
Java [属性]final - - IAttribute.isChangeable() 属性(IAttribute)
Java synchronized - [キー]jude.java.synchronized[値]true/false - 操作(IOperation)
Java native - [キー]jude.java.native[値]true/false - 操作(IOperation)
Java [操作]final - - IClass.isLeaf() 操作(IOperation)
C# <<delegate>> <<delegate>> - - クラス(IClass)
C# <<struct>> <<struct>> - - クラス(IClass)
C# <<enum>> <<enum>> - - クラス(IClass)
C# attributes - [キー]jude.c_sharp.attributes[値]任意 - クラス(IClass)、属性(IAttribute)、操作(IOperation)
C# sealed - [キー]jude.c_sharp.sealed[値]true/false - クラス(IClass)
C# static - [キー]jude.c_sharp.static[値]true/false - クラス(IClass)
C# internal - [キー]jude.c_sharp.internal[値]true/false - クラス(IClass)、属性(IAttribute)、操作(IOperation)
C# <<property>> <<property>> - - 属性(IAttribute)
C# <<property>> get - [キー]jude.c_sharp.property_get[値]true/false - 属性(IAttribute)
C# <<property>> set - [キー]jude.c_sharp.property_set[値]true/false - 属性(IAttribute)
C# <<enum constant>> <<enum constant>> - - 属性(IAttribute)
C# const - [キー]jude.c_sharp.const[値]true/false - 属性(IAttribute)
C# volatile - [キー]jude.c_sharp.volatile[値]true/false - 属性(IAttribute)
C# [属性]readonly - - IAttribute.getChangeable() 属性(IAttribute)
C# <<event>> <<event>> - - 操作(IOperation)
C# <<event>> add - [キー]jude.c_sharp.event_add[値]true/false - 操作(IOperation)
C# <<event>> remove - [キー]jude.c_sharp.event_remove[値]true/false - 操作(IOperation)
C# <<indexer>> <<indexer>> - - 操作(IOperation)
C# <<indexer>> get - [キー]jude.c_sharp.indexer_get[値]true/false - 操作(IOperation)
C# <<indexer>> set - [キー]jude.c_sharp.indexer_set[値]true/false - 操作(IOperation)
C# extern - [キー]jude.c_sharp.extern[値]true/false - 操作(IOperation)
C# override - [キー]jude.c_sharp.override[値]true/false - 操作(IOperation)
C# sealed - [キー]jude.c_sharp.sealed[値]true/false - 操作(IOperation)
C# unsafe - [キー]jude.c_sharp.unsafe[値]true/false - 操作(IOperation)
C# virtual - [キー]jude.c_sharp.virtual[値]true/false - 操作(IOperation)
C# extension method - [キー]jude.c_sharp.extension_method[値]true/false - 操作(IOperation)
C++ 型修飾子 - [キー]type_modifier[値]文字列 IElement.getTypeModifier(),ITemplateBinding.getActualParameterTypeModifier() -
C++ <<enum>> <<enum>> - - クラス(IClass)
C++ <<struct>> <<struct>> - - クラス(IClass)
C++ <<union>> <<union>> - - クラス(IClass)
C++ <<enum constant>> <<enum constant>> - - 属性(IAttribute)
C++ const - [キー]jude.c_plus.const[値]true/false - 属性(IAttribute)、操作(IOperation)
C++ mutable - [キー]jude.c_plus.mutable[値]true/false - 属性(IAttribute)
C++ volatile - [キー]jude.c_plus.volatile[値]true/false - 属性(IAttribute)
C++ friend - [キー]jude.c_plus.friend[値]true/false - 操作(IOperation)
C++ explicit - [キー]jude.c_plus.explicit[値]true/false - 操作(IOperation)
C++ inline - [キー]jude.c_plus.inline[値]true/false - 操作(IOperation)
C++ virtual - [キー]jude.c_plus.virtual[値]true/false - 操作(IOperation)

【プロジェクトの言語情報の取得】

プロジェクトの言語情報を取得

    public void getLanguageInfomataion() {
        BasicModelEditor bme = ModelEditorFactory.getBasicModelEditor();
        IModel project = AstahAPI.getAstahAPI().getProjectAccessor().getProject();
        try {
            if (isJavaProject(project)) {
                System.out.println("Java Language");
            }
            if (isCSharpProject(project)) {
                System.out.println("C# Language");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private boolean isJavaProject(IModel project) {
        ITaggedValue[] tags = project.getTaggedValues();
        for (int i = 0; i < tags.length; i++) {
            ITaggedValue tag = tags[i];
            String key = tag.getKey();
            if ("jude.profile.java".eqauls(key) {
                if ("true".equals(tag.getValue()) {
                    return true;
                }
            }
        }
        return false;
    }
    
    private boolean isCSharpProject(IModel project) {
        ITaggedValue[] tags = project.getTaggedValues();
        for (int i = 0; i < tags.length; i++) {
            ITaggedValue tag = tags[i];
            String key = tag.getKey();
            if ("jude.profile.c_sharp".eqauls(key) {
                if ("true".equals(tag.getValue()) {
                    return true;
                }
            }
        }
        return false;
    }

【プロジェクトの言語情報の設定】

プロジェクトの言語情報を設定

    public void testSetLanguageCSharp() throws ClassNotFoundException,
    InvalidEditingException, ProjectNotFoundException {
        BasicModelEditor bme = ModelEditorFactory.getBasicModelEditor();
        IModel project = AstahAPI.getAstahAPI().getProjectAccessor().getProject();
        try {
            TransactionManager.beginTransaction();
            
            //Java:OFF
            bme.setLanguageJava(project, false);
            //C#:OFF
            bme.setLanguageCSharp(project, false);
            //Java:ON
            bme.setLanguageJava(project, true);
            //C#:ON
            bme.setLanguageCSharp(project, true);
            
            TransactionManager.endTransaction();
        } catch (InvalidEditingException e) {
            TransactionManager.abortTransaction();
            e.printStackTrace();
            fail();
        }
    }

【クラスがJavaの言語情報を持つか、また、strictfpかどうかを取得する】


    public void testGetJavaClassStrictfp() {
        BasicModelEditor bme = ModelEditorFactory.getBasicModelEditor();
        IModel project = AstahAPI.getAstahAPI().getProjectAccessor().getProject();
        try {
            IElement element = getElement(project.getOwnedElements(), "Class0");
            if (isJavaClass(element)) {
                System.out.println("Class0 has \"Java Class\" stereotype");
                if (isJavaClassStrictfp(element)) {
                    System.out.println("Class0 has \"jude.java.strictfp\" TaggedValue");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            fail();
        }
    }
    
    protected INamedElement getElement(INamedElement[] elements, String elementName) {
        for (int i = 0; i < elements.length; i++) {
            if (elements[i].getName().equals(elementName)) {
                return elements[i];
            }
        }
        return null;
    }
    
    private boolean isJavaClass(IElement element) {
        String[] sterotyopes = element.getStereotypes();
        for (int i =0 ; i < sterotyopes.length; i++) {
            if ("Java Class".equals(sterotyopes[i])) {
                return true;
            }
        }
        return false;
    }
    
    private boolean isJavaClassStrictfp(IElement element) {
        ITaggedValue[] tags = element.getTaggedValues();
        for (int i =0 ; i < tags.length; i++) {
            ITaggedValue tag = tags[i];
            if ("jude.java.strictfp".equals(tag.getKey())) {
                if ("true".equals(tag.getValue())) {
                    return true;
                }
            }
        }
        return false;
    }
    

【プロジェクト、クラスにJavaの言語情報を設定し、クラスにstrictfpを設定する】

プロジェクトの言語情報を設定

    public void testJavaAttributeStereotypeInClass() throws InvalidEditingException, ClassNotFoundException {
        BasicModelEditor bme = ModelEditorFactory.getBasicModelEditor();
        try {
            TransactionManager.beginTransaction();
            
            bme.setLanguageJava(project, true);
            IElement element = getElement(project.getOwnedElements(), "Class0");
            element.addStereotype("Java Class");
            bme.createTaggedValue(element, "jude.java.strictfp", "true");
            
            TransactionManager.endTransaction();
            
        } catch (InvalidEditingException e) {
            TransactionManager.abortTransaction();
            fail();
        }
    }

HOME