Skip to content

Commit 25df835

Browse files
Extract container-related functions to ldp-container.js
1 parent c1c70d8 commit 25df835

File tree

2 files changed

+171
-159
lines changed

2 files changed

+171
-159
lines changed

lib/ldp-container.js

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
module.exports.addContainerStats = addContainerStats
2+
module.exports.addFile = addFile
3+
module.exports.addStats = addStats
4+
module.exports.getMetadataGraph = getMetadataGraph
5+
module.exports.readdir = readdir
6+
7+
var $rdf = require('rdflib')
8+
var debug = require('./debug')
9+
var error = require('./http-error')
10+
var fs = require('fs')
11+
var ns = require('./vocab/ns').ns
12+
var S = require('string')
13+
var turtleExtension = '.ttl'
14+
15+
function addContainerStats (ldp, filename, resourceGraph, next) {
16+
ldp.stat(filename, function (err, containerStats) {
17+
if (!err) {
18+
addStats(resourceGraph, '', containerStats)
19+
resourceGraph.add(
20+
resourceGraph.sym(''),
21+
ns.rdf('type'),
22+
ns.ldp('BasicContainer'))
23+
24+
resourceGraph.add(
25+
resourceGraph.sym(''),
26+
ns.rdf('type'),
27+
ns.ldp('Container'))
28+
}
29+
next()
30+
})
31+
}
32+
33+
function addFile (ldp, resourceGraph, baseUri, uri, container, file, callback) {
34+
// Skip .meta and .acl
35+
if (S(file).endsWith(ldp.suffixMeta) || S(file).endsWith(ldp.suffixAcl)) {
36+
return callback(null)
37+
}
38+
39+
// Get file stats
40+
ldp.stat(container + file, function (err, stats) {
41+
if (err) {
42+
// File does not exist, skip
43+
return callback(null)
44+
}
45+
46+
var fileSubject = file + (stats.isDirectory() ? '/' : '')
47+
// var fileBaseUri = utils.filenameToBaseUri(fileSubject, uri, root)
48+
49+
// Add fileStats to resource Graph
50+
addStats(resourceGraph, fileSubject, stats)
51+
52+
// Add to `contains` list
53+
resourceGraph.add(
54+
resourceGraph.sym(''),
55+
ns.ldp('contains'),
56+
resourceGraph.sym(fileSubject))
57+
58+
// Set up a metaFile path
59+
var metaFile = container + file +
60+
(stats.isDirectory() ? '/' : '') +
61+
(S(file).endsWith(turtleExtension) ? '' : ldp.suffixMeta)
62+
63+
getMetadataGraph(ldp, metaFile, baseUri, function (err, metadataGraph) {
64+
if (err) {
65+
metadataGraph = $rdf.graph()
66+
}
67+
68+
// Add Container or BasicContainer types
69+
if (stats.isDirectory()) {
70+
resourceGraph.add(
71+
metadataGraph.sym(fileSubject),
72+
ns.rdf('type'),
73+
ns.ldp('BasicContainer'))
74+
75+
resourceGraph.add(
76+
metadataGraph.sym(fileSubject),
77+
ns.rdf('type'),
78+
ns.ldp('Container'))
79+
}
80+
// Add generic LDP type
81+
resourceGraph.add(
82+
metadataGraph.sym(fileSubject),
83+
ns.rdf('type'),
84+
ns.ldp('Resource'))
85+
86+
// Add type from metadataGraph
87+
metadataGraph
88+
.statementsMatching(
89+
metadataGraph.sym(baseUri),
90+
ns.rdf('type'),
91+
undefined)
92+
.forEach(function (typeStatement) {
93+
// If the current is a file and its type is BasicContainer,
94+
// This is not possible, so do not infer its type!
95+
if (
96+
(
97+
typeStatement.object.uri !== ns.ldp('BasicContainer').uri &&
98+
typeStatement.object.uri !== ns.ldp('Container').uri
99+
) ||
100+
!stats.isFile()
101+
) {
102+
resourceGraph.add(
103+
resourceGraph.sym(fileSubject),
104+
typeStatement.predicate,
105+
typeStatement.object)
106+
}
107+
})
108+
109+
return callback(null)
110+
})
111+
})
112+
}
113+
114+
function addStats (resourceGraph, baseUri, stats) {
115+
resourceGraph.add(
116+
resourceGraph.sym(baseUri),
117+
ns.stat('mtime'),
118+
stats.mtime.getTime() / 1000)
119+
120+
resourceGraph.add(
121+
resourceGraph.sym(baseUri),
122+
ns.stat('size'),
123+
stats.size)
124+
}
125+
126+
function readdir (filename, callback) {
127+
debug.handlers('GET -- Reading directory')
128+
fs.readdir(filename, function (err, files) {
129+
if (err) {
130+
debug.handlers('GET -- Error reading files: ' + err)
131+
return callback(error(err, 'Can\'t read container'))
132+
}
133+
134+
debug.handlers('Files in directory: ' + files)
135+
return callback(null, files)
136+
})
137+
}
138+
139+
function getMetadataGraph (ldp, metaFile, fileBaseUri, callback) {
140+
ldp.stat(metaFile, function (err, metaStats) {
141+
if (err) {
142+
return callback(err)
143+
}
144+
145+
if (metaStats && metaStats.isFile()) {
146+
ldp.readFile(metaFile, function (err, rawMetadata) {
147+
if (err) {
148+
return callback(err)
149+
}
150+
151+
var metadataGraph = $rdf.graph()
152+
try {
153+
$rdf.parse(
154+
rawMetadata,
155+
metadataGraph,
156+
fileBaseUri,
157+
'text/turtle')
158+
} catch (dirErr) {
159+
return callback(error(err, 'Can\'t parse container metadata'))
160+
}
161+
return callback(null, metadataGraph)
162+
})
163+
} else {
164+
return callback(null, $rdf.graph())
165+
}
166+
})
167+
}

lib/ldp.js

Lines changed: 4 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -10,168 +10,13 @@ var mkdirp = require('fs-extra').mkdirp
1010
var uuid = require('node-uuid')
1111
var debug = require('./debug')
1212
var utils = require('./utils')
13-
var ns = require('./vocab/ns').ns
1413
var error = require('./http-error')
1514
var stringToStream = require('./utils').stringToStream
1615
var serialize = require('./utils').serialize
1716
var extend = require('extend')
1817
var doWhilst = require('async').doWhilst
1918
var rimraf = require('rimraf')
20-
var turtleExtension = '.ttl'
21-
22-
function addContainerStats (ldp, filename, resourceGraph, next) {
23-
ldp.stat(filename, function (err, containerStats) {
24-
if (!err) {
25-
addStats(resourceGraph, '', containerStats)
26-
resourceGraph.add(
27-
resourceGraph.sym(''),
28-
ns.rdf('type'),
29-
ns.ldp('BasicContainer'))
30-
31-
resourceGraph.add(
32-
resourceGraph.sym(''),
33-
ns.rdf('type'),
34-
ns.ldp('Container'))
35-
}
36-
next()
37-
})
38-
}
39-
40-
function addFile (ldp, resourceGraph, baseUri, uri, container, file, callback) {
41-
// Skip .meta and .acl
42-
if (S(file).endsWith(ldp.suffixMeta) || S(file).endsWith(ldp.suffixAcl)) {
43-
return callback(null)
44-
}
45-
46-
// Get file stats
47-
ldp.stat(container + file, function (err, stats) {
48-
if (err) {
49-
// File does not exist, skip
50-
return callback(null)
51-
}
52-
53-
var fileSubject = file + (stats.isDirectory() ? '/' : '')
54-
// var fileBaseUri = utils.filenameToBaseUri(fileSubject, uri, root)
55-
56-
// Add fileStats to resource Graph
57-
addStats(resourceGraph, fileSubject, stats)
58-
59-
// Add to `contains` list
60-
resourceGraph.add(
61-
resourceGraph.sym(''),
62-
ns.ldp('contains'),
63-
resourceGraph.sym(fileSubject))
64-
65-
// Set up a metaFile path
66-
var metaFile = container + file +
67-
(stats.isDirectory() ? '/' : '') +
68-
(S(file).endsWith(turtleExtension) ? '' : ldp.suffixMeta)
69-
70-
getMetadataGraph(ldp, metaFile, baseUri, function (err, metadataGraph) {
71-
if (err) {
72-
metadataGraph = $rdf.graph()
73-
}
74-
75-
// Add Container or BasicContainer types
76-
if (stats.isDirectory()) {
77-
resourceGraph.add(
78-
metadataGraph.sym(fileSubject),
79-
ns.rdf('type'),
80-
ns.ldp('BasicContainer'))
81-
82-
resourceGraph.add(
83-
metadataGraph.sym(fileSubject),
84-
ns.rdf('type'),
85-
ns.ldp('Container'))
86-
}
87-
// Add generic LDP type
88-
resourceGraph.add(
89-
metadataGraph.sym(fileSubject),
90-
ns.rdf('type'),
91-
ns.ldp('Resource'))
92-
93-
// Add type from metadataGraph
94-
metadataGraph
95-
.statementsMatching(
96-
metadataGraph.sym(baseUri),
97-
ns.rdf('type'),
98-
undefined)
99-
.forEach(function (typeStatement) {
100-
// If the current is a file and its type is BasicContainer,
101-
// This is not possible, so do not infer its type!
102-
if (
103-
(
104-
typeStatement.object.uri !== ns.ldp('BasicContainer').uri &&
105-
typeStatement.object.uri !== ns.ldp('Container').uri
106-
) ||
107-
!stats.isFile()
108-
) {
109-
resourceGraph.add(
110-
resourceGraph.sym(fileSubject),
111-
typeStatement.predicate,
112-
typeStatement.object)
113-
}
114-
})
115-
116-
return callback(null)
117-
})
118-
})
119-
}
120-
121-
function addStats (resourceGraph, baseUri, stats) {
122-
resourceGraph.add(
123-
resourceGraph.sym(baseUri),
124-
ns.stat('mtime'),
125-
stats.mtime.getTime() / 1000)
126-
127-
resourceGraph.add(
128-
resourceGraph.sym(baseUri),
129-
ns.stat('size'),
130-
stats.size)
131-
}
132-
133-
function readdir (filename, callback) {
134-
debug.handlers('GET -- Reading directory')
135-
fs.readdir(filename, function (err, files) {
136-
if (err) {
137-
debug.handlers('GET -- Error reading files: ' + err)
138-
return callback(error(err, 'Can\'t read container'))
139-
}
140-
141-
debug.handlers('Files in directory: ' + files)
142-
return callback(null, files)
143-
})
144-
}
145-
146-
function getMetadataGraph (ldp, metaFile, fileBaseUri, callback) {
147-
ldp.stat(metaFile, function (err, metaStats) {
148-
if (err) {
149-
return callback(err)
150-
}
151-
152-
if (metaStats && metaStats.isFile()) {
153-
ldp.readFile(metaFile, function (err, rawMetadata) {
154-
if (err) {
155-
return callback(err)
156-
}
157-
158-
var metadataGraph = $rdf.graph()
159-
try {
160-
$rdf.parse(
161-
rawMetadata,
162-
metadataGraph,
163-
fileBaseUri,
164-
'text/turtle')
165-
} catch (dirErr) {
166-
return callback(error(err, 'Can\'t parse container metadata'))
167-
}
168-
return callback(null, metadataGraph)
169-
})
170-
} else {
171-
return callback(null, $rdf.graph())
172-
}
173-
})
174-
}
19+
var ldpContainer = require('./ldp-container')
17520

17621
function LDP (argv) {
17722
argv = argv || {}
@@ -298,18 +143,18 @@ LDP.prototype.listContainer = function (filename, uri, containerData,
298143
async.waterfall([
299144
// add container stats
300145
function (next) {
301-
addContainerStats(ldp, filename, resourceGraph, next)
146+
ldpContainer.addContainerStats(ldp, filename, resourceGraph, next)
302147
},
303148
// reading directory
304149
function (next) {
305-
readdir(filename, next)
150+
ldpContainer.readdir(filename, next)
306151
},
307152
// Iterate through all the files
308153
function (files, next) {
309154
async.each(
310155
files,
311156
function (file, cb) {
312-
addFile(ldp, resourceGraph, baseUri, uri, filename, file, cb)
157+
ldpContainer.addFile(ldp, resourceGraph, baseUri, uri, filename, file, cb)
313158
},
314159
next)
315160
}

0 commit comments

Comments
 (0)