Changeset 6022


Ignore:
Timestamp:
02/23/15 15:57:05 (9 years ago)
Author:
Twan Goosen
Message:

Parameters converter that maps to query facet selection now checks whether facets passed in as parameters do actually exist according to the configuration. If not, logs a debug message and notifies the user via a wicket error message

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

Legend:

Unmodified
Added
Removed
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloServicesSpringConfig.java

    r6002 r6022  
    8888    @Bean(name = "queryParametersConverter")
    8989    public PageParametersConverter<QueryFacetsSelection> queryParametersConverter() {
    90         return new QueryFacetsSelectionParametersConverter();
     90        return new QueryFacetsSelectionParametersConverter(vloConfig);
    9191    }
    9292
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/QueryFacetsSelectionParametersConverter.java

    r4999 r6022  
    1818
    1919import com.google.common.base.Splitter;
     20import com.google.common.collect.ImmutableSet;
    2021import com.google.common.collect.Maps;
    2122import static eu.clarin.cmdi.vlo.VloWebAppParameters.*;
     23import eu.clarin.cmdi.vlo.config.VloConfig;
    2224import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    2325import eu.clarin.cmdi.vlo.pojo.FacetSelectionType;
     
    2830import java.util.List;
    2931import java.util.Map.Entry;
     32import java.util.Set;
     33import org.apache.wicket.Session;
    3034import org.apache.wicket.request.mapper.parameter.PageParameters;
    3135import org.apache.wicket.util.string.StringValue;
     
    4852    public final static Splitter FILTER_SPLITTER = Splitter.on(":").limit(2);
    4953
     54    private final Set<String> facetsDefined;
     55
     56    public QueryFacetsSelectionParametersConverter(VloConfig config) {
     57        facetsDefined = ImmutableSet.copyOf(config.getAllFacetFields());
     58    }
     59
    5060    @Override
    5161    public QueryFacetsSelection fromParameters(PageParameters params) {
     
    6474                    final String type = fqType.get(1).toUpperCase();
    6575
    66                     try {
    67                         final FacetSelectionType facetSelectionType = FacetSelectionType.valueOf(type);
    68                         selection.put(facet, new FacetSelection(facetSelectionType));
    69                     } catch (IllegalArgumentException ex) {
    70                         logger.warn("Unknown selection type passed into query parameter {}: {}", FILTER_QUERY_TYPE, type);
     76                    if (facetsDefined.contains(facet)) {
     77                        try {
     78                            final FacetSelectionType facetSelectionType = FacetSelectionType.valueOf(type);
     79                            selection.put(facet, new FacetSelection(facetSelectionType));
     80                        } catch (IllegalArgumentException ex) {
     81                            logger.warn("Unknown selection type passed into query parameter {}: {}", FILTER_QUERY_TYPE, type);
     82                        }
    7183                    }
    7284                } else {
     
    8496                    final String facet = fq.get(0);
    8597                    final String value = fq.get(1);
    86                     if (selection.containsKey(facet)) {
    87                         selection.get(facet).getValues().add(value);
     98                    if (facetsDefined.contains(facet)) {
     99                        if (selection.containsKey(facet)) {
     100                            selection.get(facet).getValues().add(value);
     101                        } else {
     102                            selection.put(facet, new FacetSelection(Arrays.asList(value)));
     103                        }
    88104                    } else {
    89                         selection.put(facet, new FacetSelection(Arrays.asList(value)));
     105                        logger.debug("Undefined facet passed into query parameter {}: {}", FILTER_QUERY, facet);
     106
     107                        if (Session.exists()) {
     108                            // generate Wicket error message
     109                            Session.get().error("Unknown facet: " + facet);
     110                        }
    90111                    }
    91112                } else {
  • vlo/trunk/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/impl/QueryFacetsSelectionParametersConverterTest.java

    r4999 r6022  
    1717package eu.clarin.cmdi.vlo.service.impl;
    1818
     19import com.google.common.collect.ImmutableList;
    1920import com.google.common.collect.Maps;
     21import static eu.clarin.cmdi.vlo.FacetConstants.FIELD_COLLECTION;
     22import static eu.clarin.cmdi.vlo.FacetConstants.FIELD_COUNTRY;
     23import eu.clarin.cmdi.vlo.config.VloConfig;
    2024import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    2125import eu.clarin.cmdi.vlo.pojo.FacetSelectionType;
     
    4448    @Before
    4549    public void setUp() {
    46         instance = new QueryFacetsSelectionParametersConverter();
     50        VloConfig config = new VloConfig() {
     51
     52            @Override
     53            public List<String> getAllFacetFields() {
     54                return ImmutableList.of("facet1", "facet2", "facet3", "facet4");
     55            }
     56
     57        };
     58        instance = new QueryFacetsSelectionParametersConverter(config);
    4759    }
    4860
     
    6072        params.add("fq", "facet2:value:C"); // has a colon in value
    6173        params.add("fq", "illegal-no-colon"); //should get ignored
     74        params.add("fq", "facet5:valueD"); //not in list, should get ignored
    6275        params.add("fq", ""); // not a valid facet selection
    6376        params.add("fq", "invalid"); // not a valid facet selection
Note: See TracChangeset for help on using the changeset viewer.