diff --git a/aws-app-sync/pom.xml b/aws-app-sync/pom.xml index 1f915978ab..4c55d38d77 100644 --- a/aws-app-sync/pom.xml +++ b/aws-app-sync/pom.xml @@ -2,19 +2,16 @@ 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.2.6.RELEASE - - - - com.baeldung aws-app-sync - 0.0.1-SNAPSHOT aws-app-sync - Spring Boot using AWS App Sync + + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../parent-boot-2 + 1.8 diff --git a/aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationTests.java b/aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationUnitTest.java similarity index 98% rename from aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationTests.java rename to aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationUnitTest.java index 2338cc29a1..8d83dd5b4b 100644 --- a/aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationTests.java +++ b/aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationUnitTest.java @@ -12,7 +12,7 @@ import static org.junit.jupiter.api.Assertions.*; @SpringBootTest @Disabled -class AwsAppSyncApplicationTests { +class AwsAppSyncApplicationUnitTest { @Test void givenGraphQuery_whenListEvents_thenReturnAllEvents() { diff --git a/mapstruct/pom.xml b/mapstruct/pom.xml index 11c8d9b41e..9fe6ab6485 100644 --- a/mapstruct/pom.xml +++ b/mapstruct/pom.xml @@ -16,7 +16,7 @@ org.mapstruct - mapstruct-jdk8 + mapstruct ${org.mapstruct.version} @@ -71,12 +71,12 @@ - 1.3.0.Final + 1.4.0.Beta1 4.3.4.RELEASE 1.8 1.8 1.18.4 - 3.11.1 + 3.16.1 diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/CompanyDTO.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/CompanyDTO.java new file mode 100644 index 0000000000..de3571e676 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/CompanyDTO.java @@ -0,0 +1,25 @@ +package com.baeldung.mapstruct.mappingCollections.dto; + +import java.util.ArrayList; +import java.util.List; + +public class CompanyDTO { + + private List employees; + + public List getEmployees() { + return employees; + } + + public void setEmployees(List employees) { + this.employees = employees; + } + + public void addEmployee(EmployeeDTO employeeDTO) { + if (employees == null) { + employees = new ArrayList<>(); + } + + employees.add(employeeDTO); + } +} diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeDTO.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeDTO.java new file mode 100644 index 0000000000..04e5a1f180 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeDTO.java @@ -0,0 +1,23 @@ +package com.baeldung.mapstruct.mappingCollections.dto; + +public class EmployeeDTO { + + private String firstName; + private String lastName; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } +} diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeFullNameDTO.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeFullNameDTO.java new file mode 100644 index 0000000000..10b97bfce4 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeFullNameDTO.java @@ -0,0 +1,14 @@ +package com.baeldung.mapstruct.mappingCollections.dto; + +public class EmployeeFullNameDTO { + + private String fullName; + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } +} diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapper.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapper.java new file mode 100644 index 0000000000..5310c0454e --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapper.java @@ -0,0 +1,11 @@ +package com.baeldung.mapstruct.mappingCollections.mapper; + +import com.baeldung.mapstruct.mappingCollections.dto.CompanyDTO; +import com.baeldung.mapstruct.mappingCollections.model.Company; +import org.mapstruct.Mapper; + +@Mapper(uses = EmployeeMapper.class) +public interface CompanyMapper { + + CompanyDTO map(Company company); +} diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferred.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferred.java new file mode 100644 index 0000000000..e5cc43074e --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferred.java @@ -0,0 +1,12 @@ +package com.baeldung.mapstruct.mappingCollections.mapper; + +import com.baeldung.mapstruct.mappingCollections.dto.CompanyDTO; +import com.baeldung.mapstruct.mappingCollections.model.Company; +import org.mapstruct.CollectionMappingStrategy; +import org.mapstruct.Mapper; + +@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) +public interface CompanyMapperAdderPreferred { + + CompanyDTO map(Company company); +} diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapper.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapper.java new file mode 100644 index 0000000000..44d3961f2b --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapper.java @@ -0,0 +1,20 @@ +package com.baeldung.mapstruct.mappingCollections.mapper; + +import com.baeldung.mapstruct.mappingCollections.dto.EmployeeFullNameDTO; +import com.baeldung.mapstruct.mappingCollections.model.Employee; +import org.mapstruct.Mapper; + +import java.util.List; + +@Mapper +public interface EmployeeFullNameMapper { + + List map(List employees); + + default EmployeeFullNameDTO map(Employee employee) { + EmployeeFullNameDTO employeeInfoDTO = new EmployeeFullNameDTO(); + employeeInfoDTO.setFullName(employee.getFirstName() + " " + employee.getLastName()); + + return employeeInfoDTO; + } +} diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapper.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapper.java new file mode 100644 index 0000000000..45bf76c5a4 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapper.java @@ -0,0 +1,19 @@ +package com.baeldung.mapstruct.mappingCollections.mapper; + +import com.baeldung.mapstruct.mappingCollections.dto.EmployeeDTO; +import com.baeldung.mapstruct.mappingCollections.model.Employee; +import org.mapstruct.Mapper; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Mapper +public interface EmployeeMapper { + + List map(List employees); + + Set map(Set employees); + + Map map(Map idEmployeeMap); +} diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Company.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Company.java new file mode 100644 index 0000000000..f96e0b7aea --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Company.java @@ -0,0 +1,16 @@ +package com.baeldung.mapstruct.mappingCollections.model; + +import java.util.List; + +public class Company { + + private List employees; + + public List getEmployees() { + return employees; + } + + public void setEmployees(List employees) { + this.employees = employees; + } +} diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Employee.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Employee.java new file mode 100644 index 0000000000..db6809d53f --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Employee.java @@ -0,0 +1,28 @@ +package com.baeldung.mapstruct.mappingCollections.model; + +public class Employee { + + private String firstName; + private String lastName; + + public Employee(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } +} diff --git a/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferredUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferredUnitTest.java new file mode 100644 index 0000000000..ad0096f189 --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferredUnitTest.java @@ -0,0 +1,32 @@ +package com.baeldung.mapstruct.mappingCollections.mapper; + +import com.baeldung.mapstruct.mappingCollections.dto.CompanyDTO; +import com.baeldung.mapstruct.mappingCollections.dto.EmployeeDTO; +import com.baeldung.mapstruct.mappingCollections.model.Company; +import com.baeldung.mapstruct.mappingCollections.model.Employee; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class CompanyMapperAdderPreferredUnitTest { + + private CompanyMapperAdderPreferred companyMapper = Mappers.getMapper(CompanyMapperAdderPreferred.class); + + @Test + void whenMappingToCompanyDTO_thenExpectCorrectMappingResult() { + Employee employee = new Employee("John", "Doe"); + Company company = new Company(); + company.setEmployees(Collections.singletonList(employee)); + + CompanyDTO result = companyMapper.map(company); + + List employees = result.getEmployees(); + assertThat(employees).hasSize(1); + assertThat(employees.get(0).getFirstName()).isEqualTo("John"); + assertThat(employees.get(0).getLastName()).isEqualTo("Doe"); + } +} \ No newline at end of file diff --git a/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperUnitTest.java new file mode 100644 index 0000000000..a556c88ce5 --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperUnitTest.java @@ -0,0 +1,32 @@ +package com.baeldung.mapstruct.mappingCollections.mapper; + +import com.baeldung.mapstruct.mappingCollections.dto.CompanyDTO; +import com.baeldung.mapstruct.mappingCollections.dto.EmployeeDTO; +import com.baeldung.mapstruct.mappingCollections.model.Company; +import com.baeldung.mapstruct.mappingCollections.model.Employee; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class CompanyMapperUnitTest { + + private CompanyMapper companyMapper = Mappers.getMapper(CompanyMapper.class); + + @Test + void whenMappingToCompanyDTO_thenExpectCorrectMappingResult() { + Employee employee = new Employee("John", "Doe"); + Company company = new Company(); + company.setEmployees(Collections.singletonList(employee)); + + CompanyDTO result = companyMapper.map(company); + + List employees = result.getEmployees(); + assertThat(employees).hasSize(1); + assertThat(employees.get(0).getFirstName()).isEqualTo("John"); + assertThat(employees.get(0).getLastName()).isEqualTo("Doe"); + } +} \ No newline at end of file diff --git a/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapperUnitTest.java new file mode 100644 index 0000000000..ba010a2bca --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapperUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.mapstruct.mappingCollections.mapper; + +import com.baeldung.mapstruct.mappingCollections.dto.EmployeeFullNameDTO; +import com.baeldung.mapstruct.mappingCollections.model.Employee; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class EmployeeFullNameMapperUnitTest { + + private EmployeeFullNameMapper employeeMapper = Mappers.getMapper(EmployeeFullNameMapper.class); + + @Test + void whenMappingToEmployeeFullNameDTOList_thenExpectCorrectMappingResult() { + Employee employee = new Employee("John", "Doe"); + + List result = employeeMapper.map(Collections.singletonList(employee)); + + assertThat(result).hasSize(1); + assertThat(result.get(0).getFullName()).isEqualTo("John Doe"); + } +} \ No newline at end of file diff --git a/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapperUnitTest.java new file mode 100644 index 0000000000..dfb58252dc --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapperUnitTest.java @@ -0,0 +1,51 @@ +package com.baeldung.mapstruct.mappingCollections.mapper; + +import com.baeldung.mapstruct.mappingCollections.dto.EmployeeDTO; +import com.baeldung.mapstruct.mappingCollections.model.Employee; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +class EmployeeMapperUnitTest { + + private EmployeeMapper employeeMapper = Mappers.getMapper(EmployeeMapper.class); + + @Test + void whenMappingToEmployeeDTOList_thenExpectCorrectMappingResult() { + Employee employee = new Employee("John", "Doe"); + + List result = employeeMapper.map(Collections.singletonList(employee)); + + assertThat(result).hasSize(1); + assertThat(result.get(0).getFirstName()).isEqualTo("John"); + assertThat(result.get(0).getLastName()).isEqualTo("Doe"); + } + + @Test + void whenMappingToEmployeeDTOSet_thenExpectCorrectMappingResult() { + Employee employee = new Employee("John", "Doe"); + + Set result = employeeMapper.map(Collections.singleton(employee)); + + assertThat(result).hasSize(1); + assertThat(result.iterator().next().getFirstName()).isEqualTo("John"); + assertThat(result.iterator().next().getLastName()).isEqualTo("Doe"); + } + + @Test + void whenMappingToEmployeeDTOMap_thenExpectCorrectMappingResult() { + Employee employee = new Employee("John", "Doe"); + + Map result = employeeMapper.map(Collections.singletonMap("1", employee)); + + assertThat(result).hasSize(1); + assertThat(result.get("1").getFirstName()).isEqualTo("John"); + assertThat(result.get("1").getLastName()).isEqualTo("Doe"); + } +} \ No newline at end of file diff --git a/persistence-modules/r2dbc/pom.xml b/persistence-modules/r2dbc/pom.xml index b1de88e9ea..d0f53ba37c 100644 --- a/persistence-modules/r2dbc/pom.xml +++ b/persistence-modules/r2dbc/pom.xml @@ -10,11 +10,11 @@ Sample R2DBC Project - org.springframework.boot - spring-boot-starter-parent - 2.1.6.RELEASE - - + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../../parent-boot-2 + diff --git a/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java b/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationIntegrationTest.java similarity index 98% rename from persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java rename to persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationIntegrationTest.java index 3fb9e24a8e..7c3badc976 100644 --- a/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java +++ b/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationIntegrationTest.java @@ -19,7 +19,7 @@ import reactor.core.publisher.Flux; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class R2dbcExampleApplicationTests { +public class R2dbcExampleApplicationIntegrationTest { @Autowired diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/factory/YamlPropertySourceFactory.java b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/factory/YamlPropertySourceFactory.java deleted file mode 100644 index e46f7c9cba..0000000000 --- a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/factory/YamlPropertySourceFactory.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.properties.yamlmap.factory; - -import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; -import org.springframework.core.env.PropertiesPropertySource; -import org.springframework.core.env.PropertySource; -import org.springframework.core.io.support.EncodedResource; -import org.springframework.core.io.support.PropertySourceFactory; - -import java.io.IOException; -import java.util.Properties; - -public class YamlPropertySourceFactory implements PropertySourceFactory { - - @Override - public PropertySource createPropertySource(String name, EncodedResource encodedResource) throws IOException { - YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean(); - factory.setResources(encodedResource.getResource()); - - Properties properties = factory.getObject(); - - return new PropertiesPropertySource(encodedResource.getResource() - .getFilename(), properties); - } - -} diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/pojo/ServerProperties.java b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/pojo/ServerProperties.java index 38b44fddc7..9d54daf070 100644 --- a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/pojo/ServerProperties.java +++ b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/pojo/ServerProperties.java @@ -4,13 +4,9 @@ import java.util.List; import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; -import com.baeldung.properties.yamlmap.factory.YamlPropertySourceFactory; - @Component -@PropertySource(value = "classpath:server.yml", factory = YamlPropertySourceFactory.class) @ConfigurationProperties(prefix = "server") public class ServerProperties { diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/resources/server.yml b/spring-boot-modules/spring-boot-properties-2/src/main/resources/application.yml similarity index 100% rename from spring-boot-modules/spring-boot-properties-2/src/main/resources/server.yml rename to spring-boot-modules/spring-boot-properties-2/src/main/resources/application.yml diff --git a/spring-cloud/spring-cloud-circuit-breaker/pom.xml b/spring-cloud/spring-cloud-circuit-breaker/pom.xml index a179f3c831..ae44fa8199 100644 --- a/spring-cloud/spring-cloud-circuit-breaker/pom.xml +++ b/spring-cloud/spring-cloud-circuit-breaker/pom.xml @@ -16,14 +16,14 @@ - spring-snapshots - Spring Snapshots - https://repo.spring.io/libs-snapshot + spring-release + Spring Release + https://repo.spring.io/release - true + false - false + true diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml index 3a4cf6c56e..669499efb7 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml @@ -8,9 +8,10 @@ Simple Spring Cloud Stream - org.springframework.boot - spring-boot-starter-parent - 2.1.5.RELEASE + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../../../parent-boot-2 diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml index 3817f2747a..bb515fcb36 100644 --- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml @@ -7,10 +7,10 @@ spring-cloud-stream-kinesis - org.springframework.boot - spring-boot-starter-parent - 2.1.8.RELEASE - + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../../../parent-boot-2 diff --git a/structurizr/pom.xml b/structurizr/pom.xml index f1b4355dcf..b8efba0937 100644 --- a/structurizr/pom.xml +++ b/structurizr/pom.xml @@ -42,7 +42,7 @@ 1.8 1.8 - 1.0.0-RC5 + 1.0.0 \ No newline at end of file diff --git a/structurizr/src/main/java/com/baeldung/structurizr/StructurizrSimple.java b/structurizr/src/main/java/com/baeldung/structurizr/StructurizrSimple.java index b33a1d9a77..3f52ea657f 100644 --- a/structurizr/src/main/java/com/baeldung/structurizr/StructurizrSimple.java +++ b/structurizr/src/main/java/com/baeldung/structurizr/StructurizrSimple.java @@ -2,6 +2,8 @@ package com.baeldung.structurizr; import java.io.File; import java.io.StringWriter; +import java.util.HashSet; +import java.util.Set; import com.structurizr.Workspace; import com.structurizr.analysis.ComponentFinder; @@ -40,15 +42,31 @@ public class StructurizrSimple { addContainers(workspace); addComponents(workspace); addSpringComponents(workspace); - exportToPlantUml(workspace.getViews().getViewWithKey(SOFTWARE_SYSTEM_VIEW)); - exportToPlantUml(workspace.getViews().getViewWithKey(CONTAINER_VIEW)); - exportToPlantUml(workspace.getViews().getViewWithKey(COMPONENT_VIEW)); + exportToPlantUml(findViewWithKey(workspace.getViews(), SOFTWARE_SYSTEM_VIEW)); + exportToPlantUml(findViewWithKey(workspace.getViews(), CONTAINER_VIEW)); + exportToPlantUml(findViewWithKey(workspace.getViews(), COMPONENT_VIEW)); - exportToPlantUml(workspace.getViews().getViewWithKey(JVM2_COMPONENT_VIEW)); + exportToPlantUml(findViewWithKey(workspace.getViews(), JVM2_COMPONENT_VIEW)); addStyles(workspace.getViews()); //uploadToExternal(workspace); } + + private static View findViewWithKey(ViewSet viewSet, String key) { + if (key == null) { + throw new IllegalArgumentException("A key must be specified."); + } + + Set views = new HashSet<>(); + views.addAll(viewSet.getSystemLandscapeViews()); + views.addAll(viewSet.getSystemContextViews()); + views.addAll(viewSet.getContainerViews()); + views.addAll(viewSet.getComponentViews()); + views.addAll(viewSet.getDynamicViews()); + views.addAll(viewSet.getDeploymentViews()); + + return views.stream().filter(v -> key.equals(v.getKey())).findFirst().orElse(null); + } private static void addSpringComponents(Workspace workspace) throws Exception { Container jvm2 = workspace.getModel().getSoftwareSystemWithName(PAYMENT_TERMINAL).getContainerWithName("JVM-2");