Skip to content

Commit cc1501a

Browse files
committed
Migrate to new RecordSpec API.
1 parent d6fde70 commit cc1501a

File tree

12 files changed

+48
-61
lines changed

12 files changed

+48
-61
lines changed

datastore/src/main/java/io/spine/server/storage/datastore/DatastoreStorageFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public BoundedContextBuilder configureTenantIndex(BoundedContextBuilder builder)
158158

159159
@Override
160160
public <I, R extends Message> RecordStorage<I, R>
161-
createRecordStorage(ContextSpec context, RecordSpec<I, R, ?> spec) {
161+
createRecordStorage(ContextSpec context, RecordSpec<I, R> spec) {
162162
checkNotNull(context);
163163
checkNotNull(spec);
164164
var config = configurationWith(context, spec);
@@ -170,7 +170,7 @@ public BoundedContextBuilder configureTenantIndex(BoundedContextBuilder builder)
170170
}
171171

172172
private <I, R extends Message>
173-
StorageConfiguration<I, R> configurationWith(ContextSpec context, RecordSpec<I, R, ?> spec) {
173+
StorageConfiguration<I, R> configurationWith(ContextSpec context, RecordSpec<I, R> spec) {
174174
var wrapper = wrapperFor(context);
175175
var recordType = spec.sourceType();
176176
var behavior = txSettings.find(recordType);

datastore/src/main/java/io/spine/server/storage/datastore/config/CustomStorages.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private CustomStorages(Builder builder) {
6868
* @return a callback to create a custom storage wrapped into {@code Optional},
6969
* or {@code Optional.empty()} in case none was found
7070
*/
71-
public <I, R extends Message> Optional<CreateStorage<I, R>> find(RecordSpec<I, R, ?> spec) {
71+
public <I, R extends Message> Optional<CreateStorage<I, R>> find(RecordSpec<I, R> spec) {
7272
var domainType = spec.sourceType();
7373
var optional = findValue(domainType);
7474
Optional<CreateStorage<I, R>> result =
@@ -117,7 +117,7 @@ Builder self() {
117117
* this builder.
118118
*/
119119
@Override
120-
public final CustomStorages build() {
120+
public CustomStorages build() {
121121
return new CustomStorages(this);
122122
}
123123
}

datastore/src/main/java/io/spine/server/storage/datastore/config/StorageConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public DsEntitySpec<I, R> recordSpec() {
8686
*/
8787
public Class<R> storedType() {
8888
return recordSpec.recordSpec()
89-
.storedType();
89+
.recordType();
9090
}
9191

9292
/**

datastore/src/main/java/io/spine/server/storage/datastore/delivery/DsSessionStorage.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import io.spine.server.ContextSpec;
3333
import io.spine.server.delivery.ShardIndex;
3434
import io.spine.server.delivery.ShardSessionRecord;
35-
import io.spine.server.storage.MessageRecordSpec;
35+
import io.spine.server.storage.RecordSpec;
3636
import io.spine.server.storage.RecordWithColumns;
3737
import io.spine.server.storage.datastore.DatastoreStorageFactory;
3838
import io.spine.server.storage.datastore.config.StorageConfiguration;
@@ -64,7 +64,7 @@ public final class DsSessionStorage
6464
extends DsRecordStorage<ShardIndex, ShardSessionRecord> {
6565

6666
private static final boolean multitenant = false;
67-
private final MessageRecordSpec<ShardIndex, ShardSessionRecord> spec;
67+
private final RecordSpec<ShardIndex, ShardSessionRecord> spec;
6868

6969
/**
7070
* Creates a new instance of this storage.
@@ -104,9 +104,9 @@ private static DsEntitySpec<ShardIndex, ShardSessionRecord> newRecordSpec() {
104104
return result;
105105
}
106106

107-
private static MessageRecordSpec<ShardIndex, ShardSessionRecord> messageSpec() {
107+
private static RecordSpec<ShardIndex, ShardSessionRecord> messageSpec() {
108108
@SuppressWarnings("ConstantConditions") /* Protobuf getters never return `nulls`. */
109-
var spec = new MessageRecordSpec<>(
109+
var spec = new RecordSpec<>(
110110
ShardIndex.class,
111111
ShardSessionRecord.class,
112112
ShardSessionRecord::getIndex,

datastore/src/main/java/io/spine/server/storage/datastore/record/DsEntitySpec.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
*/
5353
public final class DsEntitySpec<I, R extends Message> {
5454

55-
private final RecordSpec<I, R, ?> recordSpec;
55+
private final RecordSpec<I, R> recordSpec;
5656
private final RecordLayout<I, R> layout;
5757

5858
/**
@@ -63,7 +63,7 @@ public final class DsEntitySpec<I, R extends Message> {
6363
* @param layout
6464
* ancestor-children structure to use for Datastore Entities
6565
*/
66-
public DsEntitySpec(RecordSpec<I, R, ?> recordSpec, RecordLayout<I, R> layout) {
66+
public DsEntitySpec(RecordSpec<I, R> recordSpec, RecordLayout<I, R> layout) {
6767
this.recordSpec = checkNotNull(recordSpec);
6868
this.layout = checkNotNull(layout);
6969
}
@@ -75,14 +75,14 @@ public DsEntitySpec(RecordSpec<I, R, ?> recordSpec, RecordLayout<I, R> layout) {
7575
* @param recordSpec
7676
* specification telling which fields of Protobuf message to store in Datastore Entity
7777
*/
78-
public DsEntitySpec(RecordSpec<I, R, ?> recordSpec) {
78+
public DsEntitySpec(RecordSpec<I, R> recordSpec) {
7979
this(recordSpec, new FlatLayout<>(recordSpec.sourceType()));
8080
}
8181

8282
/**
8383
* Returns the storage specification for the persisted Protobuf message.
8484
*/
85-
public RecordSpec<I, R, ?> recordSpec() {
85+
public RecordSpec<I, R> recordSpec() {
8686
return recordSpec;
8787
}
8888

datastore/src/main/java/io/spine/server/storage/datastore/record/DsRecordStorage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public Iterator<I> index() {
102102
protected Iterator<I> index(RecordQuery<I, R> query) {
103103
var spec = recordSpec();
104104
var recordIterator = readAllRecords(query);
105-
var result = transform(recordIterator, spec::idFromRecord);
105+
var result = transform(recordIterator, spec::idValueIn);
106106
return result;
107107
}
108108

datastore/src/test/java/io/spine/server/storage/datastore/DatastoreStorageFactoryTest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import com.google.cloud.datastore.DatastoreOptions;
3131
import com.google.cloud.datastore.Key;
3232
import com.google.common.testing.NullPointerTester;
33-
import com.google.common.truth.Truth8;
3433
import io.spine.base.Identifier;
3534
import io.spine.core.TenantId;
3635
import io.spine.server.BoundedContext;
@@ -55,11 +54,12 @@
5554
import org.junit.jupiter.api.Test;
5655

5756
import static com.google.common.truth.Truth.assertThat;
57+
import static com.google.common.truth.Truth8.assertThat;
5858
import static io.spine.server.ContextSpec.multitenant;
5959
import static io.spine.server.storage.datastore.given.DatastoreStorageFactoryTestEnv.factoryFor;
6060
import static io.spine.server.storage.datastore.given.TestEnvironment.singleTenantSpec;
6161
import static io.spine.server.storage.datastore.given.TestRecordSpec.projectDetailsSpec;
62-
import static io.spine.server.storage.datastore.given.TestRecordSpec.stgProjectSpec;
62+
import static io.spine.server.storage.given.GivenStorageProject.messageSpec;
6363
import static io.spine.server.tenant.TenantAwareRunner.with;
6464
import static io.spine.testing.DisplayNames.NOT_ACCEPT_NULLS;
6565
import static io.spine.testing.server.storage.datastore.TestDatastores.defaultLocalProjectId;
@@ -85,7 +85,7 @@ final class DatastoreStorageFactoryTest {
8585
@DisplayName(NOT_ACCEPT_NULLS)
8686
void testNulls() {
8787
new NullPointerTester().setDefault(ContextSpec.class, singleTenantSpec())
88-
.setDefault(RecordSpec.class, stgProjectSpec())
88+
.setDefault(RecordSpec.class, messageSpec())
8989
.testAllPublicInstanceMethods(factory);
9090
}
9191

@@ -144,7 +144,7 @@ void namespaceForMultitenant() {
144144
var datastore = options.getService();
145145
var factory = factoryFor(datastore);
146146
var storage =
147-
factory.createRecordStorage(spec, stgProjectSpec());
147+
factory.createRecordStorage(spec, messageSpec());
148148
var key = writeForTenant(storage, tenant)
149149
.setNamespace(namespace + ".V" + tenant.getValue())
150150
.build();
@@ -162,7 +162,7 @@ void testDatastoreNamespaceInOptions() {
162162
var datastore = local();
163163
var factory = factoryFor(datastore);
164164
var storage =
165-
factory.createRecordStorage(spec, stgProjectSpec());
165+
factory.createRecordStorage(spec, messageSpec());
166166
var key = writeForTenant(storage, tenant)
167167
.setNamespace('V' + tenant.getValue())
168168
.build();
@@ -175,11 +175,11 @@ void testDatastoreNamespaceInOptions() {
175175
void testProduceBcBuilder() {
176176
DatastoreStorageFactory factory = TestDatastoreStorageFactory.local();
177177
var builder = BoundedContext.multitenant(testName());
178-
Truth8.assertThat(builder.tenantIndex())
178+
assertThat(builder.tenantIndex())
179179
.isEmpty();
180180
var updatedIndex = factory.configureTenantIndex(builder)
181181
.tenantIndex();
182-
Truth8.assertThat(updatedIndex)
182+
assertThat(updatedIndex)
183183
.isPresent();
184184
assertThat(updatedIndex.get()).isInstanceOf(TestNamespaceIndex.getType());
185185
}
@@ -194,14 +194,14 @@ void plainRecord() {
194194
var spec = ContextSpec.singleTenant(testName());
195195
var customStorage =
196196
InMemoryStorageFactory.newInstance()
197-
.createRecordStorage(spec, stgProjectSpec());
197+
.createRecordStorage(spec, messageSpec());
198198
var factory = DatastoreStorageFactory.newBuilder()
199199
.setDatastore(TestDatastores.local())
200200
.useRecordStorage(StgProjectId.class, StgProject.class,
201201
configuration -> customStorage)
202202
.build();
203203
var actualStorage =
204-
factory.createRecordStorage(spec, stgProjectSpec());
204+
factory.createRecordStorage(spec, messageSpec());
205205
assertThat(actualStorage).isEqualTo(customStorage);
206206
}
207207

datastore/src/test/java/io/spine/server/storage/datastore/given/DatastoreStorageFactoryTestEnv.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@
2727
package io.spine.server.storage.datastore.given;
2828

2929
import com.google.cloud.datastore.Datastore;
30-
import io.spine.server.entity.storage.EntityRecordSpec;
30+
import io.spine.server.entity.EntityRecord;
31+
import io.spine.server.entity.storage.SpecScanner;
3132
import io.spine.server.projection.Projection;
33+
import io.spine.server.storage.RecordSpec;
3234
import io.spine.server.storage.datastore.DatastoreStorageFactory;
3335
import io.spine.test.datastore.College;
3436
import io.spine.test.datastore.CollegeId;
@@ -62,16 +64,16 @@ public static DatastoreStorageFactory factoryFor(Datastore datastore) {
6264
public static class TestEntity
6365
extends Projection<StgProjectId, StgProject, StgProject.Builder> {
6466

65-
public static EntityRecordSpec<StgProjectId, StgProject, TestEntity> spec() {
66-
return EntityRecordSpec.of(TestEntity.class);
67+
public static RecordSpec<StgProjectId, EntityRecord> spec() {
68+
return SpecScanner.scan(TestEntity.class);
6769
}
6870
}
6971

7072
public static class DifferentTestEntity
7173
extends Projection<CollegeId, College, College.Builder> {
7274

73-
public static EntityRecordSpec<CollegeId, College, DifferentTestEntity> spec() {
74-
return EntityRecordSpec.of(DifferentTestEntity.class);
75+
public static RecordSpec<CollegeId, EntityRecord> spec() {
76+
return SpecScanner.scan(DifferentTestEntity.class);
7577
}
7678
}
7779
}

datastore/src/test/java/io/spine/server/storage/datastore/given/TestRecordSpec.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626

2727
package io.spine.server.storage.datastore.given;
2828

29-
import com.google.common.collect.ImmutableSet;
30-
import io.spine.server.entity.storage.EntityRecordSpec;
29+
import io.spine.server.entity.EntityRecord;
30+
import io.spine.server.entity.storage.SpecScanner;
3131
import io.spine.server.projection.Projection;
32-
import io.spine.server.storage.MessageRecordSpec;
32+
import io.spine.server.storage.RecordSpec;
3333
import io.spine.test.storage.StgProject;
3434
import io.spine.test.storage.StgProjectId;
3535

@@ -44,24 +44,12 @@ public final class TestRecordSpec {
4444
private TestRecordSpec() {
4545
}
4646

47-
/**
48-
* Creates a new {@code MessageRecordSpec} describing how instances of {@link StgProject}
49-
* message are stored.
50-
*
51-
* <p>Defines no record columns.
52-
*/
53-
public static MessageRecordSpec<StgProjectId, StgProject> stgProjectSpec() {
54-
return new MessageRecordSpec<>(
55-
StgProjectId.class, StgProject.class, StgProject::getId, ImmutableSet.of()
56-
);
57-
}
58-
5947
/**
6048
* Creates a new {@code EntityRecordSpec} describing how instances of {@link ProjectDetails}
6149
* projection are stored.
6250
*/
63-
public static EntityRecordSpec<StgProjectId, StgProject, ProjectDetails> projectDetailsSpec() {
64-
return EntityRecordSpec.of(ProjectDetails.class);
51+
public static RecordSpec<StgProjectId, EntityRecord> projectDetailsSpec() {
52+
return SpecScanner.scan(ProjectDetails.class);
6553
}
6654

6755
private static class ProjectDetails

datastore/src/test/java/io/spine/server/storage/datastore/record/DsRecordStorageTest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
package io.spine.server.storage.datastore.record;
2828

29-
import io.spine.core.Versions;
3029
import io.spine.environment.Tests;
3130
import io.spine.server.ServerEnvironment;
3231
import io.spine.server.storage.RecordStorageDelegateTest;
@@ -44,10 +43,11 @@
4443
import org.junit.jupiter.api.Test;
4544

4645
import static com.google.common.truth.Truth8.assertThat;
46+
import static io.spine.base.Identifier.newUuid;
4747
import static io.spine.base.Time.currentTime;
48-
import static io.spine.server.storage.given.StgColumn.due_date;
49-
import static io.spine.server.storage.given.StgColumn.project_version;
50-
import static io.spine.server.storage.given.StgColumn.status;
48+
import static io.spine.server.storage.given.GivenStorageProject.StgProjectColumns.due_date;
49+
import static io.spine.server.storage.given.GivenStorageProject.StgProjectColumns.name;
50+
import static io.spine.server.storage.given.GivenStorageProject.StgProjectColumns.status;
5151
import static org.junit.jupiter.api.Assertions.assertEquals;
5252

5353
@DisplayName("`DsRecordStorage` should")
@@ -107,12 +107,12 @@ public StgProject newRecord(StgProjectId id) {
107107
void testPersistColumns() {
108108
var id = newId();
109109
var project = newStorageRecord(id);
110-
var expectedVersion = Versions.newVersion(42, currentTime());
111110
var expectedDueDate = currentTime();
112111
var expectedStatus = StgProject.Status.STARTED;
112+
var expectedName = newUuid();
113113
project = project
114114
.toBuilder()
115-
.setProjectVersion(expectedVersion)
115+
.setName(expectedName)
116116
.setDueDate(expectedDueDate)
117117
.setStatus(expectedStatus)
118118
.build();
@@ -135,9 +135,9 @@ void testPersistColumns() {
135135
assertEquals(expectedStatus.name(),
136136
datastoreEntity.getString(status.name()
137137
.value()));
138-
assertEquals(expectedVersion.getNumber(),
139-
datastoreEntity.getLong(project_version.name()
140-
.value()));
138+
assertEquals(expectedName,
139+
datastoreEntity.getString(name.name()
140+
.value()));
141141
var actualDueDate =
142142
datastoreEntity.getTimestamp(due_date.name()
143143
.value());

0 commit comments

Comments
 (0)