module BDCS.Import.URI(appendURI,
baseURI,
isCompsFile,
isPrimaryXMLFile,
showURI,
uriToPath)
where
import Data.List(isInfixOf, isSuffixOf)
import Network.URI(URI(..), escapeURIString, isUnescapedInURI,
parseURIReference, pathSegments, relativeTo, unEscapeString, uriToString)
uriToPath :: URI -> FilePath
uriToPath uri = unEscapeString $ uriPath uri
baseURI :: URI -> Maybe URI
baseURI uri = let upOne = parseURIReference ".." in
fmap (`relativeTo` uri) upOne
appendURI :: URI -> String -> Maybe URI
appendURI base path = let
relativeURI = parseURIReference $ escapeURIString isUnescapedInURI path
appendToBase = (`relativeTo` base)
in
fmap appendToBase relativeURI
showURI :: URI -> String
showURI uri = uriToString id uri ""
isCompsFile :: URI -> Bool
isCompsFile uri = let path = last (pathSegments uri) in
"-comps" `isInfixOf` path && (".xml" `isSuffixOf` path || ".xml.gz" `isSuffixOf` path)
isPrimaryXMLFile :: URI -> Bool
isPrimaryXMLFile uri = "primary.xml" `isInfixOf` last (pathSegments uri)