+ where
+ toPageName :: [String] -> PageName
+ toPageName = decodePageName . joinWith "/"
+
+
+handleGet :: Environment -> PageName -> Resource ()
+handleGet env name
+ = do pageM <- getPage (envStorage env) name Nothing
+ case pageM of
+ Nothing
+ -> foundNoEntity Nothing
+
+ Just redir@(Redirection _ _ _ _)
+ -> handleRedirect env redir
+
+ Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _ _ _)
+ -> handleGetEntity entity
+
+
+{-
+ HTTP/1.1 302 Found
+ Location: http://example.org/object/Destination
+-}
+handleRedirect :: Environment -> Page -> Resource ()
+handleRedirect env redir
+ = do BaseURI baseURI <- getSysConf (envSysConf env)
+ redirect Found (mkObjectURI baseURI $ redirName redir)
+
+
+{-
+ HTTP/1.1 200 OK
+ Content-Type: image/png
+
+ ...
+-}
+handleGetEntity :: Page -> Resource ()
+handleGetEntity page
+ = do case pageRevision page of
+ 0 -> foundTimeStamp (pageLastMod page) -- 0 はデフォルトページ
+ rev -> foundEntity (strongETag $ show rev) (pageLastMod page)