From 9a37e2b4e8fb9c98b08586dac5ca3d1b5980be7a Mon Sep 17 00:00:00 2001 From: Matthias Kay Date: Thu, 9 Jun 2022 11:30:05 +0200 Subject: [PATCH] feat: add interfaces for consumers and producers --- .../commvis/analyzer/model/HttpConsumer.java | 18 +++++++------ .../commvis/analyzer/model/HttpProducer.java | 2 +- .../commvis/analyzer/model/IConsumer.java | 13 ++++++++++ .../commvis/analyzer/model/IProducer.java | 8 ++++++ .../commvis/analyzer/model/JmsReceiver.java | 8 +++++- .../commvis/analyzer/model/SqsConsumer.java | 13 +++++++++- .../commvis/analyzer/model/SqsProducer.java | 2 +- .../analyzer/model/SqsConsumerTest.java | 25 +++++++++++++++++++ 8 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/hlag/tools/commvis/analyzer/model/IConsumer.java create mode 100644 src/main/java/com/hlag/tools/commvis/analyzer/model/IProducer.java diff --git a/src/main/java/com/hlag/tools/commvis/analyzer/model/HttpConsumer.java b/src/main/java/com/hlag/tools/commvis/analyzer/model/HttpConsumer.java index 87b6cff..78f6a0f 100644 --- a/src/main/java/com/hlag/tools/commvis/analyzer/model/HttpConsumer.java +++ b/src/main/java/com/hlag/tools/commvis/analyzer/model/HttpConsumer.java @@ -10,7 +10,7 @@ */ @Value @RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class HttpConsumer implements ISenderReceiverCommunication { +public class HttpConsumer implements ISenderReceiverCommunication, IConsumer { @SerializedName(value="class_name") String className; @SerializedName(value="method_name") @@ -24,13 +24,15 @@ public class HttpConsumer implements ISenderReceiverCommunication { @SerializedName(value="id") String id; - /** - * - * @param producer the producer tested - * @return {@code true} if this consumer is receives messages from the {@code producer}. - */ - public boolean isProducedBy(HttpProducer producer) { - return type.equals(producer.getType()) && path.equals(producer.getPath()); + @Override + public boolean isProducedBy(IProducer producer) { + if (producer instanceof HttpProducer) { + HttpProducer httpProducer = (HttpProducer) producer; + + return type.equals(httpProducer.getType()) && path.equals(httpProducer.getPath()); + } + + return false; } @Override diff --git a/src/main/java/com/hlag/tools/commvis/analyzer/model/HttpProducer.java b/src/main/java/com/hlag/tools/commvis/analyzer/model/HttpProducer.java index 80c5188..9eb0bef 100644 --- a/src/main/java/com/hlag/tools/commvis/analyzer/model/HttpProducer.java +++ b/src/main/java/com/hlag/tools/commvis/analyzer/model/HttpProducer.java @@ -10,7 +10,7 @@ */ @Value @RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class HttpProducer implements ISenderReceiverCommunication { +public class HttpProducer implements ISenderReceiverCommunication, IProducer { /** * The full qualified classname where the producer lives. */ diff --git a/src/main/java/com/hlag/tools/commvis/analyzer/model/IConsumer.java b/src/main/java/com/hlag/tools/commvis/analyzer/model/IConsumer.java new file mode 100644 index 0000000..5b75d3e --- /dev/null +++ b/src/main/java/com/hlag/tools/commvis/analyzer/model/IConsumer.java @@ -0,0 +1,13 @@ +package com.hlag.tools.commvis.analyzer.model; + +/** + * Indentifies an {@link ISenderReceiverCommunication} as a consumer of something. + */ +public interface IConsumer { + /** + * + * @param producer the producer tested + * @return {@code true} if this consumer receives messages from the {@code producer}. + */ + boolean isProducedBy(IProducer producer); +} diff --git a/src/main/java/com/hlag/tools/commvis/analyzer/model/IProducer.java b/src/main/java/com/hlag/tools/commvis/analyzer/model/IProducer.java new file mode 100644 index 0000000..b3934dc --- /dev/null +++ b/src/main/java/com/hlag/tools/commvis/analyzer/model/IProducer.java @@ -0,0 +1,8 @@ +package com.hlag.tools.commvis.analyzer.model; + +/** + * Indentifies an {@link ISenderReceiverCommunication} as a producer of something. + */ +public interface IProducer { + String getDestinationProjectId(); +} diff --git a/src/main/java/com/hlag/tools/commvis/analyzer/model/JmsReceiver.java b/src/main/java/com/hlag/tools/commvis/analyzer/model/JmsReceiver.java index 59419d8..8235125 100644 --- a/src/main/java/com/hlag/tools/commvis/analyzer/model/JmsReceiver.java +++ b/src/main/java/com/hlag/tools/commvis/analyzer/model/JmsReceiver.java @@ -10,7 +10,7 @@ */ @Value @RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class JmsReceiver implements ISenderReceiverCommunication { +public class JmsReceiver implements ISenderReceiverCommunication, IConsumer { @SerializedName(value="class_name") String className; @@ -29,4 +29,10 @@ public class JmsReceiver implements ISenderReceiverCommunication { public void visit(AbstractCommunicationModelVisitor visitor) { visitor.visit(this); } + + @Override + public boolean isProducedBy(IProducer producer) { + // we have no producers so far + return false; + } } diff --git a/src/main/java/com/hlag/tools/commvis/analyzer/model/SqsConsumer.java b/src/main/java/com/hlag/tools/commvis/analyzer/model/SqsConsumer.java index f0b10c0..eddcd29 100644 --- a/src/main/java/com/hlag/tools/commvis/analyzer/model/SqsConsumer.java +++ b/src/main/java/com/hlag/tools/commvis/analyzer/model/SqsConsumer.java @@ -10,7 +10,7 @@ */ @Value @RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class SqsConsumer implements ISenderReceiverCommunication { +public class SqsConsumer implements ISenderReceiverCommunication, IConsumer { @SerializedName(value="class_name") String className; @@ -27,4 +27,15 @@ public class SqsConsumer implements ISenderReceiverCommunication { public void visit(AbstractCommunicationModelVisitor visitor) { visitor.visit(this); } + + @Override + public boolean isProducedBy(IProducer producer) { + if (producer instanceof SqsProducer) { + SqsProducer sqsProducer = (SqsProducer) producer; + + return queueName.equals(sqsProducer.getQueueName()); + } + + return false; + } } diff --git a/src/main/java/com/hlag/tools/commvis/analyzer/model/SqsProducer.java b/src/main/java/com/hlag/tools/commvis/analyzer/model/SqsProducer.java index c24627e..4d75a42 100644 --- a/src/main/java/com/hlag/tools/commvis/analyzer/model/SqsProducer.java +++ b/src/main/java/com/hlag/tools/commvis/analyzer/model/SqsProducer.java @@ -10,7 +10,7 @@ */ @Value @RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class SqsProducer implements ISenderReceiverCommunication { +public class SqsProducer implements ISenderReceiverCommunication, IProducer { /** * the class name where the producer was found. */ diff --git a/src/test/java/com/hlag/tools/commvis/analyzer/model/SqsConsumerTest.java b/src/test/java/com/hlag/tools/commvis/analyzer/model/SqsConsumerTest.java index 97ee844..9f8cb05 100644 --- a/src/test/java/com/hlag/tools/commvis/analyzer/model/SqsConsumerTest.java +++ b/src/test/java/com/hlag/tools/commvis/analyzer/model/SqsConsumerTest.java @@ -1,6 +1,7 @@ package com.hlag.tools.commvis.analyzer.model; import com.google.gson.annotations.SerializedName; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.lang.reflect.Field; @@ -8,6 +9,12 @@ import static org.assertj.core.api.Assertions.assertThat; class SqsConsumerTest { + private SqsConsumer sqsConsumer; + + @BeforeEach + void init() { + sqsConsumer = new SqsConsumer("class", "method", "queue", "id"); + } @Test void shouldHaveSerializedNameAnnotationOnFiled_toDecoupleTheFieldNameFromJson() { Field[] declaredFields = SqsConsumer.class.getDeclaredFields(); @@ -18,4 +25,22 @@ void shouldHaveSerializedNameAnnotationOnFiled_toDecoupleTheFieldNameFromJson() assertThat(actualAnnotation).withFailMessage(() -> String.format("Field %s has no @SerializedName annotation.", f.getName())).isNotNull(); } } + + @Test + void shouldReturnTrue_whenIsProducedBy_givenProducerIsForSameQueue() { + SqsProducer givenProducer = new SqsProducer("class1", "method1", "queue", "destinationProject", "id1"); + + boolean actualIsProducedBy = sqsConsumer.isProducedBy(givenProducer); + + assertThat(actualIsProducedBy).isTrue(); + } + + @Test + void shouldReturnFalse_whenIsProducedBy_givenProducerIsForOtherQueue() { + SqsProducer givenProducer = new SqsProducer("class1", "method1", "queue-other", "destinationProject", "id1"); + + boolean actualIsProducedBy = sqsConsumer.isProducedBy(givenProducer); + + assertThat(actualIsProducedBy).isFalse(); + } } \ No newline at end of file