Package io.permazen

Class ImportContext

java.lang.Object
io.permazen.ImportContext

public class ImportContext extends Object
Context for importing plain (POJO) objects into a PermazenTransaction.

Plain objects (POJO's) can be imported into a PermazenTransaction to the extent that the POJO class and the corresponding Permazen model class share the same properties. The simplest example of this is when the POJO class is also the Permazen model class (implying a non-abstract class; see also @PermazenType.autogenNonAbstract()). Also possible are POJO classes and model classes that implement common Java interfaces.

The ObjId for the corresponding imported Permazen object is determined by the configured objectIdMapper. If objectIdMapper returns null, the POJO is not imported, and nulls replace any copied references to it; otherwise, the returned object must exist in the transaction. If objectIdMapper is itself null, the default behavior is to create a new Permazen object using PermazenTransaction.create(Class), providing the POJO's class as the model class.

Instances ensure that an already-imported POJO will be recognized and not imported twice. Note this determination is based on object identity, not Object.equals(). The objectIdMapper is invoked at most once for any POJO.

Once the target object for a POJO has been identified, common properties are copied, overwriting any previous values. POJO properties that are not Permzen properties are ignored; conversely, properties that exist in the Permazen model object type but are missing in the POJO are left unmodified.

Permazen reference fields are automatically imported as POJO's, recursively. In other words, the entire transitive closure of POJO's reachable from an imported object is imported. Cycles in the graph of references are handled properly.

Conversion Details

Counter fields import from any Number property.
See Also:
  • Constructor Details

  • Method Details

    • getPermazenTransaction

      public PermazenTransaction getPermazenTransaction()
      Get the destination transaction for imported objects.
      Returns:
      associated transaction
    • getObjectMap

      public Map<Object,ObjId> getObjectMap()
      Get the mapping from already imported POJO's to their corresponding database objects.
      Returns:
      mapping from imported POJO to corresponding database object ID
    • importPlain

      public PermazenObject importPlain(Object obj)
      Import a plain Java object (POJO), along with all other objects reachable from it via copied reference fields.

      If obj has already been imported, the previously assigned PermazenObject is returned.

      Parameters:
      obj - object to import; must not be null
      Returns:
      imported object, or null if the objectIdMapper returned null for obj
      Throws:
      DeletedObjectException - if objectIdMapper returns the object ID of a non-existent object
      TypeNotInSchemaException - if objectIdMapper returns an object ID that does not corresponding to any Permazen model class
      IllegalArgumentException - if obj is null