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