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

Last change on this file since 5500 was 5500, checked in by Twan Goosen, 10 years ago

refactored provider into an abstract provider with an abstract method for selecting the collections space. extended by concrete providers for the pulished collections and private collections. also renamed it to CollectionsProvider?

  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
1package eu.clarin.cmdi.virtualcollectionregistry.gui.table;
2
3import eu.clarin.cmdi.virtualcollectionregistry.QueryOptions;
4import eu.clarin.cmdi.virtualcollectionregistry.QueryOptions.Property;
5import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistry;
6import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryException;
7import eu.clarin.cmdi.virtualcollectionregistry.gui.Application;
8import eu.clarin.cmdi.virtualcollectionregistry.gui.DetachableVirtualCollectionModel;
9import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection;
10import java.util.Iterator;
11import java.util.List;
12import org.apache.wicket.WicketRuntimeException;
13import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator;
14import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
15import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
16import org.apache.wicket.model.IModel;
17
18@SuppressWarnings("serial")
19public 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
Note: See TracBrowser for help on using the repository browser.