Skip to content

Commit 5092bfb

Browse files
committed
Migrate to the new columns API
1 parent 48eeda1 commit 5092bfb

File tree

10 files changed

+71
-78
lines changed

10 files changed

+71
-78
lines changed

.idea/.name

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import io.spine.server.aggregate.AggregateStorage;
3333
import io.spine.server.delivery.InboxStorage;
3434
import io.spine.server.entity.Entity;
35-
import io.spine.server.entity.storage.TypeRegistry;
35+
import io.spine.server.entity.storage.ColumnConversionRules;
3636
import io.spine.server.projection.Projection;
3737
import io.spine.server.projection.ProjectionStorage;
3838
import io.spine.server.storage.RecordStorage;
@@ -43,7 +43,7 @@
4343
import io.spine.server.storage.datastore.tenant.NamespaceSupplier;
4444
import io.spine.server.storage.datastore.tenant.NsConverterFactory;
4545
import io.spine.server.storage.datastore.tenant.PrefixedNsConverterFactory;
46-
import io.spine.server.storage.datastore.type.DsTypeRegistry;
46+
import io.spine.server.storage.datastore.type.DsColumnConversionRules;
4747
import io.spine.server.tenant.TenantIndex;
4848

4949
import java.util.Map;
@@ -86,12 +86,12 @@ public class DatastoreStorageFactory implements StorageFactory {
8686
*/
8787
private final Map<Class<? extends Storage>, DatastoreWrapper> sysWrappers = newConcurrentMap();
8888

89-
private final TypeRegistry<Value<?>> typeRegistry;
89+
private final ColumnConversionRules<Value<?>> columnConversionRules;
9090

9191
private final NsConverterFactory converterFactory;
9292

9393
protected DatastoreStorageFactory(Builder builder) {
94-
this.typeRegistry = builder.typeRegistry;
94+
this.columnConversionRules = builder.columnConversionRules;
9595
this.datastore = builder.datastore;
9696
this.converterFactory = builder.converterFactory;
9797
}
@@ -156,8 +156,8 @@ public InboxStorage createInboxStorage(boolean multitenant) {
156156
return new DsInboxStorage(wrapper, multitenant);
157157
}
158158

159-
public TypeRegistry<Value<?>> getTypeRegistry() {
160-
return typeRegistry;
159+
public ColumnConversionRules<Value<?>> columnConversionRules() {
160+
return columnConversionRules;
161161
}
162162

163163
/**
@@ -168,7 +168,7 @@ S configure(B builder, Class<? extends Entity<I, ?>> cls, ContextSpec context) {
168168
builder.setModelClass(asEntityClass(cls))
169169
.setDatastore(wrapperFor(context))
170170
.setMultitenant(context.isMultitenant())
171-
.setColumnTypeRegistry(typeRegistry);
171+
.setColumnConversionRules(columnConversionRules);
172172
S storage = builder.build();
173173
return storage;
174174
}
@@ -268,7 +268,7 @@ public static Builder newBuilder() {
268268
public static class Builder {
269269

270270
private Datastore datastore;
271-
private TypeRegistry<Value<?>> typeRegistry;
271+
private ColumnConversionRules<Value<?>> columnConversionRules;
272272
private NamespaceConverter namespaceConverter;
273273
private NsConverterFactory converterFactory;
274274

@@ -296,17 +296,17 @@ public Datastore getDatastore() {
296296
}
297297

298298
/**
299-
* Sets a {@link TypeRegistry} for handling the Entity Columns.
299+
* Sets the {@link ColumnConversionRules}.
300300
*
301-
* <p>Default value is {@link DsTypeRegistry}.
301+
* <p>Default value is {@link DsColumnConversionRules}.
302302
*
303-
* @param typeRegistry
304-
* the type registry containing all the supported
305-
* {@linkplain io.spine.server.entity.storage.Column column} types
303+
* @param columnConversionRules
304+
* the conversion rules for entity columns
306305
* @return self for method chaining
307306
*/
308-
public Builder setTypeRegistry(TypeRegistry<Value<?>> typeRegistry) {
309-
this.typeRegistry = checkNotNull(typeRegistry);
307+
public Builder
308+
setColumnConversionRules(ColumnConversionRules<Value<?>> columnConversionRules) {
309+
this.columnConversionRules = checkNotNull(columnConversionRules);
310310
return this;
311311
}
312312

@@ -335,8 +335,8 @@ public Builder setNamespaceConverter(NamespaceConverter converter) {
335335
*/
336336
public DatastoreStorageFactory build() {
337337
checkNotNull(datastore);
338-
if (typeRegistry == null) {
339-
typeRegistry = new DsTypeRegistry();
338+
if (columnConversionRules == null) {
339+
columnConversionRules = new DsColumnConversionRules();
340340
}
341341
if (namespaceConverter == null) {
342342
converterFactory = NsConverterFactory.defaults();

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
import io.spine.client.OrderBy;
3232
import io.spine.client.ResponseFormat;
3333
import io.spine.server.entity.EntityRecord;
34+
import io.spine.server.entity.storage.ColumnConversionRules;
3435
import io.spine.server.entity.storage.EntityQuery;
3536
import io.spine.server.entity.storage.EntityRecordWithColumns;
3637
import io.spine.server.entity.storage.QueryParameters;
37-
import io.spine.server.entity.storage.TypeRegistry;
3838
import io.spine.server.storage.RecordStorage;
3939
import io.spine.type.TypeUrl;
4040
import org.checkerframework.checker.nullness.qual.Nullable;
@@ -70,7 +70,7 @@ public class DsRecordStorage<I> extends RecordStorage<I> {
7070
private final DsLookupByIds<I> idLookup;
7171
private final DsLookupByQueries queryLookup;
7272

73-
private final TypeRegistry<Value<?>> typeRegistry;
73+
private final ColumnConversionRules<Value<?>> columnConversionRules;
7474
private final FilterAdapter columnFilterAdapter;
7575

7676
/**
@@ -93,8 +93,8 @@ protected DsRecordStorage(
9393
this.typeUrl = TypeUrl.from(b.getDescriptor());
9494
this.idClass = checkNotNull(b.getIdClass());
9595
this.datastore = b.getDatastore();
96-
this.typeRegistry = checkNotNull(b.getColumnTypeRegistry());
97-
this.columnFilterAdapter = FilterAdapter.of(this.typeRegistry);
96+
this.columnConversionRules = checkNotNull(b.getColumnConversionRules());
97+
this.columnFilterAdapter = FilterAdapter.of(this.columnConversionRules);
9898
this.idLookup = new DsLookupByIds<>(this.datastore, this.typeUrl);
9999
this.queryLookup = new DsLookupByQueries(this.datastore, this.typeUrl,
100100
this.columnFilterAdapter);
@@ -269,7 +269,7 @@ protected Entity entityRecordToEntity(I id, EntityRecordWithColumns record) {
269269
private void populateFromStorageFields(BaseEntity.Builder<Key, Entity.Builder> entity,
270270
EntityRecordWithColumns record) {
271271
record.columnNames().forEach(columnName -> {
272-
Value<?> columnValue = record.columnValue(columnName, typeRegistry);
272+
Value<?> columnValue = record.columnValue(columnName, columnConversionRules);
273273
entity.set(columnName.value(), columnValue);
274274
});
275275
}

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

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,29 +25,25 @@
2525
import io.spine.client.Filter;
2626
import io.spine.protobuf.TypeConverter;
2727
import io.spine.server.entity.storage.Column;
28-
import io.spine.server.entity.storage.PersistenceStrategy;
29-
import io.spine.server.entity.storage.TypeRegistry;
28+
import io.spine.server.entity.storage.ColumnConversionRules;
29+
import io.spine.server.entity.storage.ConversionRule;
3030

3131
import static com.google.common.base.Preconditions.checkArgument;
3232
import static com.google.common.base.Preconditions.checkNotNull;
3333

3434
/**
35-
* A {@link TypeRegistry} based {@link Filter} to {@link Value} adapter.
35+
* A {@link Filter} to {@link Value} adapter based on {@link ColumnConversionRules}.
3636
*/
3737
final class FilterAdapter {
3838

39-
private final TypeRegistry<Value<?>> registry;
39+
private final ColumnConversionRules<Value<?>> conversionRules;
4040

41-
/**
42-
* Creates a new instance of {@code FilterAdapter} on top of the given
43-
* {@link TypeRegistry}.
44-
*/
45-
static FilterAdapter of(TypeRegistry<Value<?>> registry) {
46-
return new FilterAdapter(registry);
41+
static FilterAdapter of(ColumnConversionRules<Value<?>> conversionRules) {
42+
return new FilterAdapter(conversionRules);
4743
}
4844

49-
private FilterAdapter(TypeRegistry<Value<?>> registry) {
50-
this.registry = registry;
45+
private FilterAdapter(ColumnConversionRules<Value<?>> conversionRules) {
46+
this.conversionRules = conversionRules;
5147
}
5248

5349
/**
@@ -68,8 +64,8 @@ Value<?> toValue(Column column, Filter columnFilter) {
6864
Class<?> columnClass = column.type();
6965
Object filterValueUnpacked = TypeConverter.toObject(filterValue, columnClass);
7066

71-
PersistenceStrategy<?, ? extends Value<?>> strategy =
72-
registry.persistenceStrategyOf(filterValueUnpacked.getClass());
67+
ConversionRule<?, ? extends Value<?>> strategy =
68+
conversionRules.of(filterValueUnpacked.getClass());
7369
checkArgument(strategy != null, "Column of unknown type: %s.", column);
7470

7571
Value<?> result = strategy.applyTo(filterValueUnpacked);

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import com.google.protobuf.Descriptors.Descriptor;
2626
import io.spine.server.entity.Entity;
2727
import io.spine.server.entity.model.EntityClass;
28-
import io.spine.server.entity.storage.TypeRegistry;
28+
import io.spine.server.entity.storage.ColumnConversionRules;
2929
import io.spine.server.storage.RecordStorage;
3030
import io.spine.type.TypeUrl;
3131

@@ -47,7 +47,7 @@ abstract class RecordStorageBuilder<I,
4747
private Descriptor descriptor;
4848
private DatastoreWrapper datastore;
4949
private boolean multitenant;
50-
private TypeRegistry<Value<?>> columnTypeRegistry;
50+
private ColumnConversionRules<Value<?>> columnConversionRules;
5151
private Class<I> idClass;
5252
private EntityClass<?> entityClass;
5353

@@ -132,12 +132,12 @@ public B setMultitenant(boolean multitenant) {
132132
}
133133

134134
/**
135-
* Assigns the type registry of
135+
* Assigns the column conversion rules of
136136
* the {@linkplain io.spine.server.entity.storage.Column entity columns}.
137137
*/
138138
@CanIgnoreReturnValue
139-
public B setColumnTypeRegistry(TypeRegistry<Value<?>> columnTypeRegistry) {
140-
this.columnTypeRegistry = checkNotNull(columnTypeRegistry);
139+
public B setColumnConversionRules(ColumnConversionRules<Value<?>> columnConversionRules) {
140+
this.columnConversionRules = checkNotNull(columnConversionRules);
141141
return self();
142142
}
143143

@@ -164,11 +164,10 @@ public boolean isMultitenant() {
164164
}
165165

166166
/**
167-
* Obtains the type registry of
168-
* the {@linkplain io.spine.server.entity.storage.Column entity columns}.
167+
* Obtains the column conversion rules of the storage.
169168
*/
170-
public TypeRegistry<Value<?>> getColumnTypeRegistry() {
171-
return columnTypeRegistry;
169+
public ColumnConversionRules<Value<?>> getColumnConversionRules() {
170+
return columnConversionRules;
172171
}
173172

174173
/**
@@ -188,7 +187,7 @@ public EntityClass<?> getEntityClass() {
188187
final void checkRequiredFields() {
189188
checkNotNull(descriptor, "State descriptor is not set.");
190189
checkNotNull(datastore, "Datastore is not set.");
191-
checkNotNull(columnTypeRegistry, "Column type registry is not set.");
190+
checkNotNull(columnConversionRules, "Column conversion rules are not set.");
192191
}
193192

194193
abstract B self();

datastore/src/main/java/io/spine/server/storage/datastore/type/DsTypeRegistry.java renamed to datastore/src/main/java/io/spine/server/storage/datastore/type/DsColumnConversionRules.java

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34,91 +34,88 @@
3434
import com.google.protobuf.Message;
3535
import com.google.protobuf.Timestamp;
3636
import io.spine.core.Version;
37-
import io.spine.server.entity.storage.AbstractTypeRegistry;
38-
import io.spine.server.entity.storage.PersistenceStrategy;
39-
import io.spine.server.entity.storage.PersistenceStrategyOfNull;
37+
import io.spine.server.entity.storage.AbstractColumnConversionRules;
38+
import io.spine.server.entity.storage.ConversionRule;
4039
import io.spine.string.Stringifiers;
4140

42-
import java.util.function.Supplier;
43-
4441
import static com.google.cloud.Timestamp.ofTimeSecondsAndNanos;
4542

4643
/**
4744
* Non-{@code final}, implement to ..., maybe {@link io.spine.annotation.SPI}.
4845
*/
49-
public class DsTypeRegistry extends AbstractTypeRegistry<Value<?>> {
46+
public class DsColumnConversionRules extends AbstractColumnConversionRules<Value<?>> {
5047

5148
@Override
5249
protected void
53-
setupCustomStrategies(
54-
ImmutableMap.Builder<Class<?>, Supplier<PersistenceStrategy<?, ? extends Value<?>>>> builder) {
55-
builder.put(Timestamp.class, DsTypeRegistry::timestampPersistenceStrategy);
56-
builder.put(Version.class, DsTypeRegistry::versionPersistenceStrategy);
50+
setupCustomRules(
51+
ImmutableMap.Builder<Class<?>, ConversionRule<?, ? extends Value<?>>> builder) {
52+
builder.put(Timestamp.class, ofTimestamp());
53+
builder.put(Version.class, ofVersion());
5754
}
5855

5956
@Override
60-
protected PersistenceStrategy<String, StringValue> stringPersistenceStrategy() {
57+
protected ConversionRule<String, StringValue> ofString() {
6158
return StringValue::of;
6259
}
6360

6461
@Override
65-
protected PersistenceStrategy<Integer, LongValue> integerPersistenceStrategy() {
62+
protected ConversionRule<Integer, LongValue> ofInteger() {
6663
return LongValue::of;
6764
}
6865

6966
@Override
70-
protected PersistenceStrategy<Long, LongValue> longPersistenceStrategy() {
67+
protected ConversionRule<Long, LongValue> ofLong() {
7168
return LongValue::of;
7269
}
7370

7471
@Override
75-
protected PersistenceStrategy<Float, DoubleValue> floatPersistenceStrategy() {
72+
protected ConversionRule<Float, DoubleValue> ofFloat() {
7673
return DoubleValue::of;
7774
}
7875

7976
@Override
80-
protected PersistenceStrategy<Double, DoubleValue> doublePersistenceStrategy() {
77+
protected ConversionRule<Double, DoubleValue> ofDouble() {
8178
return DoubleValue::of;
8279
}
8380

8481
@Override
85-
protected PersistenceStrategy<Boolean, BooleanValue> booleanPersistenceStrategy() {
82+
protected ConversionRule<Boolean, BooleanValue> ofBoolean() {
8683
return BooleanValue::of;
8784
}
8885

8986
@Override
90-
protected PersistenceStrategy<ByteString, BlobValue> byteStringPersistenceStrategy() {
87+
protected ConversionRule<ByteString, BlobValue> ofByteString() {
9188
return bytes -> {
9289
Blob blob = Blob.copyFrom(bytes.asReadOnlyByteBuffer());
9390
return BlobValue.of(blob);
9491
};
9592
}
9693

9794
@Override
98-
protected PersistenceStrategy<Enum<?>, LongValue> enumPersistenceStrategy() {
95+
protected ConversionRule<Enum<?>, LongValue> ofEnum() {
9996
return anEnum -> LongValue.of(anEnum.ordinal());
10097
}
10198

10299
@Override
103-
protected PersistenceStrategy<Message, StringValue> messagePersistenceStrategy() {
100+
protected ConversionRule<Message, StringValue> ofMessage() {
104101
return msg -> {
105102
String str = Stringifiers.toString(msg);
106103
return StringValue.of(str);
107104
};
108105
}
109106

110107
@Override
111-
public PersistenceStrategyOfNull<NullValue> persistenceStrategyOfNull() {
112-
return NullValue::of;
108+
public ConversionRule<?, ? extends Value<?>> ofNull() {
109+
return o -> NullValue.of();
113110
}
114111

115-
private static PersistenceStrategy<Timestamp, TimestampValue> timestampPersistenceStrategy() {
112+
private static ConversionRule<Timestamp, TimestampValue> ofTimestamp() {
116113
return timestamp -> TimestampValue.of(
117114
ofTimeSecondsAndNanos(timestamp.getSeconds(), timestamp.getNanos())
118115
);
119116
}
120117

121-
private static PersistenceStrategy<Version, LongValue> versionPersistenceStrategy() {
118+
private static ConversionRule<Version, LongValue> ofVersion() {
122119
return version -> LongValue.of(version.getNumber());
123120
}
124121
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void testDefaultTypeRegistry() {
7373
.newBuilder()
7474
.setDatastore(datastore())
7575
.build();
76-
ColumnTypeRegistry registry = factory.getTypeRegistry();
76+
ColumnTypeRegistry registry = factory.columnConversionRules();
7777
assertNotNull(registry);
7878
}
7979

@@ -83,11 +83,11 @@ void testExtendedTypeRegistry() {
8383
DatastoreStorageFactory factory = DatastoreStorageFactory
8484
.newBuilder()
8585
.setDatastore(datastore())
86-
.setTypeRegistry(predefinedValuesAnd()
86+
.setColumnConversionRules(predefinedValuesAnd()
8787
.put(Byte.class, new ByteColumnType())
8888
.build())
8989
.build();
90-
ColumnTypeRegistry<?> registry = factory.getTypeRegistry();
90+
ColumnTypeRegistry<?> registry = factory.columnConversionRules();
9191
assertNotNull(registry);
9292
ColumnType type = registry.get(byteColumn());
9393
assertNotNull(type);

0 commit comments

Comments
 (0)