blob: 28773542fd1326988b2c45cba5698d9241617862 [file] [log] [blame]
/*
* 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.
*/
package org.apache.solr.client.solrj.response;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.solr.client.solrj.util.ClientUtils;
/**
* A utility class to hold the facet response. It could use the NamedList container,
* but for JSTL, it is nice to have something that implements List so it can be iterated
*
* @since solr 1.3
*/
public class FacetField implements Serializable
{
public static class Count implements Serializable
{
private String _name = null;
private long _count = 0;
// hang onto the FacetField for breadcrumb creation convenience
private FacetField _ff = null;
public Count( FacetField ff, String n, long c )
{
_name = n;
_count = c;
_ff = ff;
}
public String getName() {
return _name;
}
public void setName( String n )
{
_name = n;
}
public long getCount() {
return _count;
}
public void setCount( long c )
{
_count = c;
}
public FacetField getFacetField() {
return _ff;
}
@Override
public String toString()
{
return _name+" ("+_count+")";
}
public String getAsFilterQuery() {
if (_ff.getName().equals("facet_queries")) {
return _name;
}
return
ClientUtils.escapeQueryChars( _ff._name ) + ":" +
ClientUtils.escapeQueryChars( _name );
}
}
private String _name = null;
private List<Count> _values = null;
public FacetField( final String n )
{
_name = n;
}
/**
* Insert at the end of the list
*/
public void add( String name, long cnt )
{
if( _values == null ) {
_values = new ArrayList<>( 30 );
}
_values.add( new Count( this, name, cnt ) );
}
/**
* Insert at the beginning of the list.
*/
public void insert( String name, long cnt )
{
if( _values == null ) {
_values = new ArrayList<>( 30 );
}
_values.add( 0, new Count( this, name, cnt ) );
}
public String getName() {
return _name;
}
public List<Count> getValues() {
return _values == null ? Collections.<Count>emptyList() : _values;
}
public int getValueCount()
{
return _values == null ? 0 : _values.size();
}
public FacetField getLimitingFields(long max)
{
FacetField ff = new FacetField( _name );
if( _values != null ) {
ff._values = new ArrayList<>( _values.size() );
for( Count c : _values ) {
if( c._count < max ) { // !equal to
ff._values.add( c );
}
}
}
return ff;
}
@Override
public String toString()
{
return _name + ":" + _values;
}
}