public abstract class RealmObjectSchema extends Object
If this RealmObjectSchema
is retrieved from an immutable RealmSchema
, this RealmObjectSchema
will be immutable as well.
RealmMigration
Modifier and Type | Class and Description |
---|---|
static interface |
RealmObjectSchema.Function
Function interface, used when traversing all objects of the current class and apply a function on each.
|
Modifier and Type | Method and Description |
---|---|
abstract RealmObjectSchema |
addField(String fieldName,
Class<?> fieldType,
FieldAttribute... attributes)
Adds a new simple field to the RealmObject class.
|
abstract RealmObjectSchema |
addIndex(String fieldName)
Adds an index to a given field.
|
abstract RealmObjectSchema |
addPrimaryKey(String fieldName)
Adds a primary key to a given field.
|
abstract RealmObjectSchema |
addRealmListField(String fieldName,
Class<?> primitiveType)
Adds a new field that references a
RealmList with primitive values. |
abstract RealmObjectSchema |
addRealmListField(String fieldName,
RealmObjectSchema objectSchema)
Adds a new field that contains a
RealmList with references to other Realm model classes. |
abstract RealmObjectSchema |
addRealmObjectField(String fieldName,
RealmObjectSchema objectSchema)
Adds a new field that references another
RealmObject . |
String |
getClassName()
Returns the name of the RealmObject class being represented by this schema.
|
Set<String> |
getFieldNames()
Returns all fields in this class.
|
RealmFieldType |
getFieldType(String fieldName)
Returns the type used by the underlying storage engine to represent this field.
|
String |
getPrimaryKey()
Returns the name of the primary key field.
|
boolean |
hasField(String fieldName)
Tests if the class has field defined with the given name.
|
boolean |
hasIndex(String fieldName)
Checks if a given field has an index defined.
|
boolean |
hasPrimaryKey()
Checks if the class has a primary key defined.
|
boolean |
isEmbedded()
Returns
true if objects of this type are considered "embedded". |
boolean |
isNullable(String fieldName)
Checks if a given field is nullable i.e., it is allowed to contain
null values. |
boolean |
isPrimaryKey(String fieldName)
Checks if a given field is the primary key field.
|
boolean |
isRequired(String fieldName)
Checks if a given field is required i.e., it is not allowed to contain
null values. |
abstract RealmObjectSchema |
removeField(String fieldName)
Removes a field from the class.
|
abstract RealmObjectSchema |
removeIndex(String fieldName)
Removes an index from a given field.
|
abstract RealmObjectSchema |
removePrimaryKey()
Removes the primary key from this class.
|
abstract RealmObjectSchema |
renameField(String currentFieldName,
String newFieldName)
Renames a field from one name to another.
|
abstract RealmObjectSchema |
setClassName(String className)
Sets a new name for this RealmObject class.
|
void |
setEmbedded(boolean embedded)
Converts the class to be embedded or not.
|
abstract RealmObjectSchema |
setNullable(String fieldName,
boolean nullable)
Sets a field to be nullable i.e., it should be able to hold
null values. |
abstract RealmObjectSchema |
setRequired(String fieldName,
boolean required)
Sets a field to be required i.e., it is not allowed to hold
null values. |
abstract RealmObjectSchema |
transform(RealmObjectSchema.Function function)
Runs a transformation function on each RealmObject instance of the current class.
|
public String getClassName()
Realm
this name is the same as the RealmObject
class.DynamicRealm
this is the name used in all API methods requiring a class name.IllegalStateException
- if this schema defintion is no longer part of the Realm.public abstract RealmObjectSchema setClassName(String className)
className
- the new name for this class.IllegalArgumentException
- if className is null
or an empty string, or its length exceeds 56
characters.UnsupportedOperationException
- if this RealmObjectSchema
is immutable or from a synced Realm.RealmSchema.rename(String, String)
public abstract RealmObjectSchema addField(String fieldName, Class<?> fieldType, FieldAttribute... attributes)
RealmObject
for the list of supported types. If the field should allow null
values use the boxed
type instead e.g., Integer.class
instead of int.class
.
To add fields that reference other RealmObjects or RealmLists use
addRealmObjectField(String, RealmObjectSchema)
or addRealmListField(String, RealmObjectSchema)
instead.
fieldName
- name of the field to add.fieldType
- type of field to add. See RealmObject
for the full list.attributes
- set of attributes for this field.IllegalArgumentException
- if the type isn't supported, field name is illegal or a field with that name
already exists.UnsupportedOperationException
- if this RealmObjectSchema
is immutable or if adding a
a field with FieldAttribute.PRIMARY_KEY
attribute to a schema of a synced Realm.public abstract RealmObjectSchema addRealmObjectField(String fieldName, RealmObjectSchema objectSchema)
RealmObject
.fieldName
- name of the field to add.objectSchema
- schema for the Realm type being referenced.IllegalArgumentException
- if field name is illegal or a field with that name already exists.UnsupportedOperationException
- if this RealmObjectSchema
is immutable.public abstract RealmObjectSchema addRealmListField(String fieldName, RealmObjectSchema objectSchema)
RealmList
with references to other Realm model classes.
If the list contains primitive types, use addRealmListField(String, Class)
instead.
fieldName
- name of the field to add.objectSchema
- schema for the Realm type being referenced.IllegalArgumentException
- if the field name is illegal or a field with that name already exists.UnsupportedOperationException
- if this RealmObjectSchema
is immutable.public abstract RealmObjectSchema addRealmListField(String fieldName, Class<?> primitiveType)
RealmList
with primitive values. See RealmObject
for the
list of supported types.
Nullability of elements are defined by using the correct class e.g., Integer.class
instead of
int.class
. Alternatively setRequired(String, boolean)
can be used.
Example:
// Defines the list of Strings as being non null.
RealmObjectSchema schema = schema.create("Person")
.addRealmListField("children", String.class)
.setRequired("children", true)
If the list contains references to other Realm classes, use
addRealmListField(String, RealmObjectSchema)
instead.fieldName
- name of the field to add.primitiveType
- simple type of elements in the array.IllegalArgumentException
- if the field name is illegal, a field with that name already exists or
the element type isn't supported.UnsupportedOperationException
- if this RealmObjectSchema
is immutable.public abstract RealmObjectSchema removeField(String fieldName)
fieldName
- field name to remove.IllegalArgumentException
- if field name doesn't exist.UnsupportedOperationException
- if this RealmObjectSchema
is immutable or for a synced Realm.public abstract RealmObjectSchema renameField(String currentFieldName, String newFieldName)
currentFieldName
- field name to rename.newFieldName
- the new field name.IllegalArgumentException
- if field name doesn't exist or if the new field name already exists.UnsupportedOperationException
- if this RealmObjectSchema
is immutable or for a synced Realm.public boolean hasField(String fieldName)
fieldName
- field name to test.true
if the field exists, false
otherwise.public abstract RealmObjectSchema addIndex(String fieldName)
Index
annotation on the field.fieldName
- field to add index to.IllegalArgumentException
- if field name doesn't exist, the field cannot be indexed or it already has a
index defined.UnsupportedOperationException
- if this RealmObjectSchema
is immutable.public boolean hasIndex(String fieldName)
fieldName
- existing field name to check.true
if field is indexed, false
otherwise.IllegalArgumentException
- if field name doesn't exist.Index
public abstract RealmObjectSchema removeIndex(String fieldName)
@Index
annotation on the field.fieldName
- field to remove index from.IllegalArgumentException
- if field name doesn't exist or the field doesn't have an index.UnsupportedOperationException
- if this RealmObjectSchema
is immutable or of a synced Realm.public abstract RealmObjectSchema addPrimaryKey(String fieldName)
PrimaryKey
annotation on the field. Further, this implicitly adds Index
annotation to the field
as well.fieldName
- field to set as primary key.IllegalArgumentException
- if field name doesn't exist, the field cannot be a primary key or it already
has a primary key defined.UnsupportedOperationException
- if this RealmObjectSchema
is immutable or of a synced Realm.public abstract RealmObjectSchema removePrimaryKey()
PrimaryKey
annotation from the class. Further, this implicitly removes Index
annotation from
the field as well.IllegalArgumentException
- if the class doesn't have a primary key defined.UnsupportedOperationException
- if this RealmObjectSchema
is immutable or of a synced Realm.public abstract RealmObjectSchema setRequired(String fieldName, boolean required)
null
values. This is equivalent to switching
between boxed types and their primitive variant e.g., Integer
to int
.
If the type of designated field is a list of values (not RealmObject
s , specified nullability
only affects its elements, not the field itself. Value list itself is always non-nullable.
fieldName
- name of field in the class.required
- true
if field should be required, false
otherwise.IllegalArgumentException
- if the field name doesn't exist, cannot have the Required
annotation or
the field already have been set as required.UnsupportedOperationException
- if this RealmObjectSchema
is immutable.Required
public abstract RealmObjectSchema setNullable(String fieldName, boolean nullable)
null
values. This is equivalent to switching
between primitive types and their boxed variant e.g., int
to Integer
.
If the type of designated field is a list of values (not RealmObject
s , specified nullability
only affects its elements, not the field itself. Value list itself is always non-nullable.
fieldName
- name of field in the class.nullable
- true
if field should be nullable, false
otherwise.IllegalArgumentException
- if the field name doesn't exist, or cannot be set as nullable.UnsupportedOperationException
- if this RealmObjectSchema
is immutable.public boolean isRequired(String fieldName)
null
values.fieldName
- field to check.true
if it is required, false
otherwise.IllegalArgumentException
- if field name doesn't exist.setRequired(String, boolean)
public boolean isNullable(String fieldName)
null
values.fieldName
- field to check.true
if it is required, false
otherwise.IllegalArgumentException
- if field name doesn't exist.setNullable(String, boolean)
public boolean isPrimaryKey(String fieldName)
fieldName
- field to check.true
if it is the primary key field, false
otherwise.IllegalArgumentException
- if field name doesn't exist.addPrimaryKey(String)
public boolean hasPrimaryKey()
true
if a primary key is defined, false
otherwise.PrimaryKey
public String getPrimaryKey()
IllegalStateException
- if the class doesn't have a primary key defined.public Set<String> getFieldNames()
public abstract RealmObjectSchema transform(RealmObjectSchema.Function function)
DynamicRealmObject
.
There is no guarantees in which order the objects are returned.
function
- transformation function.UnsupportedOperationException
- if this RealmObjectSchema
is immutable.public RealmFieldType getFieldType(String fieldName)
fieldName
- name of the target field.public boolean isEmbedded()
true
if objects of this type are considered "embedded".
See RealmClass.embedded()
for further details.true
if objects of this type are embedded. false
if not.public void setEmbedded(boolean embedded)
A class can only be marked as embedded if the following invariants are satisfied:
IllegalStateException
will be thrown.
IllegalStateException
- if the class could not be converted because it broke some of the Embedded Objects invariants.RealmClass.embedded()