Hi Mohammad,
To make a diagram under a model element, you call:
modelElement.addSubDiagram(diagram) ;
To locate a model element, you need to know whether it has a parent or not.
If it has a parent, it is quite straightforward:
IModelElement child = parent.getChildByName(modelType, name);
(or just pass name if you don’t care/know its model type)
If the model element is at root, currently there is no utility method to get by name (just id/address), so you need to write yourself:
private static IModelElement findRootModelElementByName(String name, String modelType) {
IModelElement result = null;
@SuppressWarnings("unchecked")
Iterator<IModelElement> rootModelElementIterator = ApplicationManager.instance().getProjectManager().getProject().modelElementIterator(modelType);
if (rootModelElementIterator != null &&
rootModelElementIterator.hasNext()) {
do {
IModelElement rootModelElement = rootModelElementIterator.next();
if (name.equals(rootModelElement.getNickname())) {
result = rootModelElement;
}
} while (result == null &&
rootModelElementIterator.hasNext());
}
return result;
}
Let’s wrap the code into a method to make it easier to use:
private static IModelElement findModelElementByName(String name, String modelType, IModelElement parent) {
IModelElement result;
if (parent == null) {
result = findRootModelElementByName(name, modelType);
} else {
result = parent.getChildByName(modelType, name);
}
return result;
}
And more specifically, just look for Model as for your requirement:
private static IModel findModelByName(String name, IModelElement parent) {
return (IModel) findModelElementByName(name, IModelElementFactory.MODEL_TYPE_MODEL, parent);
}
Then it becomes quite easy to achieve what you want:
IModel model_2 = findModelByName("Model 2", null);
IModel model_2_1 = findModelByName("Model 2_1", model_2);
IBreakdownStructureUIModel breakdown =(IBreakdownStructureUIModel) ApplicationManager.instance().getDiagramManager().createDiagram(IDiagramTypeConstants.DIAGRAM_TYPE_BREAKDOWN_STRUCTURE);
breakdown.setName("New Breakdown Structure Diagram");
model_2_1.addSubDiagram(breakdown);
Hope this helps,
Antony.