ampersand-3.0.0: src/lib/DatabaseDesign/Ampersand/Output/Statistics.hs
{-# OPTIONS_GHC -Wall #-}
module DatabaseDesign.Ampersand.Output.Statistics (Statistics(..)) where
import DatabaseDesign.Ampersand.Core.AbstractSyntaxTree
import DatabaseDesign.Ampersand.Classes
import DatabaseDesign.Ampersand.Fspec.Fspec
import DatabaseDesign.Ampersand.Fspec.FPA
import DatabaseDesign.Ampersand.Fspec.Plug ()
import DatabaseDesign.Ampersand.Basics (fatalMsg)
fatal :: Int -> String -> a
fatal = fatalMsg "Output.Statistics"
-- TODO Deze module moet nog verder worden ingekleurd...
class Statistics a where
nInterfaces :: a -> Int -- ^ The number of interfaces in a
nPatterns :: a -> Int -- ^ The number of patterns in a
nFpoints :: a -> Int -- ^ The number of function points in a
instance Statistics a => Statistics [a] where
nInterfaces xs = sum (map nInterfaces xs)
nPatterns xs = sum (map nPatterns xs)
nFpoints xs = sum (map nFpoints xs)
instance Statistics Fspc where
nInterfaces fSpec = length (fActivities fSpec) --TODO -> check correctness
nPatterns fSpec = nPatterns (patterns fSpec)
nFpoints fSpec = sum [nFpoints ifc | ifc <- (interfaceS fSpec++interfaceG fSpec)]
-- + sum [fPoints (fpa plug) | InternalPlug plug <- plugInfos fSpec]
-- TODO Deze module moet nog verder worden ingekleurd...
instance Statistics Pattern where
nInterfaces _ = 0 --TODO -> check correctness
nPatterns _ = 1
nFpoints _ = fatal 43 "function points are not defined for patterns at all."
-- instance Statistics Activity where
-- nInterfaces _ = 1
-- nPatterns _ = 0
-- nFpoints act = fPoints (actFPA act) --TODO -> implement correct FPA qualification
-- \***********************************************************************
-- \*** Properties with respect to: Dataset ***
-- \*** TODO: both datasets and interfaces are represented as ObjectDef. This does actually make a difference for the function point count, so we have work....
instance Statistics Interface where
nInterfaces _ = 1
nPatterns _ = 0
nFpoints ifc = fPoints ifc
-- instance Statistics ObjectDef where
-- nInterfaces (Obj{objmsub=Nothing}) = 2 -- this is an association, i.e. a binary relation --TODO -> check correctness
-- nInterfaces _ = 4 -- this is an entity with one or more attributes. --TODO -> check correctness
-- nPatterns _ = 0
-- nFpoints _ = fatal 60 "function points are not defined for ObjectDefs at all."