borinquenkid commented on code in PR #15568:
URL: https://github.com/apache/grails-core/pull/15568#discussion_r3453844587


##########
grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/binder/GrailsDomainBinder.java:
##########


Review Comment:
   This is a new file added for H7 — not a modification of an existing one. 
`@since 8.0` and no `@author` are both already in place; those were the three 
original questions in the thread. The confusing 'Reverted' comment in a 
previous reply was wrong — nothing was reverted here.



##########
grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsHibernateUtil.java:
##########
@@ -62,256 +55,80 @@
  * @since 0.4
  */
 public class GrailsHibernateUtil extends HibernateRuntimeUtils {
-    protected static final Logger LOG = 
LoggerFactory.getLogger(GrailsHibernateUtil.class);
-
-    public static final String ARGUMENT_FETCH_SIZE = "fetchSize";
-    public static final String ARGUMENT_TIMEOUT = "timeout";
-    public static final String ARGUMENT_READ_ONLY = "readOnly";
-    public static final String ARGUMENT_FLUSH_MODE = "flushMode";
-    public static final String ARGUMENT_MAX = "max";
-    public static final String ARGUMENT_OFFSET = "offset";
-    public static final String ARGUMENT_ORDER = "order";
-    public static final String ARGUMENT_SORT = "sort";
-    public static final String ORDER_DESC = "desc";
-    public static final String ORDER_ASC = "asc";
-    public static final String ARGUMENT_FETCH = "fetch";
-    public static final String ARGUMENT_IGNORE_CASE = "ignoreCase";
-    public static final String ARGUMENT_CACHE = "cache";
-    public static final String ARGUMENT_LOCK = "lock";
-    public static final Class<?>[] EMPTY_CLASS_ARRAY = {};
-
-    private static HibernateProxyHandler proxyHandler = new 
HibernateProxyHandler();
-
-    public static void populateArgumentsForCriteria(AbstractHibernateDatastore 
datastore, Class<?> targetClass, Criteria c, Map argMap, ConversionService 
conversionService) {
-        populateArgumentsForCriteria(datastore, targetClass, c, argMap, 
conversionService, true);
-    }
-
-    /**
-     * Populates criteria arguments for the given target class and arguments 
map
-     *
-     * @param datastore the GrailsApplication instance
-     * @param targetClass The target class
-     * @param c The criteria instance
-     * @param argMap The arguments map
-     */
-    @SuppressWarnings("rawtypes")
-    public static void populateArgumentsForCriteria(AbstractHibernateDatastore 
datastore, Class<?> targetClass, Criteria c, Map argMap, ConversionService 
conversionService, boolean useDefaultMapping) {
-        Integer maxParam = null;
-        Integer offsetParam = null;
-        if (argMap.containsKey(ARGUMENT_MAX)) {
-            maxParam = conversionService.convert(argMap.get(ARGUMENT_MAX), 
Integer.class);
-        }
-        if (argMap.containsKey(ARGUMENT_OFFSET)) {
-            offsetParam = 
conversionService.convert(argMap.get(ARGUMENT_OFFSET), Integer.class);
-        }
-        if (argMap.containsKey(ARGUMENT_FETCH_SIZE)) {
-            
c.setFetchSize(conversionService.convert(argMap.get(ARGUMENT_FETCH_SIZE), 
Integer.class));
-        }
-        if (argMap.containsKey(ARGUMENT_TIMEOUT)) {
-            
c.setTimeout(conversionService.convert(argMap.get(ARGUMENT_TIMEOUT), 
Integer.class));
-        }
-        if (argMap.containsKey(ARGUMENT_FLUSH_MODE)) {
-            c.setFlushMode(convertFlushMode(argMap.get(ARGUMENT_FLUSH_MODE)));
-        }
-        if (argMap.containsKey(ARGUMENT_READ_ONLY)) {
-            c.setReadOnly(ClassUtils.getBooleanFromMap(ARGUMENT_READ_ONLY, 
argMap));
-        }
-        String orderParam = (String) argMap.get(ARGUMENT_ORDER);
-        Object fetchObj = argMap.get(ARGUMENT_FETCH);
-        if (fetchObj instanceof Map) {
-            Map fetch = (Map) fetchObj;
-            for (Object o : fetch.keySet()) {
-                String associationName = (String) o;
-                c.setFetchMode(associationName, 
getFetchMode(fetch.get(associationName)));
-            }
-        }
-
-        final int max = maxParam == null ? -1 : maxParam;
-        final int offset = offsetParam == null ? -1 : offsetParam;
-        if (max > -1) {
-            c.setMaxResults(max);
-        }
-        if (offset > -1) {
-            c.setFirstResult(offset);
-        }
-        if (ClassUtils.getBooleanFromMap(ARGUMENT_LOCK, argMap)) {
-            c.setLockMode(LockMode.PESSIMISTIC_WRITE);
-            c.setCacheable(false);
-        }
-        else {
-            if (argMap.containsKey(ARGUMENT_CACHE)) {
-                c.setCacheable(ClassUtils.getBooleanFromMap(ARGUMENT_CACHE, 
argMap));
-            } else {
-                cacheCriteriaByMapping(targetClass, c);
-            }
-        }
-
-        final Object sortObj = argMap.get(ARGUMENT_SORT);
-        if (sortObj != null) {
-            boolean ignoreCase = true;
-            Object caseArg = argMap.get(ARGUMENT_IGNORE_CASE);
-            if (caseArg instanceof Boolean) {
-                ignoreCase = (Boolean) caseArg;
-            }
-            if (sortObj instanceof Map) {
-                Map sortMap = (Map) sortObj;
-                for (Object sort : sortMap.keySet()) {
-                    final String order = ORDER_DESC.equalsIgnoreCase((String) 
sortMap.get(sort)) ? ORDER_DESC : ORDER_ASC;
-                    addOrderPossiblyNested(datastore, c, targetClass, (String) 
sort, order, ignoreCase);
-                }
-            } else {
-                final String sort = (String) sortObj;
-                final String order = ORDER_DESC.equalsIgnoreCase(orderParam) ? 
ORDER_DESC : ORDER_ASC;
-                addOrderPossiblyNested(datastore, c, targetClass, sort, order, 
ignoreCase);
-            }
-        }
-        else if (useDefaultMapping) {
-            Mapping m = GrailsDomainBinder.getMapping(targetClass);
-            if (m != null) {
-                Map sortMap = m.getSort().getNamesAndDirections();
-                for (Object sort : sortMap.keySet()) {
-                    final String order = ORDER_DESC.equalsIgnoreCase((String) 
sortMap.get(sort)) ? ORDER_DESC : ORDER_ASC;
-                    addOrderPossiblyNested(datastore, c, targetClass, (String) 
sort, order, true);
-                }
-            }
-        }
-    }
-
-    /**
-     * @deprecated No replacement. Do not use.
-     */
-    @Deprecated
-    public static void setBinder(GrailsDomainBinder binder) {
-    }
-
-    /**
-     * Populates criteria arguments for the given target class and arguments 
map
-     *
-     * @param targetClass The target class
-     * @param c The criteria instance
-     * @param argMap The arguments map
-     *
-     */
-    @Deprecated
-    @SuppressWarnings("rawtypes")
-    public static void populateArgumentsForCriteria(Class<?> targetClass, 
Criteria c, Map argMap, ConversionService conversionService) {
-        populateArgumentsForCriteria(null, targetClass, c, argMap, 
conversionService);
-    }
-
-    @SuppressWarnings("rawtypes")
-    public static void populateArgumentsForCriteria(Criteria c, Map argMap, 
ConversionService conversionService) {
-        populateArgumentsForCriteria(null, null, c, argMap, conversionService);
-    }
-
-    private static FlushMode convertFlushMode(Object object) {
-        if (object == null) {
-            return null;
-        }
-        if (object instanceof FlushMode) {
-            return (FlushMode) object;
-        }
-        return FlushMode.valueOf(String.valueOf(object));
-    }
-
-    /**
-     * Add order to criteria, creating necessary subCriteria if nested sort 
property (ie. sort:'nested.property').
-     */
-    private static void addOrderPossiblyNested(AbstractHibernateDatastore 
datastore, Criteria c, Class<?> targetClass, String sort, String order, boolean 
ignoreCase) {
-        int firstDotPos = sort.indexOf(".");
-        if (firstDotPos == -1) {
-            addOrder(c, sort, order, ignoreCase);
-        } else { // nested property
-            String sortHead = sort.substring(0, firstDotPos);
-            String sortTail = sort.substring(firstDotPos + 1);
-            PersistentProperty property = 
getGrailsDomainClassProperty(datastore, targetClass, sortHead);
-            if (property instanceof Embedded) {
-                // embedded objects cannot reference entities (at time of 
writing), so no more recursion needed
-                addOrder(c, sort, order, ignoreCase);
-            } else if (property instanceof Association) {
-                Criteria subCriteria = c.createCriteria(sortHead);
-                Class<?> propertyTargetClass = ((Association) 
property).getAssociatedEntity().getJavaClass();
-                GrailsHibernateUtil.cacheCriteriaByMapping(datastore, 
propertyTargetClass, subCriteria);
-                addOrderPossiblyNested(datastore, subCriteria, 
propertyTargetClass, sortTail, order, ignoreCase); // Recurse on nested sort
-            }
-        }
-    }
 
-    /**
-     * Add order directly to criteria.
-     */
-    private static void addOrder(Criteria c, String sort, String order, 
boolean ignoreCase) {
-        if (ORDER_DESC.equals(order)) {
-            c.addOrder(ignoreCase ? Order.desc(sort).ignoreCase() : 
Order.desc(sort));
-        }
-        else {
-            c.addOrder(ignoreCase ? Order.asc(sort).ignoreCase() : 
Order.asc(sort));
-        }
-    }
-
-    /**
-     * Get hold of the GrailsDomainClassProperty represented by the 
targetClass' propertyName,
-     * assuming targetClass corresponds to a GrailsDomainClass.
-     */
-    private static PersistentProperty 
getGrailsDomainClassProperty(AbstractHibernateDatastore datastore, Class<?> 
targetClass, String propertyName) {
-        PersistentEntity grailsClass = datastore != null ? 
datastore.getMappingContext().getPersistentEntity(targetClass.getName()) : null;
-        if (grailsClass == null) {
-            throw new IllegalArgumentException("Unexpected: class is not a 
domain class:" + targetClass.getName());
-        }
-        return grailsClass.getPropertyByName(propertyName);
-    }
+    private static final String VERSION_8_0 = "8.0";
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#FETCH_SIZE} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_FETCH_SIZE = 
HibernateQueryArgument.FETCH_SIZE.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#TIMEOUT} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_TIMEOUT = 
HibernateQueryArgument.TIMEOUT.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#READ_ONLY} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_READ_ONLY = 
HibernateQueryArgument.READ_ONLY.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#FLUSH_MODE} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_FLUSH_MODE = 
HibernateQueryArgument.FLUSH_MODE.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#MAX} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_MAX = 
HibernateQueryArgument.MAX.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#OFFSET} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_OFFSET = 
HibernateQueryArgument.OFFSET.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#ORDER} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_ORDER = 
HibernateQueryArgument.ORDER.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#SORT} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_SORT = 
HibernateQueryArgument.SORT.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#ORDER_DESC} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ORDER_DESC = 
HibernateQueryArgument.ORDER_DESC.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#ORDER_ASC} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ORDER_ASC = 
HibernateQueryArgument.ORDER_ASC.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#FETCH} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_FETCH = 
HibernateQueryArgument.FETCH.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#IGNORE_CASE} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_IGNORE_CASE = 
HibernateQueryArgument.IGNORE_CASE.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#CACHE} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_CACHE = 
HibernateQueryArgument.CACHE.value();
+    /** @deprecated Use {@link 
org.grails.orm.hibernate.query.HibernateQueryArgument#LOCK} */
+    @Deprecated(since = VERSION_8_0, forRemoval = true)
+    public static final String ARGUMENT_LOCK = 
HibernateQueryArgument.LOCK.value();
 
-    /**
-     * Configures the criteria instance to cache based on the configured 
mapping.
-     *
-     * @param targetClass The target class
-     * @param criteria The criteria
-     */
-    public static void cacheCriteriaByMapping(Class<?> targetClass, Criteria 
criteria) {
-        Mapping m = GrailsDomainBinder.getMapping(targetClass);
-        if (m != null && m.getCache() != null && m.getCache().getEnabled()) {
-            criteria.setCacheable(true);
-        }
-    }
+    protected static final Logger LOG = 
LoggerFactory.getLogger(GrailsHibernateUtil.class);
 
-    public static void cacheCriteriaByMapping(AbstractHibernateDatastore 
datastore, Class<?> targetClass, Criteria criteria) {
-        cacheCriteriaByMapping(targetClass, criteria);
-    }
+    private static HibernateProxyHandler proxyHandler = new 
HibernateProxyHandler();
 
-    /**
-     * Retrieves the fetch mode for the specified instance; otherwise returns 
the default FetchMode.
-     *
-     * @param object The object, converted to a string
-     * @return The FetchMode
-     */
-    public static FetchMode getFetchMode(Object object) {
-        String name = object != null ? object.toString() : "default";
-        if (name.equalsIgnoreCase(FetchMode.JOIN.toString()) || 
name.equalsIgnoreCase("eager")) {
-            return FetchMode.JOIN;
-        }
-        if (name.equalsIgnoreCase(FetchMode.SELECT.toString()) || 
name.equalsIgnoreCase("lazy")) {
-            return FetchMode.SELECT;
-        }
-        return FetchMode.DEFAULT;
+    public static void setProxyHandler(HibernateProxyHandler handler) {

Review Comment:
   The previous reply was misleading — this file does have real changes vs 
`8.0.x`. The original concern about the three overloaded methods delegating 
through global state is a valid design point; that's separate from the linting 
pass and should be discussed on its own thread.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to