@@ -19,6 +19,160 @@ var doWhilst = require('async').doWhilst
1919var rimraf = require ( 'rimraf' )
2020var turtleExtension = '.ttl'
2121
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+ }
175+
22176function LDP ( argv ) {
23177 argv = argv || { }
24178 extend ( this , argv )
@@ -131,143 +285,6 @@ LDP.prototype.listContainer = function (filename, uri, containerData,
131285 var host = url . parse ( uri ) . hostname
132286 var root = ! ldp . idp ? ldp . root : ldp . root + host + '/'
133287
134- function addStats ( resourceGraph , baseUri , stats ) {
135- resourceGraph . add (
136- resourceGraph . sym ( baseUri ) ,
137- ns . stat ( 'mtime' ) ,
138- stats . mtime . getTime ( ) / 1000 )
139-
140- resourceGraph . add (
141- resourceGraph . sym ( baseUri ) ,
142- ns . stat ( 'size' ) ,
143- stats . size )
144- }
145-
146- function readdir ( filename , callback ) {
147- debug . handlers ( 'GET -- Reading directory' )
148- fs . readdir ( filename , function ( err , files ) {
149- if ( err ) {
150- debug . handlers ( 'GET -- Error reading files: ' + err )
151- return callback ( error ( err , 'Can\'t read container' ) )
152- }
153-
154- debug . handlers ( 'Files in directory: ' + files )
155- return callback ( null , files )
156- } )
157- }
158-
159- function getMetadataGraph ( metaFile , fileBaseUri , callback ) {
160- ldp . stat ( metaFile , function ( err , metaStats ) {
161- if ( err ) {
162- return callback ( err )
163- }
164-
165- if ( metaStats && metaStats . isFile ( ) ) {
166- ldp . readFile ( metaFile , function ( err , rawMetadata ) {
167- if ( err ) {
168- return callback ( err )
169- }
170-
171- var metadataGraph = $rdf . graph ( )
172- try {
173- $rdf . parse (
174- rawMetadata ,
175- metadataGraph ,
176- fileBaseUri ,
177- 'text/turtle' )
178- } catch ( dirErr ) {
179- return callback ( error ( err , 'Can\'t parse container metadata' ) )
180- }
181- return callback ( null , metadataGraph )
182- } )
183- } else {
184- return callback ( null , $rdf . graph ( ) )
185- }
186- } )
187- }
188-
189- function addFile ( ldp , resourceGraph , baseUri , uri , container , file ,
190- callback ) {
191- // Skip .meta and .acl
192- if ( S ( file ) . endsWith ( ldp . suffixMeta ) || S ( file ) . endsWith ( ldp . suffixAcl ) ) {
193- return callback ( null )
194- }
195-
196- // Get file stats
197- ldp . stat ( container + file , function ( err , stats ) {
198- if ( err ) {
199- // File does not exist, skip
200- return callback ( null )
201- }
202-
203- var fileSubject = file + ( stats . isDirectory ( ) ? '/' : '' )
204- // var fileBaseUri = utils.filenameToBaseUri(fileSubject, uri, root)
205-
206- // Add fileStats to resource Graph
207- addStats ( resourceGraph , fileSubject , stats )
208-
209- // Add to `contains` list
210- resourceGraph . add (
211- resourceGraph . sym ( '' ) ,
212- ns . ldp ( 'contains' ) ,
213- resourceGraph . sym ( fileSubject ) )
214-
215- // Set up a metaFile path
216- var metaFile = container + file +
217- ( stats . isDirectory ( ) ? '/' : '' ) +
218- ( S ( file ) . endsWith ( turtleExtension ) ? '' : ldp . suffixMeta )
219-
220- getMetadataGraph ( metaFile , baseUri , function ( err , metadataGraph ) {
221- if ( err ) {
222- metadataGraph = $rdf . graph ( )
223- }
224-
225- // Add Container or BasicContainer types
226- if ( stats . isDirectory ( ) ) {
227- resourceGraph . add (
228- metadataGraph . sym ( fileSubject ) ,
229- ns . rdf ( 'type' ) ,
230- ns . ldp ( 'BasicContainer' ) )
231-
232- resourceGraph . add (
233- metadataGraph . sym ( fileSubject ) ,
234- ns . rdf ( 'type' ) ,
235- ns . ldp ( 'Container' ) )
236- }
237- // Add generic LDP type
238- resourceGraph . add (
239- metadataGraph . sym ( fileSubject ) ,
240- ns . rdf ( 'type' ) ,
241- ns . ldp ( 'Resource' ) )
242-
243- // Add type from metadataGraph
244- metadataGraph
245- . statementsMatching (
246- metadataGraph . sym ( baseUri ) ,
247- ns . rdf ( 'type' ) ,
248- undefined )
249- . forEach ( function ( typeStatement ) {
250- // If the current is a file and its type is BasicContainer,
251- // This is not possible, so do not infer its type!
252- if (
253- (
254- typeStatement . object . uri !== ns . ldp ( 'BasicContainer' ) . uri &&
255- typeStatement . object . uri !== ns . ldp ( 'Container' ) . uri
256- ) ||
257- ! stats . isFile ( )
258- ) {
259- resourceGraph . add (
260- resourceGraph . sym ( fileSubject ) ,
261- typeStatement . predicate ,
262- typeStatement . object )
263- }
264- } )
265-
266- return callback ( null )
267- } )
268- } )
269- }
270-
271288 var baseUri = utils . filenameToBaseUri ( filename , uri , root )
272289 var resourceGraph = $rdf . graph ( )
273290
@@ -281,21 +298,7 @@ LDP.prototype.listContainer = function (filename, uri, containerData,
281298 async . waterfall ( [
282299 // add container stats
283300 function ( next ) {
284- ldp . stat ( filename , function ( err , containerStats ) {
285- if ( ! err ) {
286- addStats ( resourceGraph , '' , containerStats )
287- resourceGraph . add (
288- resourceGraph . sym ( '' ) ,
289- ns . rdf ( 'type' ) ,
290- ns . ldp ( 'BasicContainer' ) )
291-
292- resourceGraph . add (
293- resourceGraph . sym ( '' ) ,
294- ns . rdf ( 'type' ) ,
295- ns . ldp ( 'Container' ) )
296- }
297- next ( )
298- } )
301+ addContainerStats ( ldp , filename , resourceGraph , next )
299302 } ,
300303 // reading directory
301304 function ( next ) {
0 commit comments