1 | package eu.clarin.cmdi.virtualcollectionregistry.gui.table; |
---|
2 | |
---|
3 | import eu.clarin.cmdi.virtualcollectionregistry.QueryOptions; |
---|
4 | import eu.clarin.cmdi.virtualcollectionregistry.QueryOptions.Property; |
---|
5 | import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistry; |
---|
6 | import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryException; |
---|
7 | import eu.clarin.cmdi.virtualcollectionregistry.gui.Application; |
---|
8 | import eu.clarin.cmdi.virtualcollectionregistry.gui.ApplicationSession; |
---|
9 | import eu.clarin.cmdi.virtualcollectionregistry.gui.DetachableVirtualCollectionModel; |
---|
10 | import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection; |
---|
11 | import java.util.Iterator; |
---|
12 | import java.util.List; |
---|
13 | import org.apache.wicket.WicketRuntimeException; |
---|
14 | import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator; |
---|
15 | import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; |
---|
16 | import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; |
---|
17 | import org.apache.wicket.model.IModel; |
---|
18 | |
---|
19 | @SuppressWarnings("serial") |
---|
20 | class Provider extends |
---|
21 | SortableDataProvider<VirtualCollection> implements |
---|
22 | IFilterStateLocator<FilterState> { |
---|
23 | private final boolean privateMode; |
---|
24 | private FilterState filterstate = new FilterState(); |
---|
25 | |
---|
26 | public Provider(boolean privateMode) { |
---|
27 | this.privateMode = privateMode; |
---|
28 | setSort("created", false); |
---|
29 | } |
---|
30 | |
---|
31 | @Override |
---|
32 | public FilterState getFilterState() { |
---|
33 | return filterstate; |
---|
34 | } |
---|
35 | |
---|
36 | @Override |
---|
37 | public void setFilterState(FilterState state) { |
---|
38 | this.filterstate = state; |
---|
39 | } |
---|
40 | |
---|
41 | @Override |
---|
42 | public IModel<VirtualCollection> model(VirtualCollection vc) { |
---|
43 | return new DetachableVirtualCollectionModel(vc); |
---|
44 | } |
---|
45 | |
---|
46 | @Override |
---|
47 | public int size() { |
---|
48 | try { |
---|
49 | final VirtualCollectionRegistry vcr = |
---|
50 | Application.get().getRegistry(); |
---|
51 | return vcr.getVirtualCollectionCount(getFilter()); |
---|
52 | } catch (VirtualCollectionRegistryException e) { |
---|
53 | throw new WicketRuntimeException(e); |
---|
54 | } |
---|
55 | } |
---|
56 | |
---|
57 | @Override |
---|
58 | public Iterator<? extends VirtualCollection> iterator(int first, |
---|
59 | int count) { |
---|
60 | try { |
---|
61 | final VirtualCollectionRegistry vcr = |
---|
62 | Application.get().getRegistry(); |
---|
63 | final List<VirtualCollection> results = |
---|
64 | vcr.getVirtualCollections(first, count, getFilter()); |
---|
65 | return results.iterator(); |
---|
66 | } catch (VirtualCollectionRegistryException e) { |
---|
67 | throw new WicketRuntimeException(e); |
---|
68 | } |
---|
69 | } |
---|
70 | |
---|
71 | private QueryOptions getFilter() { |
---|
72 | QueryOptions options = new QueryOptions(); |
---|
73 | |
---|
74 | QueryOptions.Filter filter = options.and(); |
---|
75 | if (privateMode) { |
---|
76 | ApplicationSession session = ApplicationSession.get(); |
---|
77 | filter.add(QueryOptions.Property.VC_OWNER, |
---|
78 | QueryOptions.Relation.EQ, |
---|
79 | session.getUser()); |
---|
80 | } else { |
---|
81 | filter.add(QueryOptions.Property.VC_STATE, |
---|
82 | QueryOptions.Relation.EQ, |
---|
83 | VirtualCollection.State.PUBLIC); |
---|
84 | } |
---|
85 | if (filterstate.hasName()) { |
---|
86 | filter.add(QueryOptions.Property.VC_NAME, |
---|
87 | QueryOptions.Relation.EQ, |
---|
88 | filterstate.getNameWithWildcard()); |
---|
89 | } |
---|
90 | if (filterstate.hasType()) { |
---|
91 | filter.add(QueryOptions.Property.VC_TYPE, |
---|
92 | QueryOptions.Relation.EQ, |
---|
93 | filterstate.getType()); |
---|
94 | } |
---|
95 | if (filterstate.hasState()) { |
---|
96 | filter.add(QueryOptions.Property.VC_STATE, |
---|
97 | QueryOptions.Relation.EQ, |
---|
98 | filterstate.getState()); |
---|
99 | } |
---|
100 | if (filterstate.hasDescription()) { |
---|
101 | filter.add(QueryOptions.Property.VC_DESCRIPTION, |
---|
102 | QueryOptions.Relation.EQ, |
---|
103 | filterstate.getDescriptionWithWildcard()); |
---|
104 | } |
---|
105 | if (filterstate.hasCreated()) { |
---|
106 | filter.add(QueryOptions.Property.VC_CREATION_DATE, |
---|
107 | filterstate.getCreatedRelation(), |
---|
108 | filterstate.getCreated()); |
---|
109 | } |
---|
110 | options.setFilter(filter); |
---|
111 | |
---|
112 | final SortParam s = getSort(); |
---|
113 | if (s != null) { |
---|
114 | final String p = s.getProperty(); |
---|
115 | Property property = null; |
---|
116 | if ("name".equals(p)) { |
---|
117 | property = Property.VC_NAME; |
---|
118 | } else if ("type".equals(p)) { |
---|
119 | property = Property.VC_TYPE; |
---|
120 | } else if ("state".equals(p)) { |
---|
121 | property = Property.VC_STATE; |
---|
122 | } else if ("description".equals(p)) { |
---|
123 | property = Property.VC_DESCRIPTION; |
---|
124 | } else if ("created".equals(p)) { |
---|
125 | property = Property.VC_CREATION_DATE; |
---|
126 | } |
---|
127 | if (property != null) { |
---|
128 | options.addSortProperty(property, s.isAscending()); |
---|
129 | } |
---|
130 | } |
---|
131 | return options; |
---|
132 | } |
---|
133 | |
---|
134 | } // class VirtualCollectionProvider |
---|