refactoring getAttributesKvEntries method

This commit is contained in:
ShvaykaD 2018-12-20 16:48:47 +02:00
parent 44a4e8eee5
commit c2d754f9d8

View File

@ -78,7 +78,6 @@ import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -288,73 +287,36 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
private ListenableFuture<List<List<AttributeKvEntry>>> getAttributesKvEntries(GetAttributeRequestMsg request) { private ListenableFuture<List<List<AttributeKvEntry>>> getAttributesKvEntries(GetAttributeRequestMsg request) {
ListenableFuture<List<AttributeKvEntry>> clientAttributesFuture; ListenableFuture<List<AttributeKvEntry>> clientAttributesFuture;
ListenableFuture<List<AttributeKvEntry>> sharedAttributesFuture; ListenableFuture<List<AttributeKvEntry>> sharedAttributesFuture;
if (!clientIsPresent(request) && !sharedIsPresent(request)) { if (listIsEmpty(request.getClientAttributeNamesList()) && listIsEmpty(request.getSharedAttributeNamesList())) {
clientAttributesFuture = findAllClientAttributes(); clientAttributesFuture = findAllAttributesByScope(CLIENT_SCOPE);
sharedAttributesFuture = findAllSharedAttributes(); sharedAttributesFuture = findAllAttributesByScope(SHARED_SCOPE);
} else if (clientIsPresent(request) && sharedIsPresent(request)) { } else if (!listIsEmpty(request.getClientAttributeNamesList()) && !listIsEmpty(request.getSharedAttributeNamesList())) {
if (clientIsNotEmpty(request) && sharedIsNotEmpty(request)) { clientAttributesFuture = findAttributesByScope(toSet(request.getClientAttributeNamesList()), CLIENT_SCOPE);
clientAttributesFuture = findClientAttributes(request); sharedAttributesFuture = findAttributesByScope(toSet(request.getSharedAttributeNamesList()), SHARED_SCOPE);
sharedAttributesFuture = findSharedAttributes(request); } else if (listIsEmpty(request.getClientAttributeNamesList()) && !listIsEmpty(request.getSharedAttributeNamesList())) {
} else {
clientAttributesFuture = findAllClientAttributes();
sharedAttributesFuture = findAllSharedAttributes();
}
} else if (clientIsPresent(request) && !sharedIsPresent(request)) {
if (clientIsNotEmpty(request)) {
clientAttributesFuture = findClientAttributes(request);
} else {
clientAttributesFuture = findAllClientAttributes();
}
sharedAttributesFuture = Futures.immediateFuture(Collections.emptyList());
} else {
if (sharedIsNotEmpty(request)) {
sharedAttributesFuture = findSharedAttributes(request);
} else {
sharedAttributesFuture = findAllSharedAttributes();
}
clientAttributesFuture = Futures.immediateFuture(Collections.emptyList()); clientAttributesFuture = Futures.immediateFuture(Collections.emptyList());
sharedAttributesFuture = findAttributesByScope(toSet(request.getSharedAttributeNamesList()), SHARED_SCOPE);
} else {
sharedAttributesFuture = Futures.immediateFuture(Collections.emptyList());
clientAttributesFuture = findAttributesByScope(toSet(request.getClientAttributeNamesList()), CLIENT_SCOPE);
} }
return Futures.allAsList(Arrays.asList(clientAttributesFuture, sharedAttributesFuture)); return Futures.allAsList(Arrays.asList(clientAttributesFuture, sharedAttributesFuture));
} }
private ListenableFuture<List<AttributeKvEntry>> findAllSharedAttributes() { private ListenableFuture<List<AttributeKvEntry>> findAllAttributesByScope(String scope) {
return systemContext.getAttributesService().findAll(tenantId, deviceId, SHARED_SCOPE); return systemContext.getAttributesService().findAll(tenantId, deviceId, scope);
} }
private ListenableFuture<List<AttributeKvEntry>> findAllClientAttributes() { private ListenableFuture<List<AttributeKvEntry>> findAttributesByScope(Set<String> attributesSet, String scope) {
return systemContext.getAttributesService().findAll(tenantId, deviceId, CLIENT_SCOPE); return systemContext.getAttributesService().find(tenantId, deviceId, scope, attributesSet);
} }
private ListenableFuture<List<AttributeKvEntry>> findSharedAttributes(GetAttributeRequestMsg request) { private Set<String> toSet(List<String> strings) {
return systemContext.getAttributesService().find(tenantId, deviceId, SHARED_SCOPE, getSharedAttributesSet(request)); return new HashSet<>(strings);
} }
private ListenableFuture<List<AttributeKvEntry>> findClientAttributes(GetAttributeRequestMsg request) { private boolean listIsEmpty(List<String> strings) {
return systemContext.getAttributesService().find(tenantId, deviceId, CLIENT_SCOPE, getClientAttributesSet(request)); return strings == null || strings.isEmpty();
}
private boolean clientIsNotEmpty(GetAttributeRequestMsg request) {
return !getClientAttributesSet(request).isEmpty();
}
private boolean sharedIsNotEmpty(GetAttributeRequestMsg request) {
return !getSharedAttributesSet(request).isEmpty();
}
private Set<String> getSharedAttributesSet(GetAttributeRequestMsg request) {
return toOptionalSet(request.getSharedAttributeNamesList()).get();
}
private Set<String> getClientAttributesSet(GetAttributeRequestMsg request) {
return toOptionalSet(request.getClientAttributeNamesList()).get();
}
private boolean sharedIsPresent(GetAttributeRequestMsg request) {
return toOptionalSet(request.getSharedAttributeNamesList()).isPresent();
}
private boolean clientIsPresent(GetAttributeRequestMsg request) {
return toOptionalSet(request.getClientAttributeNamesList()).isPresent();
} }
private void handlePostAttributesRequest(ActorContext context, SessionInfoProto sessionInfo, PostAttributeMsg postAttributes) { private void handlePostAttributesRequest(ActorContext context, SessionInfoProto sessionInfo, PostAttributeMsg postAttributes) {
@ -603,14 +565,6 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
return json; return json;
} }
private Optional<Set<String>> toOptionalSet(List<String> strings) {
if (strings == null || strings.isEmpty()) {
return Optional.empty();
} else {
return Optional.of(new HashSet<>(strings));
}
}
private void sendToTransport(GetAttributeResponseMsg responseMsg, SessionInfoProto sessionInfo) { private void sendToTransport(GetAttributeResponseMsg responseMsg, SessionInfoProto sessionInfo) {
DeviceActorToTransportMsg msg = DeviceActorToTransportMsg.newBuilder() DeviceActorToTransportMsg msg = DeviceActorToTransportMsg.newBuilder()
.setSessionIdMSB(sessionInfo.getSessionIdMSB()) .setSessionIdMSB(sessionInfo.getSessionIdMSB())