diff --git a/org.contextmapper.dsl.tests/integ-test-files/generators/plantuml/imported-contexts.cml b/org.contextmapper.dsl.tests/integ-test-files/generators/plantuml/imported-contexts.cml new file mode 100644 index 00000000..214df025 --- /dev/null +++ b/org.contextmapper.dsl.tests/integ-test-files/generators/plantuml/imported-contexts.cml @@ -0,0 +1,16 @@ +/* Simple bounded contexts */ +BoundedContext ImportedContext1 { + Module importedModule1 { + Aggregate ImportedAggregate1 { + Entity ImportedEntity1 + } + } +} + +BoundedContext ImportedContext2 { + Module importedModule2 { + Aggregate ImportedAggregate2 { + Entity ImportedEntity2 + } + } +} \ No newline at end of file diff --git a/org.contextmapper.dsl.tests/integ-test-files/generators/plantuml/plantuml-generator-import-test.cml b/org.contextmapper.dsl.tests/integ-test-files/generators/plantuml/plantuml-generator-import-test.cml new file mode 100644 index 00000000..d80fbe23 --- /dev/null +++ b/org.contextmapper.dsl.tests/integ-test-files/generators/plantuml/plantuml-generator-import-test.cml @@ -0,0 +1,10 @@ +/* Import other contexts */ +import "./imported-contexts.cml" + +/* Define the context map that includes imported contexts */ +ContextMap TestMap { + contains ImportedContext1 + contains ImportedContext2 + + ImportedContext1 [U]->[D] ImportedContext2 +} \ No newline at end of file diff --git a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLGeneratorTest.java b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLGeneratorTest.java index 9920f44d..01798db4 100644 --- a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLGeneratorTest.java +++ b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/generators/plantuml/PlantUMLGeneratorTest.java @@ -274,6 +274,23 @@ void expectExceptionIfThereIsOnlyAnEmptyDomain() { }); } + @Test + void canGeneratePlantUMLWithImportedBoundedContexts() throws IOException { + // given + ContextMappingModel model = getOriginalResourceOfTestCML("plantuml-generator-import-test.cml") + .getContextMappingModel(); + + // when + IFileSystemAccess2Mock filesystem = new IFileSystemAccess2Mock(); + this.generator.doGenerate(new ContextMappingModelResourceMock(model, "testmodel", "cml"), filesystem, + new IGeneratorContextMock()); + + // then + assertTrue(filesystem.getGeneratedFilesSet().contains("testmodel_ContextMap.puml")); + assertTrue(filesystem.getGeneratedFilesSet().contains("testmodel_BC_ImportedContext1.puml")); + assertTrue(filesystem.getGeneratedFilesSet().contains("testmodel_BC_ImportedContext2.puml")); + } + private Entity createTestEntity(String name) { Entity testEntity = TacticdslFactory.eINSTANCE.createEntity(); testEntity.setName(name); diff --git a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/PlantUMLGenerator.java b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/PlantUMLGenerator.java index b43e2546..0ce6f921 100644 --- a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/PlantUMLGenerator.java +++ b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/PlantUMLGenerator.java @@ -17,6 +17,8 @@ import java.util.List; import java.util.Optional; +import java.util.Set; +import java.util.HashSet; import org.contextmapper.dsl.cml.CMLModelDomainAndSubdomainResolver; import org.contextmapper.dsl.contextMappingDSL.Aggregate; @@ -126,8 +128,14 @@ private void generateClassDiagramsForSubdomains(IFileSystemAccess2 fsa, String f private void generateClassAndStateDiagramsForBoundedContexts(ContextMappingModel model, IFileSystemAccess2 fsa, String fileName) { - for (BoundedContext boundedContext : model.getBoundedContexts()) { + // Get all bounded contexts, including those referenced in the context map + Set boundedContexts = new HashSet<>(); + boundedContexts.addAll(model.getBoundedContexts()); + if (model.getMap() != null) { + boundedContexts.addAll(model.getMap().getBoundedContexts()); + } + for (BoundedContext boundedContext : boundedContexts) { // class diagram for complete BC fsa.generateFile(fileName + "_BC_" + boundedContext.getName() + "." + PLANT_UML_FILE_EXT, new PlantUMLBoundedContextClassDiagramCreator().createDiagram(boundedContext));