1 21 package com.jaspersoft.jasperserver.api.metadata.common.service.impl.hibernate; 22 23 import java.util.Iterator ; 24 import java.util.List ; 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 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 filterElements) { 88 Conjunction conjunction = Restrictions.conjunction(); 89 applyJunction(filterElements, conjunction); 90 } 91 92 public void applyDisjunction(List filterElements) { 93 Disjunction disjunction = Restrictions.disjunction(); 94 applyJunction(filterElements, disjunction); 95 } 96 97 protected void applyJunction(List filterElements, Junction subJunction) { 98 HibernateFilter junctionFilter = new HibernateFilter(subJunction); 99 for (Iterator 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 |