aboutsummaryrefslogtreecommitdiffhomepage
path: root/scaffolder/src/Text/Edifact/Fetcher.hs
blob: a31954662ec0fad2d93357a1ab374bc5d631ef00 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module Text.Edifact.Fetcher
  ( fetch
  , FetchingEnv(..)
  , readSelectMessages
  ) where

import           Text.Edifact.Fetcher.Commons       (Fetcher,
                                                     getSpecificationHome,
                                                     runFetcher)
import           Text.Edifact.Fetcher.Configuration

import           Text.Edifact.Fetcher.Composites    (compositesDirectory,
                                                     fetchComposites)
import           Text.Edifact.Fetcher.Messages      (fetchMessages,
                                                     messagesDirectory)
import           Text.Edifact.Fetcher.Segments      (fetchSegments,
                                                     segmentsDirectory)
import           Text.Edifact.Fetcher.Simples       (fetchSimples,
                                                     simplesDirectory)

import           Control.Monad.IO.Class             (liftIO)
import           Data.Foldable                      (traverse_)
import           System.Directory                   (createDirectoryIfMissing)
import           System.FilePath                    ((</>))

fetch :: FetchingEnv -> IO ()
fetch = runFetcher (setupDirectories >> fetchAll)

fetchAll :: Fetcher ()
fetchAll = fetchMessages >>= fetchSegments >>= fetchComposites >>= fetchSimples

setupDirectories :: Fetcher ()
setupDirectories = do
  home <- getSpecificationHome
  let mkdir d = liftIO (createDirectoryIfMissing True (home </> d))
  traverse_ mkdir directories

directories :: [FilePath]
directories =
  [ compositesDirectory
  , messagesDirectory
  , segmentsDirectory
  , simplesDirectory
  ]