+
+ }
+
+ @Override
+ @Transactional(readOnly = true)
+ public <S extends T> Pager<FindByIdentifierDTO<S>> findByIdentifier(
+ Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode,
+ boolean includeEntity, Integer pageSize,
+ Integer pageNumber, List<String> propertyPaths) {
+
+ Integer numberOfResults = dao.countByIdentifier(clazz, identifier, identifierType, matchmode);
+ List<Object[]> daoResults = new ArrayList<Object[]>();
+ if(numberOfResults > 0) { // no point checking again
+ daoResults = dao.findByIdentifier(clazz, identifier, identifierType,
+ matchmode, includeEntity, pageSize, pageNumber, propertyPaths);
+ }
+
+ List<FindByIdentifierDTO<S>> result = new ArrayList<FindByIdentifierDTO<S>>();
+ for (Object[] daoObj : daoResults){
+ if (includeEntity){
+ result.add(new FindByIdentifierDTO<S>((DefinedTerm)daoObj[0], (String)daoObj[1], (S)daoObj[2]));
+ }else{
+ result.add(new FindByIdentifierDTO<S>((DefinedTerm)daoObj[0], (String)daoObj[1], (UUID)daoObj[2], (String)daoObj[3]));
+ }
+ }
+ return new DefaultPagerImpl<FindByIdentifierDTO<S>>(pageNumber, numberOfResults, pageSize, result);