@SuppressWarnings("unchecked") @Override public Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> findReverseCompositions(TopiaDaoSupplier topiaDaoSupplier, TopiaEntity entity, Predicate<Class<? extends TopiaEntity>> entityTypeFilter) { Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>> builder = new LinkedHashMap<>(); TopiaEntityEnum targetEntityEnum = topiaEntityEnumProvider.getEntityEnum(entity.getClass()); Set<TopiaMetadataComposition> reverseCompositions = getMetadataModel().getReverseCompositions(targetEntityEnum.name()); for (TopiaMetadataComposition link : reverseCompositions) { TopiaMetadataEntity owner = link.getOwner(); TopiaEntityEnum sourceEntityEnum = topiaEntityEnumProvider.getEntityEnum(owner.getType()); Class<? extends TopiaEntity> sourceType = sourceEntityEnum.getContract(); TopiaDao<? extends TopiaEntity> dao = topiaDaoSupplier.getDao(sourceType); List<? extends TopiaEntity> entities = dao.forEquals(link.getTargetPropertyName(), entity).findAll(); if (!entities.isEmpty()) { builder.merge(sourceType, entities, (a, b) -> {a.addAll((List)b); return a;}); } } return builder; }
@Override public Map<Class<? extends TopiaEntity>, Long> countReverseAssociations(TopiaDaoSupplier topiaDaoSupplier, TopiaEntity entity, Predicate<Class<? extends TopiaEntity>> entityTypeFilter) { Map<Class<? extends TopiaEntity>, Long> builder = new LinkedHashMap<>(); TopiaEntityEnum targetEntityEnum = topiaEntityEnumProvider.getEntityEnum(entity.getClass()); Set<TopiaMetadataAssociation> reverseAssociations = getMetadataModel().getReverseAssociations(targetEntityEnum.name()); for (TopiaMetadataAssociation link : reverseAssociations) { TopiaMetadataEntity owner = link.getOwner(); TopiaEntityEnum sourceEntityEnum = topiaEntityEnumProvider.getEntityEnum(owner.getType()); Class<? extends TopiaEntity> sourceType = sourceEntityEnum.getContract(); TopiaDao<? extends TopiaEntity> dao = topiaDaoSupplier.getDao(sourceType); long entities = dao.forEquals(link.getTargetPropertyName(), entity).count(); if (entities > 0) { builder.merge(sourceType, entities, (a, b) -> a + b); } } return builder; }
@Override public Map<Class<? extends TopiaEntity>, Long> countReverseCompositions(TopiaDaoSupplier topiaDaoSupplier, TopiaEntity entity, Predicate<Class<? extends TopiaEntity>> entityTypeFilter) { Map<Class<? extends TopiaEntity>, Long> builder = new LinkedHashMap<>(); TopiaEntityEnum targetEntityEnum = topiaEntityEnumProvider.getEntityEnum(entity.getClass()); Set<TopiaMetadataComposition> reverseCompositions = getMetadataModel().getReverseCompositions(targetEntityEnum.name()); for (TopiaMetadataComposition link : reverseCompositions) { TopiaMetadataEntity owner = link.getOwner(); TopiaEntityEnum sourceEntityEnum = topiaEntityEnumProvider.getEntityEnum(owner.getType()); Class<? extends TopiaEntity> sourceType = sourceEntityEnum.getContract(); TopiaDao<? extends TopiaEntity> dao = topiaDaoSupplier.getDao(sourceType); long entities = dao.forEquals(link.getTargetPropertyName(), entity).count(); if (entities > 0) { builder.merge(sourceType, entities, (a, b) -> a + b); } } return builder; }