KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > api > metadata > common > service > impl > hibernate > HibernateFilter


1 /*
2  * Copyright (C) 2006 JasperSoft http://www.jaspersoft.com
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed WITHOUT ANY WARRANTY; and without the
10  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
15  * or write to:
16  *
17  * Free Software Foundation, Inc.,
18  * 59 Temple Place - Suite 330,
19  * Boston, MA USA 02111-1307
20  */

21 package com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate;
22
23 import java.util.Iterator JavaDoc;
24 import java.util.List JavaDoc;
25
26 import org.hibernate.criterion.Conjunction;
27 import org.hibernate.criterion.Criterion;
28 import org.hibernate.criterion.Disjunction;
29 import org.hibernate.criterion.Junction;
30 import org.hibernate.criterion.Restrictions;
31
32 import com.jaspersoft.jasperserver.api.JSException;
33 import com.jaspersoft.jasperserver.api.metadata.view.domain.Filter;
34 import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterElement;
35 import com.jaspersoft.jasperserver.api.metadata.view.domain.ParentFolderFilter;
36 import com.jaspersoft.jasperserver.api.metadata.view.domain.PropertyFilter;
37
38 /**
39  * @author Lucian Chirita (lucianc@users.sourceforge.net)
40  * @version $Id: HibernateFilter.java 2995 2006-04-07 14:05:32Z tdanciu $
41  */

42 public class HibernateFilter implements Filter {
43
44     public final Junction junction;
45     private Criterion criterion;
46     
47     public HibernateFilter(Junction junction) {
48         this.junction = junction;
49     }
50
51     protected final Criterion last() {
52         return criterion;
53     }
54     
55     protected void add(Criterion newCriterion) {
56         this.criterion = newCriterion;
57         if (junction != null) {
58             junction.add(newCriterion);
59         }
60     }
61     
62     public void applyParentFolderFilter(ParentFolderFilter filter) {
63         add(Restrictions.eq("parent.URI", filter.getFolderURI()));
64     }
65
66     public void applyPropertyFilter(PropertyFilter filter) {
67         Criterion propCriterion;
68         switch (filter.getOp()) {
69         case PropertyFilter.EQ:
70             propCriterion = Restrictions.eq(filter.getProperty(), filter.getValue());
71             break;
72         case PropertyFilter.LIKE:
73             propCriterion = Restrictions.like(filter.getProperty(), filter.getValue());
74             break;
75         default:
76             throw new JSException("Unknown property filter operation " + filter.getOp());
77         }
78         add(propCriterion);
79     }
80
81     public void applyNegatedFilter(FilterElement element) {
82         HibernateFilter notFilter = new HibernateFilter(null);
83         element.apply(notFilter);
84         add(Restrictions.not(notFilter.last()));
85     }
86
87     public void applyConjunction(List JavaDoc filterElements) {
88         Conjunction conjunction = Restrictions.conjunction();
89         applyJunction(filterElements, conjunction);
90     }
91
92     public void applyDisjunction(List JavaDoc filterElements) {
93         Disjunction disjunction = Restrictions.disjunction();
94         applyJunction(filterElements, disjunction);
95     }
96
97     protected void applyJunction(List JavaDoc filterElements, Junction subJunction) {
98         HibernateFilter junctionFilter = new HibernateFilter(subJunction);
99         for (Iterator JavaDoc it = filterElements.iterator(); it.hasNext();) {
100             FilterElement filterElement = (FilterElement) it.next();
101             filterElement.apply(junctionFilter);
102         }
103         add(subJunction);
104     }
105
106 }
107
Popular Tags