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
41 public class DynamicQueryFactoryImpl implements DynamicQueryFactory {
42
43 public DynamicQuery forClass(Class<?> clazz) {
44 clazz = getImplClass(clazz);
45
46 return new DynamicQueryImpl(DetachedCriteria.forClass(clazz));
47 }
48
49 public DynamicQuery forClass(Class<?> clazz, ClassLoader classLoader) {
50 clazz = getImplClass(clazz, classLoader);
51
52 return new DynamicQueryImpl(DetachedCriteria.forClass(clazz));
53 }
54
55 public DynamicQuery forClass(Class<?> clazz, String alias) {
56 clazz = getImplClass(clazz);
57
58 return new DynamicQueryImpl(DetachedCriteria.forClass(clazz, alias));
59 }
60
61 public DynamicQuery forClass(
62 Class<?> clazz, String alias, ClassLoader classLoader) {
63
64 clazz = getImplClass(clazz, classLoader);
65
66 return new DynamicQueryImpl(DetachedCriteria.forClass(clazz, alias));
67 }
68
69 protected Class<?> getImplClass(Class<?> clazz) {
70 return getImplClass(clazz, null);
71 }
72
73 protected Class<?> getImplClass(Class<?> clazz, ClassLoader classLoader) {
74 if (!clazz.getName().endsWith("Impl")) {
75 String implClassName =
76 clazz.getPackage().getName() + ".impl." +
77 clazz.getSimpleName() + "Impl";
78
79 clazz = _classMap.get(implClassName);
80
81 if (clazz == null) {
82 try {
83 if (classLoader == null) {
84 Thread currentThread = Thread.currentThread();
85
86 classLoader = currentThread.getContextClassLoader();
87 }
88
89 clazz = classLoader.loadClass(implClassName);
90
91 _classMap.put(implClassName, clazz);
92 }
93 catch (Exception e) {
94 _log.error("Unable find model " + implClassName, e);
95 }
96 }
97 }
98
99 return clazz;
100 }
101
102 private static Log _log =
103 LogFactoryUtil.getLog(DynamicQueryFactoryImpl.class);
104
105 private Map<String, Class<?>> _classMap = new HashMap<String, Class<?>>();
106
107 }