-
Notifications
You must be signed in to change notification settings - Fork 9
/
StateStoreProvider.ftl
76 lines (63 loc) · 2.78 KB
/
StateStoreProvider.ftl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package ${packageName};
import java.util.Arrays;
<#list imports as import>
import ${import.qualifiedClassName};
</#list>
import io.vlingo.xoom.actors.Stage;
<#if persistentTypes?has_content>
import io.vlingo.xoom.symbio.store.state.StateTypeStateStoreMap;
</#if>
import io.vlingo.xoom.lattice.model.stateful.StatefulTypeRegistry;
<#if requireAdapters>
import io.vlingo.xoom.lattice.model.stateful.StatefulTypeRegistry.Info;
import io.vlingo.xoom.symbio.StateAdapterProvider;
</#if>
import io.vlingo.xoom.symbio.EntryAdapterProvider;
import io.vlingo.xoom.symbio.store.dispatch.Dispatcher;
import io.vlingo.xoom.symbio.store.dispatch.NoOpDispatcher;
import io.vlingo.xoom.symbio.store.state.StateStore;
import io.vlingo.xoom.turbo.ComponentRegistry;
import io.vlingo.xoom.turbo.actors.Settings;
import io.vlingo.xoom.turbo.storage.Model;
import io.vlingo.xoom.turbo.storage.StoreActorBuilder;
import io.vlingo.xoom.turbo.annotation.persistence.Persistence.StorageType;
@SuppressWarnings("all")
public class ${storeProviderName} {
public final StateStore store;
<#list queries as query>
public final ${query.protocolName} ${query.attributeName};
</#list>
public static ${storeProviderName} using(final Stage stage, final StatefulTypeRegistry registry) {
return using(stage, registry, new NoOpDispatcher());
}
public static ${storeProviderName} using(final Stage stage, final StatefulTypeRegistry registry, final Dispatcher ...dispatchers) {
if (ComponentRegistry.has(${storeProviderName}.class)) {
return ComponentRegistry.withType(${storeProviderName}.class);
}
<#if requireAdapters>
final StateAdapterProvider stateAdapterProvider = new StateAdapterProvider(stage.world());
<#list adapters as stateAdapter>
stateAdapterProvider.registerAdapter(${stateAdapter.sourceClass}.class, new ${stateAdapter.adapterClass}());
</#list>
</#if>
new EntryAdapterProvider(stage.world()); // future use
<#list persistentTypes as persistentType>
StateTypeStateStoreMap.stateTypeToStoreName(${persistentType}.class, ${persistentType}.class.getSimpleName());
</#list>
final StateStore store =
StoreActorBuilder.from(stage, Model.${model}, Arrays.asList(dispatchers), StorageType.STATE_STORE, Settings.properties(), true);
<#if requireAdapters>
<#list adapters as stateAdapter>
registry.register(new Info(store, ${stateAdapter.sourceClass}.class, ${stateAdapter.sourceClass}.class.getSimpleName()));
</#list>
</#if>
return new ${storeProviderName}(stage, store);
}
private ${storeProviderName}(final Stage stage, final StateStore store) {
this.store = store;
<#list queries as query>
this.${query.attributeName} = stage.actorFor(${query.protocolName}.class, ${query.actorName}.class, store);
</#list>
ComponentRegistry.register(getClass(), this);
}
}