source: VirtualCollectionRegistry/tags/VirtualCollectionRegistry-0.4.0-alpha2/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/table/CollectionsProvider.java @ 5557

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

tag for VCR alpha 2

  • 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.