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 }