From 69262cc78fafda837f34f71a13811b67529e4475 Mon Sep 17 00:00:00 2001 From: Simon Brown Date: Wed, 21 Aug 2024 09:21:49 +0100 Subject: [PATCH] Makes the Spring PetClinic example easier to run. --- .../java/com/structurizr/dsl/DslTests.java | 30 ++++++++++++------- .../test/resources/dsl/spring-petclinic.dsl | 10 +++++-- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/structurizr-dsl/src/test/java/com/structurizr/dsl/DslTests.java b/structurizr-dsl/src/test/java/com/structurizr/dsl/DslTests.java index 15ec0e45..bb5cc504 100644 --- a/structurizr-dsl/src/test/java/com/structurizr/dsl/DslTests.java +++ b/structurizr-dsl/src/test/java/com/structurizr/dsl/DslTests.java @@ -3,6 +3,7 @@ import com.structurizr.Workspace; import com.structurizr.documentation.Section; import com.structurizr.model.*; +import com.structurizr.util.StringUtils; import com.structurizr.view.*; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -1145,11 +1146,11 @@ void test_Var_CannotOverrideConst() { @Test void springPetClinic() throws Exception { - File path = new File("/Users/simon/sandbox/spring-petclinic"); - if (path.exists()) { + String springPetClinicHome = System.getenv().getOrDefault("SPRING_PETCLINIC_HOME", ""); + System.out.println(springPetClinicHome); + if (!StringUtils.isNullOrEmpty(springPetClinicHome)) { System.out.println("Running Spring PetClinic example..."); StructurizrDslParser parser = new StructurizrDslParser(); - parser.addConstant("SPRING_PETCLINIC_DIR", path.getAbsolutePath()); parser.parse(new File("src/test/resources/dsl/spring-petclinic.dsl")); Container webApplication = (Container)parser.getIdentifiersRegister().getElement("springPetClinic.webApplication"); @@ -1158,37 +1159,44 @@ void springPetClinic() throws Exception { Component welcomeController = webApplication.getComponentWithName("Welcome Controller"); assertNotNull(welcomeController); assertEquals("org.springframework.samples.petclinic.system.WelcomeController", welcomeController.getProperties().get("component.type")); - assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java").getAbsolutePath(), welcomeController.getProperties().get("component.src")); + assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java").getAbsolutePath(), welcomeController.getProperties().get("component.src")); + assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java", welcomeController.getUrl()); Component ownerController = webApplication.getComponentWithName("Owner Controller"); assertNotNull(ownerController); assertEquals("org.springframework.samples.petclinic.owner.OwnerController", ownerController.getProperties().get("component.type")); - assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java").getAbsolutePath(), ownerController.getProperties().get("component.src")); + assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java").getAbsolutePath(), ownerController.getProperties().get("component.src")); + assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java", ownerController.getUrl()); Component petController = webApplication.getComponentWithName("Pet Controller"); assertNotNull(petController); assertEquals("org.springframework.samples.petclinic.owner.PetController", petController.getProperties().get("component.type")); - assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/owner/PetController.java").getAbsolutePath(), petController.getProperties().get("component.src")); + assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/owner/PetController.java").getAbsolutePath(), petController.getProperties().get("component.src")); + assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/owner/PetController.java", petController.getUrl()); Component vetController = webApplication.getComponentWithName("Vet Controller"); assertNotNull(vetController); assertEquals("org.springframework.samples.petclinic.vet.VetController", vetController.getProperties().get("component.type")); - assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/vet/VetController.java").getAbsolutePath(), vetController.getProperties().get("component.src")); + assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/vet/VetController.java").getAbsolutePath(), vetController.getProperties().get("component.src")); + assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/vet/VetController.java", vetController.getUrl()); Component visitController = webApplication.getComponentWithName("Visit Controller"); assertNotNull(visitController); assertEquals("org.springframework.samples.petclinic.owner.VisitController", visitController.getProperties().get("component.type")); - assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/owner/VisitController.java").getAbsolutePath(), visitController.getProperties().get("component.src")); + assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/owner/VisitController.java").getAbsolutePath(), visitController.getProperties().get("component.src")); + assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/owner/VisitController.java", visitController.getUrl()); Component ownerRepository = webApplication.getComponentWithName("Owner Repository"); assertNotNull(ownerRepository); assertEquals("org.springframework.samples.petclinic.owner.OwnerRepository", ownerRepository.getProperties().get("component.type")); - assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java").getAbsolutePath(), ownerRepository.getProperties().get("component.src")); + assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java").getAbsolutePath(), ownerRepository.getProperties().get("component.src")); + assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java", ownerRepository.getUrl()); Component vetRepository = webApplication.getComponentWithName("Vet Repository"); assertNotNull(vetRepository); assertEquals("org.springframework.samples.petclinic.vet.VetRepository", vetRepository.getProperties().get("component.type")); - assertEquals(new File(path, "src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java").getAbsolutePath(), vetRepository.getProperties().get("component.src")); + assertEquals(new File(springPetClinicHome, "src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java").getAbsolutePath(), vetRepository.getProperties().get("component.src")); + assertEquals("https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java", vetRepository.getUrl()); assertTrue(welcomeController.getRelationships().isEmpty()); @@ -1197,6 +1205,8 @@ void springPetClinic() throws Exception { assertNotNull(ownerController.getEfferentRelationshipWith(ownerRepository)); assertNotNull(vetController.getEfferentRelationshipWith(vetRepository)); + } else { + System.out.println("Skipping Spring PetClinic example..."); } } diff --git a/structurizr-dsl/src/test/resources/dsl/spring-petclinic.dsl b/structurizr-dsl/src/test/resources/dsl/spring-petclinic.dsl index d1bbc302..279c77f7 100644 --- a/structurizr-dsl/src/test/resources/dsl/spring-petclinic.dsl +++ b/structurizr-dsl/src/test/resources/dsl/spring-petclinic.dsl @@ -1,5 +1,9 @@ workspace "Spring PetClinic" "A C4 model of the Spring PetClinic sample app (https://github.com/spring-projects/spring-petclinic/)" { + // this example requires an environment variable as follows: + // - Name: SPRING_PETCLINIC_HOME + // - Value: the full path to the location of the spring-petclinic example (e.g. /Users/simon/spring-petclinic) + !identifiers hierarchical model { @@ -16,8 +20,8 @@ technology "Java and Spring" !components { - classes "${SPRING_PETCLINIC_DIR}/target/spring-petclinic-3.3.0-SNAPSHOT.jar" - source "${SPRING_PETCLINIC_DIR}/src/main/java" + classes "${SPRING_PETCLINIC_HOME}/target/spring-petclinic-3.3.0-SNAPSHOT.jar" + source "${SPRING_PETCLINIC_HOME}/src/main/java" strategy { matcher annotation "org.springframework.stereotype.Controller" "Spring MVC Controller" filter excludeRegex ".*.CrashController" @@ -28,7 +32,7 @@ } !script groovy { - element.components.each { it.url = it.properties["component.src"].replace(context.dslParser.getConstant("SPRING_PETCLINIC_DIR") + "/src/main/java", "https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java") } + element.components.each { it.url = it.properties["component.src"].replace(System.getenv("SPRING_PETCLINIC_HOME") + "/src/main/java", "https://github.com/spring-projects/spring-petclinic/blob/main/src/main/java") } } !elements "element.parent==webApplication && element.technology==Spring MVC Controller" {