blob: 9abd8d4f33135a69dd6984491a8c4af9ed1befe7 [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.lucene.codecs;
/**
* 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. */
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.
*/
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();
}
}