source: VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/table/Provider.java @ 963

Last change on this file since 963 was 963, checked in by oschonef, 13 years ago
  • improve virtual collection list filtering
  • some minor clean-ups
  • add wicket-datetime extensions
File size: 5.0 KB
Line 
1package eu.clarin.cmdi.virtualcollectionregistry.gui.table;
2
3import java.util.Iterator;
4import java.util.List;
5
6import org.apache.wicket.WicketRuntimeException;
7import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator;
8import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
9import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
10import org.apache.wicket.model.IModel;
11
12import eu.clarin.cmdi.virtualcollectionregistry.QueryOptions;
13import eu.clarin.cmdi.virtualcollectionregistry.QueryOptions.Property;
14import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistry;
15import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryException;
16import eu.clarin.cmdi.virtualcollectionregistry.gui.ApplicationSession;
17import eu.clarin.cmdi.virtualcollectionregistry.gui.DetachableVirtualCollectionModel;
18import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection;
19
20@SuppressWarnings("serial")
21class 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.getName());
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.getDescription());
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
Note: See TracBrowser for help on using the repository browser.