Skip to content

Commit

Permalink
GPE-2851 add feature to specify if a stream needs to be transformed, …
Browse files Browse the repository at this point in the history
…deactivated aand backup to be retained
  • Loading branch information
Deepak Halale committed Jun 21, 2018
1 parent 3dcfefd commit fd41e6d
Show file tree
Hide file tree
Showing 30 changed files with 939 additions and 421 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to

## [Unreleased]

## [2.0.0] - 2018-06-21

### Added
- feature to specify actions on a stream like transformation, deactivation or backup to be retained

## [1.1.0] - 2018-06-01

### Added
Expand Down
2 changes: 1 addition & 1 deletion event-tool/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<parent>
<groupId>uk.gov.justice</groupId>
<artifactId>stream-transformation-tool</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>2.0.0-SNAPSHOT</version>
</parent>

<packaging>war</packaging>
Expand Down
9 changes: 8 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<artifactId>stream-transformation-tool</artifactId>
<packaging>pom</packaging>
<version>1.2.0-SNAPSHOT</version>
<version>2.0.0-SNAPSHOT</version>

<scm>
<connection>${cpp.scm.connection}</connection>
Expand All @@ -31,6 +31,7 @@
<wildfly.swarm.version>2017.11.0</wildfly.swarm.version>
<version.swarm.fraction-plugin>77</version.swarm.fraction-plugin>
<com.h2database.version>1.4.187</com.h2database.version>
<junit-dataprovider.version>1.13.1</junit-dataprovider.version>
</properties>

<modules>
Expand Down Expand Up @@ -113,6 +114,12 @@
<type>pom</type>
<version>${test-utils.version}</version>
</dependency>
<dependency>
<groupId>com.tngtech.java</groupId>
<artifactId>junit-dataprovider</artifactId>
<version>${junit-dataprovider.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down
4 changes: 2 additions & 2 deletions stream-transformation-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<artifactId>stream-transformation-tool</artifactId>
<groupId>uk.gov.justice</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>2.0.0-SNAPSHOT</version>
</parent>

<artifactId>stream-transformation-test</artifactId>
Expand All @@ -19,4 +19,4 @@
<module>stream-transformation-performance-test</module>
</modules>

</project>
</project>
7 changes: 3 additions & 4 deletions stream-transformation-test/sample-transformations/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@
<parent>
<artifactId>stream-transformation-test</artifactId>
<groupId>uk.gov.justice</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>2.0.0-SNAPSHOT</version>
</parent>

<groupId>uk.gov.justice</groupId>
<artifactId>stream-transformations</artifactId>

<dependencies>
Expand All @@ -20,9 +19,9 @@
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>uk.gov.justice.utils</groupId>
<groupId>uk.gov.justice.services</groupId>
<artifactId>test-utils-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package uk.gov.sample.event.transformation;

import static com.google.common.collect.Lists.newArrayList;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.DEACTIVATE;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.NO_ACTION;

import uk.gov.justice.services.core.enveloper.Enveloper;
import uk.gov.justice.services.messaging.JsonEnvelope;
import uk.gov.justice.tools.eventsourcing.transformation.api.Action;
import uk.gov.justice.tools.eventsourcing.transformation.api.EventTransformation;
import uk.gov.justice.tools.eventsourcing.transformation.api.annotation.Transformation;

import java.util.List;
import java.util.stream.Stream;

@Transformation
public class SampleCustomActionOnTransformation implements EventTransformation {

private static final List<String> EVENTS_TO_DEACTIVATE = newArrayList(
"sample.event.to.deactivate",
"sample.event2.to.deactivate"
);

private static final String EVENT_NAME_ENDS_WITH = ".archived.old.release";

private Enveloper enveloper;

@Override
public Stream<JsonEnvelope> apply(final JsonEnvelope event) {
final String restoredEventName = event.metadata().name().replace(EVENT_NAME_ENDS_WITH, "");

final JsonEnvelope transformedEnvelope = enveloper.withMetadataFrom(event, restoredEventName).apply(event.payload());
return Stream.of(transformedEnvelope);
}

@Override
public Action actionFor(final JsonEnvelope event) {
if (EVENTS_TO_DEACTIVATE.contains(event.metadata().name().toLowerCase())) {
return DEACTIVATE;
} else if (event.metadata().name().toLowerCase().endsWith(EVENT_NAME_ENDS_WITH)) {
return new Action(true, true, false);
}

return NO_ACTION;
}

@Override
public void setEnveloper(final Enveloper enveloper) {
this.enveloper = enveloper;
}

}
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package uk.gov.sample.event.transformation;

import static uk.gov.justice.tools.eventsourcing.transformation.api.TransformAction.ARCHIVE;
import static uk.gov.justice.tools.eventsourcing.transformation.api.TransformAction.NO_ACTION;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.DEACTIVATE;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.NO_ACTION;

import uk.gov.justice.services.core.enveloper.Enveloper;
import uk.gov.justice.services.messaging.JsonEnvelope;
import uk.gov.justice.tools.eventsourcing.transformation.api.EventTransformation;
import uk.gov.justice.tools.eventsourcing.transformation.api.TransformAction;
import uk.gov.justice.tools.eventsourcing.transformation.api.Action;
import uk.gov.justice.tools.eventsourcing.transformation.api.annotation.Transformation;


@Transformation
public class SampleArchiveTransformation implements EventTransformation {
public class SampleDeactivateTransformation implements EventTransformation {

@Override
public TransformAction actionFor(final JsonEnvelope event) {
if (event.metadata().name().equalsIgnoreCase("sample.archive.events.name")) {
return ARCHIVE;
public Action actionFor(final JsonEnvelope event) {
if (event.metadata().name().equalsIgnoreCase("sample.deactivate.events.name")) {
return DEACTIVATE;
}
return NO_ACTION;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package uk.gov.sample.event.transformation;

import static uk.gov.justice.tools.eventsourcing.transformation.api.TransformAction.NO_ACTION;
import static uk.gov.justice.tools.eventsourcing.transformation.api.TransformAction.TRANSFORM;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.NO_ACTION;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.TRANSFORM;

import uk.gov.justice.services.core.enveloper.Enveloper;
import uk.gov.justice.services.messaging.JsonEnvelope;
import uk.gov.justice.tools.eventsourcing.transformation.api.Action;
import uk.gov.justice.tools.eventsourcing.transformation.api.EventTransformation;
import uk.gov.justice.tools.eventsourcing.transformation.api.TransformAction;
import uk.gov.justice.tools.eventsourcing.transformation.api.annotation.Transformation;

import java.util.stream.Stream;
Expand All @@ -17,7 +17,7 @@ public class SampleTransformationV2 implements EventTransformation {
private Enveloper enveloper;

@Override
public TransformAction actionFor(JsonEnvelope event) {
public Action actionFor(JsonEnvelope event) {
if (event.metadata().name().equalsIgnoreCase("sample.v2.events.name")){
return TRANSFORM;
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package uk.gov.sample.event.transformation;

import static java.util.UUID.randomUUID;
import static java.util.stream.Collectors.toList;
import static javax.json.Json.createObjectBuilder;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static uk.gov.justice.services.messaging.JsonEnvelope.envelopeFrom;
import static uk.gov.justice.services.messaging.spi.DefaultJsonMetadata.metadataBuilder;
import static uk.gov.justice.services.test.utils.core.enveloper.EnveloperFactory.createEnveloper;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.DEACTIVATE;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.NO_ACTION;

import uk.gov.justice.services.core.enveloper.Enveloper;
import uk.gov.justice.services.messaging.JsonEnvelope;
import uk.gov.justice.tools.eventsourcing.transformation.api.Action;
import uk.gov.justice.tools.eventsourcing.transformation.api.EventTransformation;

import java.util.List;
import java.util.stream.Stream;

import org.junit.Before;
import org.junit.Test;

public class SampleCustomActionOnTransformationTest {

private SampleCustomActionOnTransformation underTest = new SampleCustomActionOnTransformation();

private Enveloper enveloper = createEnveloper();

@Before
public void setup() {
underTest.setEnveloper(enveloper);
}

@Test
public void shouldCreateInstanceOfEventTransformation() {
assertThat(underTest, is(instanceOf(EventTransformation.class)));
}

@Test
public void shouldSetCustomActionForEventsThatMatch() {
final JsonEnvelope event = buildEnvelope("sample.event.name.archived.old.release");

assertThat(underTest.actionFor(event), is(new Action(true, true, false)));
}

@Test
public void shouldSetDeactivateActionForEventsThatMatch() {
final JsonEnvelope event = buildEnvelope("sample.event.to.deactivate");

assertThat(underTest.actionFor(event), is(DEACTIVATE));
}

@Test
public void shouldSetNoActionForEventsThatDoNotMatch() {
final JsonEnvelope event = buildEnvelope("dummy.sample.event.name");

assertThat(underTest.actionFor(event), is(NO_ACTION));
}

@Test
public void shouldCreateTransformation() {
final JsonEnvelope event = buildEnvelope("sample.event.name.archived.old.release");

final Stream<JsonEnvelope> transformedStream = underTest.apply(event);

final List<JsonEnvelope> transformedEvents = transformedStream.collect(toList());
assertThat(transformedEvents, hasSize(1));
assertThat(transformedEvents.get(0).metadata().name(), is("sample.event.name"));
assertThat(transformedEvents.get(0).payloadAsJsonObject().getString("field"),
is(event.payloadAsJsonObject().getString("field")));
}

private JsonEnvelope buildEnvelope(final String eventName) {
return envelopeFrom(
metadataBuilder().withId(randomUUID()).withName(eventName),
createObjectBuilder().add("field", "value").build());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package uk.gov.sample.event.transformation;

import static java.util.UUID.randomUUID;
import static javax.json.Json.createObjectBuilder;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.assertThat;
import static uk.gov.justice.services.messaging.JsonEnvelope.envelopeFrom;
import static uk.gov.justice.services.messaging.spi.DefaultJsonMetadata.metadataBuilder;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.DEACTIVATE;
import static uk.gov.justice.tools.eventsourcing.transformation.api.Action.NO_ACTION;

import uk.gov.justice.services.messaging.JsonEnvelope;
import uk.gov.justice.tools.eventsourcing.transformation.api.EventTransformation;

import org.junit.Test;

public class SampleDeactivateTransformationTest {

private SampleDeactivateTransformation underTest = new SampleDeactivateTransformation();

@Test
public void shouldCreateInstanceOfEventTransformation() {
assertThat(underTest, instanceOf(EventTransformation.class));
}

@Test
public void shouldSetDeactivateAction() {
final JsonEnvelope event = buildEnvelope("sample.deactivate.events.name");

assertThat(underTest.actionFor(event), is(DEACTIVATE));
}

@Test
public void shouldSetNoAction() {
final JsonEnvelope event = buildEnvelope("dummy.deactivate.events.name");

assertThat(underTest.actionFor(event), is(NO_ACTION));
}

private JsonEnvelope buildEnvelope(final String eventName) {
return envelopeFrom(
metadataBuilder().withId(randomUUID()).withName(eventName),
createObjectBuilder().add("field", "value").build());
}

}
Loading

0 comments on commit fd41e6d

Please sign in to comment.