github.com/balzaczyy/golucene@v0.0.0-20151210033525-d0be9ee89713/core/codec/lucene40/segmentInfoReader.go (about)

     1  package lucene40
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"github.com/balzaczyy/golucene/core/codec"
     7  	. "github.com/balzaczyy/golucene/core/index/model"
     8  	"github.com/balzaczyy/golucene/core/store"
     9  	"github.com/balzaczyy/golucene/core/util"
    10  )
    11  
    12  // lucene40/Lucene40SegmentInfoReader.java
    13  
    14  type Lucene40SegmentInfoReader struct{}
    15  
    16  func (r *Lucene40SegmentInfoReader) Read(dir store.Directory,
    17  	segment string, context store.IOContext) (si *SegmentInfo, err error) {
    18  
    19  	si = new(SegmentInfo)
    20  	fileName := util.SegmentFileName(segment, "", LUCENE40_SI_EXTENSION)
    21  	input, err := dir.OpenInput(fileName, context)
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  
    26  	success := false
    27  	defer func() {
    28  		if !success {
    29  			util.CloseWhileSuppressingError(input)
    30  		} else {
    31  			input.Close()
    32  		}
    33  	}()
    34  
    35  	_, err = codec.CheckHeader(input, LUCENE40_CODEC_NAME, LUCENE40_VERSION_START, LUCENE40_VERSION_CURRENT)
    36  	if err != nil {
    37  		return nil, err
    38  	}
    39  	versionStr, err := input.ReadString()
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  	version, err := util.ParseVersion(versionStr)
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  
    48  	docCount, err := input.ReadInt()
    49  	if err != nil {
    50  		return nil, err
    51  	}
    52  	if docCount < 0 {
    53  		return nil, errors.New(fmt.Sprintf("invalid docCount: %v (resource=%v)", docCount, input))
    54  	}
    55  	sicf, err := input.ReadByte()
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  	isCompoundFile := (sicf == SEGMENT_INFO_YES)
    60  	diagnostics, err := input.ReadStringStringMap()
    61  	if err != nil {
    62  		return nil, err
    63  	}
    64  	_, err = input.ReadStringStringMap() // read deprecated attributes
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  	files, err := input.ReadStringSet()
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  
    73  	if err = codec.CheckEOF(input); err != nil {
    74  		return nil, err
    75  	}
    76  
    77  	si = NewSegmentInfo(dir, version, segment, int(docCount), isCompoundFile, nil, diagnostics)
    78  	si.SetFiles(files)
    79  
    80  	success = true
    81  	return si, nil
    82  }