⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contentstrategy.java

📁 lucene2.2.0版本
💻 JAVA
字号:
/** * 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.lucene.gdata.search.analysis;import org.apache.lucene.document.Field;import org.apache.lucene.document.Field.Index;import org.apache.lucene.document.Field.Store;import org.apache.lucene.gdata.data.ServerBaseEntry;import org.apache.lucene.gdata.search.config.IndexSchemaField;import org.apache.lucene.gdata.search.config.IndexSchemaField.ContentType;import org.apache.lucene.gdata.search.index.GdataIndexerException;import org.apache.lucene.gdata.utils.ReflectionUtils;import org.w3c.dom.Node;/** * Creating Indexable document requires processing of incoming entities as * GData Entries. Entries in the GData protocol might have very different * structures and content. They all have on thing in common as they are atom xml * format. To retrieve the configured elements of the atom format and process the * actual content might differ from element to element. * <p> * Each predefined ContentStrategy can be used to retrieve certain content from * the defined element. Which element to process is defined using a XPath * expression in the gdata-config.xml file. * </p> * <p> * <tt>ContentStrategy</tt> implementation should not be accessed directly. To * get a <tt>ContentStrategy</tt> for a specific * {@link org.apache.lucene.gdata.search.config.IndexSchemaField.ContentType} * use the {@link ContentStrategy#getFieldStrategy} factory method. This method * expects a IndexSchemaField instance with a set <tt>ContentType</tt>. The * return value is a new <tt>ContentStrategy</tt> instance for the defined * <tt>ContentType</tt>. * </p> *  * @see org.apache.lucene.gdata.search.config.IndexSchemaField.ContentType * @see org.apache.lucene.gdata.search.index.IndexDocumentBuilder *  * @author Simon Willnauer */public abstract class ContentStrategy {    protected final Store store;    protected final Index index;    protected final IndexSchemaField config;    protected String content;    protected String fieldName;    protected ContentStrategy(IndexSchemaField fieldConfiguration) {        this(null, null, fieldConfiguration);    }    protected ContentStrategy(Index index, Store store,            IndexSchemaField fieldConfig) {        if(fieldConfig == null)            throw new IllegalArgumentException("IndexSchemaField must not be null");        this.config = fieldConfig;        this.fieldName = fieldConfig.getName();        if (index != null) {            this.index = index;        } else {            this.index = fieldConfig.getIndex() == null ? IndexSchemaField.DEFAULT_INDEX_STRATEGY                    : fieldConfig.getIndex();        }        if (store != null) {            this.store = store;        } else {            this.store = fieldConfig.getStore() == null ? IndexSchemaField.DEFAULT_STORE_STRATEGY                    : fieldConfig.getStore();        }    }    /**     * @param indexable     * @throws NotIndexableException     */    public abstract void processIndexable(            Indexable<? extends Node, ? extends ServerBaseEntry> indexable)            throws NotIndexableException;    /**     * This method creates a lucene field from the retrieved content of the     * entity. Values for Field.Index, Field.Store, the field name and the boost     * factor are configured in the <tt>IndexSchemaField</tt> passed by the     * constructor e.g the factory method. This method might be overwritten by     * subclasses.     *      * @return the Lucene {@link Field}     */    public Field[] createLuceneField() {        /*         * should I test the content for being empty?!         * does that make any difference if empty fields are indexed?!         */        if(this.fieldName==null|| this.content == null)            throw new GdataIndexerException("Required field not set fieldName: "+this.fieldName+" content: "+this.content);        if(this.content.length()==0){            return new Field[0];        }        Field retValue = new Field(this.fieldName, this.content, this.store,                this.index);        float boost = this.config.getBoost();        if (boost != 1.0f)            retValue.setBoost(boost);        return new Field[]{retValue};            }    /**     * This factory method creates the <tt>ContentStrategy</tt> corresponding     * to the set <tt>ContentType</tt> value in the <tt>IndexSchemaField</tt>     * passed to the method as the single parameter.     * <p>     * The ContentType must not be null     * </p>     *      * @param fieldConfig -     *            the field config to use to identify the corresponding     *            <tt>ContentStrategy</tt>     * @return - a new <tt>ContentStrategy</tt> instance     */    public static ContentStrategy getFieldStrategy(IndexSchemaField fieldConfig) {        if (fieldConfig == null)            throw new IllegalArgumentException(                    "field configuration must not be null");        ContentType type = fieldConfig.getContentType();        if (type == null)            throw new IllegalArgumentException(                    "ContentType in IndexSchemaField must not be null");        fieldConfig.getAnalyzerClass();        switch (type) {        case CATEGORY:            return new GdataCategoryStrategy(fieldConfig);        case HTML:            return new HTMLStrategy(fieldConfig);        case XHTML:            return new XHtmlStrategy(fieldConfig);        case GDATADATE:            return new GdataDateStrategy(fieldConfig);        case TEXT:            return new PlainTextStrategy(fieldConfig);        case KEYWORD:            return new KeywordStrategy(fieldConfig);        case CUSTOM:            /*             * check if this class can be created with default constructor is checked             * in IndexSchemaField#setFieldClass and throws RuntimeEx if not. So             * server can not start up.             */            return ReflectionUtils.getDefaultInstance(fieldConfig                    .getFieldClass());        case MIXED:            return new MixedContentStrategy(fieldConfig);        default:            throw new RuntimeException("No content strategy found for " + type);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -