Skip to content
Snippets Groups Projects
Commit 08b7edbf authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'handle null values' (#15) from fix-npe into master

parents 5f8e14d4 4560035c
No related branches found
No related tags found
No related merge requests found
...@@ -2,16 +2,21 @@ package de.ozgcloud.collaboration.vorgang; ...@@ -2,16 +2,21 @@ package de.ozgcloud.collaboration.vorgang;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.NullValueCheckStrategy;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller; import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller;
import de.ozgcloud.collaboration.GrpcAntragsteller; import de.ozgcloud.collaboration.GrpcAntragsteller;
@Mapper(uses = { CollaborationFormDataMapper.class }, unmappedTargetPolicy = ReportingPolicy.WARN) @Mapper(uses = { CollaborationFormDataMapper.class },
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
unmappedTargetPolicy = ReportingPolicy.WARN)
interface CollaborationAntragstellerMapper { interface CollaborationAntragstellerMapper {
Antragsteller fromOzgCloudAntragsteller(OzgCloudAntragsteller antragsteller); Antragsteller fromOzgCloudAntragsteller(OzgCloudAntragsteller antragsteller);
@Mapping(target = "otherDataOrBuilder", ignore = true)
@Mapping(target = "defaultInstanceForType", ignore = true)
@Mapping(target = "mergeFrom", ignore = true) @Mapping(target = "mergeFrom", ignore = true)
@Mapping(target = "clearField", ignore = true) @Mapping(target = "clearField", ignore = true)
@Mapping(target = "clearOneof", ignore = true) @Mapping(target = "clearOneof", ignore = true)
......
package de.ozgcloud.collaboration.vorgang; package de.ozgcloud.collaboration.vorgang;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.apache.commons.collections.CollectionUtils;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.Named; import org.mapstruct.Named;
import org.mapstruct.NullValueCheckStrategy;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import de.ozgcloud.apilib.vorgang.OzgCloudFormDataEntry; import de.ozgcloud.apilib.vorgang.OzgCloudFormDataEntry;
...@@ -16,22 +20,27 @@ import de.ozgcloud.collaboration.GrpcFormField; ...@@ -16,22 +20,27 @@ import de.ozgcloud.collaboration.GrpcFormField;
import de.ozgcloud.collaboration.GrpcSubForm; import de.ozgcloud.collaboration.GrpcSubForm;
import de.ozgcloud.collaboration.GrpcSubFormData; import de.ozgcloud.collaboration.GrpcSubFormData;
@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) @Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
public interface CollaborationFormDataMapper { public interface CollaborationFormDataMapper {
default List<FormDataEntry> fromOzgCloudEntries(List<OzgCloudFormDataEntry> entries) { default List<FormDataEntry> fromOzgCloudEntries(List<OzgCloudFormDataEntry> entries) {
if (CollectionUtils.isEmpty(entries)) {
return Collections.emptyList();
}
return Stream.concat(fromOzgCloudFormFields(entries), fromOzgCloudSubForms(entries)).toList(); return Stream.concat(fromOzgCloudFormFields(entries), fromOzgCloudSubForms(entries)).toList();
} }
default Stream<FormDataEntry> fromOzgCloudFormFields(List<OzgCloudFormDataEntry> entries) { default Stream<FormDataEntry> fromOzgCloudFormFields(List<OzgCloudFormDataEntry> entries) {
return entries.stream() return Optional.ofNullable(entries).stream()
.flatMap(List::stream)
.filter(OzgCloudFormDataEntry::isFormEntry) .filter(OzgCloudFormDataEntry::isFormEntry)
.map(OzgCloudFormField.class::cast) .map(OzgCloudFormField.class::cast)
.map(this::fromOzgCloudFormField); .map(this::fromOzgCloudFormField);
} }
default Stream<FormDataEntry> fromOzgCloudSubForms(List<OzgCloudFormDataEntry> entries) { default Stream<FormDataEntry> fromOzgCloudSubForms(List<OzgCloudFormDataEntry> entries) {
return entries.stream() return Optional.ofNullable(entries).stream()
.flatMap(List::stream)
.filter(OzgCloudFormDataEntry::isSubForm) .filter(OzgCloudFormDataEntry::isSubForm)
.map(OzgCloudSubForm.class::cast) .map(OzgCloudSubForm.class::cast)
.map(this::fromOzgCloudSubForm); .map(this::fromOzgCloudSubForm);
...@@ -63,16 +72,18 @@ public interface CollaborationFormDataMapper { ...@@ -63,16 +72,18 @@ public interface CollaborationFormDataMapper {
.build(); .build();
} }
default Stream<GrpcSubFormData> fromFormField(List<FormDataEntry> entry) { default Stream<GrpcSubFormData> fromFormField(List<FormDataEntry> entries) {
return entry.stream() return Optional.ofNullable(entries).stream()
.flatMap(List::stream)
.filter(FormDataEntry::isFormEntry) .filter(FormDataEntry::isFormEntry)
.map(FormField.class::cast) .map(FormField.class::cast)
.map(this::toGrpcFormField) .map(this::toGrpcFormField)
.map(formField -> GrpcSubFormData.newBuilder().setField(formField).build()); .map(formField -> GrpcSubFormData.newBuilder().setField(formField).build());
} }
default Stream<GrpcSubFormData> fromSubForm(List<FormDataEntry> entry) { default Stream<GrpcSubFormData> fromSubForm(List<FormDataEntry> entries) {
return entry.stream() return Optional.ofNullable(entries).stream()
.flatMap(List::stream)
.filter(FormDataEntry::isSubForm) .filter(FormDataEntry::isSubForm)
.map(SubForm.class::cast) .map(SubForm.class::cast)
.map(this::toGrpcSubForm) .map(this::toGrpcSubForm)
......
...@@ -40,18 +40,22 @@ class CollaborationFormDataMapperTest { ...@@ -40,18 +40,22 @@ class CollaborationFormDataMapperTest {
private final FormField formField = FormDataEntryTestFactory.createFormField(); private final FormField formField = FormDataEntryTestFactory.createFormField();
private final SubForm subForm = FormDataEntryTestFactory.createSubForm(); private final SubForm subForm = FormDataEntryTestFactory.createSubForm();
@BeforeEach @Test
void mock() { void shouldMap() {
doReturn(formField).when(mapper).fromOzgCloudFormField(any()); doReturn(formField).when(mapper).fromOzgCloudFormField(any());
doReturn(subForm).when(mapper).fromOzgCloudSubForm(any()); doReturn(subForm).when(mapper).fromOzgCloudSubForm(any());
}
@Test
void shouldMap() {
var entries = mapper.fromOzgCloudEntries(ozgCloudEntries); var entries = mapper.fromOzgCloudEntries(ozgCloudEntries);
assertThat(entries).containsExactly(formField, subForm); assertThat(entries).containsExactly(formField, subForm);
} }
@Test
void shouldHandleNullValue() {
var entries = mapper.fromOzgCloudEntries(null);
assertThat(entries).isEmpty();
}
} }
@DisplayName("From ozgCloudSubForm") @DisplayName("From ozgCloudSubForm")
...@@ -96,7 +100,7 @@ class CollaborationFormDataMapperTest { ...@@ -96,7 +100,7 @@ class CollaborationFormDataMapperTest {
private final FormField formField = FormDataEntryTestFactory.createFormField(); private final FormField formField = FormDataEntryTestFactory.createFormField();
private final SubForm subForm = FormDataEntryTestFactory.createSubForm(); private final SubForm subForm = FormDataEntryTestFactory.createSubForm();
private List<FormDataEntry> entries = List.of(formField, subForm); private final List<FormDataEntry> entries = List.of(formField, subForm);
private final GrpcFormField grpcFormField = GrpcFormDataTestFactory.createFormField(); private final GrpcFormField grpcFormField = GrpcFormDataTestFactory.createFormField();
private final GrpcSubForm grpcSubForm = GrpcFormDataTestFactory.createSubForm(); private final GrpcSubForm grpcSubForm = GrpcFormDataTestFactory.createSubForm();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment