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

Merge branch 'master' of git.ozg-sh.de:mgm/goofy

parents bf51becd 297cbcef
No related branches found
No related tags found
No related merge requests found
......@@ -3,7 +3,9 @@ package de.itvsh.goofy.common.command;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.apache.commons.beanutils.BeanMap;
......@@ -16,10 +18,20 @@ import de.itvsh.ozg.pluto.grpc.command.GrpcCommandBodyField;
@Mapper
public interface CommandBodyMapper {
final Predicate<Entry<Object, Object>> HAS_NOT_NULL_VALUE = entry -> Objects.nonNull(entry.getValue());
final Predicate<Entry<Object, Object>> IS_NOT_CLASS_VALUE = entry -> !StringUtils.equals("class", entry.getKey().toString());
static final String VORGANG_ID_PROPERTY = "vorgangId";
static final String ITEM_NAME_PROPERTY = "itemName";
static final String ITEM_PROPERTY = "item";
default Map<String, Object> fromObjectToMap(Object object) {
return new BeanMap(object).entrySet().stream()
.filter(HAS_NOT_NULL_VALUE)
.filter(IS_NOT_CLASS_VALUE)
.collect(Collectors.toMap(entry -> entry.getKey().toString(), Entry::getValue));
}
default GrpcCommandBody mapToBody(Map<String, String> bodyMap) {
if (Objects.isNull(bodyMap)) {
return GrpcCommandBody.getDefaultInstance();
......@@ -49,8 +61,8 @@ public interface CommandBodyMapper {
}
return bodyMap.entrySet().stream()
.filter(entry -> Objects.nonNull(entry.getValue()))
.filter(entry -> !StringUtils.equals(entry.getKey().toString(), "class"))
.filter(HAS_NOT_NULL_VALUE)
.filter(IS_NOT_CLASS_VALUE)
.map(entry -> GrpcCommandBodyField.newBuilder().setName(entry.getKey().toString()).setValue(entry.getValue().toString()).build())
.collect(Collectors.toList());
}
......
package de.itvsh.goofy.common.command;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.beanutils.BeanMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -26,6 +21,8 @@ import net.devh.boot.grpc.client.inject.GrpcClient;
@Service
public class CommandRemoteService {
@GrpcClient("pluto")
private CommandServiceBlockingStub commandServiceStub;
@Autowired
private ContextService contextService;
@Autowired
......@@ -35,9 +32,6 @@ public class CommandRemoteService {
@Autowired
private GrpcObjectMapper objectMapper;
@GrpcClient("pluto")
private CommandServiceBlockingStub commandServiceStub;
public Command createCommand(CreateCommand command, long version) {
return doCreateCommand(buildCreateCommandRequest(command, version));
}
......@@ -59,7 +53,7 @@ public class CommandRemoteService {
.setRelationId(command.getRelationId())
.setRelationVersion(version)
.addAllBody(bodyMapper.mapToBodyFields(command.getBody()))
.setBodyObj(objectMapper.fromMap(getBodyAsMap(command.getBody())))
.setBodyObj(objectMapper.fromMap(bodyMapper.fromObjectToMap(command.getBody())))
.setOrderString(command.getOrder().name());
Optional.ofNullable(command.getRedirectRequest()).map(mapper::toGrpcRedirectRequest).ifPresent(requestBuilder::setRedirectRequest);
......@@ -67,16 +61,6 @@ public class CommandRemoteService {
return requestBuilder.build();
}
Map<String, Object> getBodyAsMap(CommandBody commandBody) {
return new BeanMap(commandBody).entrySet().stream()
.filter(this::isValidEntry)
.collect(Collectors.toMap(entry -> entry.getKey().toString(), Entry::getValue));
}
boolean isValidEntry(Entry<Object, Object> entry) {
return Objects.nonNull(entry.getKey()) && Objects.nonNull(entry.getValue());
}
GrpcCreateCommandRequest buildCreateAttachedItemCommandRequest(CreateCommand command, String itemName) {
return GrpcCreateCommandRequest.newBuilder()
.setCallContext(contextService.createCallContext())
......
package de.itvsh.goofy.common.command;
import static org.assertj.core.api.Assertions.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
......@@ -14,6 +13,8 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Spy;
import static org.assertj.core.api.Assertions.*;
import de.itvsh.goofy.common.binaryfile.BinaryFileTestFactory;
import de.itvsh.goofy.postfach.PostfachMailTestFactory;
import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory;
......@@ -29,6 +30,48 @@ class CommandBodyMapperTest {
@Spy
private CommandBodyMapper mapper = Mappers.getMapper(CommandBodyMapper.class);
@DisplayName("Map from object to map")
@Nested
class TestFromObjectToMap {
@Test
void shouldMapAllFieldsExceptClass() {
var commandAsObject = CommandTestFactory.create();
var mappedMap = mapper.fromObjectToMap(commandAsObject);
assertThat(mappedMap).hasSize(5).doesNotContainKey("class");
}
@Test
void shouldNotMapNullValue() {
var commandAsObject = CommandTestFactory.createBuilder().status(null).build();
var mappedMap = mapper.fromObjectToMap(commandAsObject);
assertThat(mappedMap)
.hasSize(4)
.doesNotContainKey("status")
.containsEntry("order", CommandTestFactory.ORDER)
.containsEntry("relationId", CommandTestFactory.RELATION_ID)
.containsEntry("vorgangId", CommandTestFactory.VORGANG_ID);
}
@Test
void shouldMapAllValues() {
var commandAsObject = CommandTestFactory.create();
var mappedMap = mapper.fromObjectToMap(commandAsObject);
assertThat(mappedMap)
.hasSize(5)
.containsEntry("status", CommandTestFactory.STATUS)
.containsEntry("order", CommandTestFactory.ORDER)
.containsEntry("relationId", CommandTestFactory.RELATION_ID)
.containsEntry("vorgangId", CommandTestFactory.VORGANG_ID);
}
}
@Nested
class TestMapToBody {
@Test
......
......@@ -4,9 +4,7 @@ import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
......@@ -27,7 +25,6 @@ import org.mockito.Spy;
import static org.assertj.core.api.Assertions.*;
import de.itvsh.goofy.common.callcontext.ContextService;
import de.itvsh.goofy.postfach.PostfachMailTestFactory;
import de.itvsh.goofy.vorgang.RedirectRequestTestFactory;
import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory;
import de.itvsh.kop.pluto.common.grpc.GrpcObjectMapper;
......@@ -158,7 +155,7 @@ class CommandRemoteServiceTest {
void shouldCallBodyMapper() {
buildRequest();
verify(bodyMapper).mapToBodyFields(any(CommandBody.class));
verify(bodyMapper).fromObjectToMap(any(CommandBody.class));
}
@Test
......@@ -200,51 +197,6 @@ class CommandRemoteServiceTest {
CommandTestFactory.VERSION);
}
}
@DisplayName("Get command body as map")
@Nested
class TestGetBodyAsMap {
@Test
void shouldReturnMap() {
var bodyMap = service.getBodyAsMap(PostfachMailTestFactory.create());
assertThat(bodyMap).containsEntry("postfachId", PostfachMailTestFactory.POSTFACH_ID);
}
@DisplayName("is valid entry")
@Nested
class TestIsValidEntry {
@Test
void shouldReturnFalseOnNullKey() {
var isValidEntry = service.isValidEntry(createEntry(null, "huhu"));
assertThat(isValidEntry).isFalse();
}
@Test
void shouldReturnFalseOnNullValue() {
var isValidEntry = service.isValidEntry(createEntry("huhu", null));
assertThat(isValidEntry).isFalse();
}
@Test
void shouldReturnFaoseOnValidEntry() {
var isValidEntry = service.isValidEntry(createEntry("huhu", "huhu"));
assertThat(isValidEntry).isTrue();
}
private Entry<Object, Object> createEntry(Object key, Object value) {
var map = new HashMap<Object, Object>();
map.put(key, value);
return (Entry<Object, Object>) map.entrySet().toArray()[0];
}
}
}
}
@Nested
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment