public final void initialize(@NonNull final Realm realm) {
    Contracts.requireNonNull(realm, "realm == null");

    synchronized (_lock$maximumKeys) {
      if (_initialized) {
        throw new IllegalStateException(RealmIdGenerator.class + " is already initialized.");
      }

      final val maximumKeys = getMaximumKeys();

      final val configuration = realm.getConfiguration();
      final val realmSchema = realm.getSchema();
      for (final val modelClass : configuration.getRealmObjectClasses()) {
        final val objectSchema = realmSchema.get(modelClass.getSimpleName());
        if (objectSchema.hasPrimaryKey()) {
          final val primaryKeyField = objectSchema.getPrimaryKey();
          final val primaryKey = realm.where(modelClass).max(primaryKeyField);

          final long primaryKeyValue;
          if (primaryKey != null) {
            primaryKeyValue = primaryKey.longValue();
          } else {
            primaryKeyValue = 0L;
          }

          maximumKeys.put(modelClass, new AtomicLong(primaryKeyValue));
        }
      }

      _initialized = true;
    }
  }
Пример #2
0
 /**
  * Sets a reference to another object on the given field.
  *
  * @param fieldName the field name.
  * @param value the object to link to.
  * @throws IllegalArgumentException if field name doesn't exists, it doesn't link to other Realm
  *     objects, or the type of DynamicRealmObject doesn't match.
  */
 public void setObject(String fieldName, DynamicRealmObject value) {
   long columnIndex = row.getColumnIndex(fieldName);
   if (value == null) {
     row.nullifyLink(columnIndex);
   } else {
     if (value.realm == null || value.row == null) {
       throw new IllegalArgumentException(
           "Cannot link to objects that are not part of the Realm.");
     }
     if (!realm.getConfiguration().equals(value.realm.getConfiguration())) {
       throw new IllegalArgumentException("Cannot add an object from another Realm");
     }
     Table table = row.getTable();
     Table inputTable = value.row.getTable();
     if (!table.hasSameSchema(inputTable)) {
       throw new IllegalArgumentException(
           String.format(
               "Type of object is wrong. Was %s, expected %s",
               inputTable.getName(), table.getName()));
     }
     row.setLink(columnIndex, value.row.getIndex());
   }
 }