packages feed

HaskellAnalysisProgram-0.1.0: src/ModuleLevelAnalysis.hs

{-|
Module      : ModuleLevelAnalysis
Description : Facade to the MetaModel module level analysis functions
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 ModuleLevelAnalysis
  (extractMetricData)
  where

import qualified Data.Set as Set

import MetaHS.EDSL
import qualified MetaHS.DataModel.MetaModel as MetaModel
import CsvData

-- | Extracts all metric values associated with supplied Relation key.
extractMetricData :: String              -- ^ The identifier associated with this analysis.
                  -> RelationKey         -- ^ The MetaModel Relation Key (E.g., LCOM).
                  -> MetaModel.MetaModel -- ^ The MetaModel Containing the associated key.
                  -> [MetricInfo]        -- ^ List of metric values of supplied key
extractMetricData id key mm = map (generateMetricInfo id key) $ Set.toList $getRelation key mm

-- | Generates a MetricInfoModule data-structure holding the metric value of supplied Element Pair.
generateMetricInfo  :: String         -- ^ The identifier associated with this analysis.
                    -> RelationKey    -- ^ The MetaModel metric key
                    -> MetaModel.Pair -- ^ The Module Element to analyze.
                    -> MetricInfo     -- ^ The metric information for the given (Element) Pair.
generateMetricInfo id metricKey elementPair =
    MetricInfo {
                 identifier = id ++ "," ++ mn -- hash + module name
                ,relationKey = metricKey
                ,value = v
               }
    where
    mn = MetaModel.name $ fst elementPair
    v = fromIntegral $ MetaModel.intValue $ snd elementPair