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

OZG-3550 OZG-3713 map labels to grpc

parent 8f41a4df
Branches
Tags
No related merge requests found
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<version>1.9.0-SNAPSHOT</version> <version>1.9.0-SNAPSHOT</version>
<properties> <properties>
<pluto.version>1.8.0-SNAPSHOT</pluto.version> <pluto.version>1.9.0-SNAPSHOT</pluto.version>
<maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version> <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
<maven-jar-plugin.version>3.2.2</maven-jar-plugin.version> <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
...@@ -100,6 +100,12 @@ ...@@ -100,6 +100,12 @@
<artifactId>assertj-core</artifactId> <artifactId>assertj-core</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- commons -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -30,7 +30,9 @@ import java.util.List; ...@@ -30,7 +30,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.CollectionMappingStrategy;
...@@ -53,6 +55,9 @@ public interface GrpcFormDataMapper { ...@@ -53,6 +55,9 @@ public interface GrpcFormDataMapper {
String VALUE_KEY = "value"; String VALUE_KEY = "value";
String LABEL_KEY = "label"; String LABEL_KEY = "label";
String CONTROL_DATA_KEY = "_kopControlData";
String LABELS_KEY = "labels";
default GrpcFormData mapToFormData(Map<String, Object> formData) { default GrpcFormData mapToFormData(Map<String, Object> formData) {
return GrpcFormData.newBuilder() return GrpcFormData.newBuilder()
.addAllField(mapToAllFields(formData)) .addAllField(mapToAllFields(formData))
...@@ -63,10 +68,18 @@ public interface GrpcFormDataMapper { ...@@ -63,10 +68,18 @@ public interface GrpcFormDataMapper {
default List<GrpcFormField> mapToAllFields(Map<String, Object> formData) { default List<GrpcFormField> mapToAllFields(Map<String, Object> formData) {
return formData.entrySet().stream().filter(entry -> entry.getValue() instanceof String)// return formData.entrySet().stream().filter(entry -> entry.getValue() instanceof String)//
.map(entry -> mapToField(entry.getKey(), entry.getValue().toString()))// .map(entry -> mapToField(entry.getKey(), entry.getValue().toString(), getFieldLabel(formData, entry.getKey())))//
.toList(); .toList();
} }
default Optional<String> getFieldLabel(Map<String, Object> formData, String key) {
return getControlData(formData)
.map(controlData -> controlData.get(LABELS_KEY))
.map(Map.class::cast)
.map(labelsmap -> labelsmap.get(key))
.map(String.class::cast);
}
default List<GrpcFormField> mapStringListsToFields(Map<String, Object> formData) { default List<GrpcFormField> mapStringListsToFields(Map<String, Object> formData) {
return formData.entrySet().stream() return formData.entrySet().stream()
.filter(entry -> entry.getValue() instanceof List) .filter(entry -> entry.getValue() instanceof List)
...@@ -80,7 +93,7 @@ public interface GrpcFormDataMapper { ...@@ -80,7 +93,7 @@ public interface GrpcFormDataMapper {
return ((List<Object>) entry.getValue()).stream() return ((List<Object>) entry.getValue()).stream()
.filter(String.class::isInstance) .filter(String.class::isInstance)
.map(String.class::cast) .map(String.class::cast)
.map(e -> mapToField(entry.getKey(), e)) .map(e -> mapToField(entry.getKey(), e, Optional.empty()))
.toList(); .toList();
} }
...@@ -109,16 +122,32 @@ public interface GrpcFormDataMapper { ...@@ -109,16 +122,32 @@ public interface GrpcFormDataMapper {
.toList(); .toList();
} }
default Optional<String> getSubFormLabel(Map<String, Object> map) {
return getControlData(map).map(controlData -> controlData.get(LABEL_KEY)).map(Object::toString);
}
default GrpcSubForm buildSubForm(String name, Map<String, Object> map) { default GrpcSubForm buildSubForm(String name, Map<String, Object> map) {
return GrpcSubForm.newBuilder().setTitle(name) var subFormBuilder = GrpcSubForm.newBuilder();
getLabel(map).ifPresent(subFormBuilder::setLabel);
return subFormBuilder.setTitle(name)
.addAllField(mapToAllFields(map)) .addAllField(mapToAllFields(map))
.addAllSubForm(mapToSubForms(map)) .addAllSubForm(mapToSubForms(map))
.addAllField(mapStringListsToFields(map)) .addAllField(mapStringListsToFields(map))
.addAllSubForm(mapObjectListsToFields(map)).build(); .addAllSubForm(mapObjectListsToFields(map)).build();
} }
default GrpcFormField mapToField(String name, String value) { default Optional<String> getLabel(Map<String, Object> map) {
return GrpcFormField.newBuilder().setName(name).setValue(value).build(); return getControlData(map).map(controlData -> controlData.get(LABEL_KEY)).map(Object::toString);
}
default Optional<Map<String, Object>> getControlData(Map<String, Object> formData) {
return Optional.ofNullable(MapUtils.getMap(formData, CONTROL_DATA_KEY)).map(Map.class::cast);
}
default GrpcFormField mapToField(String name, String value, Optional<String> label) {
var formFieldBuilder = GrpcFormField.newBuilder().setName(name).setValue(value);
label.ifPresent(formFieldBuilder::setLabel);
return formFieldBuilder.build();
} }
default Map<String, Object> mapFromFormData(GrpcFormData formData) { default Map<String, Object> mapFromFormData(GrpcFormData formData) {
......
...@@ -30,6 +30,7 @@ import java.util.HashMap; ...@@ -30,6 +30,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -103,10 +104,67 @@ class GrpcFormDataMapperTest { ...@@ -103,10 +104,67 @@ class GrpcFormDataMapperTest {
} }
} }
@DisplayName("Mapped SubFormField") @DisplayName("buildSubForm")
@Nested
class TestBuildSubFormWithLabel {
@DisplayName("with label")
@Nested
class TestWithLabel {
public static final String NODE_ATTRIBUTES = "nodeAttributes";
public static final String NODE_ATTRIBUTES_LABEL = "nodeAttributesLabel";
public static final String SUB_KEY = "subKey";
public static final String SUB_VALUE = "subValue";
private final Map<String, Object> map = Map.of(
SUB_KEY, SUB_VALUE,
GrpcFormDataMapper.CONTROL_DATA_KEY, Map.of(
GrpcFormDataMapper.LABEL_KEY, NODE_ATTRIBUTES_LABEL));
@Test
void shouldContainField() {
var mapped = mapper.buildSubForm(NODE_ATTRIBUTES, map);
assertThat(mapped.getLabel()).isEqualTo(NODE_ATTRIBUTES_LABEL);
}
}
}
@DisplayName("Map to all fields")
@Nested
class TestMapToField {
@DisplayName("with label")
@Nested
class TestWithLabel {
public static final String KEY = "subKey";
public static final String VALUE = "subValue";
public static final String LABEL = "NewSubKeyLabel";
private final Map<String, Object> map = Map.of(KEY, VALUE,
GrpcFormDataMapper.CONTROL_DATA_KEY, Map.of(
GrpcFormDataMapper.LABELS_KEY, Map.of(KEY, LABEL)));
@Test
void shouldHaveSetLabel() {
var mapped = mapper.mapToAllFields(map);
assertThat(mapped.get(0).getLabel()).isEqualTo(LABEL);
}
}
}
@DisplayName("Mapped SubForm")
@Nested @Nested
class TestSubFormFieldMapping { class TestSubFormFieldMapping {
@DisplayName("field")
@Nested
class TestField {
private final GrpcSubForm subForm = GrpcSubFormTestFactory.create(); private final GrpcSubForm subForm = GrpcSubFormTestFactory.create();
@Test @Test
...@@ -122,6 +180,42 @@ class GrpcFormDataMapperTest { ...@@ -122,6 +180,42 @@ class GrpcFormDataMapperTest {
assertThat(mapped).containsEntry(GrpcSubFormTestFactory.FIELD_NAME, GrpcSubFormTestFactory.FIELD_VALUE); assertThat(mapped).containsEntry(GrpcSubFormTestFactory.FIELD_NAME, GrpcSubFormTestFactory.FIELD_VALUE);
} }
}
@DisplayName("field with label")
@Nested
class TestFieldWithLabel {
private final GrpcSubForm subForm = GrpcSubFormTestFactory.createWithLabels();
@Test
void shouldContainField() {
var mapped = mapper.mapSubFormFields(subForm.getFieldList());
assertThat(mapped).containsKey(GrpcSubFormTestFactory.FIELD_NAME);
}
@Test
void shouldContainValue() {
var mapped = mapper.mapSubFormFields(subForm.getFieldList());
assertThat(getMapFromMap(mapped, GrpcSubFormTestFactory.FIELD_NAME)).containsEntry("value", GrpcSubFormTestFactory.FIELD_VALUE);
}
@Test
void shouldHaveLabel() {
var mapped = mapper.mapSubFormFields(subForm.getFieldList());
assertThat(getMapFromMap(mapped, GrpcSubFormTestFactory.FIELD_NAME)).containsEntry("label",
GrpcSubFormTestFactory.FIELD_LABEL);
}
}
@SuppressWarnings("unchecked")
private Map<String, Object> getMapFromMap(Map<String, Object> map, String key) {
return MapUtils.getMap(map, key);
}
}
@Nested @Nested
class TestCombiner { class TestCombiner {
...@@ -205,7 +299,6 @@ class GrpcFormDataMapperTest { ...@@ -205,7 +299,6 @@ class GrpcFormDataMapperTest {
assertThat(combined).containsEntry("TEST", List.of("VALUE1", "VALUE2", "VALUE3", "VALUE4")); assertThat(combined).containsEntry("TEST", List.of("VALUE1", "VALUE2", "VALUE3", "VALUE4"));
} }
} }
}
@Nested @Nested
class TestMapStringListsToFields { class TestMapStringListsToFields {
...@@ -320,178 +413,37 @@ class GrpcFormDataMapperTest { ...@@ -320,178 +413,37 @@ class GrpcFormDataMapperTest {
} }
} }
@DisplayName("Map with existing labels") @DisplayName("Map formData")
@Nested
class TestMapWithExistingLabels {
private static final String FIELD_LABEL = "Alternative field label";
private final GrpcFormData formData = GrpcFormDataTestFactory.createBuilder()
.clearField().addField(GrpcFormFieldTestFactory.createBuilder().setLabel(FIELD_LABEL))
.addForm(GrpcSubFormTestFactory.createWithLabelsBuilder())
.build();
@DisplayName("field")
@Nested
class TestField {
@Test
void shouldHaveSize() {
var mappedFormData = mapFromFormData();
var fieldMap = getValueAsMap(mappedFormData, GrpcFormFieldTestFactory.NAME);
assertThat(fieldMap).hasSize(2);
}
@Test
void shouldContainsValue() {
var mappedFormData = mapFromFormData();
var fieldMap = getValueAsMap(mappedFormData, GrpcFormFieldTestFactory.NAME);
assertThat(fieldMap).containsEntry(GrpcFormDataMapper.VALUE_KEY, GrpcFormFieldTestFactory.VALUE);
}
@Test
void shouldContainsLabel() {
var mappedFormData = mapFromFormData();
var fieldMap = getValueAsMap(mappedFormData, GrpcFormFieldTestFactory.NAME);
assertThat(fieldMap).containsEntry(GrpcFormDataMapper.LABEL_KEY, FIELD_LABEL);
}
}
@DisplayName("form")
@Nested
class TestForm {
@Test
void shouldMapAsValueLabelMap() {
var mappedFormData = mapFromFormData();
var subFormMap = getValueAsMap(mappedFormData, GrpcSubFormTestFactory.TITLE);
assertThat(subFormMap).hasSize(2)
.containsKey(GrpcFormDataMapper.VALUE_KEY)
.containsEntry(GrpcFormDataMapper.LABEL_KEY, GrpcSubFormTestFactory.LABEL);
}
@Test
void shouldContainsMapOfFieldsAndSubForms() {
var mappedFormData = mapFromFormData();
assertThat(getFormValueMap(mappedFormData)).hasSize(2).containsKeys(GrpcSubFormTestFactory.FIELD_NAME,
GrpcSubFormTestFactory.SUBFORM_TITLE);
}
private Map<String, Object> getFormValueMap(Map<String, Object> formData) {
var formMap = getValueAsMap(formData, GrpcSubFormTestFactory.TITLE);
return getValueAsMap(formMap, GrpcFormDataMapper.VALUE_KEY);
}
@DisplayName("field")
@Nested @Nested
class TestField { class TestMapFormData {
@Test
void shouldHaveSize() {
var mappedFormData = mapFromFormData();
assertThat(getFormValueFieldMap(mappedFormData)).hasSize(2);
}
@Test
void shouldContainsValue() {
var mappedFormData = mapFromFormData();
assertThat(getFormValueFieldMap(mappedFormData)).containsEntry(GrpcFormDataMapper.VALUE_KEY,
GrpcSubFormTestFactory.FIELD_VALUE);
}
@Test @DisplayName("with subForm")
void shouldContainsLabel() {
var mappedFormData = mapFromFormData();
assertThat(getFormValueFieldMap(mappedFormData)).containsEntry(GrpcFormDataMapper.LABEL_KEY,
GrpcSubFormTestFactory.FIELD_LABEL);
}
private Map<String, Object> getFormValueFieldMap(Map<String, Object> formData) {
return getValueAsMap(getFormValueMap(formData), GrpcSubFormTestFactory.FIELD_NAME);
}
}
@DisplayName("subForm")
@Nested @Nested
class TestSubForm { class TestSubForm {
@Test @DisplayName("contains label")
void shouldHaveSize() {
var mappedFormData = mapFromFormData();
assertThat(getFormValueSubFormMap(mappedFormData)).hasSize(2);
}
@Test
void shouldContainsValue() {
var mappedFormData = mapFromFormData();
assertThat(getFormValueSubFormMap(mappedFormData)).containsKey(GrpcFormDataMapper.VALUE_KEY);
}
@Test
void shouldContainsLabel() {
var mappedFormData = mapFromFormData();
assertThat(getFormValueSubFormMap(mappedFormData)).containsEntry(GrpcFormDataMapper.LABEL_KEY,
GrpcSubFormTestFactory.SUBFORM_LABEL);
}
private Map<String, Object> getFormValueSubFormMap(Map<String, Object> formData) {
return getValueAsMap(getFormValueMap(formData), GrpcSubFormTestFactory.SUBFORM_TITLE);
}
@DisplayName("field")
@Nested @Nested
class TestSubFormField { class TestContainsLabel {
@Test @Test
void shouldHaveSize() { void shouldHaveSetValue() {
var mappedFormData = mapFromFormData(); var mappedData = mapper.mapFormData(GrpcSubFormTestFactory.createWithLabels().getSubFormList());
assertThat(getFormFieldSubFormMap(mappedFormData)).hasSize(2); assertThat(getSubForm(mappedData)).containsKeys(GrpcFormDataMapper.VALUE_KEY, GrpcFormDataMapper.VALUE_KEY);
} }
@Test @Test
void shouldContainsValue() { void shouldHaveSetLabel() {
var mappedFormData = mapFromFormData(); var mappedData = mapper.mapFormData(GrpcSubFormTestFactory.createWithLabels().getSubFormList());
assertThat(getFormFieldSubFormMap(mappedFormData)) assertThat(getSubForm(mappedData)).containsEntry(GrpcFormDataMapper.LABEL_KEY, GrpcSubFormTestFactory.SUBFORM_LABEL);
.containsEntry(GrpcFormDataMapper.VALUE_KEY, GrpcSubFormTestFactory.SUBFORM_FIELD_VALUE);
} }
@Test @SuppressWarnings("unchecked")
void shouldContainsLabel() { private Map<String, Object> getSubForm(Map<String, Object> map) {
var mappedFormData = mapFromFormData(); return MapUtils.getMap(map, GrpcSubFormTestFactory.SUBFORM_TITLE);
assertThat(getFormFieldSubFormMap(mappedFormData))
.containsEntry(GrpcFormDataMapper.LABEL_KEY, GrpcSubFormTestFactory.SUBFORM_FIELD_LABEL);
}
private Map<String, Object> getFormFieldSubFormMap(Map<String, Object> formData) {
var subFormFieldMap = getValueAsMap(getFormValueMap(formData), GrpcSubFormTestFactory.SUBFORM_TITLE);
var subFormFieldValueMap = getValueAsMap(subFormFieldMap, GrpcFormDataMapper.VALUE_KEY);
return getValueAsMap(subFormFieldValueMap, GrpcSubFormTestFactory.SUBFORM_FIELD_NAME);
}
}
}
} }
private Map<String, Object> mapFromFormData() {
return mapper.mapFromFormData(formData);
} }
@SuppressWarnings("unchecked")
private Map<String, Object> getValueAsMap(Map<String, Object> map, String key) {
return (Map<String, Object>) map.get(key);
} }
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment