/*
 * 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.codecs;


A codec that forwards all its method calls to another codec.

Extend this class when you need to reuse the functionality of an existing codec. For example, if you want to build a codec that redefines LuceneMN's LiveDocsFormat:

  public final class CustomCodec extends FilterCodec {
    public CustomCodec() {
      super("CustomCodec", new LuceneMNCodec());
    }
    public LiveDocsFormat liveDocsFormat() {
      return new CustomLiveDocsFormat();
    }
  }

Please note: Don't call Codec.forName from the no-arg constructor of your own codec. When the SPI framework loads your own Codec as SPI component, SPI has not yet fully initialized! If you want to extend another Codec, instantiate it directly by calling its constructor.

@lucene.experimental
/** * A codec that forwards all its method calls to another codec. * <p> * Extend this class when you need to reuse the functionality of an existing * codec. For example, if you want to build a codec that redefines LuceneMN's * {@link LiveDocsFormat}: * <pre class="prettyprint"> * public final class CustomCodec extends FilterCodec { * * public CustomCodec() { * super("CustomCodec", new LuceneMNCodec()); * } * * public LiveDocsFormat liveDocsFormat() { * return new CustomLiveDocsFormat(); * } * * } * </pre> * * <p><em>Please note:</em> Don't call {@link Codec#forName} from * the no-arg constructor of your own codec. When the SPI framework * loads your own Codec as SPI component, SPI has not yet fully initialized! * If you want to extend another Codec, instantiate it directly by calling * its constructor. * * @lucene.experimental */
public abstract class FilterCodec extends Codec {
The codec to filter.
/** The codec to filter. */
protected final Codec delegate;
Sole constructor. When subclassing this codec, create a no-arg ctor and pass the delegate codec and a unique name to this ctor.
/** Sole constructor. When subclassing this codec, * create a no-arg ctor and pass the delegate codec * and a unique name to this ctor. */
protected FilterCodec(String name, Codec delegate) { super(name); this.delegate = delegate; } @Override public DocValuesFormat docValuesFormat() { return delegate.docValuesFormat(); } @Override public FieldInfosFormat fieldInfosFormat() { return delegate.fieldInfosFormat(); } @Override public LiveDocsFormat liveDocsFormat() { return delegate.liveDocsFormat(); } @Override public NormsFormat normsFormat() { return delegate.normsFormat(); } @Override public PostingsFormat postingsFormat() { return delegate.postingsFormat(); } @Override public SegmentInfoFormat segmentInfoFormat() { return delegate.segmentInfoFormat(); } @Override public StoredFieldsFormat storedFieldsFormat() { return delegate.storedFieldsFormat(); } @Override public TermVectorsFormat termVectorsFormat() { return delegate.termVectorsFormat(); } @Override public CompoundFormat compoundFormat() { return delegate.compoundFormat(); } @Override public PointsFormat pointsFormat() { return delegate.pointsFormat(); } }