-
Notifications
You must be signed in to change notification settings - Fork 15
/
register.go
100 lines (89 loc) · 1.87 KB
/
register.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package file
// file type
type fileHandler struct {
reader FileItemReader
writer FileItemWriter
mergeSplitter MergeSplitter
}
var fileHandlers = map[string]*fileHandler{
}
func RegisterFileType(ftype string, reader FileItemReader, writer FileItemWriter, mergeSplitter MergeSplitter) {
fileHandlers[ftype] = &fileHandler{
reader: reader,
writer: writer,
mergeSplitter: mergeSplitter,
}
}
func GetFileHandler(ftype string) *fileHandler {
return fileHandlers[ftype]
}
func GetFileItemReader(ftype string) FileItemReader {
switch ftype {
case TSV:
return &tsvFileItemReader{}
case CSV:
return &csvFileItemReader{}
case JSON:
return &jsonFileItemReader{}
default:
fh := GetFileHandler(ftype)
if fh != nil && fh.reader != nil {
return fh.reader
}
}
return nil
}
func GetFileItemWriter(ftype string) FileItemWriter {
switch ftype {
case TSV:
return &tsvFileItemWriter{}
case CSV:
return &csvFileItemWriter{}
case JSON:
return &jsonFileItemWriter{}
default:
fh := GetFileHandler(ftype)
if fh != nil && fh.writer != nil {
return fh.writer
}
}
return nil
}
func GetFileMergeSplitter(ftype string) MergeSplitter {
switch ftype {
case TSV:
return &tsvFileMergeSplitter{}
case CSV:
return &csvFileMergeSplitter{}
case JSON:
return &jsonFileMergeSplitter{}
default:
fh := GetFileHandler(ftype)
if fh != nil && fh.mergeSplitter != nil {
return fh.mergeSplitter
}
}
return nil
}
// checksumer
var checksumers = map[string]Checksumer{
}
func RegisterChecksumer(key string, ch Checksumer) {
checksumers[key] = ch
}
func GetChecksumer(key string) Checksumer {
switch key {
case OKFlag:
return &OKFlagChecksumer{}
case MD5:
return &MD5Checksumer{}
case SHA1:
return &SHA1Checksumer{}
case SHA256:
return &SHA256Checksumer{}
case SHA512:
return &SHA512Checksumer{}
default:
return checksumers[key]
}
}