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