1
22
23 package com.liferay.portal.dao.orm.hibernate;
24
25 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
26 import com.liferay.portal.kernel.dao.orm.DynamicQueryFactory;
27 import com.liferay.portal.kernel.log.Log;
28 import com.liferay.portal.kernel.log.LogFactoryUtil;
29
30 import java.util.HashMap;
31 import java.util.Map;
32
33 import org.hibernate.criterion.DetachedCriteria;
34
35
40 public class DynamicQueryFactoryImpl implements DynamicQueryFactory {
41
42 public DynamicQuery forClass(Class<?> clazz) {
43 clazz = getImplClass(clazz);
44
45 return new DynamicQueryImpl(DetachedCriteria.forClass(clazz));
46 }
47
48 public DynamicQuery forClass(Class<?> clazz, ClassLoader classLoader) {
49 clazz = getImplClass(clazz, classLoader);
50
51 return new DynamicQueryImpl(DetachedCriteria.forClass(clazz));
52 }
53
54 public DynamicQuery forClass(Class<?> clazz, String alias) {
55 clazz = getImplClass(clazz);
56
57 return new DynamicQueryImpl(DetachedCriteria.forClass(clazz, alias));
58 }
59
60 public DynamicQuery forClass(
61 Class<?> clazz, String alias, ClassLoader classLoader) {
62
63 clazz = getImplClass(clazz, classLoader);
64
65 return new DynamicQueryImpl(DetachedCriteria.forClass(clazz, alias));
66 }
67
68 protected Class<?> getImplClass(Class<?> clazz) {
69 return getImplClass(clazz, null);
70 }
71
72 protected Class<?> getImplClass(Class<?> clazz, ClassLoader classLoader) {
73 if (!clazz.getName().endsWith("Impl")) {
74 String implClassName =
75 clazz.getPackage().getName() + ".impl." +
76 clazz.getSimpleName() + "Impl";
77
78 clazz = _classMap.get(implClassName);
79
80 if (clazz == null) {
81 try {
82 if (classLoader == null) {
83 Thread currentThread = Thread.currentThread();
84
85 classLoader = currentThread.getContextClassLoader();
86 }
87
88 clazz = classLoader.loadClass(implClassName);
89
90 _classMap.put(implClassName, clazz);
91 }
92 catch (Exception e) {
93 _log.error("Unable find model " + implClassName, e);
94 }
95 }
96 }
97
98 return clazz;
99 }
100
101 private static Log _log =
102 LogFactoryUtil.getLog(DynamicQueryFactoryImpl.class);
103
104 private Map<String, Class<?>> _classMap = new HashMap<String, Class<?>>();
105
106 }