1   package org.weda.store;
2   
3   import java.util.Collection;
4   import org.weda.converter.ValueTypeConverter;
5   import org.weda.domain.Company;
6   import org.weda.test.WedaTestCase;
7   import org.weda.property.ObjectDescriptorRegistry;
8   import org.weda.store.QueryFilterElement.ExpressionType;
9   import org.weda.store.QueryFilterElement.OperatorType;
10  import org.weda.store.impl.ObjectAlias;
11  import org.weda.store.impl.QueryFilterElementImpl;
12  import org.weda.store.impl.QueryFilterImpl;
13  
14  public class QueryFilterTest extends WedaTestCase{
15      private ValueTypeConverter converter;
16      
17      public QueryFilterTest(String name) throws Exception {
18          super(name);
19      }
20      
21      public void setUp() throws Exception {
22          converter = 
23              (ValueTypeConverter)registry.getService(ValueTypeConverter.class);
24      }
25      
26      public void test() throws Exception {
27          QueryFilterImpl filter = new QueryFilterImpl();
28          //
29          ObjectAlias alias = new ObjectAlias();
30          alias.setAlias("company");
31          alias.setObjectClass(Company.class);
32          filter.addObjectAlias(alias);
33          //
34          QueryFilterElement filterElement = new QueryFilterElementImpl();
35          filterElement.setProperty("name");
36          filterElement.setObjectAlias("company");
37          filter.addFilterElement(filterElement);
38          //
39          filterElement = new QueryFilterElementImpl();
40          filterElement.setProperty("comment");
41          filterElement.setObjectAlias("company");
42          filter.addFilterElement(filterElement);
43          //
44          filterElement = new QueryFilterElementImpl();
45          filterElement.setProperty("id");
46          filterElement.setObjectAlias("company");
47          filterElement.setStaticExpression(">10");
48          filter.addStaticFilterElement(filterElement);
49          //
50          filter.init();
51          //
52          checkFilter(filter);
53      }
54      
55      public void test_configuration() throws Exception {
56          ObjectSourceRegistry dsr = 
57              (ObjectSourceRegistry)registry.getService(ObjectSourceRegistry.class);
58          ObjectSource dataSource = dsr.getObjectSource("company");
59          assertNotNull(dataSource);
60          QueryFilter filter = dataSource.getQueryFilter();
61          assertNotNull(filter);
62          checkFilter(filter);
63      }
64      
65      public void test_cloneQueryFilter() throws Exception {
66          QueryFilterImpl filter = new QueryFilterImpl();
67          //
68          ObjectAlias alias = new ObjectAlias();
69          alias.setAlias("company");
70          alias.setObjectClass(Company.class);
71          filter.addObjectAlias(alias);
72          //
73          QueryFilterElement filterElement = new QueryFilterElementImpl();
74          filterElement.setProperty("name");
75          filterElement.setObjectAlias("company");
76          filter.addFilterElement(filterElement);
77          //
78          filterElement = new QueryFilterElementImpl();
79          filterElement.setProperty("id");
80          filterElement.setObjectAlias("company");
81          filterElement.setStaticExpression(">10");
82          filter.addStaticFilterElement(filterElement);
83          //
84          filter.init();        
85          
86          QueryFilter filter2=(QueryFilter)filter.clone();
87          assertNotSame(filter, filter2);
88          assertNotSame(filter.getFilterElements(), filter2.getFilterElements());
89          assertNotSame(
90                  filter.getStaticFilterElements()
91                  , filter2.getStaticFilterElements());
92          assertEquals(1, filter2.getFilterElements().size());
93          assertEquals(1, filter.getStaticFilterElements().size());
94          assertNotSame(filter.getStaticFilterElements().iterator().next()
95                      , filter2.getStaticFilterElements().iterator().next());
96          assertNotSame(filter.getFilterElements().iterator().next()
97                      , filter2.getFilterElements().iterator().next());
98      }
99      
100     private void checkFilter(QueryFilter filter) throws Exception {
101         filter.setExpression("company.name", "%test%");
102         
103         Collection<QueryFilterElement> elems=filter.getStaticFilterElements();
104         assertEquals(1, elems.size());
105         QueryFilterElement filterElement=elems.iterator().next();
106         assertEquals(ExpressionType.OPERATOR, filterElement.getExpressionType());
107         assertEquals(">", filterElement.getOperator());
108         assertEquals(10l, filterElement.getParameterValue());
109         
110         elems=filter.getFilterElements();
111         assertEquals(2, elems.size());
112         QueryFilterElement commentFilter=null;
113         QueryFilterElement nameFilter=null;
114         for (QueryFilterElement element: elems){
115             if (element.getProperty().equals("name"))
116                 nameFilter=element;
117             else
118                 commentFilter=element;
119         }
120         assertEquals(ExpressionType.OPERATOR, nameFilter.getExpressionType());
121         assertEquals(OperatorType.LIKE, nameFilter.getOperatorType());
122         assertEquals("%test%", nameFilter.getParameterValue());
123         
124         assertEquals(ExpressionType.EMPTY, commentFilter.getExpressionType());
125     }
126     
127 }