Changeset 4965


Ignore:
Timestamp:
04/14/14 12:06:37 (10 years ago)
Author:
Twan Goosen
Message:

rewrote parameter conversion to not use multimap

Location:
vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo
Files:
2 edited

Legend:

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

    r4963 r4965  
    1919import com.google.common.collect.Lists;
    2020import java.io.Serializable;
     21import java.util.ArrayList;
    2122import java.util.Collection;
    2223
     
    3637    public FacetSelection(FacetSelectionType selectionType, Collection<String> values) {
    3738        this.selectionType = selectionType;
    38         if (values instanceof Serializable) {
     39        // always store as array list, which is modifiable and serialisable
     40        if (values instanceof ArrayList) {
    3941            this.values = values;
    4042        } else {
    41             // make serializable
     43            // copy to new list
    4244            this.values = Lists.newArrayList(values);
    4345        }
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/QueryFacetsSelectionParametersConverter.java

    r4963 r4965  
    1717package eu.clarin.cmdi.vlo.service.solr.impl;
    1818
    19 import com.google.common.collect.HashMultimap;
    20 import com.google.common.collect.Lists;
    2119import com.google.common.collect.Maps;
    22 import com.google.common.collect.Multimap;
    2320import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    2421import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2522import eu.clarin.cmdi.vlo.service.PageParametersConverter;
    26 import java.io.Serializable;
    27 import java.util.Collection;
     23import java.util.Arrays;
    2824import java.util.HashMap;
    2925import java.util.List;
    30 import java.util.Map;
    3126import java.util.Map.Entry;
    3227import org.apache.wicket.request.mapper.parameter.PageParameters;
     
    4843        // Get facet selections from params
    4944        final List<StringValue> facetValues = params.getValues("fq");
    50         // Store in a multimap to allow for multiple selections per facet
    51         final Multimap<String, String> selectionMap = HashMultimap.<String, String>create(facetValues.size(), 1);
     45
     46        final HashMap<String, FacetSelection> selection = Maps.newHashMapWithExpectedSize(facetValues.size());
    5247        for (StringValue facetValue : facetValues) {
    5348            if (!facetValue.isEmpty()) {
     
    5550                if (fq.length == 2) {
    5651                    // we have a facet - value pair
    57                     selectionMap.put(fq[0], fq[1]);
     52                    final String facet = fq[0];
     53                    final String value = fq[1];
     54                    if (selection.containsKey(facet)) {
     55                        selection.get(facet).getValues().add(value);
     56                    } else {
     57                        selection.put(facet, new FacetSelection(Arrays.asList(value)));
     58                    }
    5859                }
    5960            }
    6061        }
    6162
    62         // Facet selection expects a mutable and serializable map, so first convert
    63         // back to ordinary map, then insert serializable values
    64         final HashMap<String, FacetSelection> selection = multimapToSerializableCollectionMap(selectionMap);
    65 
    66         // Facet selection expects a mutable and serializable map, so first convert
    6763        return new QueryFacetsSelection(query, selection);
    6864    }
     
    8985        return params;
    9086    }
    91 
    92     /**
    93      *
    94      * @param selectionMap multimap holding the selection
    95      * @return a fully serializable map with collection values
    96      */
    97     private HashMap<String, FacetSelection> multimapToSerializableCollectionMap(final Multimap<String, String> selectionMap) {
    98 
    99         final HashMap<String, FacetSelection> selection = Maps.newHashMapWithExpectedSize(selectionMap.size());
    100         for (Entry<String, Collection<String>> entry : selectionMap.asMap().entrySet()) {
    101             final FacetSelection value = new FacetSelection(entry.getValue());
    102             if (value instanceof Serializable) {
    103                 // keep serializable collection value
    104                 selection.put(entry.getKey(), value);
    105             } else {
    106                 // copy to a serializable collection
    107                 selection.put(entry.getKey(), value);
    108             }
    109         }
    110         return selection;
    111     }
    11287}
Note: See TracChangeset for help on using the changeset viewer.