3838// Note: IdUid is a struct, not a table, and thus must be inlined
3939
4040/**
41- * Builds a flatbuffer representation of the database model to be passed when opening a store .
41+ * Builds a flatbuffer representation of the database model to be passed to {@link BoxStoreBuilder} .
4242 * <p>
4343 * This is an internal API that should only be called by the generated MyObjectBox code.
4444 */
4545@ Internal
4646public class ModelBuilder {
47- private static final int MODEL_VERSION = 2 ;
47+ private static final String DEFAULT_MODEL_NAME = "default" ;
48+ private static final int DEFAULT_MODEL_VERSION = 2 ;
4849
4950 private final FlatBufferBuilder fbb = new FlatBufferBuilder ();
5051 private final List <Integer > entityOffsets = new ArrayList <>();
5152
52- private long version = 1 ;
53+ private long version = DEFAULT_MODEL_VERSION ;
5354
5455 private Integer lastEntityId ;
5556 private Long lastEntityUid ;
@@ -104,28 +105,37 @@ public final int finish() {
104105
105106 public static class PropertyBuilder extends PartBuilder {
106107
107- private final int type ;
108- private final int virtualTargetOffset ;
109108 private final int propertyNameOffset ;
110109 private final int targetEntityOffset ;
110+ private final int virtualTargetOffset ;
111+ private final int type ;
111112
112113 private int secondaryNameOffset ;
113- private int flags ;
114114 private int id ;
115115 private long uid ;
116116 private int indexId ;
117117 private long indexUid ;
118118 private int indexMaxValueLength ;
119- private int externalPropertyType ;
119+ private int externalType ;
120120 private int hnswParamsOffset ;
121+ private int flags ;
121122
122123 private PropertyBuilder (FlatBufferBuilder fbb , String name , @ Nullable String targetEntityName ,
123124 @ Nullable String virtualTarget , int type ) {
124125 super (fbb );
125- this .type = type ;
126126 propertyNameOffset = fbb .createString (name );
127127 targetEntityOffset = targetEntityName != null ? fbb .createString (targetEntityName ) : 0 ;
128128 virtualTargetOffset = virtualTarget != null ? fbb .createString (virtualTarget ) : 0 ;
129+ this .type = type ;
130+ }
131+
132+ /**
133+ * Sets the Java name of a renamed property when using {@link io.objectbox.annotation.NameInDb}.
134+ */
135+ public PropertyBuilder secondaryName (String secondaryName ) {
136+ checkNotFinished ();
137+ secondaryNameOffset = getFbb ().createString (secondaryName );
138+ return this ;
129139 }
130140
131141 public PropertyBuilder id (int id , long uid ) {
@@ -153,9 +163,9 @@ public PropertyBuilder indexMaxValueLength(int indexMaxValueLength) {
153163 *
154164 * @return this builder.
155165 */
156- public PropertyBuilder externalType (int externalPropertyType ) {
166+ public PropertyBuilder externalType (int externalType ) {
157167 checkNotFinished ();
158- this .externalPropertyType = externalPropertyType ;
168+ this .externalType = externalType ;
159169 return this ;
160170 }
161171
@@ -204,31 +214,23 @@ public PropertyBuilder hnswParams(long dimensions,
204214 return this ;
205215 }
206216
217+ /**
218+ * One or more of {@link io.objectbox.model.PropertyFlags}.
219+ */
207220 public PropertyBuilder flags (int flags ) {
208221 checkNotFinished ();
209222 this .flags = flags ;
210223 return this ;
211224 }
212225
213- public PropertyBuilder secondaryName (String secondaryName ) {
214- checkNotFinished ();
215- secondaryNameOffset = getFbb ().createString (secondaryName );
216- return this ;
217- }
218-
219226 @ Override
220227 public int createFlatBufferTable (FlatBufferBuilder fbb ) {
221228 ModelProperty .startModelProperty (fbb );
222229 ModelProperty .addName (fbb , propertyNameOffset );
223- if (targetEntityOffset != 0 ) {
224- ModelProperty .addTargetEntity (fbb , targetEntityOffset );
225- }
226- if (virtualTargetOffset != 0 ) {
227- ModelProperty .addVirtualTarget (fbb , virtualTargetOffset );
228- }
229- if (secondaryNameOffset != 0 ) {
230- ModelProperty .addNameSecondary (fbb , secondaryNameOffset );
231- }
230+ if (targetEntityOffset != 0 ) ModelProperty .addTargetEntity (fbb , targetEntityOffset );
231+ if (virtualTargetOffset != 0 ) ModelProperty .addVirtualTarget (fbb , virtualTargetOffset );
232+ ModelProperty .addType (fbb , type );
233+ if (secondaryNameOffset != 0 ) ModelProperty .addNameSecondary (fbb , secondaryNameOffset );
232234 if (id != 0 ) {
233235 int idOffset = IdUid .createIdUid (fbb , id , uid );
234236 ModelProperty .addId (fbb , idOffset );
@@ -237,19 +239,10 @@ public int createFlatBufferTable(FlatBufferBuilder fbb) {
237239 int indexIdOffset = IdUid .createIdUid (fbb , indexId , indexUid );
238240 ModelProperty .addIndexId (fbb , indexIdOffset );
239241 }
240- if (indexMaxValueLength > 0 ) {
241- ModelProperty .addMaxIndexValueLength (fbb , indexMaxValueLength );
242- }
243- if (externalPropertyType != 0 ) {
244- ModelProperty .addExternalType (fbb , externalPropertyType );
245- }
246- if (hnswParamsOffset != 0 ) {
247- ModelProperty .addHnswParams (fbb , hnswParamsOffset );
248- }
249- ModelProperty .addType (fbb , type );
250- if (flags != 0 ) {
251- ModelProperty .addFlags (fbb , flags );
252- }
242+ if (indexMaxValueLength > 0 ) ModelProperty .addMaxIndexValueLength (fbb , indexMaxValueLength );
243+ if (externalType != 0 ) ModelProperty .addExternalType (fbb , externalType );
244+ if (hnswParamsOffset != 0 ) ModelProperty .addHnswParams (fbb , hnswParamsOffset );
245+ if (flags != 0 ) ModelProperty .addFlags (fbb , flags );
253246 return ModelProperty .endModelProperty (fbb );
254247 }
255248 }
@@ -261,7 +254,8 @@ public static class RelationBuilder extends PartBuilder {
261254 private final long relationUid ;
262255 private final int targetEntityId ;
263256 private final long targetEntityUid ;
264- private int externalPropertyType ;
257+
258+ private int externalType ;
265259
266260 private RelationBuilder (FlatBufferBuilder fbb , String name , int relationId , long relationUid ,
267261 int targetEntityId , long targetEntityUid ) {
@@ -278,9 +272,9 @@ private RelationBuilder(FlatBufferBuilder fbb, String name, int relationId, long
278272 *
279273 * @return this builder.
280274 */
281- public RelationBuilder externalType (int externalPropertyType ) {
275+ public RelationBuilder externalType (int externalType ) {
282276 checkNotFinished ();
283- this .externalPropertyType = externalPropertyType ;
277+ this .externalType = externalType ;
284278 return this ;
285279 }
286280
@@ -294,30 +288,27 @@ public int createFlatBufferTable(FlatBufferBuilder fbb) {
294288 ModelRelation .addId (fbb , relationIdOffset );
295289 int targetEntityIdOffset = IdUid .createIdUid (fbb , targetEntityId , targetEntityUid );
296290 ModelRelation .addTargetEntityId (fbb , targetEntityIdOffset );
297- if (externalPropertyType != 0 ) {
298- ModelRelation .addExternalType (fbb , externalPropertyType );
299- }
291+ if (externalType != 0 ) ModelRelation .addExternalType (fbb , externalType );
300292 return ModelRelation .endModelRelation (fbb );
301293 }
302294 }
303295
304296 public static class EntityBuilder extends PartBuilder {
305297
306298 private final ModelBuilder model ;
307- final String name ;
308- final List <Integer > propertyOffsets = new ArrayList <>();
309- final List <Integer > relationOffsets = new ArrayList <>();
310-
311- Integer id ;
312- Long uid ;
313- Integer flags ;
314- Integer lastPropertyId ;
315- Long lastPropertyUid ;
316- @ Nullable PropertyBuilder propertyBuilder ;
317- @ Nullable RelationBuilder relationBuilder ;
318- boolean finished ;
319-
320- EntityBuilder (ModelBuilder model , FlatBufferBuilder fbb , String name ) {
299+ private final String name ;
300+ private final List <Integer > propertyOffsets = new ArrayList <>();
301+ private final List <Integer > relationOffsets = new ArrayList <>();
302+
303+ private Integer id ;
304+ private Long uid ;
305+ private Integer lastPropertyId ;
306+ private Long lastPropertyUid ;
307+ private Integer flags ;
308+ @ Nullable private PropertyBuilder propertyBuilder ;
309+ @ Nullable private RelationBuilder relationBuilder ;
310+
311+ private EntityBuilder (ModelBuilder model , FlatBufferBuilder fbb , String name ) {
321312 super (fbb );
322313 this .model = model ;
323314 this .name = name ;
@@ -337,6 +328,9 @@ public EntityBuilder lastPropertyId(int lastPropertyId, long lastPropertyUid) {
337328 return this ;
338329 }
339330
331+ /**
332+ * One or more of {@link io.objectbox.model.EntityFlags}.
333+ */
340334 public EntityBuilder flags (int flags ) {
341335 this .flags = flags ;
342336 return this ;
@@ -350,6 +344,14 @@ public PropertyBuilder property(String name, @Nullable String targetEntityName,
350344 return property (name , targetEntityName , null , type );
351345 }
352346
347+ /**
348+ * @param name The name of this property in the database.
349+ * @param targetEntityName For {@link io.objectbox.model.PropertyType#Relation}, the name of the target entity.
350+ * @param virtualTarget For {@link io.objectbox.model.PropertyType#Relation}, if this property does not really
351+ * exist in the source code and is a virtual one, the name of the field this is based on that actually exists.
352+ * Currently used for ToOne fields that create virtual target ID properties.
353+ * @param type The {@link io.objectbox.model.PropertyType}.
354+ */
353355 public PropertyBuilder property (String name , @ Nullable String targetEntityName , @ Nullable String virtualTarget ,
354356 int type ) {
355357 checkNotFinished ();
@@ -392,12 +394,12 @@ public ModelBuilder entityDone() {
392394
393395 @ Override
394396 public int createFlatBufferTable (FlatBufferBuilder fbb ) {
395- int testEntityNameOffset = fbb .createString (name );
397+ int nameOffset = fbb .createString (name );
396398 int propertiesOffset = model .createVector (propertyOffsets );
397399 int relationsOffset = relationOffsets .isEmpty () ? 0 : model .createVector (relationOffsets );
398400
399401 ModelEntity .startModelEntity (fbb );
400- ModelEntity .addName (fbb , testEntityNameOffset );
402+ ModelEntity .addName (fbb , nameOffset );
401403 ModelEntity .addProperties (fbb , propertiesOffset );
402404 if (relationsOffset != 0 ) ModelEntity .addRelations (fbb , relationsOffset );
403405 if (id != null && uid != null ) {
@@ -408,9 +410,7 @@ public int createFlatBufferTable(FlatBufferBuilder fbb) {
408410 int idOffset = IdUid .createIdUid (fbb , lastPropertyId , lastPropertyUid );
409411 ModelEntity .addLastPropertyId (fbb , idOffset );
410412 }
411- if (flags != null ) {
412- ModelEntity .addFlags (fbb , flags );
413- }
413+ if (flags != null ) ModelEntity .addFlags (fbb , flags );
414414 return ModelEntity .endModelEntity (fbb );
415415 }
416416
@@ -452,11 +452,11 @@ public ModelBuilder lastRelationId(int lastRelationId, long lastRelationUid) {
452452 }
453453
454454 public byte [] build () {
455- int nameOffset = fbb .createString ("default" );
455+ int nameOffset = fbb .createString (DEFAULT_MODEL_NAME );
456456 int entityVectorOffset = createVector (entityOffsets );
457457 Model .startModel (fbb );
458458 Model .addName (fbb , nameOffset );
459- Model .addModelVersion (fbb , MODEL_VERSION );
459+ Model .addModelVersion (fbb , version );
460460 Model .addVersion (fbb , 1 );
461461 Model .addEntities (fbb , entityVectorOffset );
462462 if (lastEntityId != null ) {
0 commit comments