1
22
23 package com.liferay.portal.dao.orm.hibernate;
24
25 import com.liferay.portal.kernel.dao.orm.Criterion;
26 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
27 import com.liferay.portal.kernel.dao.orm.Order;
28 import com.liferay.portal.kernel.dao.orm.Projection;
29 import com.liferay.portal.kernel.dao.orm.Session;
30 import com.liferay.portal.kernel.util.ListUtil;
31 import com.liferay.portal.kernel.util.UnmodifiableList;
32
33 import java.util.List;
34
35 import org.hibernate.Criteria;
36 import org.hibernate.criterion.DetachedCriteria;
37
38
43 public class DynamicQueryImpl implements DynamicQuery {
44
45 public DynamicQueryImpl(DetachedCriteria detachedCriteria) {
46 _detachedCriteria = detachedCriteria;
47 }
48
49 public DynamicQuery add(Criterion criterion) {
50 CriterionImpl criterionImpl = (CriterionImpl)criterion;
51
52 _detachedCriteria.add(criterionImpl.getWrappedCriterion());
53
54 return this;
55 }
56
57 public DynamicQuery addOrder(Order order) {
58 OrderImpl orderImpl = (OrderImpl)order;
59
60 _detachedCriteria.addOrder(orderImpl.getWrappedOrder());
61
62 return this;
63 }
64
65 public void compile(Session session) {
66 org.hibernate.Session hibernateSession =
67 (org.hibernate.Session)session.getWrappedSession();
68
69 if (hibernateSession instanceof LiferaySession) {
70 hibernateSession =
71 ((LiferaySession)hibernateSession).getHibernateSession();
72 }
73
74 _criteria = _detachedCriteria.getExecutableCriteria(hibernateSession);
75
76 if ((_start != null) && (_end != null)) {
77 _criteria = _criteria.setFirstResult(_start.intValue());
78 _criteria = _criteria.setMaxResults(
79 _end.intValue() - _start.intValue());
80 }
81 }
82
83 public DetachedCriteria getDetachedCriteria() {
84 return _detachedCriteria;
85 }
86
87 public List list() {
88 return list(true);
89 }
90
91 public List list(boolean unmodifiable) {
92 List list = _criteria.list();
93
94 if (unmodifiable) {
95 return new UnmodifiableList(list);
96 }
97 else {
98 return ListUtil.copy(list);
99 }
100 }
101
102 public void setLimit(int start, int end) {
103 _start = Integer.valueOf(start);
104 _end = Integer.valueOf(end);
105 }
106
107 public DynamicQuery setProjection(Projection projection) {
108 ProjectionImpl projectionImpl = (ProjectionImpl)projection;
109
110 _detachedCriteria.setProjection(projectionImpl.getWrappedProjection());
111
112 return this;
113 }
114
115 private DetachedCriteria _detachedCriteria;
116 private Criteria _criteria;
117 private Integer _start;
118 private Integer _end;
119
120 }