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 }