Package org.apache.cayenne.ashwood
Class AshwoodEntitySorter
java.lang.Object
org.apache.cayenne.ashwood.AshwoodEntitySorter
- All Implemented Interfaces:
EntitySorter
- Direct Known Subclasses:
WeightedAshwoodEntitySorter
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
FieldsModifier and TypeFieldDescriptionprotected Comparator<DbEntity> protected EntityResolverprotected Comparator<ObjEntity> protected Map<DbEntity, List<DbRelationship>> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbuildDigraph(ObjEntity objEntity, List<E> objects, Function<E, Persistent> converter) protected voidReindexes internal sorter without synchronization.protected PersistentfindReflexiveMaster(Persistent object, ObjRelationship toOneRel, String targetEntityName) protected Comparator<DbEntity> getDbEntityComparator(boolean dependantFirst) protected Comparator<ObjEntity> getObjEntityComparator(boolean dependantFirst) protected String[]getReflexiveRelationshipsNames(ObjEntity objEntity) protected voidReindexes internal sorter in a thread-safe manner.booleanisReflexive(DbEntity metadata) voidsetEntityResolver(EntityResolver entityResolver) Sets EntityResolver for this sorter.voidsortDbEntities(List<DbEntity> dbEntities, boolean deleteOrder) Sorts a list of DbEntities.voidsortObjectsForEntity(ObjEntity objEntity, List<?> objects, boolean deleteOrder) Sorts a list of objects belonging to the ObjEntity.protected <E> voidsortObjectsForEntity(ObjEntity objEntity, List<E> objects, boolean deleteOrder, Function<E, Persistent> converter) voidsortObjEntities(List<ObjEntity> objEntities, boolean deleteOrder) Sorts a list of ObjEntities.protected <E> booleantopologicalSort(List<E> data, Digraph<E, Boolean> graph, boolean reverse)
-
Field Details
-
entityResolver
-
components
-
reflexiveDbEntities
-
dbEntityComparator
-
objEntityComparator
-
-
Constructor Details
-
AshwoodEntitySorter
public AshwoodEntitySorter()
-
-
Method Details
-
indexSorter
protected void indexSorter()Reindexes internal sorter in a thread-safe manner. -
doIndexSorter
protected void doIndexSorter()Reindexes internal sorter without synchronization. -
setEntityResolver
Description copied from interface:EntitySorterSets EntityResolver for this sorter. All entities present in the resolver will be used to determine sort ordering.- Specified by:
setEntityResolverin interfaceEntitySorter- Since:
- 3.1
-
sortDbEntities
Description copied from interface:EntitySorterSorts a list of DbEntities.- Specified by:
sortDbEntitiesin interfaceEntitySorter
-
sortObjEntities
Description copied from interface:EntitySorterSorts a list of ObjEntities.- Specified by:
sortObjEntitiesin interfaceEntitySorter
-
sortObjectsForEntity
Description copied from interface:EntitySorterSorts a list of objects belonging to the ObjEntity.- Specified by:
sortObjectsForEntityin interfaceEntitySorter
-
sortObjectsForEntity
protected <E> void sortObjectsForEntity(ObjEntity objEntity, List<E> objects, boolean deleteOrder, Function<E, Persistent> converter) -
buildDigraph
-
topologicalSort
-
getReflexiveRelationshipsNames
-
findReflexiveMaster
protected Persistent findReflexiveMaster(Persistent object, ObjRelationship toOneRel, String targetEntityName) -
getDbEntityComparator
- Specified by:
getDbEntityComparatorin interfaceEntitySorter- Returns:
- comparator for
DbEntity
-
getObjEntityComparator
- Specified by:
getObjEntityComparatorin interfaceEntitySorter- Returns:
- comparator for
ObjEntity
-
getDbEntityComparator
-
getObjEntityComparator
-
isReflexive
- Specified by:
isReflexivein interfaceEntitySorter- Parameters:
metadata- to check- Returns:
- is entity has reflexive relationships
-