org.apache.solr.client.solrj.response.LukeResponse.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.solr.client.solrj.response.LukeResponse.java

Source

/*
 * 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.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.solr.common.luke.FieldFlag;
import org.apache.solr.common.util.NamedList;

/**
 * This is an incomplete representation of the data returned from Luke
 *
 *
 * @since solr 1.3
 */
public class LukeResponse extends SolrResponseBase {

    public static class FieldTypeInfo implements Serializable {
        String name;
        String className;
        boolean tokenized;
        String analyzer;
        List<String> fields;
        List<String> dynamicFields;

        public FieldTypeInfo(String name) {
            this.name = name;
            fields = Collections.emptyList();
        }

        public String getAnalyzer() {
            return analyzer;
        }

        public String getClassName() {
            return className;
        }

        public List<String> getFields() {
            return fields;
        }

        public List<String> getDynamicFields() {
            return dynamicFields;
        }

        public String getName() {
            return name;
        }

        public boolean isTokenized() {
            return tokenized;
        }/*
         Sample:
         types={ignored={fields=null,tokenized=false,analyzer=org.apache.solr.schema.FieldType$DefaultAnalyzer@f94934},
         integer={fields=null,tokenized=false,analyzer=org.apache.solr.schema.FieldType$DefaultAnalyzer@3525a2},
         sfloat={fields=[price, weight],tokenized=false,analyzer=org.apache.solr.schema.FieldType$DefaultAnalyzer@39cf9c},
         text_ws={fields=[cat],tokenized=true,analyzer=TokenizerChain(org.apache.solr.analysis.WhitespaceTokenizerFactory@6d3ca2)},
         alphaOnlySort={fields=[alphaNameSort],tokenized=true,analyzer=TokenizerChain(org.apache.solr.analysis.KeywordTokenizerFactory@a7bd3b,
          org.apache.solr.analysis.LowerCaseFilterFactory@78aae2, org.apache.solr.analysis.TrimFilterFactory@1b16a7,
          org.apache.solr.analysis.PatternReplaceFilterFactory@6c6b08)},date={fields=[timestamp],tokenized=false,
          analyzer=org.apache.solr.schema.FieldType$DefaultAnalyzer@e6e42e},sint={fields=[popularity],
          tokenized=false,analyzer=org.apache.solr.schema.FieldType$DefaultAnalyzer@8ea21d},
          boolean={fields=[inStock],tokenized=false,analyzer=org.apache.solr.schema.BoolField$1@354949},
          textTight={fields=[sku],tokenized=true,analyzer=TokenizerChain(org.apache.solr.analysis.WhitespaceTokenizerFactory@5e88f7,
           org.apache.solr.analysis.SynonymFilterFactory@723646, org.apache.solr.analysis.StopFilterFactory@492ff1,
           org.apache.solr.analysis.WordDelimiterFilterFactory@eaabad, org.apache.solr.analysis.LowerCaseFilterFactory@ad1355,
            org.apache.solr.analysis.EnglishPorterFilterFactory@d03a00, org.apache.solr.analysis.RemoveDuplicatesTokenFilterFactory@900079)},
            long={fields=null,tokenized=false,analyzer=org.apache.solr.schema.FieldType$DefaultAnalyzer@f3b83},
            double={fields=null,tokenized=false,analyzer=org.apache.solr.schema.FieldType$DefaultAnalyzer@c2b07},
             
          */

        @SuppressWarnings("unchecked")
        public void read(NamedList<Object> nl) {
            for (Map.Entry<String, Object> entry : nl) {
                String key = entry.getKey();
                if ("fields".equals(key) && entry.getValue() != null) {
                    List<String> theFields = (List<String>) entry.getValue();
                    fields = new ArrayList<>(theFields);
                } else if ("dynamicFields".equals(key) && entry.getValue() != null) {
                    List<String> theDynamicFields = (List<String>) entry.getValue();
                    dynamicFields = new ArrayList<>(theDynamicFields);
                } else if ("tokenized".equals(key) == true) {
                    tokenized = Boolean.parseBoolean(entry.getValue().toString());
                } else if ("analyzer".equals(key) == true) {
                    analyzer = entry.getValue().toString();
                } else if ("className".equals(key) == true) {
                    className = entry.getValue().toString();
                }
            }
        }
    }

    public static class FieldInfo implements Serializable {
        String name;
        String type;
        String schema;
        int docs;
        int distinct;
        EnumSet<FieldFlag> flags;
        boolean cacheableFaceting;
        NamedList<Integer> topTerms;

        public FieldInfo(String n) {
            name = n;
        }

        @SuppressWarnings("unchecked")
        public void read(NamedList<Object> nl) {
            for (Map.Entry<String, Object> entry : nl) {
                if ("type".equals(entry.getKey())) {
                    type = (String) entry.getValue();
                }
                if ("flags".equals(entry.getKey())) {
                    flags = parseFlags((String) entry.getValue());
                } else if ("schema".equals(entry.getKey())) {
                    schema = (String) entry.getValue();
                } else if ("docs".equals(entry.getKey())) {
                    docs = (Integer) entry.getValue();
                } else if ("distinct".equals(entry.getKey())) {
                    distinct = (Integer) entry.getValue();
                } else if ("cacheableFaceting".equals(entry.getKey())) {
                    cacheableFaceting = (Boolean) entry.getValue();
                } else if ("topTerms".equals(entry.getKey())) {
                    topTerms = (NamedList<Integer>) entry.getValue();
                }
            }
        }

        public static EnumSet<FieldFlag> parseFlags(String flagStr) {
            EnumSet<FieldFlag> result = EnumSet.noneOf(FieldFlag.class);
            char[] chars = flagStr.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                if (chars[i] != '-') {
                    FieldFlag flag = FieldFlag.getFlag(chars[i]);
                    result.add(flag);
                }
            }
            return result;
        }

        public EnumSet<FieldFlag> getFlags() {
            return flags;
        }

        public boolean isCacheableFaceting() {
            return cacheableFaceting;
        }

        public String getType() {
            return type;
        }

        public int getDistinct() {
            return distinct;
        }

        public int getDocs() {
            return docs;
        }

        public String getName() {
            return name;
        }

        public String getSchema() {
            return schema;
        }

        public EnumSet<FieldFlag> getSchemaFlags() {
            return flags;
        }

        public NamedList<Integer> getTopTerms() {
            return topTerms;
        }
    }

    private NamedList<Object> indexInfo;
    private Map<String, FieldInfo> fieldInfo;
    private Map<String, FieldInfo> dynamicFieldInfo;
    private Map<String, FieldTypeInfo> fieldTypeInfo;

    @Override
    @SuppressWarnings("unchecked")
    public void setResponse(NamedList<Object> res) {
        super.setResponse(res);

        // Parse indexinfo
        indexInfo = (NamedList<Object>) res.get("index");

        NamedList<Object> schema = (NamedList<Object>) res.get("schema");
        NamedList<Object> flds = (NamedList<Object>) res.get("fields");
        NamedList<Object> dynamicFlds = (NamedList<Object>) res.get("dynamicFields");

        if (flds == null && schema != null) {
            flds = (NamedList<Object>) schema.get("fields");
        }
        if (flds != null) {
            fieldInfo = new HashMap<>();
            for (Map.Entry<String, Object> field : flds) {
                FieldInfo f = new FieldInfo(field.getKey());
                f.read((NamedList<Object>) field.getValue());
                fieldInfo.put(field.getKey(), f);
            }
        }

        if (dynamicFlds == null && schema != null) {
            dynamicFlds = (NamedList<Object>) schema.get("dynamicFields");
        }
        if (dynamicFlds != null) {
            dynamicFieldInfo = new HashMap<>();
            for (Map.Entry<String, Object> dynamicField : dynamicFlds) {
                FieldInfo f = new FieldInfo(dynamicField.getKey());
                f.read((NamedList<Object>) dynamicField.getValue());
                dynamicFieldInfo.put(dynamicField.getKey(), f);
            }
        }

        if (schema != null) {
            NamedList<Object> fldTypes = (NamedList<Object>) schema.get("types");
            if (fldTypes != null) {
                fieldTypeInfo = new HashMap<>();
                for (Map.Entry<String, Object> fieldType : fldTypes) {
                    FieldTypeInfo ft = new FieldTypeInfo(fieldType.getKey());
                    ft.read((NamedList<Object>) fieldType.getValue());
                    fieldTypeInfo.put(fieldType.getKey(), ft);
                }
            }
        }
    }

    //----------------------------------------------------------------
    //----------------------------------------------------------------

    public String getIndexDirectory() {
        if (indexInfo == null)
            return null;
        return (String) indexInfo.get("directory");
    }

    public Integer getNumDocs() {
        if (indexInfo == null)
            return null;
        return (Integer) indexInfo.get("numDocs");
    }

    public Integer getMaxDoc() {
        if (indexInfo == null)
            return null;
        return (Integer) indexInfo.get("maxDoc");
    }

    public Integer getNumTerms() {
        if (indexInfo == null)
            return null;
        return (Integer) indexInfo.get("numTerms");
    }

    public Map<String, FieldTypeInfo> getFieldTypeInfo() {
        return fieldTypeInfo;
    }

    public FieldTypeInfo getFieldTypeInfo(String name) {
        return fieldTypeInfo.get(name);
    }

    public NamedList<Object> getIndexInfo() {
        return indexInfo;
    }

    public Map<String, FieldInfo> getFieldInfo() {
        return fieldInfo;
    }

    public FieldInfo getFieldInfo(String f) {
        return fieldInfo.get(f);
    }

    public Map<String, FieldInfo> getDynamicFieldInfo() {
        return dynamicFieldInfo;
    }

    public FieldInfo getDynamicFieldInfo(String f) {
        return dynamicFieldInfo.get(f);
    }

    //----------------------------------------------------------------
}