org.apache.cayenne.ashwood

## Class AshwoodEntitySorter

- java.lang.Object
- - org.apache.cayenne.ashwood.AshwoodEntitySorter

- All Implemented Interfaces:
    EntitySorter
  Direct Known Subclasses:
    WeightedAshwoodEntitySorter

      public class AshwoodEntitySorter
      extends Object
      implements EntitySorter

  Implements dependency sorting algorithms for ObjEntities, DbEntities and DataObjects. Presently it works for acyclic database schemas with possible multi-reflexive tables.
  Since:
    3.1

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Map<DbEntity,org.apache.cayenne.ashwood.AshwoodEntitySorter.ComponentRecord>` | `components`
    `protected Comparator<DbEntity>` | `dbEntityComparator`
    `protected EntityResolver` | `entityResolver`
    `protected Comparator<ObjEntity>` | `objEntityComparator`
    `protected Map<DbEntity,List<DbRelationship>>` | `reflexiveDbEntities`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AshwoodEntitySorter()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected <E> Digraph<E,Boolean>` | `buildDigraph(ObjEntity objEntity, List<E> objects, Function<E,Persistent> converter)`
    `protected void` | `doIndexSorter()` Reindexes internal sorter without synchronization.
    `protected Persistent` | `findReflexiveMaster(Persistent object, ObjRelationship toOneRel, String targetEntityName)`
    `Comparator<DbEntity>` | `getDbEntityComparator()`
    `protected Comparator<DbEntity>` | `getDbEntityComparator(boolean dependantFirst)`
    `Comparator<ObjEntity>` | `getObjEntityComparator()`
    `protected Comparator<ObjEntity>` | `getObjEntityComparator(boolean dependantFirst)`
    `protected String[]` | `getReflexiveRelationshipsNames(ObjEntity objEntity)`
    `protected void` | `indexSorter()` Reindexes internal sorter in a thread-safe manner.
    `boolean` | `isReflexive(DbEntity metadata)`
    `void` | `setEntityResolver(EntityResolver entityResolver)` Sets EntityResolver for this sorter.
    `void` | `sortDbEntities(List<DbEntity> dbEntities, boolean deleteOrder)` Sorts a list of DbEntities.
    `void` | `sortObjectsForEntity(ObjEntity objEntity, List<?> objects, boolean deleteOrder)` Sorts a list of objects belonging to the ObjEntity.
    `protected <E> void` | `sortObjectsForEntity(ObjEntity objEntity, List<E> objects, boolean deleteOrder, Function<E,Persistent> converter)`
    `void` | `sortObjEntities(List<ObjEntity> objEntities, boolean deleteOrder)` Sorts a list of ObjEntities.
    `protected <E> boolean` | `topologicalSort(List<E> data, Digraph<E,Boolean> graph, boolean reverse)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### entityResolver

          protected EntityResolver entityResolver

    - #### components

          protected Map<DbEntity,org.apache.cayenne.ashwood.AshwoodEntitySorter.ComponentRecord> components

    - #### reflexiveDbEntities

          protected Map<DbEntity,List<DbRelationship>> reflexiveDbEntities

    - #### dbEntityComparator

          protected Comparator<DbEntity> dbEntityComparator

    - #### objEntityComparator

          protected Comparator<ObjEntity> objEntityComparator

  - ### Constructor Detail

    - #### AshwoodEntitySorter

          public AshwoodEntitySorter()

  - ### Method Detail

    - #### indexSorter

          protected void indexSorter()

      Reindexes internal sorter in a thread-safe manner.

    - #### doIndexSorter

          protected void doIndexSorter()

      Reindexes internal sorter without synchronization.

    - #### setEntityResolver

          public void setEntityResolver(EntityResolver entityResolver)

      Description copied from interface: `EntitySorter`
      Sets EntityResolver for this sorter. All entities present in the resolver will be used to determine sort ordering.
      Specified by:
        `setEntityResolver` in interface `EntitySorter`
      Since:
        3.1

    - #### sortDbEntities

          public void sortDbEntities(List<DbEntity> dbEntities,
                                     boolean deleteOrder)

      Description copied from interface: `EntitySorter`
      Sorts a list of DbEntities.
      Specified by:
        `sortDbEntities` in interface `EntitySorter`

    - #### sortObjEntities

          public void sortObjEntities(List<ObjEntity> objEntities,
                                      boolean deleteOrder)

      Description copied from interface: `EntitySorter`
      Sorts a list of ObjEntities.
      Specified by:
        `sortObjEntities` in interface `EntitySorter`

    - #### sortObjectsForEntity

          public void sortObjectsForEntity(ObjEntity objEntity,
                                           List<?> objects,
                                           boolean deleteOrder)

      Description copied from interface: `EntitySorter`
      Sorts a list of objects belonging to the ObjEntity.
      Specified by:
        `sortObjectsForEntity` in interface `EntitySorter`

    - #### sortObjectsForEntity

          protected <E> void sortObjectsForEntity(ObjEntity objEntity,
                                                  List<E> objects,
                                                  boolean deleteOrder,
                                                  Function<E,Persistent> converter)

    - #### buildDigraph

          protected <E> Digraph<E,Boolean> buildDigraph(ObjEntity objEntity,
                                                        List<E> objects,
                                                        Function<E,Persistent> converter)

    - #### topologicalSort

          protected <E> boolean topologicalSort(List<E> data,
                                                Digraph<E,Boolean> graph,
                                                boolean reverse)

    - #### getReflexiveRelationshipsNames

          protected String[] getReflexiveRelationshipsNames(ObjEntity objEntity)

    - #### findReflexiveMaster

          protected Persistent findReflexiveMaster(Persistent object,
                                                   ObjRelationship toOneRel,
                                                   String targetEntityName)

    - #### getDbEntityComparator

          public Comparator<DbEntity> getDbEntityComparator()

      Specified by:
        `getDbEntityComparator` in interface `EntitySorter`
      Returns:
        comparator for `DbEntity`

    - #### getObjEntityComparator

          public Comparator<ObjEntity> getObjEntityComparator()

      Specified by:
        `getObjEntityComparator` in interface `EntitySorter`
      Returns:
        comparator for `ObjEntity`

    - #### getDbEntityComparator

          protected Comparator<DbEntity> getDbEntityComparator(boolean dependantFirst)

    - #### getObjEntityComparator

          protected Comparator<ObjEntity> getObjEntityComparator(boolean dependantFirst)

    - #### isReflexive

          public boolean isReflexive(DbEntity metadata)

      Specified by:
        `isReflexive` in interface `EntitySorter`
      Parameters:
        `metadata` - to check
      Returns:
        is entity has reflexive relationships

Copyright © 2001–2021 Apache Cayenne. All rights reserved.