Changeset 5140


Ignore:
Timestamp:
05/07/14 11:48:38 (10 years ago)
Author:
Twan Goosen
Message:

Improved layout of Collections facet by allowing for a partitioned facet values view via a partioned data provider (+tests)

Location:
vlo/trunk/vlo-web-app/src
Files:
3 added
8 edited

Legend:

Unmodified
Added
Removed
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/FacetedSearchPage.java

    r5031 r5140  
    130130
    131131    private Panel createCollectionsPanel(final String id) {
    132         final FacetPanel panel = new SingleFacetPanel(id, getModel(), vloConfig.getCollectionFacet(), facetFieldsService) {
     132        final FacetPanel panel = new SingleFacetPanel(id, getModel(), vloConfig.getCollectionFacet(), facetFieldsService, 3) {
    133133
    134134            @Override
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/SimpleSearchPage.java

    r5032 r5140  
    6767
    6868        // add a persistenet panel for selection of a value for the collection facet
    69         collectionsPanel = new SingleFacetPanel("collectionsFacet", model, vloConfig.getCollectionFacet(), facetFieldsService) {
     69        collectionsPanel = new SingleFacetPanel("collectionsFacet", model, vloConfig.getCollectionFacet(), facetFieldsService, 3) {
    7070
    7171            @Override
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/SingleFacetPanel.java

    r4962 r5140  
    1515 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1616 */
    17 
    1817package eu.clarin.cmdi.vlo.wicket.panels;
    1918
     
    3332public abstract class SingleFacetPanel extends FacetPanel {
    3433
    35     public SingleFacetPanel(String id, IModel<QueryFacetsSelection> queryModel, String facetName, FacetFieldsService facetFieldsService) {
     34    public SingleFacetPanel(String id, IModel<QueryFacetsSelection> queryModel, String facetName, FacetFieldsService facetFieldsService, int subListSize) {
    3635        //TODO: Limit to number of items shown while keeping 'more' function?
    37         super(id, new FacetFieldSelectionModel(new FacetFieldModel(facetFieldsService, facetName, queryModel, -1), queryModel), Model.of(ExpansionState.COLLAPSED));
     36        super(id, new FacetFieldSelectionModel(new FacetFieldModel(facetFieldsService, facetName, queryModel, -1), queryModel), Model.of(ExpansionState.COLLAPSED), subListSize);
    3837    }
    3938
     
    4443        return false;
    4544    }
    46    
     45
    4746}
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetPanel.java

    r4976 r5140  
    4747
    4848    public FacetPanel(String id, IModel<FacetFieldSelection> selectionModel, IModel<ExpansionState> expansionState) {
     49        this(id, selectionModel, expansionState, 0);
     50    }
     51
     52    public FacetPanel(String id, IModel<FacetFieldSelection> selectionModel, IModel<ExpansionState> expansionState, int subListSize) {
    4953        super(id, selectionModel, expansionState);
    5054        this.expansionStateModel = expansionState;
    5155
    5256        // panel showing values for selection
    53         facetValuesPanel = createFacetValuesPanel("facetValues");
     57        facetValuesPanel = createFacetValuesPanel("facetValues", subListSize);
    5458        add(facetValuesPanel);
    5559
     
    8589    }
    8690
    87     private FacetValuesPanel createFacetValuesPanel(String id) {
     91    private FacetValuesPanel createFacetValuesPanel(String id, int subListSize) {
    8892        return new FacetValuesPanel(id,
    8993                new PropertyModel<FacetField>(getModel(), "facetField"),
    90                 new PropertyModel<QueryFacetsSelection>(getModel(), "selection")) {
     94                new PropertyModel<QueryFacetsSelection>(getModel(), "selection"), subListSize) {
    9195                    @Override
    9296                    public void onValuesSelected(String facet, FacetSelection value, AjaxRequestTarget target) {
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetValuesPanel.html

    r4958 r5140  
    3030                    <input type="submit" value="Search" class="nonjsfallback" />
    3131                </form>
    32                 <ul wicket:id="valuesContainer">
    33                     <li wicket:id="facetValues"><a wicket:id="facetSelect" href="index3.html"><span wicket:id="name">Dutch</span> (<span wicket:id="count">148167</span>)</a></li>
    34                     <li class="more-link"><a wicket:id="allFacetValuesLink" href="#">more...</a></li>
    35                 </ul>
     32                <wicket:container wicket:id="valuesContainer">
     33                    <ul wicket:id="valuesList">
     34                        <li wicket:id="facetValues"><a wicket:id="facetSelect" href="index3.html"><span wicket:id="name">Dutch</span> (<span wicket:id="count">148167</span>)</a></li>
     35                    </ul>
     36                    <wicket:enclosure>
     37                        <ul>
     38                            <li class="more-link"><a wicket:id="allFacetValuesLink" href="#">more...</a></li>
     39                        </ul>
     40                    </wicket:enclosure>
     41                </wicket:container>
    3642            </div>               
    3743        </wicket:panel>
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetValuesPanel.java

    r5079 r5140  
    2020import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    2121import eu.clarin.cmdi.vlo.pojo.FieldValuesFilter;
     22import eu.clarin.cmdi.vlo.pojo.FieldValuesOrder;
    2223import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     24import eu.clarin.cmdi.vlo.wicket.provider.PartitionedDataProvider;
    2325import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
    2426import eu.clarin.cmdi.vlo.wicket.pages.AllFacetValuesPage;
     
    2628import java.util.Collection;
    2729import java.util.Collections;
     30import java.util.List;
    2831import org.apache.solr.client.solrj.response.FacetField;
    2932import org.apache.solr.client.solrj.response.FacetField.Count;
     
    3740import org.apache.wicket.markup.html.form.TextField;
    3841import org.apache.wicket.markup.html.link.Link;
     42import org.apache.wicket.markup.html.list.ListItem;
     43import org.apache.wicket.markup.html.list.ListView;
    3944import org.apache.wicket.markup.html.panel.GenericPanel;
    4045import org.apache.wicket.markup.repeater.Item;
     
    6065    private final WebMarkupContainer valuesContainer;
    6166    private final IModel<FieldValuesFilter> filterModel;
     67    private final int subListSize;
    6268
    6369    /**
     
    6975     */
    7076    public FacetValuesPanel(String id, final IModel<FacetField> model, final IModel<QueryFacetsSelection> selectionModel) {
     77        this(id, model, selectionModel, 0);
     78    }
     79
     80    /**
     81     * Creates a new panel with selectable values for a single facet
     82     *
     83     * @param id component id
     84     * @param model facet field model for this panel
     85     * @param selectionModel model holding the global query/facet selection
     86     * @param subListSize if large than 0, multiple lists will be generated each
     87     * with a maximum size of this value
     88     */
     89    public FacetValuesPanel(String id, final IModel<FacetField> model, final IModel<QueryFacetsSelection> selectionModel, int subListSize) {
    7190        super(id, model);
    7291        this.selectionModel = selectionModel;
     92        this.subListSize = subListSize;
    7393
    7494        // shared model that holds the string for filtering the values (quick search)
     
    83103
    84104        // create a view for the actual values
    85         valuesContainer.add(createValuesView("facetValues"));
     105        valuesContainer.add(createValuesView("valuesList"));
    86106
    87107        // create a link for showing all values       
     
    122142     * @return data view with value links
    123143     */
    124     private DataView<Count> createValuesView(String id) {
     144    private DataView createValuesView(String id) {
    125145        final FacetFieldValuesProvider valuesProvider = new FacetFieldValuesProvider(getModel(), MAX_NUMBER_OF_FACETS_TO_SHOW, LOW_PRIORITY_VALUES) {
    126146
     
    131151
    132152        };
    133         final DataView<Count> valuesView = new DataView<Count>(id, valuesProvider) {
    134 
    135             @Override
    136             protected void populateItem(final Item<Count> item) {
    137                 addFacetValue("facetSelect", item);
     153        // partition the values according to the specified partition size
     154        final PartitionedDataProvider<Count, FieldValuesOrder> partitionedValuesProvider = new PartitionedDataProvider<FacetField.Count, FieldValuesOrder>(valuesProvider, subListSize);
     155
     156        // create the view for the partitions
     157        final DataView<List<? extends Count>> valuesView = new DataView<List<? extends Count>>(id, partitionedValuesProvider) {
     158
     159            @Override
     160            protected void populateItem(Item<List<? extends Count>> item) {
     161                // create a list view for the values in this partition
     162                item.add(new ListView<Count>("facetValues", item.getModel()) {
     163
     164                    @Override
     165                    protected void populateItem(ListItem<Count> item) {
     166                        addFacetValue("facetSelect", item);
     167                    }
     168                });
    138169            }
    139170        };
     
    147178     * @param item item to add link to
    148179     */
    149     private void addFacetValue(String id, final Item<Count> item) {
     180    private void addFacetValue(String id, final ListItem<Count> item) {
    150181        item.setDefaultModel(new CompoundPropertyModel<Count>(item.getModel()));
    151182
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProvider.java

    r5125 r5140  
    4747 * @author twagoo
    4848 */
    49 public class FacetFieldValuesProvider extends SortableDataProvider<FacetField.Count, FieldValuesOrder> {
     49public class FacetFieldValuesProvider extends SortableDataProvider<FacetField.Count, FieldValuesOrder> implements ListProvider<FacetField.Count> {
    5050
    5151    private final static Logger logger = LoggerFactory.getLogger(FacetFieldValuesProvider.class);
     
    115115    @Override
    116116    public Iterator<? extends FacetField.Count> iterator(long first, long count) {
    117         final Iterable<Count> filtered = getFilteredValues();
     117        // return iterator starting at specified offset
     118        return getList().listIterator((int) first);
     119    }
     120
     121    @Override
     122    public List<? extends FacetField.Count> getList() {
     123        final Iterable<Count> filteredValues = getFilteredValues();
    118124        // sort what remains
    119         final ImmutableList sorted = getOrdering().immutableSortedCopy(filtered);
     125        final ImmutableList sorted = getOrdering().immutableSortedCopy(filteredValues);
    120126        if (sorted.size() > maxNumberOfItems) {
    121             return sorted.subList(0, maxNumberOfItems).listIterator((int) first);
     127            return sorted.subList(0, maxNumberOfItems);
    122128        } else {
    123129            // return iterator starting at specified offset
    124             return sorted.listIterator((int) first);
     130            return sorted;
    125131        }
    126132    }
  • vlo/trunk/vlo-web-app/src/main/resources/eu/clarin/cmdi/vlo/wicket/pages/vlo-collections.css

    r4916 r5140  
    3131
    3232#collections ul li {
    33     display: block;
     33    display: inline-block;
    3434    width: 28%;
    3535    margin: 0 2%;
    36     float: left;
    37     overflow: no-content;
    38     padding-bottom: .2em;
     36    overflow: hidden;
     37    padding: .2em 0 .2em 0;
     38    vertical-align: top;
     39}
     40
     41#collections .facetvalues li a, #collections .selectedfacetvalue {
     42    padding-left: 0px;
    3943}
    4044
Note: See TracChangeset for help on using the changeset viewer.