我正在使用Rhapsody Java API创建一些插件以获得自动化功能。我正在尝试从类创建一个对象模型图,但是没有函数可以做到。
基本上我想做点什么:
IRPClass cla = prj.addClass("Class");
IRPObjectModelDiagram omd = cla.addObjectModelDiagram("My OMD");
但是,addObjectModelDiagram()函数对类不可用。 我尝试使用ChangeTo()将其转换为Pkg,然后将其转回类,但没有成功,并通过创建IRPClass支持的其他类型的图表然后将其转换为OMD来执行相同的操作。一个OMD。它没有用。
有没有人有解决方案来帮助我?
托马斯
答案 0 :(得分:0)
托马斯,
IRPModelElement有一个名为addNewAggr的通用“add”方法(参见下面的javadoc)。 一般来说,由于它的开放性,我只会在你没有专用方法的情况下使用这种方法。 (并非每种类型的元素都可以添加到其他每种类型的元素中,因此在使用时必须小心。但在这种情况下,您正在谈论可以在UI中完成的事情 - 将OMD添加到上课,所以不应该有任何问题。)
答案 1 :(得分:0)
假设您已经创建了一个类, 1.确定要在OMD中使用的IRPModelElements。即类,对象,链接,关联等。 你可以用
收集它们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;
}
}
创建一个集合来收集它们。 (我只是添加了一个类作为例子。)
IRPCollection packages = app.createNewCollection(); packages.setSize(3); packages.setModelElement(1,implObject); packages.setModelElement(2,association); packages.setModelElement(3,link); //假设你以前收集过它们。
确定在OMD中绘制的内容:
IRPCollection relTypes = app.createNewCollection(); relTypes.setSize(2); relTypes.setString(1,“Link”); relTypes.setString(2,“Association”);
创建OMD
IRPObjectModelDiagram testerOMD = testerPackage.addObjectModelDiagram(componentName +“_ Tester_OMD”);
填充图
testerOMD.populateDiagram(packages,relTypes,“fromto”);