diff --git a/.travis.yml b/.travis.yml index 677d78b..50831a7 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)