Ok, let's give a try.
We have created a list of class to have a minimum working product.
Those class are in net.sourceforge.plantuml.api.mda.option2 package, to denotate that this is an alpha release.
public interface MDAEntity {
public String getName();
}
public interface MDAPackage {
public String getName();
public Collection<MDAEntity> getEntities();
}
public interface MDADiagram {
public Collection<MDAPackage> getPackages();
}
Finally, you have a factory class.
public class MDAUtils {
public static MDADiagram getMDADiagram(String plantumlDiagramSource)
...
}
Theses classes are available in this zip archive: https://dl.dropboxusercontent.com/u/13064071/mda.zip
Knowing that, with the last beta ( https://dl.dropboxusercontent.com/u/13064071/plantuml.jar ), you can have:
public void testGetMDADiagram01() {
String s = "@startuml\n";
s += "class Foo1\n";
s += "@enduml";
final MDADiagram diagram = MDAUtils.getMDADiagram(s);
assertNotNull(diagram);
final List<MDAPackage> packages = new ArrayList<MDAPackage>(diagram.getPackages());
assertEquals(1, packages.size());
assertEquals("", packages.get(0).getName());
final List<MDAEntity> entities = new ArrayList<MDAEntity>(packages.get(0).getEntities());
assertEquals(1, entities.size());
assertEquals("Foo1", entities.get(0).getName());
}
public void testGetMDADiagram02() {
String s = "@startuml\n";
s += "class Foo1\n";
s += "package package1 {\n";
s += "class Foo2\n";
s += "}\n";
s += "\n";
s += "\n";
s += "@enduml";
final MDADiagram diagram = MDAUtils.getMDADiagram(s);
assertNotNull(diagram);
final List<MDAPackage> packages = new ArrayList<MDAPackage>(diagram.getPackages());
assertEquals(2, packages.size());
assertEquals("", packages.get(0).getName());
assertEquals("package1", packages.get(1).getName());
final List<MDAEntity> rootEntities = new ArrayList<MDAEntity>(packages.get(0).getEntities());
assertEquals(1, rootEntities.size());
assertEquals("Foo1", rootEntities.get(0).getName());
final List<MDAEntity> package1Entities = new ArrayList<MDAEntity>(packages.get(1).getEntities());
assertEquals(1, package1Entities.size());
assertEquals("Foo2", package1Entities.get(0).getName());
}
Now we let you tell us which methods you need if the MDAxxx interfaces : you can modify them, or even create new interfaces.
About option3, we have also created a interface net.sourceforge.plantuml.api.mda.option3.MDAVisitor :
public interface MDAVisitor {
}
Feel free to add methods here also.