Programming Language Information for Project

In Astah, programming language information such as Java, C# and C++ are represented by stereotypes, tagged values and attributes of models.

Programming language information

Project model (IModel) has tagged value to set the language information.

Language Item Tagged Value Stereotype Model Attribute Model
Java Java Project [Key] jude.profile.java

[Value] true/false
- - Project Model(IModel)
C# C# Project [Key] jude.profile.c_sharp

[Value] true/false
- - Project Model(IModel)
C++ C++ Project [Key] jude.profile.c_plus

[Value] true/false
- - Project Model(IModel)

How to recognize Java or C# (Class, Attribute, Operation)

Use the checkboxes in the language tab of the property view for class, attribute and operation.
For example, when Java checkbox is set to ON for class, A stereotype, "Java Class", will be set. (However, it will not be displayed in the property view or diagram editor.) Responsive image

Java

Model Stereotype
Class (IClass) Java Class
Attribute (IAttribute) Java Attribute
Operation (IOperation) Java Method

C#

Model Stereotype
Class (IClass) C# Class
Attribute (IAttribute) C# Attribute
Operation (IOperation) C# Method

C++

Model Stereotype
Class (IClass) C++ Class
Attribute (IAttribute) C++ Attribute
Operation (IOperation) C++ Method

Programming language information for Class, Attribute and Operation

In Astah, programming language information such as Java, C# and C++ is set in stereotypes, tagged values and attributes in models.
In the language tab of the property view for class, attribute or operation, values for setup items are set to either tagged value, stereotype, model attribute.

Java

Item Stereotype Tagged Value Model Attribute Model
<<enum>> <<enum>> - - Class (IClass)
annotations - [Key]jude.java.annotations
[Value]Optional
- Class (IClass), Attribute (IAttribute),
Operation (IOperation)
@interface - [Key]jude.java.atmark_interface
[Value]true/false
- Class (IClass)
strictfp - [Key]jude.java.strictfp
[Value]true/false
- Class (IClass),Operation(IOperation)
[Class]final - - IClass.isLeaf() Class (IClass)
<<enum constant>> <<enum constant>> - - Attribute (IAttribute)
transient - [Key]jude.java.transient
[Value]true/false
- Attribute (IAttribute)
volatile - [Key]jude.java.volatile
[Value]true/false
- Attribute (IAttribute)
[Attribute]final - - IAttribute.isChangeable() Attribute (IAttribute)
synchronized - [Key]jude.java.synchronized
[Value]true/false
- Operation (IOperation)
native - [Key]jude.java.native
[Value]true/false
- Operation (IOperation)
[Operation]final - - IClass.isLeaf() Operation (IOperation)

C#

Item Stereotype Tagged Value Model Attribute Model
<<delegate>> <<delegate>> - - Class (IClass)
<<struct>> <<struct>> - - Class (IClass)
<<enum>> <<enum>> - - Class (IClass)
attributes - [Key]jude.c_sharp.attributes
[Value]Optional
- Class (IClass), Attribute (IAttribute),
Operation( IOperation)
sealed - [Key]jude.c_sharp.sealed
[Value]true/false
- Class (IClass)
static - [Key]jude.c_sharp.static
[Value]true/false
- Class (IClass)
internal - [Key]jude.c_sharp.internal
[Value]true/false
- Class (IClass), Attribute (IAttribute),
Operation (IOperation)
<<property>> <<property>> - - Attribute (IAttribute)
<<property>> get - [Key]jude.c_sharp.property_get
[Value]true/false
- Attribute (IAttribute)
<<property>> set - [Key]jude.c_sharp.property_set
[Value]true/false
- Attribute (IAttribute)
<<enum constant>> <<enum constant>> - - Attribute (IAttribute)
const - [Key]jude.c_sharp.const
[Value]true/false
- Attribute (IAttribute)
volatile - [Key]jude.c_sharp.volatile
[Value]true/false
- Attribute (IAttribute)
[Attribute]readonly - - IAttribute.getChangeable() Attribute (IAttribute)
<<event>> <<event>> - - Operation (IOperation)
<<event>> add - [Key]jude.c_sharp.event_add
[Value]true/false
- Operation (IOperation)
<<event>> remove - [Key]jude.c_sharp.event_remove
[Value]true/false
- Operation (IOperation)
<<indexer>> <<indexer>> - - Operation (IOperation)
<<indexer>> get - [Key]jude.c_sharp.indexer_get
[Value]true/false
- Operation (IOperation)
<<indexer>> set - [Key]jude.c_sharp.indexer_set
[Value]true/false
- Operation (IOperation)
extern - [Key]jude.c_sharp.extern
[Value]true/false
- Operation (IOperation)
override - [Key]jude.c_sharp.override
[Value]true/false
- Operation (IOperation)
sealed - [Key]jude.c_sharp.sealed
[Value]true/false
- Operation (IOperation)
unsafe - [Key]jude.c_sharp.unsafe
[Value]true/false
- Operation (IOperation)
virtual - [Key]jude.c_sharp.virtual
[Value]true/false
- Operation (IOperation)
extension method - [Key]jude.c_sharp.extension_method
[Value]true/false
- Operation (IOperation)

C++

Item Stereotype Tagged Value Model Attribute Model
Type Modifier - [Key]type_modifier
[Value]Type Modifie String
IElement.getTypeModifier(),
ITemplateBinding.getActualParameterTypeModifier()
-
<<enum>> <<enum>> - - Class (IClass)
<<struct>> <<struct>> - - Class (IClass)
<<union>> <<union>> - - Class (IClass)
<<enum constant>> <<enum constant>> - - Attribute (IAttribute)
const - [Key]jude.c_plus.const
[Value]true/false
- Attribute (IAttribute),
Operation(IOperation)
mutable - [Key]jude.c_plus.mutable
[Value]true/false
- Attribute (IAttribute)
volatile - [Key]jude.c_plus.volatile
[Value]true/false
- Attribute (IAttribute)
friend - [Key]jude.c_plus.friend
[Value]true/false
- Operation (IOperation)
explicit - [Key]jude.c_plus.explicit
[Value]true/false
- Operation (IOperation)
inline - [Key]jude.c_plus.inline
[Value]true/false
- Operation (IOperation)
virtual - [Key]jude.c_plus.virtual
[Value]true/false
- Operation (IOperation)

How to get language information for project

Get project language information
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;
 }

How to set language information for project

Set project language information
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();
    }
}

Check if Java language information is set to class, or class is 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;
  }

Set Java language information to project and class, then set strictfp to class

Set project language information
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();
    }
}


▶ Back to Top