class CardinalityRecord implements Serializable {

    public List<String> assembleValues(String field, Map<String,List<String>> valueMap) {
        
        List<String> values = new ArrayList<>();
        List<List<String>> valueLists = new ArrayList<>();
        Iterable<String> fieldSplit = Splitter.on("|").split(field);
        
        int numSplits = 0;
        for (String s : fieldSplit) {
            
            if (valueMap.containsKey(s)) {
                valueLists.add(valueMap.get(s));
            } else {
                valueLists.add(new ArrayList<>());
                if (log.isTraceEnabled()) {
                    log.trace("Cardinalty field " + s + " of configured field " + field + " not found");
                }
                return values;
            }
            numSplits++;
        }
        
        if (numSplits == 1) {
            values.addAll(valueLists.get(0));
        } else {
            List<List<String>> cartesianProduct = cartesianProduct(valueLists);
            for (List<String> l : cartesianProduct) {
                values.add(StringUtils.join(l, "\0"));
            }
        }
        return values;
    }

    public  CardinalityRecord(Set<String> recordedFields, DateType dateType);
    public  CardinalityRecord(CardinalityRecord other);

}