Skip to content
Draft
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Here-man.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,11 @@ public class XoomInitializer implements XoomInitializationAware {
exchangeInitializer.init(grid);

final StatefulTypeRegistry statefulTypeRegistry = new StatefulTypeRegistry(grid.world());
QueryModelStateStoreProvider.using(grid.world().stage(), statefulTypeRegistry);
CommandModelStateStoreProvider.using(grid.world().stage(), statefulTypeRegistry, exchangeInitializer.dispatcher());
final QueryModelStateStoreProvider queryModelStateStoreProvider = QueryModelStateStoreProvider.using(grid.world().stage(), statefulTypeRegistry);
final CommandModelStateStoreProvider commandModelStateStoreProvider = CommandModelStateStoreProvider.using(grid.world().stage(), statefulTypeRegistry, exchangeInitializer.dispatcher());

final AuthorResource authorResource = new AuthorResource(grid);
final BookResource bookResource = new BookResource(grid);
final AuthorResource authorResource = new AuthorResource(grid, queryModelStateStoreProvider.authorQueries);
final BookResource bookResource = new BookResource(grid, queryModelStateStoreProvider.bookQueries);

final Collection<Resource<?>> sseResources = Loader.resourcesFrom(initializer.sseConfiguration()).values();
final Collection<Resource<?>> feedResources = Loader.resourcesFrom(initializer.feedConfiguration()).values();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ protected void enrichParameters(final CodeGenerationContext context) {
STORE_PROVIDER, PROJECTION_DISPATCHER_PROVIDER, REST_RESOURCE,
AUTO_DISPATCH_RESOURCE_HANDLER, EXCHANGE_BOOTSTRAP);

parameters().and(REST_RESOURCES, RestResource.from(context.contents()))
parameters().and(REST_RESOURCES, RestResource.from(useCQRS, context.contents()))
.and(EXCHANGE_BOOTSTRAP_NAME, EXCHANGE_BOOTSTRAP.resolveClassname())
.and(HAS_EXCHANGE, ContentQuery.exists(EXCHANGE_BOOTSTRAP, context.contents()))
.addImports(qualifiedNames).addImports(storageType.resolveTypeRegistryQualifiedNames(useCQRS));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,42 +10,69 @@
import io.vlingo.xoom.codegen.content.CodeElementFormatter;
import io.vlingo.xoom.codegen.content.Content;
import io.vlingo.xoom.codegen.content.ContentQuery;
import io.vlingo.xoom.codegen.template.TemplateParameters;
import io.vlingo.xoom.codegen.template.TemplateStandard;
import io.vlingo.xoom.codegen.template.storage.Model;
import io.vlingo.xoom.codegen.template.storage.StorageType;

import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import static io.vlingo.xoom.codegen.template.TemplateParameter.MODEL;
import static io.vlingo.xoom.codegen.template.TemplateParameter.STORAGE_TYPE;
import static io.vlingo.xoom.codegen.template.TemplateStandard.AUTO_DISPATCH_RESOURCE_HANDLER;
import static io.vlingo.xoom.codegen.template.TemplateStandard.REST_RESOURCE;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

public class RestResource {

private final String className;
private final String objectName;
private final String arguments;
private final boolean last;

public static List<RestResource> from(final List<Content> contents) {
public static List<RestResource> from(boolean useCQRS, final List<Content> contents) {
final Set<String> classNames =
ContentQuery.findClassNames(contents, REST_RESOURCE,
AUTO_DISPATCH_RESOURCE_HANDLER);

final Iterator<String> iterator = classNames.iterator();

return IntStream.range(0, classNames.size()).mapToObj(index ->
new RestResource(iterator.next(), index,
classNames.size())).collect(toList());
return IntStream
.range(0, classNames.size())
.mapToObj(index -> new RestResource(iterator.next(), useCQRS, index, classNames.size()))
.collect(toList());
}

private RestResource(final String restResourceName,
final Boolean useCQRS,
final int resourceIndex,
final int numberOfResources) {
this.className = restResourceName;
this.objectName = CodeElementFormatter.simpleNameToAttribute(restResourceName);
this.arguments = resolveArguments(restResourceName, useCQRS);
this.last = resourceIndex == numberOfResources - 1;
}

private String resolveArguments(String restResourceName, Boolean useCQRS) {
final List<String> arguments = Stream.of("grid").collect(toList());

if (useCQRS) {
final String storeProviderClass = TemplateStandard.STORE_PROVIDER.resolveClassname(TemplateParameters.with(STORAGE_TYPE, StorageType.STATE_STORE).and(MODEL, Model.QUERY));
final String storeProviderName = CodeElementFormatter.simpleNameToAttribute(storeProviderClass);
final String queriesClassName = TemplateStandard.QUERIES.resolveClassname(restResourceName.replace("Resource", ""));
final String queriesAttributeName = CodeElementFormatter.simpleNameToAttribute(queriesClassName);
arguments.add(String.format("%s.%s", storeProviderName, queriesAttributeName));
}

return arguments.stream().collect(joining(", "));

}

public String getClassName() {
return className;
}
Expand All @@ -54,6 +81,10 @@ public String getObjectName() {
return objectName;
}

public String getArguments() {
return arguments;
}

public boolean isLast() {
return last;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
package io.vlingo.xoom.codegen.template.bootstrap;


import io.vlingo.xoom.codegen.content.CodeElementFormatter;
import io.vlingo.xoom.codegen.template.TemplateParameters;
import io.vlingo.xoom.codegen.template.storage.Model;
import io.vlingo.xoom.codegen.template.storage.StorageType;
Expand All @@ -26,6 +27,7 @@
public class StoreProvider {

private final String className;
private final String objectName;
private final String arguments;

public static List<StoreProvider> from(final StorageType storageType,
Expand All @@ -50,6 +52,7 @@ private StoreProvider(final StorageType storageType,
.and(MODEL, model);

this.className = STORE_PROVIDER.resolveClassname(parameters);
this.objectName = CodeElementFormatter.simpleNameToAttribute(this.className);
this.arguments = resolveArguments(model, storageType, useProjections, hasExchange);
}

Expand Down Expand Up @@ -83,6 +86,10 @@ public String getClassName() {
return className;
}

public String getObjectName() {
return objectName;
}

public String getArguments() {
return arguments;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,14 @@ protected void enrichParameters(final CodeGenerationContext context) {
final String xoomInitializerClass = context.parameterOf(XOOM_INITIALIZER_NAME);
final Boolean blockingMessaging = context.parameterOf(BLOCKING_MESSAGING, Boolean::valueOf);
final Boolean customInitialization = !xoomInitializerClass.equals(XOOM_INITIALIZER.resolveClassname());
final Boolean useCQRS = context.parameterOf(CQRS, Boolean::valueOf);

loadImports(context, contents);

parameters().and(TemplateParameter.BLOCKING_MESSAGING, blockingMessaging)
.and(TemplateParameter.XOOM_INITIALIZER_CLASS, xoomInitializerClass)
.and(TemplateParameter.CUSTOM_INITIALIZATION, customInitialization)
.and(TemplateParameter.REST_RESOURCES, RestResource.from(contents))
.and(TemplateParameter.REST_RESOURCES, RestResource.from(useCQRS, contents))
.and(TemplateParameter.APPLICATION_NAME, appName)
.and(TemplateParameter.EXCHANGE_BOOTSTRAP_NAME, resolveExchangeBootstrapName(context));
}
Expand Down
22 changes: 11 additions & 11 deletions src/main/resources/codegen/java/RestResource.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,17 @@ public class ${resourceName} extends DynamicResourceHandler {
private final ${queries.protocolName} $queries;
</#if>

public ${resourceName}(final Grid grid) {
super(grid.world().stage());
<#if useAutoDispatch>
this.$stage = grid;
this.$logger = super.logger();
<#else>
this.grid = grid;
</#if>
<#if queries?has_content && !queries.empty>
this.$queries = ${storeProviderName}.instance().${queries.attributeName};
</#if>
public ${resourceName}(final Grid grid<#if queries?has_content && !queries.empty>, final ${queries.protocolName} ${queries.attributeName}</#if>) {
super(grid.world().stage());
<#if useAutoDispatch>
this.$stage = grid;
this.$logger = super.logger();
<#else>
this.grid = grid;
</#if>
<#if queries?has_content && !queries.empty>
this.$queries = ${queries.attributeName};
</#if>
}

<#list routeMethods as routeMethod>
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/codegen/java/XoomInitializer.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@ public class XoomInitializer implements XoomInitializationAware {
final ${registry.className} ${registry.objectName} = new ${registry.className}(grid.world());
</#list>
<#list providers as provider>
${provider.className}.using(${provider.arguments});
final ${provider.className} ${provider.objectName} = ${provider.className}.using(${provider.arguments});
</#list>

<#list restResources as restResource>
final ${restResource.className} ${restResource.objectName} = new ${restResource.className}(grid);
final ${restResource.className} ${restResource.objectName} = new ${restResource.className}(${restResource.arguments});
</#list>

final Collection<Resource<?>> sseResources = Loader.resourcesFrom(initializer.sseConfiguration()).values();
Expand Down
16 changes: 8 additions & 8 deletions src/main/resources/codegen/kotlin/RestResource.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ public class ${resourceName} : DynamicResourceHandler {
val $queries: ${queries.protocolName}
</#if>

public constructor(stage: Stage) : super(stage){
<#if useAutoDispatch>
this.$stage = super.stage()
this.$logger = super.logger()
</#if>
<#if queries?has_content && !queries.empty>
this.$queries = ${storeProviderName}.instance().${queries.attributeName}
</#if>
public constructor(stage: Stage<#if queries?has_content && !queries.empty>, ${queries.attributeName}: ${queries.protocolName}</#if>) : super(stage){
<#if useAutoDispatch>
this.$stage = super.stage()
this.$logger = super.logger()
</#if>
<#if queries?has_content && !queries.empty>
this.$queries = ${queries.attributeName}
</#if>
}

<#list routeMethods as routeMethod>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/codegen/kotlin/XoomInitializer.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public class XoomInitializer : XoomInitializationAware {
val ${registry.objectName}: ${registry.className} = ${registry.className}(world)
</#list>
<#list providers as provider>
${provider.className}.using(${provider.arguments})
val ${provider.objectName}: ${provider.className} = ${provider.className}.using(${provider.arguments});
</#list>

<#list restResources as restResource>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ public class AuthorResource extends DynamicResourceHandler {
private final Grid grid;
private final AuthorQueries $queries;

public AuthorResource(final Grid grid) {
super(grid.world().stage());
this.grid = grid;
this.$queries = QueryModelStateStoreProvider.instance().authorQueries;
public AuthorResource(final Grid grid, final AuthorQueries authorQueries) {
super(grid.world().stage());
this.grid = grid;
this.$queries = authorQueries;
}

public Completes<Response> withName(final AuthorData data) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,11 @@ public class XoomInitializer implements XoomInitializationAware {
exchangeInitializer.init(grid);

final StatefulTypeRegistry statefulTypeRegistry = new StatefulTypeRegistry(grid.world());
QueryModelStateStoreProvider.using(grid.world().stage(), statefulTypeRegistry);
CommandModelStateStoreProvider.using(grid.world().stage(), statefulTypeRegistry, exchangeInitializer.dispatcher());
final QueryModelStateStoreProvider queryModelStateStoreProvider = QueryModelStateStoreProvider.using(grid.world().stage(), statefulTypeRegistry);
final CommandModelStateStoreProvider commandModelStateStoreProvider = CommandModelStateStoreProvider.using(grid.world().stage(), statefulTypeRegistry, exchangeInitializer.dispatcher());

final AuthorResource authorResource = new AuthorResource(grid);
final BookResource bookResource = new BookResource(grid);
final AuthorResource authorResource = new AuthorResource(grid, queryModelStateStoreProvider.authorQueries);
final BookResource bookResource = new BookResource(grid, queryModelStateStoreProvider.bookQueries);

final Collection<Resource<?>> sseResources = Loader.resourcesFrom(initializer.sseConfiguration()).values();
final Collection<Resource<?>> feedResources = Loader.resourcesFrom(initializer.feedConfiguration()).values();
Expand Down