Changeset 5046


Ignore:
Timestamp:
04/24/14 11:58:48 (10 years ago)
Author:
Twan Goosen
Message:

fixed order of fields returned by document fields provider

Location:
vlo/branches/vlo-3.0/vlo-web-app/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloSpringConfig.java

    r5026 r5046  
    5252import eu.clarin.cmdi.vlo.service.solr.impl.SolrFacetQueryFactoryImpl;
    5353import java.io.IOException;
    54 import java.util.Collection;
     54import java.util.List;
    5555import java.util.Properties;
    5656import javax.xml.transform.OutputKeys;
     
    154154    }
    155155
    156     @Bean(name="queryParametersConverter")
     156    @Bean(name = "queryParametersConverter")
    157157    public PageParametersConverter<QueryFacetsSelection> queryParametersConverter() {
    158158        return new QueryFacetsSelectionParametersConverter();
    159159    }
    160    
    161     @Bean(name="documentParamsConverter")
     160
     161    @Bean(name = "documentParamsConverter")
    162162    public PageParametersConverter<SolrDocument> documentParamsConverter() {
    163163        return new DocumentParametersConverter();
    164164    }
    165    
    166     @Bean(name="searchContextParamsConverter")
    167     public PageParametersConverter<SearchContext> searchContextParamsConverter(){
     165
     166    @Bean(name = "searchContextParamsConverter")
     167    public PageParametersConverter<SearchContext> searchContextParamsConverter() {
    168168        return new SearchContextParametersConverter(queryParametersConverter());
    169169    }
     
    203203    }
    204204
     205    @Bean(name = "documentFieldOrder")
     206    public List<String> documentFieldOrder() {
     207        return DOCUMENT_FIELDS;
     208    }
     209
    205210    /**
    206211     * Fields to request for documents. TODO: Make configurable?
     212     *
    207213     */
    208     public static final Collection<String> DOCUMENT_FIELDS = ImmutableList.of(
     214    public static final List<String> DOCUMENT_FIELDS = ImmutableList.of(
    209215            FacetConstants.FIELD_NAME,
    210216            FacetConstants.FIELD_DESCRIPTION,
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/RecordPage.java

    r5015 r5046  
    4141import eu.clarin.cmdi.vlo.wicket.panels.record.ResourceLinksPanel;
    4242import eu.clarin.cmdi.vlo.wicket.provider.DocumentFieldsProvider;
     43import java.util.List;
    4344import org.apache.solr.common.SolrDocument;
    4445import org.apache.wicket.Component;
     
    7374    @SpringBean(name = "technicalPropertiesFilter")
    7475    private FieldFilter technicalPropertiesFilter;
     76    @SpringBean(name = "documentFieldOrder")
     77    private List<String> fieldOrder;
    7578
    7679    private final IModel<SearchContext> navigationModel;
     
    131134        add(new SolrFieldLabel("name", getModel(), FacetConstants.FIELD_NAME, "Unnamed record"));
    132135        add(createLandingPageLink("landingPageLink"));
    133         add(new FieldsTablePanel("documentProperties", new DocumentFieldsProvider(getModel(), basicPropertiesFilter)));
     136        add(new FieldsTablePanel("documentProperties", new DocumentFieldsProvider(getModel(), basicPropertiesFilter, fieldOrder)));
    134137
    135138        // Resources section
     
    246249            @Override
    247250            protected Component createContent(String id) {
    248                 return new FieldsTablePanel(id, new DocumentFieldsProvider(getModel(), technicalPropertiesFilter));
     251                return new FieldsTablePanel(id, new DocumentFieldsProvider(getModel(), technicalPropertiesFilter, fieldOrder));
    249252            }
    250253        };
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SearchResultItemExpandedPanel.java

    r5024 r5046  
    6262    @SpringBean(name = "resolvingResourceStringConverter")
    6363    ResourceStringConverter resolvingResourceStringConverter;
     64    @SpringBean(name = "documentFieldOrder")
     65    private List<String> fieldOrder;
    6466
    6567    public SearchResultItemExpandedPanel(String id, final IModel<SolrDocument> documentModel, final IModel<SearchContext> selectionModel) {
     
    7476
    7577        // table with some basic properties
    76         add(new FieldsTablePanel("documentProperties", new DocumentFieldsProvider(documentModel, propertiesFilter)) {
     78        add(new FieldsTablePanel("documentProperties", new DocumentFieldsProvider(documentModel, propertiesFilter, fieldOrder)) {
    7779
    7880            @Override
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/DocumentFieldsProvider.java

    r4854 r5046  
    1717package eu.clarin.cmdi.vlo.wicket.provider;
    1818
     19import com.google.common.base.Function;
     20import com.google.common.collect.Ordering;
    1921import eu.clarin.cmdi.vlo.pojo.DocumentField;
    2022import eu.clarin.cmdi.vlo.service.FieldFilter;
     
    3941    private final FieldFilter fieldFilter;
    4042    private List<DocumentFieldModel> fields;
     43    private final List<String> fieldOrder;
    4144
    4245    /**
     
    4447     * @param documentModel model that has the document containing the fields
    4548     * @param fieldFilter filter that decides which fields are included
     49     * @param fieldOrder list of field names that determine the order
    4650     */
    47     public DocumentFieldsProvider(IModel<SolrDocument> documentModel, FieldFilter fieldFilter) {
     51    public DocumentFieldsProvider(IModel<SolrDocument> documentModel, FieldFilter fieldFilter, List<String> fieldOrder) {
    4852        this.documentModel = documentModel;
    4953        this.fieldFilter = fieldFilter;
     54        this.fieldOrder = fieldOrder;
    5055    }
    5156
     
    6166            }
    6267        }
    63         return fields;
     68
     69        if (fieldOrder == null) {
     70            return fields;
     71        } else {
     72            return getFieldOrdering().sortedCopy(fields);
     73        }
     74    }
     75
     76    /**
     77     * Makes an explicit ordering based on the field name of the document field.
     78     * Note: this is not stored in the instance because the resulting Ordering
     79     * is not serializable
     80     *
     81     * @return ordering for document fields
     82     */
     83    private Ordering<DocumentField> getFieldOrdering() {
     84        final Ordering<DocumentField> fieldOrdering = Ordering.explicit(fieldOrder).onResultOf(new Function<DocumentField, String>() {
     85
     86            @Override
     87            public String apply(DocumentField input) {
     88                return input.getFieldName();
     89            }
     90        });
     91        return fieldOrdering;
    6492    }
    6593
  • vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/provider/DocumentFieldsProviderTest.java

    r4854 r5046  
    1717package eu.clarin.cmdi.vlo.wicket.provider;
    1818
     19import com.google.common.collect.ImmutableList;
    1920import eu.clarin.cmdi.vlo.pojo.DocumentField;
    2021import eu.clarin.cmdi.vlo.service.FieldFilter;
    2122import java.util.Iterator;
     23import java.util.List;
    2224import org.apache.solr.common.SolrDocument;
    2325import org.apache.wicket.model.Model;
     
    5153        document.addField("field4", "value4");
    5254
    53         instance = new DocumentFieldsProvider(Model.of(document), filter);
     55        instance = new DocumentFieldsProvider(Model.of(document), filter, null);
    5456    }
    5557
     
    7072                oneOf(filter).allowField("field3");
    7173                will(returnValue(true));
    72                
     74
    7375                oneOf(filter).allowField("field4");
    7476                will(returnValue(true));
     
    7779        // two items as field2 is excluded by the filter
    7880        assertEquals(3, instance.size());
     81    }
     82
     83    @Test
     84    public void testOrder() {
     85        // pass in a filter that allows all fields
     86        final FieldFilter allowAllFilter = new FieldFilter() {
     87
     88            @Override
     89            public boolean allowField(String fieldName) {
     90                return true;
     91            }
     92        };
     93
     94        // pass in an explicit field order
     95        final List<String> order = ImmutableList.of("field4", "field2", "field1", "field3");
     96        instance = new DocumentFieldsProvider(Model.of(document), allowAllFilter, order);
     97
     98        final long first = 0L;
     99        final long count = 100L;
     100        final Iterator<? extends DocumentField> result = instance.iterator(first, count);
     101        assertTrue(result.hasNext());
     102        assertEquals("field4", result.next().getFieldName());
     103        assertTrue(result.hasNext());
     104        assertEquals("field2", result.next().getFieldName());
     105        assertTrue(result.hasNext());
     106        assertEquals("field1", result.next().getFieldName());
     107        assertTrue(result.hasNext());
     108        assertEquals("field3", result.next().getFieldName());
     109        assertFalse(result.hasNext());
    79110    }
    80111
     
    95126                oneOf(filter).allowField("field3");
    96127                will(returnValue(true));
    97                
     128
    98129                oneOf(filter).allowField("field4");
    99130                will(returnValue(false));
Note: See TracChangeset for help on using the changeset viewer.