1

我正在使用 Rhapsody Java API 创建一些插件以获得自动化功能。我正在尝试从一个类创建一个对象模型图,但是没有功能可以做到这一点。

基本上我想做类似的事情:

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

但是,addObjectModelDiagram() 函数对类不可用。我尝试对类使用 ChangeTo() 将其转换为 Pkg 然后将其转换回类但没有成功,并通过创建 IRPClass 支持的其他类型的图表然后将其转换为 OMD 来做同样的事情一个OMD。它也没有奏效。

有没有人有解决方案来帮助我?

托马斯

4

2 回答 2

0

托马斯,

IRPModelElement 有一个通用的“add”方法,称为 addNewAggr(参见下面的 javadoc)。一般来说,由于其开放性,我只会在您没有专用方法的情况下使用此方法。(并非每种类型的元素都可以添加到所有其他类型的元素中,因此在使用它时必须小心。但在这种情况下,您正在谈论可以在 UI 中完成的事情 - 将 OMD 添加到类,所以应该没有任何问题。)

addNewAggr 的 javadoc

于 2017-07-10T12:07:31.983 回答
0

假设您已经创建了一个类, 1. 确定要在 OMD 中使用的 IRPModelElements。即类、对象、链接、关联等。 2. 您可以使用收集它们

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. 创建一个集合来收集它们。(我只是添加了一个类作为示例。)

    IRPCollection 包 = app.createNewCollection(); 包.setSize(3); packages.setModelElement(1, implObject); packages.setModelElement(2, 关联); packages.setModelElement(3, 链接); //假设你之前收集过它们。

  2. 确定要在 OMD 中绘制的内容:

    IRPCollection relTypes = app.createNewCollection(); relTypes.setSize(2); relTypes.setString(1, "链接"); relTypes.setString(2, "关联");

  3. 创建 OMD

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

  4. 填充图

    testerOMD.populateDiagram(packages, relTypes, "fromto");

于 2017-10-23T08:51:31.293 回答