{-|
Module : FileOperation
Description : For operations regarding file system io
Copyright : Copyright (C) 2019 S. Kamps
License : -- This file is distributed under the terms of the Apache License 2.0.
For more information, see the file "LICENSE", which is included in the distribution.
Stability : experimental
-}
module FileOperation
where
import Control.Monad (when, forM, forM_)
import System.FilePath.Posix ((</>))
import System.Directory (doesDirectoryExist, removeDirectoryRecursive ,createDirectory, doesFileExist, removeFile)
import Settings
import qualified MetaHS.DataModel.MetaModel as MetaModel
import MetaHS.EDSL.MetaModel (writeMetaModel, writeMetaModelPretty, readMetaModel)
-- | Cleans the output directory based on the provided Settings.
mrproper :: Settings -- ^ IUT settings.
-> IO () -- ^ Nothing is returned.
mrproper settings = do
do
let d = outputDirectory settings
needsRemoval <- doesDirectoryExist d
Control.Monad.when needsRemoval $ removeDirectoryRecursive d
createDirectory $ outputDirectory settings
return ()
-- | Checks whether the analysis output directory exists. If not it will be created.
setupOutputDirectory :: Settings -- ^ IUT settings.
-> IO ()
setupOutputDirectory settings = do
let d = outputDirectory settings
mkdir <- doesDirectoryExist d
if mkdir
then return ()
else createDirectory $ outputDirectory settings
return ()
-- | Checks whether the file exists.
isFileThere :: FilePath -- ^ IUT settings.
-> IO Bool
isFileThere filePath = do
let f = filePath
needsRemoval <- doesFileExist f
if needsRemoval
then return True
else return False
-- | Stores the MetaModel to two files based on the provided Settings.
writeMetaModeltoFile :: Settings -- ^ File system settings.
-> MetaModel.MetaModel -- ^ The MetaModel to write.
-> IO () -- ^ Nothing is returned.
writeMetaModeltoFile settings metaModel = do
writeMetaModel metaModel $ metaModelFile settings
writeMetaModelPretty metaModel $ metaModelPrettyFile settings
return ()
-- | Reads the MetaModel from a file based on the provided Settings.
readMetaModelFromFile :: Settings -- ^ File system settings.
-> IO MetaModel.MetaModel -- ^ The MetaModel.
readMetaModelFromFile settings = readMetaModel $ metaModelFile settings
-- | Returns the project directory.
datasetDirectory :: FilePath -- ^ The FilePath for the projects directory.
datasetDirectory = "dataset"
-- | Returns the input directory for the implementation-under-test based on the provided Settings.
inputDirectory :: Settings -- ^ File system settings.
-> FilePath -- ^ The FilePath for the projects directory.
inputDirectory settings =
datasetDirectory </> "inputIUT" </> programName settings
-- | Determines the FilePath for the implementation-under-test sources directory.
sourcesDirectory :: Settings -- ^ File system settings.
-> FilePath -- ^ The FilePath for the sources sub-directory of the projects directory.
sourcesDirectory = inputDirectory -- </> sourceSubDirectory settings
-- | Determines the FilePath for the graphs output directory.
outputDirectory :: Settings -- ^ File system settings.
-> FilePath -- ^ The FilePath for the output directory.
outputDirectory settings =
datasetDirectory </> "outputIUT" </> programName settings
-- | Determines the FilePath for the MetaModel file.
metaModelFile :: Settings -- ^ File system settings.
-> FilePath -- ^ The FilePath for the MetaModel file.
metaModelFile settings =
outputDirectory settings </> "metaModel.txt"
-- | Determines the FilePath for the pretty printed MetaModel file.
metaModelPrettyFile :: Settings -- ^ File system settings.
-> FilePath -- ^ The FilePath for the pretty printed MetaModel file.
metaModelPrettyFile settings =
outputDirectory settings </> "metaModel_pretty.txt"
-- | Determines the FilePath for the parse error file.
parseErrorsFile :: Settings -- ^ File system settings.
-> FilePath -- ^ The FilePath for the parse errors file.
parseErrorsFile settings =
outputDirectory settings </> "parseErrors.txt"
-- | Determines the FilePath for the metric data file.
metricOutputFile :: Settings -- ^ File system settings.
-> String -- ^ Metrics's name (aka key)
-> FilePath -- ^ The FilePath for the metric data file.
metricOutputFile settings metricName =
outputDirectory settings </> metricName ++ ".csv"