@@ -103,36 +103,43 @@ function getBlob(dfg::AbstractDFG, entry::BlobEntry)
103
103
)
104
104
end
105
105
106
- getBlob (store:: AbstractBlobStore , entry:: BlobEntry ) =
107
- getBlob (store, entry. originId)
106
+ function getBlob (store:: AbstractBlobStore , entry:: BlobEntry )
107
+ blobId = isnothing (entry. blobId) ? entry. originId : entry. blobId
108
+ getBlob (store, blobId)
109
+ end
108
110
109
111
# add
110
112
addBlob! (dfg:: AbstractDFG , entry:: BlobEntry , data) =
111
113
addBlob! (getBlobStore (dfg, entry. blobstore), entry, data)
112
114
113
- addBlob! (store:: AbstractBlobStore , entry:: BlobEntry , data) =
114
- addBlob! (store, entry. originId, data)
115
-
115
+ function addBlob! (store:: AbstractBlobStore , entry:: BlobEntry , data)
116
+ blobId = isnothing (entry. blobId) ? entry. originId : entry. blobId
117
+ addBlob! (store, blobId, data)
118
+ end
119
+
116
120
addBlob! (store:: AbstractBlobStore , data) =
117
121
addBlob! (store, uuid4 (), data)
118
122
119
123
# fallback as not all blobStores use filename
120
- addBlob! (store:: AbstractBlobStore , blobId:: UUID , data, :: String ) =
124
+ addBlob! (store:: AbstractBlobStore , blobId:: UUID , data, :: String ) =
121
125
addBlob! (store, blobId, data)
122
126
123
127
# update
124
128
updateBlob! (dfg:: AbstractDFG , entry:: BlobEntry , data:: T ) where {T} =
125
129
updateBlob! (getBlobStore (dfg, entry. blobstore), entry, data)
126
130
127
- updateBlob! (store:: AbstractBlobStore , entry:: BlobEntry , data) =
128
- updateBlob! (store, entry. originId, data)
129
-
131
+ function updateBlob! (store:: AbstractBlobStore , entry:: BlobEntry , data)
132
+ blobId = isnothing (entry. blobId) ? entry. originId : entry. blobId
133
+ updateBlob! (store, blobId, data)
134
+ end
130
135
# delete
131
136
deleteBlob! (dfg:: AbstractDFG , entry:: BlobEntry ) =
132
137
deleteBlob! (getBlobStore (dfg, entry. blobstore), entry)
133
138
134
- deleteBlob! (store:: AbstractBlobStore , entry:: BlobEntry ) =
135
- deleteBlob! (store, entry. originId)
139
+ function deleteBlob! (store:: AbstractBlobStore , entry:: BlobEntry )
140
+ blobId = isnothing (entry. blobId) ? entry. originId : entry. blobId
141
+ deleteBlob! (store, blobId)
142
+ end
136
143
137
144
138
145
# has
@@ -250,7 +257,7 @@ function getBlob(store::InMemoryBlobStore, blobId::UUID)
250
257
end
251
258
252
259
function addBlob! (store:: InMemoryBlobStore{T} , blobId:: UUID , data:: T ) where {T}
253
- if haskey (store. blobs, entry . originId )
260
+ if haskey (store. blobs, blobId )
254
261
error (" Key '$blobId ' blob already exists." )
255
262
end
256
263
store. blobs[blobId] = data
@@ -269,3 +276,54 @@ function deleteBlob!(store::InMemoryBlobStore, blobId::UUID)
269
276
end
270
277
271
278
hasBlob (store:: InMemoryBlobStore , blobId:: UUID ) = haskey (store. blobs, blobId)
279
+
280
+
281
+ # #==============================================================================
282
+ # # LinkStore Link blobId to a existing local folder
283
+ # #==============================================================================
284
+
285
+ struct LinkStore <: AbstractBlobStore{String}
286
+ key:: Symbol
287
+ csvfile:: String
288
+ cache:: Dict{UUID, String}
289
+
290
+ function LinkStore (key, csvfile)
291
+ if ! isfile (csvfile)
292
+ @info " File '$csvfile ' doesn't exist - creating."
293
+ # create new folder
294
+ open (csvfile, " w" ) do io
295
+ println (io, " blobid,path" )
296
+ end
297
+ return new (key, csvfile, Dict {UUID, String} ())
298
+ else
299
+ file = CSV. File (csvfile)
300
+ cache = Dict (UUID .(file. blobid) .=> file. path)
301
+ return new (key, csvfile, cache)
302
+ end
303
+ end
304
+ end
305
+
306
+ function getBlob (store:: LinkStore , blobId:: UUID )
307
+ fname = get (store. cache, blobId, nothing )
308
+ read (fname)
309
+ end
310
+
311
+ function addBlob! (store:: LinkStore , entry:: BlobEntry , linkfile:: String )
312
+ addBlob! (store, entry. originId, nothing , linkfile:: String )
313
+ end
314
+
315
+ function addBlob! (store:: LinkStore , blobId:: UUID , blob:: Any , linkfile:: String )
316
+ if haskey (store. cache, blobId)
317
+ error (" blobId $blobId already exists in the store" )
318
+ end
319
+ push! (store. cache, blobId=> linkfile)
320
+ open (store. csvfile, " a" ) do f
321
+ println (f, blobId," ," ,linkfile)
322
+ end
323
+ getBlob (store, blobId)
324
+ end
325
+
326
+ function deleteBlob! (store:: LinkStore , args... )
327
+ error (" deleteDataBlob(::LinkStore) not supported" )
328
+ end
329
+
0 commit comments