-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtypes.go
More file actions
323 lines (287 loc) · 12.5 KB
/
types.go
File metadata and controls
323 lines (287 loc) · 12.5 KB
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
package dataverselib
import (
"encoding/json"
"net/http"
"sync"
"time"
)
type MetadataBlock struct {
DisplayName string `json:"displayName"`
Name string `json:"name"`
Fields []MetadataField `json:"fields"`
}
type MetadataField struct {
TypeName string `json:"typeName"`
Multiple bool `json:"multiple"`
TypeClass string `json:"typeClass"`
Value interface{} `json:"value"` // Can be string, array, or object
}
type MetadataCompound map[string]MetadataField
type MetadataFieldItem struct {
Name string `json:"name"`
DisplayName string `json:"displayName"`
DisplayOnCreate bool `json:"displayOnCreate"`
Title string `json:"title"`
Type string `json:"type"`
TypeClass string `json:"typeClass"`
Watermark string `json:"watermark"`
Description string `json:"description"`
Multiple bool `json:"multiple"`
IsControlledVocabulary bool `json:"isControlledVocabulary"`
IsAdvancedSearchFieldType bool `json:"isAdvancedSearchFieldType"`
DisplayFormat string `json:"displayFormat"`
DisplayOrder int `json:"displayOrder"`
IsRequired bool `json:"isRequired"`
ControlledVocabularyValues []string `json:"controlledVocabularyValues,omitempty"`
ChildFields map[string]MetadataFieldItem `json:"childFields,omitempty"`
}
type MetadataBlockInfo struct {
Id int `json:"id"`
DisplayName string `json:"displayName"`
DisplayOnCreate bool `json:"displayOnCreate"`
Name string `json:"name"`
Fields map[string]MetadataFieldItem `json:"fields"`
}
type License struct {
Name string `json:"name,omitempty"`
Uri string `json:"uri,omitempty"`
IconUri string `json:"iconUri,omitempty"`
RightsIdentifier string `json:"rightsIdentifier,omitempty"`
RightsIdentifierScheme string `json:"rightsIdentifierScheme,omitempty"`
SchemeUri string `json:"schemeUri,omitempty"`
LanguageCode string `json:"languageCode,omitempty"`
}
type Checksum struct {
Type string `json:"type,omitempty"`
Value string `json:"value,omitempty"`
}
type AddFileMetadata struct {
Description string `json:"description,omitempty"`
Label string `json:"label,omitempty"`
DirectoryLabel string `json:"directoryLabel,omitempty"`
Categories []string `json:"categories,omitempty"`
Restrict string `json:"restrict,omitempty"`
TabIngest string `json:"tabIngest,omitempty"`
}
type DataFile struct {
Id int `json:"id,omitempty"`
PersistentId string `json:"persistentId,omitempty"`
Filename string `json:"filename,omitempty"`
ContentType string `json:"contentType,omitempty"`
FriendlyType string `json:"friendlyType,omitempty"`
Filesize int64 `json:"filesize,omitempty"`
Description string `json:"description,omitempty"`
StorageIdentifier string `json:"storageIdentifier,omitempty"`
RootDataFileId int `json:"rootDataFileId,omitempty"`
Md5 string `json:"md5,omitempty"`
Checksum Checksum `json:"checksum,omitempty"`
TabularData bool `json:"tabularData,omitempty"`
CreationDate string `json:"creationDate,omitempty"`
PublicationDate string `json:"publicationDate,omitempty"`
DirectoryLabel string `json:"directoryLabel,omitempty"`
LastUpdateTime time.Time `json:"lastUpdateTime,omitempty"`
fileAceessRequest bool `json:"fileAccessRequest,omitempty"`
}
type File struct {
Description string `json:"description,omitempty"`
Label string `json:"label,omitempty"`
Restricted bool `json:"restricted,omitempty"`
DirectoryLabel string `json:"directoryLabel,omitempty"`
Version int `json:"version,omitempty"`
DatasetVersionId int `json:"datasetVersionId,omitempty"`
DataFile DataFile `json:"dataFile,omitempty"`
}
type Files struct {
Files []File `json:"files,omitempty"`
}
type UpdateFileMetadataStruct struct {
Description string `json:"description,omitempty"`
Label string `json:"label,omitempty"`
DirectoryLabel string `json:"directoryLabel,omitempty"`
Categories []string `json:"categories,omitempty"`
Restrict string `json:"restrict,omitempty"`
ProvFreeform string `json:"provFreeform,omitempty"`
DataFileTags []string `json:"dataFileTags,omitempty"`
ContentType string `json:"contentType,omitempty"`
}
type DatasetVersion struct {
ID int `json:"id,omitempty"`
DatasetId int `json:"datasetId,omitempty"`
DatasetPersistentId string `json:"datasetPersistentId,omitempty"`
DatasetType string `json:"datasetType,omitempty"`
StorageIdentifier string `json:"storageIdentifier,omitempty"`
VersionNumber int `json:"versionNumber,omitempty"`
InternalVersionNumber int `json:"internalVersionNumber,omitempty"`
VersionMinorNumber int `json:"versionMinorNumber,omitempty"`
VersionState string `json:"versionState,omitempty"`
LatestVersionPublishingState string `json:"latestVersionPublishingState,omitempty"`
DeaccessionLink string `json:"deaccessionLink,omitempty"`
ProductionDate string `json:"productionDate,omitempty"`
LastUpdateTime time.Time `json:"lastUpdateTime,omitempty"`
ReleaseTime time.Time `json:"releaseTime,omitempty"`
CreateTime time.Time `json:"createTime,omitempty"`
PublicationDate string `json:"publicationDate,omitempty"`
CitationDate string `json:"citationDate,omitempty"`
License License `json:"license,omitempty"`
TermsOfUse string `json:"termsOfUse,omitempty"`
ConfidentialityDeclaration string `json:"confidentialityDeclaration,omitempty"`
SpecialPermissions string `json:"specialPermissions,omitempty"`
Restrictions string `json:"restrictions,omitempty"`
CitationRequirements string `json:"citationRequirements,omitempty"`
DepositorRequirements string `json:"depositorRequirements,omitempty"`
Conditions string `json:"conditions,omitempty"`
Disclaimer string `json:"disclaimer,omitempty"`
TermsOfAccess string `json:"termsOfAccess,omitempty"`
DataAccessPlace string `json:"dataAccessPlace,omitempty"`
OriginalArchive string `json:"originalArchive,omitempty"`
AvailabilityStatus string `json:"availabilityStatus,omitempty"`
ContactForAccess string `json:"contactForAccess,omitempty"`
SizeOfCollection string `json:"sizeOfCollection,omitempty"`
StudyCompletion string `json:"studyCompletion,omitempty"`
FileAccessRequest bool `json:"fileAccessRequest,omitempty"`
MetadataBlocks map[string]MetadataBlock `json:"metadataBlocks,omitempty"`
Files []File `json:"files,omitempty"`
}
type CustomTermsOfAccess struct {
FileAccessRequest bool `json:"fileAccessRequest"`
TermsOfAccess string `json:"termsOfAccess"`
DataAccessPlace string `json:"dataAccessPlace"`
OriginalArchive string `json:"originalArchive"`
AvailabilityStatus string `json:"availabilityStatus"`
ContactForAccess string `json:"contactForAccess"`
SizeOfCollection string `json:"sizeOfCollection"`
StudyCompletion string `json:"studyCompletion"`
}
type CreateCustomTermsOfAccess struct {
CustomTermsOfAccess CustomTermsOfAccess `json:"customTermsOfAccess"`
}
type CustomTerms struct {
TermsOfUse string `json:"termsOfUse"`
ConfidentialityDeclaration string `json:"confidentialityDeclaration"`
SpecialPermissions string `json:"specialPermissions,omitempty"`
Restrictions string `json:"restrictions,omitempty"`
CitationRequirements string `json:"citationRequirements,omitempty"`
DepositorRequirements string `json:"depositorRequirements,omitempty"`
Conditions string `json:"conditions,omitempty"`
Disclaimer string `json:"disclaimer,omitempty"`
}
type CreateCustomTerms struct {
CustomTerms CustomTerms `json:"customTerms"`
}
type CreateDatasetItem struct {
DatasetVersionField DatasetVersion `json:"datasetVersion"`
}
type ItemInDataverse struct {
Type string `json:"type"`
Id int `json:"id"`
Identifier string `json:"identifier,omitempty"`
PersistentUrl string `json:"persistentUrl,omitempty"`
Protocol string `json:"protocol,omitempty"`
Authority string `json:"authority,omitempty"`
Separator string `json:"separator,omitempty"`
Publisher string `json:"publisher,omitempty"`
PublicationDate string `json:"publicationDate,omitempty"`
StorageIdentifier string `json:"storageIdentifier,omitempty"`
Title string `json:"title,omitempty"`
}
type MinimalDataset struct {
Id int `json:"id"`
Pid string `json:"persistentId"`
}
type RequestResponse struct {
Status string `json:"status"`
Data json.RawMessage `json:"data,omitempty"`
Message string `json:"message,omitempty"`
}
type LockResult struct {
LockType string `json:"lockType"`
Date string `json:"date"`
User string `json:"user"`
Dataset string `json:"dataset"`
}
type LockResults []LockResult
type SearchResult struct {
Q string `json:"q"`
TotalCount int `json:"total_count"`
Start int `json:"start,omitempty"`
Items []SearchItem `json:"items"`
}
type SearchItem struct {
GlobalId string `json:"global_id"`
IdentifierOfDataverse string `json:"identifier_of_dataverse"`
MetadataBlocks map[string]MetadataBlock `json:"metadataBlocks,omitempty"`
}
type MetadataBlockItem struct {
Id int `json:"id"`
DisplayName string `json:"displayName"`
DisplayOnCreate bool `json:"displayOnCreate"`
Name string `json:"name"`
}
type SafeSearchItems struct {
mu sync.Mutex
allItems []SearchItem
}
type ApiClient struct {
BaseUrl string
ApiToken string
HttpClient *http.Client
}
type Config struct {
UrlBase string `json:"url_base,omitempty"`
ApiToken string `json:"api_token,omitempty"`
DataverseAlias string `json:"dataverse_alias,omitempty"`
NumOfWorkers int `json:"num_of_workers,omitempty"`
NumInSearch int `json:"num_in_search,omitempty"`
UrlBaseOrigin string `json:"url_base_origin,omitempty"`
ApiTokenOrigin string `json:"api_token_origin,omitempty"`
UrlBaseTarget string `json:"url_base_target,omitempty"`
ApiTokenTarget string `json:"api_token_target,omitempty"`
}
func primitiveOneField(typeName string, value string) MetadataField {
return MetadataField{
TypeName: typeName,
Multiple: false,
TypeClass: "primitive",
Value: value,
}
}
func primitiveArrayField(typeName string, value []string) MetadataField {
return MetadataField{
TypeName: typeName,
Multiple: true,
TypeClass: "primitive",
Value: value,
}
}
func compoundOneField(typeName string, value MetadataCompound) MetadataField {
return MetadataField{
TypeName: typeName,
Multiple: false,
TypeClass: "compound",
Value: value,
}
}
func controlledVocabArrayField(typeName string, multiple bool, value []string) MetadataField {
return MetadataField{
TypeName: typeName,
Multiple: true,
TypeClass: "controlledVocabulary",
Value: value,
}
}
func controlledVocabOneField(typeName string, multiple bool, value string) MetadataField {
return MetadataField{
TypeName: typeName,
Multiple: false,
TypeClass: "controlledVocabulary",
Value: value,
}
}
func compoundArrayField(typeName string, multiple bool, value []MetadataCompound) MetadataField {
return MetadataField{
TypeName: typeName,
Multiple: true,
TypeClass: "compound",
Value: value,
}
}