[Fencommits] fenserve: fix getResource and putResource

Benja Fallenstein benja.fallenstein at gmail.com
Thu Apr 5 20:21:13 EEST 2007


Thu Apr  5 20:19:46 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * fix getResource and putResource
diff -rN -u old-fenserve/FenServe.hs new-fenserve/FenServe.hs
--- old-fenserve/FenServe.hs	2007-04-05 20:21:13.000000000 +0300
+++ new-fenserve/FenServe.hs	2007-04-05 20:21:13.000000000 +0300
@@ -102,9 +102,8 @@
     handleResource :: Handler }
     
 type Resolvers = Map Node Resolver
-data Resolver = forall a. (FromRDF a, ToRDF a) =>
-                Resolver (Resolvers -> a -> (a -> FenServe ()) -> [String] 
-                       -> FenServe Resource)
+data Resolver = Resolver (Resolvers -> Node -> (Node -> FenServe ()) 
+                       -> [String] -> FenServe Resource)
 
 writeEmptyState :: FenServe Node
 writeEmptyState = addData $ Dir (Map.empty)
@@ -150,13 +149,14 @@
 instance ToRDF File where
   toRDF (File n) = toResourceRDF fs_File [addRDFConn fs_representation toRDF n]
 
-resolveFile rs (File n) put' [] = return $ Resource {
-    getResource = getData n,
-    putResource = \x -> addData x >>= put' . File,
+resolveFile rs node put' [] = do File n <- getData node; return $ Resource {
+    getResource = getData node,
+    putResource = \x -> addData x >>= put',
     handleResource = \req -> case rqMethod req of
         GET -> do bytes <- getBlock (bID n)
                   return $ mkResult 200 "text/html" bytes
-        PUT -> do bid <- addBlock (unBody $ rqBody req); put' (File $ bIRI bid)
+        PUT -> do bid <- addBlock (unBody $ rqBody req)
+                  addData (File $ bIRI bid) >>= put'
                   return $ mkResult 200 "text/html" (toUTF "Ok.\n")
     }
                        
@@ -171,13 +171,14 @@
              (toRDFPair fs_filename toRDF fs_spec toRDF) (Map.toList m)
         ]
 
-resolveDir rs (Dir m) put' (p:ps) = case Map.lookup p m of
-    Just n -> resolve' rs n (\n' -> put' $ Dir $ Map.insert p n' m) ps
-    Nothing -> do emptyBlock <- liftM bIRI $ addBlock ByteString.empty
-                  resolveFile rs (File emptyBlock)
-                                 (\f' -> do n' <- addData f'
-                                            put' $ Dir $ Map.insert p n' m) ps
-resolveDir rs dir put' [] = resolveDir rs dir put' [""]
+resolveDir rs node put' (p:ps) = do 
+    Dir m <- getData node; case Map.lookup p m of
+        Just n -> resolve' rs n (\n' -> put' =<< (addData $ Dir $ Map.insert p n' m)) ps
+        Nothing -> do emptyBlock <- liftM bIRI $ addBlock ByteString.empty
+                      emptyFile <- addData (File emptyBlock)
+                      resolveFile rs emptyFile
+                        (\n' -> put' =<< addData (Dir $ Map.insert p n' m)) ps
+resolveDir rs node put' [] = resolveDir rs node put' [""]
 
 
 --------------------------------------------------------------------------




More information about the Fencommits mailing list