2017-07-06 5 views
1

J'utilise l'API Rhapsody Java pour créer des plugins afin d'obtenir des fonctionnalités d'automatisation. J'essaye de créer un diagramme de modèle d'objet d'une classe, mais il n'y a aucune fonction pour le faire.Rhapsody java api - Comment ajouter un diagramme de modèle d'objet à une classe?

En fait, je voudrais faire quelque chose comme:

IRPClass cla = prj.addClass("Class"); 
IRPObjectModelDiagram omd = cla.addObjectModelDiagram("My OMD"); 

Cependant, la fonction addObjectModelDiagram() est indisponible pour une classe. J'ai essayé d'utiliser ChangeTo() à la classe pour le transformer en Pkg puis de le retourner à une classe sans succès, et de faire la même chose avec l'OMD en créant un autre type de diagramme supporté par IRPClass et en le tournant dans un OMD. Cela n'a pas fonctionné non plus.

Est-ce que quelqu'un a une solution pour m'aider?

méthode Thomas

Répondre

0

Thomas,

IRPModelElement a un générique "ajouter" appelé addNewAggr (voir javadoc ci-dessous). En général, en raison de sa nature ouverte, je n'utiliserais cette méthode que dans les cas où vous n'avez pas de méthode dédiée. (Tous les types d'éléments ne peuvent pas être ajoutés à tous les autres types d'éléments, vous devez donc faire attention lors de l'utilisation de ce type d'élément.) Dans ce cas, vous parlez de quelque chose qui peut être fait dans l'interface utilisateur. classe, donc il ne devrait pas y avoir de problèmes.)

javadoc for addNewAggr

0

en supposant que vous avez déjà créé une classe, 1. Déterminez IRPModelElements que vous souhaitez utiliser dans OMD. les classes i.e., objets, liens, associations, etc. 2. Vous pouvez les récupérer en utilisant

implPackage.getNestedElementsByMetaClass("Class", 1); // 1 means one level, you can increase it if you have to go deeper nests. 
IRPModelElement implClass = null; 
for(int i = 1; i < numberOfClasses+1 ; i++) { 
    elementInCollection = (IRPModelElement)classesOfImplPack.getItem(i); 
    if(elementInCollection.getMetaClass().equals("Class") && elementInCollection.getDisplayName().equals(componentName+"_Class")) 
    { 
     implClass = elementInCollection; 
     break; 
    } 
} 
  1. Créer une collection pour les recueillir. (Je viens d'ajouter une classe comme exemple.)

    IRPCollection packages = app.createNewCollection(); packages.setSize (3); packages.setModelElement (1, implObject); packages.setModelElement (2, association); packages.setModelElement (3, lien); // En supposant que vous les ayez déjà collectés.

  2. déterminer ce qu'il faut tirer en OMD:

    IRPCollection relTypes = app.createNewCollection(); RelTypes.setSize (2) ; RelTypes.setString (1, "Link") ; RelTypes.setString (2, "Association") ;

  3. Créer OMD

    IRPObjectModelDiagram testerOMD = testerPackage.addObjectModelDiagram (componentName + "_ Tester_OMD");

  4. Populate Schéma

    testerOMD.populateDiagram (paquets, relTypes, "duau");