blob: fe865974f194033366462923274a367de82f8b87 [file] [log] [blame]
// Lucene version compatibility level 4.8.1
using System;
using System.Collections.Generic;
namespace Lucene.Net.Facet
{
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/// <summary>
/// Maps specified dims to provided <see cref="Facets"/> impls; else, uses
/// the default <see cref="Facets"/> impl.
/// </summary>
public class MultiFacets : Facets
{
private readonly IDictionary<string, Facets> dimToFacets;
private readonly Facets defaultFacets;
/// <summary>
/// Create this, with the specified default <see cref="Facets"/>
/// for fields not included in <paramref name="dimToFacets"/>.
/// </summary>
public MultiFacets(IDictionary<string, Facets> dimToFacets, Facets defaultFacets = null)
{
this.dimToFacets = dimToFacets;
this.defaultFacets = defaultFacets;
}
public override FacetResult GetTopChildren(int topN, string dim, params string[] path)
{
if (!dimToFacets.TryGetValue(dim, out Facets facets))
{
if (defaultFacets == null)
{
throw new ArgumentException("invalid dim \"" + dim + "\"");
}
facets = defaultFacets;
}
return facets.GetTopChildren(topN, dim, path);
}
public override float GetSpecificValue(string dim, params string[] path)
{
if (!dimToFacets.TryGetValue(dim, out Facets facets))
{
if (defaultFacets == null)
{
throw new ArgumentException("invalid dim \"" + dim + "\"");
}
facets = defaultFacets;
}
return facets.GetSpecificValue(dim, path);
}
public override IList<FacetResult> GetAllDims(int topN)
{
List<FacetResult> results = new List<FacetResult>();
// First add the specific dim's facets:
foreach (KeyValuePair<string, Facets> ent in dimToFacets)
{
results.Add(ent.Value.GetTopChildren(topN, ent.Key));
}
if (defaultFacets != null)
{
// Then add all default facets as long as we didn't
// already add that dim:
foreach (FacetResult result in defaultFacets.GetAllDims(topN))
{
if (dimToFacets.ContainsKey(result.Dim) == false)
{
results.Add(result);
}
}
}
return results;
}
}
}