package org.apache.lucene.document;
import java.io.Serializable;
/**
* Copyright 2004 The Apache Software Foundation
*
* Licensed 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.
*/
/**
* Provides information about what should be done with this Field
*
**/
//Replace with an enumerated type in 1.5
public final class FieldSelectorResult implements Serializable {
/**
* Load this {@link Field} every time the {@link Document} is loaded, reading in the data as it is encountered.
* {@link Document#getField(String)} and {@link Document#getFieldable(String)} should not return null.
*<p/>
* {@link Document#add(Fieldable)} should be called by the Reader.
*/
public transient static final FieldSelectorResult LOAD = new FieldSelectorResult(0);
/**
* Lazily load this {@link Field}. This means the {@link Field} is valid, but it may not actually contain its data until
* invoked. {@link Document#getField(String)} SHOULD NOT BE USED. {@link Document#getFieldable(String)} is safe to use and should
* return a valid instance of a {@link Fieldable}.
*<p/>
* {@link Document#add(Fieldable)} should be called by the Reader.
*/
public transient static final FieldSelectorResult LAZY_LOAD = new FieldSelectorResult(1);
/**
* Do not load the {@link Field}. {@link Document#getField(String)} and {@link Document#getFieldable(String)} should return null.
* {@link Document#add(Fieldable)} is not called.
* <p/>
* {@link Document#add(Fieldable)} should not be called by the Reader.
*/
public transient static final FieldSelectorResult NO_LOAD = new FieldSelectorResult(2);
/**
* Load this field as in the {@link #LOAD} case, but immediately return from {@link Field} loading for the {@link Document}. Thus, the
* Document may not have its complete set of Fields. {@link Document#getField(String)} and {@link Document#getFieldable(String)} should
* both be valid for this {@link Field}
* <p/>
* {@link Document#add(Fieldable)} should be called by the Reader.
*/
public transient static final FieldSelectorResult LOAD_AND_BREAK = new FieldSelectorResult(3);
/**
* Behaves much like {@link #LOAD} but does not uncompress any compressed data. This is used for internal purposes.
* {@link Document#getField(String)} and {@link Document#getFieldable(String)} should not return null.
* <p/>
* {@link Document#add(Fieldable)} should be called by
* the Reader.
* @deprecated This is an internal option only, and is
* no longer needed now that {@link CompressionTools}
* is used for field compression.
*/
public transient static final FieldSelectorResult LOAD_FOR_MERGE = new FieldSelectorResult(4);
/** Expert: Load the size of this {@link Field} rather than its value.
* Size is measured as number of bytes required to store the field == bytes for a binary or any compressed value, and 2*chars for a String value.
* The size is stored as a binary value, represented as an int in a byte[], with the higher order byte first in [0]
*/
public transient static final FieldSelectorResult SIZE = new FieldSelectorResult(5);
/** Expert: Like {@link #SIZE} but immediately break from the field loading loop, i.e., stop loading further fields, after the size is loaded */
public transient static final FieldSelectorResult SIZE_AND_BREAK = new FieldSelectorResult(6);
private int id;
private FieldSelectorResult(int id) {
this.id = id;
}
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final FieldSelectorResult that = (FieldSelectorResult) o;
if (id != that.id) return false;
return true;
}
public int hashCode() {
return id;
}
}