diff --git a/.travis.yml b/.travis.yml
index 677d78b..d663c19 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -25,8 +25,10 @@ install:
script:
# Test with the defaults
- sbt new file://$(pwd) --name=hello && pushd hello && sbt test && popd
- # Test with custom name/organization to ensure templating is done correctly
- - sbt new file://$(pwd) --name=smello --organization=org.eggsample && cd smello && sbt test
+ # Test with custom name/organization to ensure templating is done correctly
+ - sbt new file://$(pwd) --name=smello --organization=org.eggsample && pushd smello && sbt test && popd
+ # Test Maven Archetype
+ - ./test-archetype.sh
cache:
directories:
diff --git a/src/main/g8/.sbtopts b/src/main/g8/$if(!mavenArchetype.truthy)$.sbtopts$endif$
similarity index 100%
rename from src/main/g8/.sbtopts
rename to src/main/g8/$if(!mavenArchetype.truthy)$.sbtopts$endif$
diff --git a/src/main/g8/README.md b/src/main/g8/$if(!mavenArchetype.truthy)$README.md$endif$
similarity index 100%
rename from src/main/g8/README.md
rename to src/main/g8/$if(!mavenArchetype.truthy)$README.md$endif$
diff --git a/src/main/g8/build.sbt b/src/main/g8/$if(!mavenArchetype.truthy)$build.sbt$endif$
similarity index 100%
rename from src/main/g8/build.sbt
rename to src/main/g8/$if(!mavenArchetype.truthy)$build.sbt$endif$
diff --git a/src/main/g8/project/build.properties b/src/main/g8/$if(!mavenArchetype.truthy)$project$endif$/$if(!mavenArchetype.truthy)$build.properties$endif$
similarity index 100%
rename from src/main/g8/project/build.properties
rename to src/main/g8/$if(!mavenArchetype.truthy)$project$endif$/$if(!mavenArchetype.truthy)$build.properties$endif$
diff --git a/src/main/g8/project/plugins.sbt b/src/main/g8/$if(!mavenArchetype.truthy)$project$endif$/$if(!mavenArchetype.truthy)$plugins.sbt$endif$
similarity index 100%
rename from src/main/g8/project/plugins.sbt
rename to src/main/g8/$if(!mavenArchetype.truthy)$project$endif$/$if(!mavenArchetype.truthy)$plugins.sbt$endif$
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$META-INF$endif$/$if(mavenArchetype.truthy)$maven$endif$/$if(mavenArchetype.truthy)$archetype-metadata.xml$endif$ b/src/main/g8/$if(mavenArchetype.truthy)$META-INF$endif$/$if(mavenArchetype.truthy)$maven$endif$/$if(mavenArchetype.truthy)$archetype-metadata.xml$endif$
new file mode 100644
index 0000000..b33d799
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$META-INF$endif$/$if(mavenArchetype.truthy)$maven$endif$/$if(mavenArchetype.truthy)$archetype-metadata.xml$endif$
@@ -0,0 +1,42 @@
+
+
+
+
+ hello
+
+
+ Hello
+
+
+
+ 2.12
+ \d+\.\d+
+
+
+
+
+
+
+
+
+
+ **/*
+
+
+ pom.xml
+ LICENSE
+
+
+
+
+
diff --git a/src/main/g8/$name__norm$-api/src/main/java/$package$/api/$name__Camel$Event.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Event.java
similarity index 55%
rename from src/main/g8/$name__norm$-api/src/main/java/$package$/api/$name__Camel$Event.java
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Event.java
index a30ecc3..3d125d2 100644
--- a/src/main/g8/$name__norm$-api/src/main/java/$package$/api/$name__Camel$Event.java
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Event.java
@@ -1,4 +1,4 @@
-package $package$.api;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonSubTypes;
@@ -8,13 +8,13 @@
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
- @JsonSubTypes.Type(value = $name;format="Camel"$Event.GreetingMessageChanged.class, name = "greeting-message-changed")
+ @JsonSubTypes.Type(value = $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged.class, name = "greeting-message-changed")
})
-public interface $name;format="Camel"$Event {
+public interface $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event {
String getName();
@Value
- final class GreetingMessageChanged implements $name;format="Camel"$Event {
+ final class GreetingMessageChanged implements $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event {
public final String name;
public final String message;
diff --git a/src/main/g8/$name__norm$-api/src/main/java/$package$/api/$name__Camel$Service.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Service.java
similarity index 70%
rename from src/main/g8/$name__norm$-api/src/main/java/$package$/api/$name__Camel$Service.java
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Service.java
index c1431b9..5fafce8 100644
--- a/src/main/g8/$name__norm$-api/src/main/java/$package$/api/$name__Camel$Service.java
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Service.java
@@ -1,4 +1,4 @@
-package $package$.api;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api;
import akka.Done;
import akka.NotUsed;
@@ -11,12 +11,12 @@
import static com.lightbend.lagom.javadsl.api.Service.*;
/**
- * The $name;format="camel"$ service interface.
+ * The $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$ service interface.
*
* This describes everything that Lagom needs to know about how to serve and
- * consume the $name;format="Camel"$Service.
+ * consume the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service.
*/
-public interface $name;format="Camel"$Service extends Service {
+public interface $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service extends Service {
/**
* Example:
* curl http://localhost:9000/api/hello/Alice
@@ -32,11 +32,11 @@ public interface $name;format="Camel"$Service extends Service {
/**
* This gets published to Kafka.
*/
- Topic<$name;format="Camel"$Event> helloEvents();
+ Topic<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event> helloEvents();
@Override
default Descriptor descriptor() {
- return named("$name;format="camel"$")
+ return named("$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$")
.withCalls(
pathCall("/api/hello/:id", this::hello),
pathCall("/api/hello/:id", this::useGreeting)
@@ -48,7 +48,7 @@ default Descriptor descriptor() {
// go to the same partition (and hence are delivered in order with respect
// to that user), we configure a partition key strategy that extracts the
// name as the partition key.
- .withProperty(KafkaProperties.partitionKeyStrategy(), $name;format="Camel"$Event::getName)
+ .withProperty(KafkaProperties.partitionKeyStrategy(), $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event::getName)
)
.withAutoAcl(true);
}
diff --git a/src/main/g8/$name__norm$-api/src/main/java/$package$/api/GreetingMessage.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/GreetingMessage.java
similarity index 82%
rename from src/main/g8/$name__norm$-api/src/main/java/$package$/api/GreetingMessage.java
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/GreetingMessage.java
index adb73e8..4a5df75 100644
--- a/src/main/g8/$name__norm$-api/src/main/java/$package$/api/GreetingMessage.java
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/api/GreetingMessage.java
@@ -1,4 +1,4 @@
-package $package$.api;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
diff --git a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Command.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Command.java
similarity index 67%
rename from src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Command.java
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Command.java
index b1d2856..72690fc 100644
--- a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Command.java
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Command.java
@@ -1,4 +1,4 @@
-package $package$.impl;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl;
import akka.Done;
import com.fasterxml.jackson.annotation.JsonCreator;
@@ -10,13 +10,13 @@
import lombok.Value;
/**
- * This interface defines all the commands that the $name;format="Camel"$Entity supports.
+ * This interface defines all the commands that the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity supports.
*
* By convention, the commands should be inner classes of the interface, which
* makes it simple to get a complete picture of what commands an entity
* supports.
*/
-public interface $name;format="Camel"$Command extends Jsonable {
+public interface $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command extends Jsonable {
/**
* A command to switch the greeting message.
*
@@ -26,7 +26,7 @@ public interface $name;format="Camel"$Command extends Jsonable {
@SuppressWarnings("serial")
@Value
@JsonDeserialize
- final class UseGreetingMessage implements $name;format="Camel"$Command, CompressedJsonable, PersistentEntity.ReplyType {
+ final class UseGreetingMessage implements $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command, CompressedJsonable, PersistentEntity.ReplyType {
public final String message;
@JsonCreator
@@ -44,7 +44,7 @@ final class UseGreetingMessage implements $name;format="Camel"$Command, Compress
@SuppressWarnings("serial")
@Value
@JsonDeserialize
- final class Hello implements $name;format="Camel"$Command, PersistentEntity.ReplyType {
+ final class Hello implements $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command, PersistentEntity.ReplyType {
public final String name;
@JsonCreator
diff --git a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Entity.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Entity.java
similarity index 64%
rename from src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Entity.java
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Entity.java
index 0479aa6..21c8d9c 100644
--- a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Entity.java
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Entity.java
@@ -1,4 +1,4 @@
-package $package$.impl;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl;
import akka.Done;
import com.lightbend.lagom.javadsl.persistence.PersistentEntity;
@@ -6,12 +6,12 @@
import java.time.LocalDateTime;
import java.util.Optional;
-import $package$.impl.$name;format="Camel"$Command.Hello;
-import $package$.impl.$name;format="Camel"$Command.UseGreetingMessage;
-import $package$.impl.$name;format="Camel"$Event.GreetingMessageChanged;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command.Hello;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command.UseGreetingMessage;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged;
/**
- * This is an event sourced entity. It has a state, {@link $name;format="Camel"$State}, which
+ * This is an event sourced entity. It has a state, {@link $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State}, which
* stores what the greeting should be (eg, "Hello").
*
* Event sourced entities are interacted with by sending them commands. This
@@ -29,13 +29,13 @@
* This entity defines one event, the {@link GreetingMessageChanged} event,
* which is emitted when a {@link UseGreetingMessage} command is received.
*/
-public class $name;format="Camel"$Entity extends PersistentEntity<$name;format="Camel"$Command, $name;format="Camel"$Event, $name;format="Camel"$State> {
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity extends PersistentEntity<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State> {
/**
* An entity can define different behaviours for different states, but it will
* always start with an initial behaviour. This entity only has one behaviour.
*/
@Override
- public Behavior initialBehavior(Optional<$name;format="Camel"$State> snapshotState) {
+ public Behavior initialBehavior(Optional<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State> snapshotState) {
/*
* Behaviour is defined using a behaviour builder. The behaviour builder
* starts with a state, if this entity supports snapshotting (an
@@ -46,7 +46,7 @@ public class $name;format="Camel"$Entity extends PersistentEntity<$name;format="
* Otherwise, the default state is to use the Hello greeting.
*/
BehaviorBuilder b = newBehaviorBuilder(
- snapshotState.orElse(new $name;format="Camel"$State("Hello", LocalDateTime.now().toString()))
+ snapshotState.orElse(new $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State("Hello", LocalDateTime.now().toString()))
);
/*
@@ -67,7 +67,7 @@ public class $name;format="Camel"$Entity extends PersistentEntity<$name;format="
b.setEventHandler(GreetingMessageChanged.class,
// We simply update the current state to use the greeting message from
// the event.
- evt -> new $name;format="Camel"$State(evt.message, LocalDateTime.now().toString())
+ evt -> new $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State(evt.message, LocalDateTime.now().toString())
);
/*
diff --git a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Event.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Event.java
similarity index 59%
rename from src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Event.java
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Event.java
index d2949ab..ac47cdd 100644
--- a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Event.java
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Event.java
@@ -1,4 +1,4 @@
-package $package$.impl;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -11,19 +11,19 @@
import lombok.Value;
/**
- * This interface defines all the events that the $name;format="Camel"$Entity supports.
+ * This interface defines all the events that the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity supports.
*
* By convention, the events should be inner classes of the interface, which
* makes it simple to get a complete picture of what events an entity has.
*/
-public interface $name;format="Camel"$Event extends Jsonable, AggregateEvent<$name;format="Camel"$Event> {
+public interface $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event extends Jsonable, AggregateEvent<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event> {
/**
* Tags are used for getting and publishing streams of events. Each event
* will have this tag, and in this case, we are partitioning the tags into
* 4 shards, which means we can have 4 concurrent processors/publishers of
* events.
*/
- AggregateEventShards<$name;format="Camel"$Event> TAG = AggregateEventTag.sharded($name;format="Camel"$Event.class, 4);
+ AggregateEventShards<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event> TAG = AggregateEventTag.sharded($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.class, 4);
/**
* An event that represents a change in greeting message.
@@ -31,7 +31,7 @@ public interface $name;format="Camel"$Event extends Jsonable, AggregateEvent<$na
@SuppressWarnings("serial")
@Value
@JsonDeserialize
- final class GreetingMessageChanged implements $name;format="Camel"$Event {
+ final class GreetingMessageChanged implements $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event {
public final String name;
public final String message;
@@ -43,7 +43,7 @@ final class GreetingMessageChanged implements $name;format="Camel"$Event {
}
@Override
- default AggregateEventTagger<$name;format="Camel"$Event> aggregateTag() {
+ default AggregateEventTagger<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event> aggregateTag() {
return TAG;
}
}
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Module.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Module.java
new file mode 100644
index 0000000..34b8c29
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$Module.java
@@ -0,0 +1,16 @@
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl;
+
+import com.google.inject.AbstractModule;
+import com.lightbend.lagom.javadsl.server.ServiceGuiceSupport;
+
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service;
+
+/**
+ * The module that binds the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service so that it can be served.
+ */
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Module extends AbstractModule implements ServiceGuiceSupport {
+ @Override
+ protected void configure() {
+ bindService($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service.class, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$ServiceImpl.class);
+ }
+}
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$ServiceImpl.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$ServiceImpl.java
new file mode 100644
index 0000000..2d21291
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$ServiceImpl.java
@@ -0,0 +1,77 @@
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl;
+
+import akka.Done;
+import akka.NotUsed;
+import akka.japi.Pair;
+import com.lightbend.lagom.javadsl.api.ServiceCall;
+import com.lightbend.lagom.javadsl.api.broker.Topic;
+import com.lightbend.lagom.javadsl.broker.TopicProducer;
+import com.lightbend.lagom.javadsl.persistence.PersistentEntityRef;
+import com.lightbend.lagom.javadsl.persistence.PersistentEntityRegistry;
+
+import javax.inject.Inject;
+
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.GreetingMessage;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command.*;
+
+/**
+ * Implementation of the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service.
+ */
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$ServiceImpl implements $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service {
+ private final PersistentEntityRegistry persistentEntityRegistry;
+
+ @Inject
+ public $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$ServiceImpl(PersistentEntityRegistry persistentEntityRegistry) {
+ this.persistentEntityRegistry = persistentEntityRegistry;
+ persistentEntityRegistry.register($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity.class);
+ }
+
+ @Override
+ public ServiceCall hello(String id) {
+ return request -> {
+ // Look up the hello world entity for the given ID.
+ PersistentEntityRef<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command> ref = persistentEntityRegistry.refFor($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity.class, id);
+ // Ask the entity the Hello command.
+ return ref.ask(new Hello(id));
+ };
+ }
+
+ @Override
+ public ServiceCall useGreeting(String id) {
+ return request -> {
+ // Look up the hello world entity for the given ID.
+ PersistentEntityRef<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command> ref = persistentEntityRegistry.refFor($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity.class, id);
+ // Tell the entity to use the greeting message specified.
+ return ref.ask(new UseGreetingMessage(request.message));
+ };
+ }
+
+ @Override
+ public Topic<$if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event> helloEvents() {
+ // We want to publish all the shards of the hello event
+ return TopicProducer.taggedStreamWithOffset($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.TAG.allTags(), (tag, offset) ->
+ // Load the event stream for the passed in shard tag
+ persistentEntityRegistry.eventStream(tag, offset).map(eventAndOffset -> {
+ // Now we want to convert from the persisted event to the published event.
+ // Although these two events are currently identical, in future they may
+ // change and need to evolve separately, by separating them now we save
+ // a lot of potential trouble in future.
+ $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event eventToPublish;
+
+ if (eventAndOffset.first() instanceof $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged) {
+ $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged messageChanged = ($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged) eventAndOffset.first();
+ eventToPublish = new $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged(
+ messageChanged.getName(), messageChanged.getMessage()
+ );
+ } else {
+ throw new IllegalArgumentException("Unknown event: " + eventAndOffset.first());
+ }
+
+ // We return a pair of the translated event, and its offset, so that
+ // Lagom can track which offsets have been published.
+ return Pair.create(eventToPublish, eventAndOffset.second());
+ })
+ );
+ }
+}
diff --git a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$State.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$State.java
similarity index 53%
rename from src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$State.java
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$State.java
index 4389971..2a0e1e9 100644
--- a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$State.java
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$State.java
@@ -1,4 +1,4 @@
-package $package$.impl;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -7,17 +7,17 @@
import lombok.Value;
/**
- * The state for the {@link $name;format="Camel"$Entity} entity.
+ * The state for the {@link $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity} entity.
*/
@SuppressWarnings("serial")
@Value
@JsonDeserialize
-public final class $name;format="Camel"$State implements CompressedJsonable {
+public final class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State implements CompressedJsonable {
public final String message;
public final String timestamp;
@JsonCreator
- $name;format="Camel"$State(String message, String timestamp) {
+ $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State(String message, String timestamp) {
this.message = Preconditions.checkNotNull(message, "message");
this.timestamp = Preconditions.checkNotNull(timestamp, "timestamp");
}
diff --git a/src/main/g8/$name__norm$-impl/src/main/resources/application.conf b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/resources/application.conf
similarity index 81%
rename from src/main/g8/$name__norm$-impl/src/main/resources/application.conf
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/resources/application.conf
index 8af9aee..4b87ae6 100644
--- a/src/main/g8/$name__norm$-impl/src/main/resources/application.conf
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/main/resources/application.conf
@@ -1,4 +1,4 @@
-play.modules.enabled += $package$.impl.$name;format="Camel"$Module
+play.modules.enabled += $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Module
$name;format="norm"$.cassandra.keyspace = $name;format="lower,snake,word"$
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/test/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$EntityTest.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/test/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$EntityTest.java
new file mode 100644
index 0000000..43ebd60
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/test/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$EntityTest.java
@@ -0,0 +1,53 @@
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl;
+
+import akka.Done;
+import akka.actor.ActorSystem;
+import akka.testkit.javadsl.TestKit;
+import com.lightbend.lagom.javadsl.testkit.PersistentEntityTestDriver;
+import com.lightbend.lagom.javadsl.testkit.PersistentEntityTestDriver.Outcome;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.Collections;
+
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command.Hello;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command.UseGreetingMessage;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged;
+
+import static org.junit.Assert.assertEquals;
+
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$EntityTest {
+ private static ActorSystem system;
+
+ @BeforeClass
+ public static void setup() {
+ system = ActorSystem.create("$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$EntityTest");
+ }
+
+ @AfterClass
+ public static void teardown() {
+ TestKit.shutdownActorSystem(system);
+ system = null;
+ }
+
+ @Test
+ public void test$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity() {
+ PersistentEntityTestDriver<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Command, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State> driver = new PersistentEntityTestDriver<>(system,
+ new $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Entity(), "world-1");
+
+ Outcome<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State> outcome1 = driver.run(new Hello("Alice"));
+ assertEquals("Hello, Alice!", outcome1.getReplies().get(0));
+ assertEquals(Collections.emptyList(), outcome1.issues());
+
+ Outcome<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$State> outcome2 = driver.run(new UseGreetingMessage("Hi"),
+ new Hello("Bob"));
+ assertEquals(1, outcome2.events().size());
+ assertEquals(new GreetingMessageChanged("world-1", "Hi"), outcome2.events().get(0));
+ assertEquals("Hi", outcome2.state().message);
+ assertEquals(Done.getInstance(), outcome2.getReplies().get(0));
+ assertEquals("Hi, Bob!", outcome2.getReplies().get(1));
+ assertEquals(2, outcome2.getReplies().size());
+ assertEquals(Collections.emptyList(), outcome2.issues());
+ }
+}
diff --git a/src/main/g8/$name__norm$-impl/src/test/java/$package$/impl/$name__Camel$ServiceTest.java b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/test/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$ServiceTest.java
similarity index 58%
rename from src/main/g8/$name__norm$-impl/src/test/java/$package$/impl/$name__Camel$ServiceTest.java
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/test/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$ServiceTest.java
index 13099c6..5a6d452 100644
--- a/src/main/g8/$name__norm$-impl/src/test/java/$package$/impl/$name__Camel$ServiceTest.java
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/test/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$$endif$/$if(mavenArchetype.truthy)$__serviceName__$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$ServiceTest.java
@@ -1,20 +1,20 @@
-package $package$.impl;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.impl;
import org.junit.Test;
-import $package$.api.GreetingMessage;
-import $package$.api.$name;format="Camel"$Service;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.GreetingMessage;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service;
import static com.lightbend.lagom.javadsl.testkit.ServiceTest.defaultSetup;
import static com.lightbend.lagom.javadsl.testkit.ServiceTest.withServer;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.junit.Assert.assertEquals;
-public class $name;format="Camel"$ServiceTest {
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$ServiceTest {
@Test
public void shouldStorePersonalizedGreeting() {
withServer(defaultSetup().withCassandra(), server -> {
- $name;format="Camel"$Service service = server.client($name;format="Camel"$Service.class);
+ $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service service = server.client($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service.class);
String msg1 = service.hello("Alice").invoke().toCompletableFuture().get(5, SECONDS);
assertEquals("Hello, Alice!", msg1); // default greeting
diff --git a/src/main/g8/$name__norm$-impl/src/test/resources/logback.xml b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/test/resources/logback.xml
similarity index 100%
rename from src/main/g8/$name__norm$-impl/src/test/resources/logback.xml
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-impl/src/test/resources/logback.xml
diff --git a/src/main/g8/$name__norm$-stream-api/src/main/java/$package$stream/api/$name__Camel$StreamService.java "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamService.java"
similarity index 80%
rename from src/main/g8/$name__norm$-stream-api/src/main/java/$package$stream/api/$name__Camel$StreamService.java
rename to "src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamService.java"
index 5e262d5..7d3ea9c 100644
--- a/src/main/g8/$name__norm$-stream-api/src/main/java/$package$stream/api/$name__Camel$StreamService.java
+++ "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-api/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/api/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamService.java"
@@ -1,4 +1,4 @@
-package $package$stream.api;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$stream.api;
import akka.NotUsed;
import akka.stream.javadsl.Source;
@@ -13,9 +13,9 @@
* The $name$ stream interface.
*
* This describes everything that Lagom needs to know about how to serve and
- * consume the $name;format="Camel"$StreamService service.
+ * consume the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService service.
*/
-public interface $name;format="Camel"$StreamService extends Service {
+public interface $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService extends Service {
/**
* This stream is implemented by asking the hello service directly to say
* hello to each passed in name. It requires the hello service to be up
diff --git "a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamModule.java" "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamModule.java"
new file mode 100644
index 0000000..1cf891d
--- /dev/null
+++ "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamModule.java"
@@ -0,0 +1,22 @@
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$stream.impl;
+
+import com.google.inject.AbstractModule;
+import com.lightbend.lagom.javadsl.server.ServiceGuiceSupport;
+
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$stream.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService;
+
+/**
+ * The module that binds the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService so that it can be served.
+ */
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamModule extends AbstractModule implements ServiceGuiceSupport {
+ @Override
+ protected void configure() {
+ // Bind the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService service
+ bindService($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService.class, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamServiceImpl.class);
+ // Bind the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service client
+ bindClient($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service.class);
+ // Bind the subscriber eagerly to ensure it starts up
+ bind($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamSubscriber.class).asEagerSingleton();
+ }
+}
diff --git a/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamRepository.java "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamRepository.java"
similarity index 83%
rename from src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamRepository.java
rename to "src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamRepository.java"
index 5d52b2f..14ce538 100644
--- a/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamRepository.java
+++ "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamRepository.java"
@@ -1,4 +1,4 @@
-package $package$stream.impl;
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$stream.impl;
import akka.Done;
import com.lightbend.lagom.javadsl.persistence.cassandra.CassandraSession;
@@ -10,14 +10,14 @@
import java.util.concurrent.CompletionStage;
@Singleton
-public class $name;format="Camel"$StreamRepository {
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamRepository {
private final CassandraSession uninitializedSession;
// Will return the session when the Cassandra tables have been successfully created
private volatile CompletableFuture initializedSession;
@Inject
- public $name;format="Camel"$StreamRepository(CassandraSession uninitializedSession) {
+ public $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamRepository(CassandraSession uninitializedSession) {
this.uninitializedSession = uninitializedSession;
// Eagerly create the session
session();
diff --git "a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamServiceImpl.java" "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamServiceImpl.java"
new file mode 100644
index 0000000..38d8235
--- /dev/null
+++ "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamServiceImpl.java"
@@ -0,0 +1,41 @@
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$stream.impl;
+
+import akka.NotUsed;
+import akka.stream.javadsl.Source;
+import com.lightbend.lagom.javadsl.api.ServiceCall;
+
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$stream.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService;
+
+import javax.inject.Inject;
+
+import static java.util.concurrent.CompletableFuture.completedFuture;
+
+/**
+ * Implementation of the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService.
+ */
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamServiceImpl implements $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamService {
+ private final $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service;
+ private final $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamRepository repository;
+
+ @Inject
+ public $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamServiceImpl($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamRepository repository) {
+ this.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service = $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service;
+ this.repository = repository;
+ }
+
+ @Override
+ public ServiceCall, Source> directStream() {
+ return hellos -> completedFuture(
+ hellos.mapAsync(8, name -> $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service.hello(name).invoke()));
+ }
+
+ @Override
+ public ServiceCall, Source> autonomousStream() {
+ return hellos -> completedFuture(
+ hellos.mapAsync(8, name -> repository.getMessage(name).thenApply(message ->
+ String.format("%s, %s!", message.orElse("Hello"), name)
+ ))
+ );
+ }
+}
diff --git "a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamSubscriber.java" "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamSubscriber.java"
new file mode 100644
index 0000000..43b3c5e
--- /dev/null
+++ "b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/java/$if(mavenArchetype.truthy)$__packageInPathFormat__$else$$package$stream$endif$/$if(mavenArchetype.truthy)$$\"__serviceName__stream\"$$endif$/impl/$if(mavenArchetype.truthy)$__serviceClassName__$else$$name__Camel$$endif$StreamSubscriber.java"
@@ -0,0 +1,35 @@
+package $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$stream.impl;
+
+import akka.Done;
+import akka.stream.javadsl.Flow;
+
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event;
+import $if(mavenArchetype.truthy)$\${package}.\${serviceName}$else$$package$$endif$.api.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service;
+
+import javax.inject.Inject;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * This subscribes to the $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service event stream.
+ */
+public class $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamSubscriber {
+ @Inject
+ public $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamSubscriber($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service, $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamRepository repository) {
+ // Create a subscriber
+ $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Service.helloEvents().subscribe()
+ // And subscribe to it with at least once processing semantics.
+ .atLeastOnce(
+ // Create a flow that emits a Done for each message it processes
+ Flow.<$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event>create().mapAsync(1, event -> {
+ if (event instanceof $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged) {
+ $if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged messageChanged = ($if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$Event.GreetingMessageChanged) event;
+ // Update the message
+ return repository.updateMessage(messageChanged.getName(), messageChanged.getMessage());
+ } else {
+ // Ignore all other events
+ return CompletableFuture.completedFuture(Done.getInstance());
+ }
+ })
+ );
+ }
+}
diff --git a/src/main/g8/$name__norm$-stream-impl/src/main/resources/application.conf b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/resources/application.conf
similarity index 92%
rename from src/main/g8/$name__norm$-stream-impl/src/main/resources/application.conf
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/resources/application.conf
index 9abbb57..f1a4958 100644
--- a/src/main/g8/$name__norm$-stream-impl/src/main/resources/application.conf
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$__serviceName__$else$$name__norm$$endif$-stream-impl/src/main/resources/application.conf
@@ -1,4 +1,4 @@
-play.modules.enabled += $package$stream.impl.$name;format="Camel"$StreamModule
+play.modules.enabled += $package$stream.impl.$if(mavenArchetype.truthy)$\${serviceClassName}$else$$name;format="Camel"$$endif$StreamModule
$name;format="norm"$-stream.cassandra.keyspace = $name;format="lower,snake,word"$_stream
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$api-pom.xml$endif$ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$api-pom.xml$endif$
new file mode 100644
index 0000000..40c5e80
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$api-pom.xml$endif$
@@ -0,0 +1,30 @@
+
+ 4.0.0
+
+ ${groupId}
+ ${rootArtifactId}
+ ${version}
+
+
+ ${serviceName}-api
+
+ jar
+
+
+
+ com.lightbend.lagom
+ lagom-javadsl-api_${scala.binary.version}
+
+
+ com.lightbend.lagom
+ lagom-javadsl-kafka-broker_${scala.binary.version}
+
+
+ org.projectlombok
+ lombok
+
+
+
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$impl-pom.xml$endif$ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$impl-pom.xml$endif$
new file mode 100644
index 0000000..2944279
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$impl-pom.xml$endif$
@@ -0,0 +1,64 @@
+
+ 4.0.0
+
+ ${groupId}
+ ${rootArtifactId}
+ ${version}
+
+
+ ${serviceName}-impl
+
+ jar
+
+
+
+ ${project.groupId}
+ ${serviceName}-api
+ ${project.version}
+
+
+ com.lightbend.lagom
+ lagom-javadsl-server_${scala.binary.version}
+
+
+ com.lightbend.lagom
+ lagom-javadsl-persistence-cassandra_${scala.binary.version}
+
+
+ com.lightbend.lagom
+ lagom-logback_${scala.binary.version}
+
+
+ com.typesafe.play
+ play-akka-http-server_${scala.binary.version}
+
+
+ com.lightbend.lagom
+ lagom-javadsl-testkit_${scala.binary.version}
+ test
+
+
+ com.lightbend.lagom
+ lagom-javadsl-kafka-broker_${scala.binary.version}
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+ com.lightbend.lagom
+ lagom-maven-plugin
+
+ true
+
+
+
+
+
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$pom.xml$endif$ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$pom.xml$endif$
new file mode 100644
index 0000000..6d6f9c5
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$pom.xml$endif$
@@ -0,0 +1,71 @@
+
+ 4.0.0
+ ${groupId}
+ ${artifactId}
+ ${version}
+
+ pom
+
+
+ ${serviceName}-api
+ ${serviceName}-impl
+ ${serviceName}-stream-api
+ ${serviceName}-stream-impl
+
+
+
+
+
+
+ maven-assembly-plugin
+ 2.6
+
+
+ com.lightbend.lagom
+ lagom-maven-plugin
+ ${lagom.version}
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+ 1.8
+
+ -parameters
+
+
+
+
+
+
+
+
+
+ com.lightbend.lagom
+ lagom-maven-dependencies
+ ${lagom.version}
+ import
+ pom
+
+
+ org.projectlombok
+ lombok
+ 1.18.8
+
+
+
+
+
+ UTF-8
+
+ ${scala-binary-version}
+ ## Substitutes in the scala-binary-version value entered when a project is created from the archetype
+
+ %LAGOM-VERSION%
+
+
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$stream-api-pom.xml$endif$ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$stream-api-pom.xml$endif$
new file mode 100644
index 0000000..3184ddc
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$stream-api-pom.xml$endif$
@@ -0,0 +1,22 @@
+
+ 4.0.0
+
+ ${groupId}
+ ${rootArtifactId}
+ ${version}
+
+
+ ${serviceName}-stream-api
+
+ jar
+
+
+
+ com.lightbend.lagom
+ lagom-javadsl-api_${scala.binary.version}
+
+
+
diff --git a/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$stream-impl-pom.xml$endif$ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$stream-impl-pom.xml$endif$
new file mode 100644
index 0000000..28f79a0
--- /dev/null
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/$if(mavenArchetype.truthy)$stream-impl-pom.xml$endif$
@@ -0,0 +1,65 @@
+
+ 4.0.0
+
+ ${groupId}
+ ${rootArtifactId}
+ ${version}
+
+
+ ${serviceName}-stream-impl
+
+ jar
+
+
+
+ ${project.groupId}
+ ${serviceName}-stream-api
+ ${project.version}
+
+
+ ${project.groupId}
+ ${serviceName}-api
+ ${project.version}
+
+
+ com.lightbend.lagom
+ lagom-javadsl-server_${scala.binary.version}
+
+
+ com.lightbend.lagom
+ lagom-javadsl-persistence-cassandra_${scala.binary.version}
+
+
+ com.lightbend.lagom
+ lagom-javadsl-kafka-client_${scala.binary.version}
+
+
+ com.lightbend.lagom
+ lagom-logback_${scala.binary.version}
+
+
+ com.typesafe.play
+ play-akka-http-server_${scala.binary.version}
+
+
+ com.lightbend.lagom
+ lagom-javadsl-testkit_${scala.binary.version}
+ test
+
+
+
+
+
+
+ com.lightbend.lagom
+ lagom-maven-plugin
+
+ true
+
+
+
+
+
diff --git a/src/main/g8/.gitignore b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/.gitignore
similarity index 90%
rename from src/main/g8/.gitignore
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/.gitignore
index 217f188..fbc00ac 100644
--- a/src/main/g8/.gitignore
+++ b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/.gitignore
@@ -11,3 +11,5 @@ bin
.factorypath
.settings
logs
+.idea
+*.iml
diff --git a/src/main/g8/LICENSE b/src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/LICENSE
similarity index 100%
rename from src/main/g8/LICENSE
rename to src/main/g8/$if(mavenArchetype.truthy)$archetype-resources$endif$/LICENSE
diff --git a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Module.java b/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Module.java
deleted file mode 100644
index fe80faa..0000000
--- a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$Module.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package $package$.impl;
-
-import com.google.inject.AbstractModule;
-import com.lightbend.lagom.javadsl.server.ServiceGuiceSupport;
-
-import $package$.api.$name;format="Camel"$Service;
-
-/**
- * The module that binds the $name;format="Camel"$Service so that it can be served.
- */
-public class $name;format="Camel"$Module extends AbstractModule implements ServiceGuiceSupport {
- @Override
- protected void configure() {
- bindService($name;format="Camel"$Service.class, $name;format="Camel"$ServiceImpl.class);
- }
-}
diff --git a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$ServiceImpl.java b/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$ServiceImpl.java
deleted file mode 100644
index 2dc81dd..0000000
--- a/src/main/g8/$name__norm$-impl/src/main/java/$package$/impl/$name__Camel$ServiceImpl.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package $package$.impl;
-
-import akka.Done;
-import akka.NotUsed;
-import akka.japi.Pair;
-import com.lightbend.lagom.javadsl.api.ServiceCall;
-import com.lightbend.lagom.javadsl.api.broker.Topic;
-import com.lightbend.lagom.javadsl.broker.TopicProducer;
-import com.lightbend.lagom.javadsl.persistence.PersistentEntityRef;
-import com.lightbend.lagom.javadsl.persistence.PersistentEntityRegistry;
-
-import javax.inject.Inject;
-
-import $package$.api.GreetingMessage;
-import $package$.api.$name;format="Camel"$Service;
-import $package$.impl.$name;format="Camel"$Command.*;
-
-/**
- * Implementation of the $name;format="Camel"$Service.
- */
-public class $name;format="Camel"$ServiceImpl implements $name;format="Camel"$Service {
- private final PersistentEntityRegistry persistentEntityRegistry;
-
- @Inject
- public $name;format="Camel"$ServiceImpl(PersistentEntityRegistry persistentEntityRegistry) {
- this.persistentEntityRegistry = persistentEntityRegistry;
- persistentEntityRegistry.register($name;format="Camel"$Entity.class);
- }
-
- @Override
- public ServiceCall hello(String id) {
- return request -> {
- // Look up the hello world entity for the given ID.
- PersistentEntityRef<$name;format="Camel"$Command> ref = persistentEntityRegistry.refFor($name;format="Camel"$Entity.class, id);
- // Ask the entity the Hello command.
- return ref.ask(new Hello(id));
- };
- }
-
- @Override
- public ServiceCall useGreeting(String id) {
- return request -> {
- // Look up the hello world entity for the given ID.
- PersistentEntityRef<$name;format="Camel"$Command> ref = persistentEntityRegistry.refFor($name;format="Camel"$Entity.class, id);
- // Tell the entity to use the greeting message specified.
- return ref.ask(new UseGreetingMessage(request.message));
- };
- }
-
- @Override
- public Topic<$package$.api.$name;format="Camel"$Event> helloEvents() {
- // We want to publish all the shards of the hello event
- return TopicProducer.taggedStreamWithOffset($name;format="Camel"$Event.TAG.allTags(), (tag, offset) ->
- // Load the event stream for the passed in shard tag
- persistentEntityRegistry.eventStream(tag, offset).map(eventAndOffset -> {
- // Now we want to convert from the persisted event to the published event.
- // Although these two events are currently identical, in future they may
- // change and need to evolve separately, by separating them now we save
- // a lot of potential trouble in future.
- $package$.api.$name;format="Camel"$Event eventToPublish;
-
- if (eventAndOffset.first() instanceof $name;format="Camel"$Event.GreetingMessageChanged) {
- $name;format="Camel"$Event.GreetingMessageChanged messageChanged = ($name;format="Camel"$Event.GreetingMessageChanged) eventAndOffset.first();
- eventToPublish = new $package$.api.$name;format="Camel"$Event.GreetingMessageChanged(
- messageChanged.getName(), messageChanged.getMessage()
- );
- } else {
- throw new IllegalArgumentException("Unknown event: " + eventAndOffset.first());
- }
-
- // We return a pair of the translated event, and its offset, so that
- // Lagom can track which offsets have been published.
- return Pair.create(eventToPublish, eventAndOffset.second());
- })
- );
- }
-}
diff --git a/src/main/g8/$name__norm$-impl/src/test/java/$package$/impl/$name__Camel$EntityTest.java b/src/main/g8/$name__norm$-impl/src/test/java/$package$/impl/$name__Camel$EntityTest.java
deleted file mode 100644
index 3cc84d6..0000000
--- a/src/main/g8/$name__norm$-impl/src/test/java/$package$/impl/$name__Camel$EntityTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package $package$.impl;
-
-import akka.Done;
-import akka.actor.ActorSystem;
-import akka.testkit.javadsl.TestKit;
-import com.lightbend.lagom.javadsl.testkit.PersistentEntityTestDriver;
-import com.lightbend.lagom.javadsl.testkit.PersistentEntityTestDriver.Outcome;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.util.Collections;
-
-import $package$.impl.$name;format="Camel"$Command.Hello;
-import $package$.impl.$name;format="Camel"$Command.UseGreetingMessage;
-import $package$.impl.$name;format="Camel"$Event.GreetingMessageChanged;
-
-import static org.junit.Assert.assertEquals;
-
-public class $name;format="Camel"$EntityTest {
- private static ActorSystem system;
-
- @BeforeClass
- public static void setup() {
- system = ActorSystem.create("$name;format="Camel"$EntityTest");
- }
-
- @AfterClass
- public static void teardown() {
- TestKit.shutdownActorSystem(system);
- system = null;
- }
-
- @Test
- public void test$name;format="Camel"$Entity() {
- PersistentEntityTestDriver<$name;format="Camel"$Command, $name;format="Camel"$Event, $name;format="Camel"$State> driver = new PersistentEntityTestDriver<>(system,
- new $name;format="Camel"$Entity(), "world-1");
-
- Outcome<$name;format="Camel"$Event, $name;format="Camel"$State> outcome1 = driver.run(new Hello("Alice"));
- assertEquals("Hello, Alice!", outcome1.getReplies().get(0));
- assertEquals(Collections.emptyList(), outcome1.issues());
-
- Outcome<$name;format="Camel"$Event, $name;format="Camel"$State> outcome2 = driver.run(new UseGreetingMessage("Hi"),
- new Hello("Bob"));
- assertEquals(1, outcome2.events().size());
- assertEquals(new GreetingMessageChanged("world-1", "Hi"), outcome2.events().get(0));
- assertEquals("Hi", outcome2.state().message);
- assertEquals(Done.getInstance(), outcome2.getReplies().get(0));
- assertEquals("Hi, Bob!", outcome2.getReplies().get(1));
- assertEquals(2, outcome2.getReplies().size());
- assertEquals(Collections.emptyList(), outcome2.issues());
- }
-}
diff --git a/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamModule.java b/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamModule.java
deleted file mode 100644
index 7c68c5a..0000000
--- a/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamModule.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package $package$stream.impl;
-
-import com.google.inject.AbstractModule;
-import com.lightbend.lagom.javadsl.server.ServiceGuiceSupport;
-
-import $package$.api.$name;format="Camel"$Service;
-import $package$stream.api.$name;format="Camel"$StreamService;
-
-/**
- * The module that binds the $name;format="Camel"$StreamService so that it can be served.
- */
-public class $name;format="Camel"$StreamModule extends AbstractModule implements ServiceGuiceSupport {
- @Override
- protected void configure() {
- // Bind the $name;format="Camel"$StreamService service
- bindService($name;format="Camel"$StreamService.class, $name;format="Camel"$StreamServiceImpl.class);
- // Bind the $name;format="Camel"$Service client
- bindClient($name;format="Camel"$Service.class);
- // Bind the subscriber eagerly to ensure it starts up
- bind($name;format="Camel"$StreamSubscriber.class).asEagerSingleton();
- }
-}
diff --git a/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamServiceImpl.java b/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamServiceImpl.java
deleted file mode 100644
index 9a02cd5..0000000
--- a/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamServiceImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package $package$stream.impl;
-
-import akka.NotUsed;
-import akka.stream.javadsl.Source;
-import com.lightbend.lagom.javadsl.api.ServiceCall;
-
-import $package$.api.$name;format="Camel"$Service;
-import $package$stream.api.$name;format="Camel"$StreamService;
-
-import javax.inject.Inject;
-
-import static java.util.concurrent.CompletableFuture.completedFuture;
-
-/**
- * Implementation of the $name;format="Camel"$StreamService.
- */
-public class $name;format="Camel"$StreamServiceImpl implements $name;format="Camel"$StreamService {
- private final $name;format="Camel"$Service $name;format="camel"$Service;
- private final $name;format="Camel"$StreamRepository repository;
-
- @Inject
- public $name;format="Camel"$StreamServiceImpl($name;format="Camel"$Service $name;format="camel"$Service, $name;format="Camel"$StreamRepository repository) {
- this.$name;format="camel"$Service = $name;format="camel"$Service;
- this.repository = repository;
- }
-
- @Override
- public ServiceCall, Source> directStream() {
- return hellos -> completedFuture(
- hellos.mapAsync(8, name -> $name;format="camel"$Service.hello(name).invoke()));
- }
-
- @Override
- public ServiceCall, Source> autonomousStream() {
- return hellos -> completedFuture(
- hellos.mapAsync(8, name -> repository.getMessage(name).thenApply(message ->
- String.format("%s, %s!", message.orElse("Hello"), name)
- ))
- );
- }
-}
diff --git a/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamSubscriber.java b/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamSubscriber.java
deleted file mode 100644
index f97756e..0000000
--- a/src/main/g8/$name__norm$-stream-impl/src/main/java/$package$stream/impl/$name__Camel$StreamSubscriber.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package $package$stream.impl;
-
-import akka.Done;
-import akka.stream.javadsl.Flow;
-
-import $package$.api.$name;format="Camel"$Event;
-import $package$.api.$name;format="Camel"$Service;
-
-import javax.inject.Inject;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * This subscribes to the $name;format="Camel"$Service event stream.
- */
-public class $name;format="Camel"$StreamSubscriber {
- @Inject
- public $name;format="Camel"$StreamSubscriber($name;format="Camel"$Service $name;format="camel"$Service, $name;format="Camel"$StreamRepository repository) {
- // Create a subscriber
- $name;format="camel"$Service.helloEvents().subscribe()
- // And subscribe to it with at least once processing semantics.
- .atLeastOnce(
- // Create a flow that emits a Done for each message it processes
- Flow.<$name;format="Camel"$Event>create().mapAsync(1, event -> {
- if (event instanceof $name;format="Camel"$Event.GreetingMessageChanged) {
- $name;format="Camel"$Event.GreetingMessageChanged messageChanged = ($name;format="Camel"$Event.GreetingMessageChanged) event;
- // Update the message
- return repository.updateMessage(messageChanged.getName(), messageChanged.getMessage());
- } else {
- // Ignore all other events
- return CompletableFuture.completedFuture(Done.getInstance());
- }
- })
- );
- }
-}
diff --git a/src/main/g8/default.properties b/src/main/g8/default.properties
index f53843d..428f670 100644
--- a/src/main/g8/default.properties
+++ b/src/main/g8/default.properties
@@ -2,3 +2,5 @@ name = Hello
organization = com.example
version = 1.0-SNAPSHOT
package = $organization$.$name;format="lower,word"$
+mavenArchetype = no
+verbatim = archetype-metadata.xml *pom.xml*
diff --git a/src/main/pom.xml b/src/main/pom.xml
new file mode 100644
index 0000000..1e95f68
--- /dev/null
+++ b/src/main/pom.xml
@@ -0,0 +1,42 @@
+
+
+ 4.0.0
+ com.lightbend.lagom
+ maven-archetype-lagom-java
+ maven-archetype
+ maven-archetype-lagom-java
+ https://www.lagomframework.com/
+ 1.0-SNAPSHOT
+
+
+
+ org.apache.maven.archetype
+ archetype-packaging
+ 3.0.1
+
+
+
+
+
+ Apache-2.0
+ http://www.apache.org/licenses/LICENSE-2.0.html
+ repo
+
+
+ maven-archetype-lagom-java
+
+ com.lightbend.lagom
+ https://www.lagomframework.com/
+
+
+ https://github.com/lagom/lagom
+ scm:git:git@github.com:lagom/lagom.git
+
+
+
+ lagom
+ Lagom Contributors
+ https://github.com/lagom
+
+
+
\ No newline at end of file
diff --git a/test-archetype.sh b/test-archetype.sh
new file mode 100755
index 0000000..618ce89
--- /dev/null
+++ b/test-archetype.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+rm -rf maven maven-hello
+sbt new file://$(pwd) --mavenArchetype=yes --name=maven
+cp src/main/pom.xml maven
+mkdir -p maven/src/main/resources
+sed -i'' -r 's|%LAGOM-VERSION%|1.6.0-M4|g' maven/archetype-resources/pom.xml
+mv maven/archetype-resources/api-pom.xml maven/archetype-resources/__serviceName__-api/pom.xml
+mv maven/archetype-resources/impl-pom.xml maven/archetype-resources/__serviceName__-impl/pom.xml
+mv maven/archetype-resources/stream-api-pom.xml maven/archetype-resources/__serviceName__-stream-api/pom.xml
+mv maven/archetype-resources/stream-impl-pom.xml maven/archetype-resources/__serviceName__-stream-impl/pom.xml
+mv maven/archetype-resources maven/src/main/resources
+mv maven/META-INF maven/src/main/resources
+(cd maven && mvn install)
+mvn archetype:generate -B -DarchetypeGroupId=com.lightbend.lagom -DarchetypeArtifactId=maven-archetype-lagom-java -DgroupId=com.example -DartifactId=maven-hello -DarchetypeVersion=1.0-SNAPSHOT
+(cd maven-hello && mvn verify)