]> git.immae.eu Git - github/fretlink/edi-parser.git/blob - scaffolder/src/Text/Edifact/BundleReader.hs
Release code as open source
[github/fretlink/edi-parser.git] / scaffolder / src / Text / Edifact / BundleReader.hs
1 module Text.Edifact.BundleReader
2 ( readBundle
3 , BundleReaderEnv(..)
4 ) where
5
6 import Text.Edifact.BundleReader.Commons (BundleReader,
7 getSpecificationHome,
8 runBundleReader)
9 import Text.Edifact.BundleReader.Composites (compositesDirectory,
10 readComposites)
11 import Text.Edifact.BundleReader.Configuration
12 import Text.Edifact.BundleReader.Extractor (FileContents (..),
13 readZip)
14 import Text.Edifact.BundleReader.Messages (messagesDirectory,
15 readMessages)
16 import Text.Edifact.BundleReader.Segments (readSegments,
17 segmentsDirectory)
18 import Text.Edifact.BundleReader.CodedSimples (readCodedSimples)
19 import Text.Edifact.BundleReader.Simples (readSimples,
20 simplesDirectory)
21
22 import Control.Monad.IO.Class (liftIO)
23 import Control.Monad.Reader (asks)
24 import Data.Foldable (traverse_)
25 import System.Directory (createDirectoryIfMissing)
26 import System.FilePath ((</>))
27
28 readBundle :: BundleReaderEnv -> IO ()
29 readBundle = runBundleReader (setupDirectories >> readAll)
30
31 readAll :: BundleReader ()
32 readAll = do
33 revision <- asks parserRevision
34 bundles <- mapM (liftIO . readZip revision) =<< asks bundle
35 messages' <- readMessages (concatMap messages bundles)
36 printContent messages' "Messages with segments codes:"
37 segments' <- readSegments (concatMap segments bundles) $ concatMap snd messages'
38 printContent segments' "Segments with composites/simples:"
39 simples' <- readSimples (concatMap simples bundles) =<< readComposites (concatMap composites bundles) segments'
40 readCodedSimples (concatMap codedSimples bundles) simples'
41 printContent simples' "Simples:"
42 pure ()
43
44 printContent :: Show a => a -> String -> BundleReader ()
45 printContent content header = liftIO $ putStrLn header >> print content >> putStrLn ""
46
47 setupDirectories :: BundleReader ()
48 setupDirectories = do
49 home <- getSpecificationHome
50 let mkdir d = liftIO (createDirectoryIfMissing True (home </> d))
51 traverse_ mkdir directories
52
53 directories :: [FilePath]
54 directories =
55 [ compositesDirectory
56 , messagesDirectory
57 , segmentsDirectory
58 , simplesDirectory
59 ]