Visitor design pattern is implemented in UML model structure. Every com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Element has the accept(AbstractVisitor) method for visiting it.
The com.nomagic.uml2.impl.ModelVisitor has the visit<element_metatype> method for all types of model elements. This is very useful when you are working with a large collection of elements and need to perform actions, specific for every type of Element (for example, save/load, copy/paste, or a specific properties setting).
Just derive your class from com.nomagic.magicdraw.uml.InheritanceVisitor and override some visit... methods and call accept(AbstractVisitor) for Elements.
ModelVisitor myVisitor = new ModelVisitor() { // override some visit methods ... public void visitClass(Class element, VisitorContext context) { //this is my UML Class } }; Project project = ...; Package root = project.getPrimaryModel(); Iterator<Element> it = root.getOwnedElement().iterator(); while (it.hasNext()) { it.next().accept(myVisitor); }
You can find the code examples in <installation_directory>\openapi\examples\statistics