module Simulation.Aivika.Results.Locale.Types
(
ResultLocale,
ResultLocalisation(..),
ResultName,
ResultDescription,
UserDefinedResult(..),
LocalisedResult(..),
russianResultLocale,
englishResultLocale,
pathResultLocalisation,
localisePathResultDescription,
localisePathResultTitle,
lookupResultLocalisation,
ResultId(..),
resultNameToTitle) where
import Data.Char
import Data.List
import qualified Data.Map as M
import Simulation.Aivika.Dynamics
import Simulation.Aivika.Statistics
import Simulation.Aivika.Statistics.Accumulator
import qualified Simulation.Aivika.Queue as Q
import qualified Simulation.Aivika.Queue.Infinite as IQ
import Simulation.Aivika.Arrival
import Simulation.Aivika.Server
import Simulation.Aivika.Activity
import Simulation.Aivika.Resource
import Simulation.Aivika.Operation
type ResultLocale = String
data ResultLocalisation =
ResultLocalisation { ResultLocalisation -> ResultId -> ResultLocale
localiseResultDescription :: ResultId -> ResultDescription,
ResultLocalisation -> ResultId -> ResultLocale
localiseResultTitle :: ResultId -> ResultDescription
}
data UserDefinedResult =
UserDefinedResult { UserDefinedResult -> ResultLocale
userDefinedResultName :: ResultName,
UserDefinedResult -> ResultLocale
userDefinedResultDescription :: ResultDescription,
UserDefinedResult -> ResultLocale
userDefinedResultTitle :: ResultDescription
} deriving (UserDefinedResult -> UserDefinedResult -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UserDefinedResult -> UserDefinedResult -> Bool
$c/= :: UserDefinedResult -> UserDefinedResult -> Bool
== :: UserDefinedResult -> UserDefinedResult -> Bool
$c== :: UserDefinedResult -> UserDefinedResult -> Bool
Eq, Eq UserDefinedResult
UserDefinedResult -> UserDefinedResult -> Bool
UserDefinedResult -> UserDefinedResult -> Ordering
UserDefinedResult -> UserDefinedResult -> UserDefinedResult
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: UserDefinedResult -> UserDefinedResult -> UserDefinedResult
$cmin :: UserDefinedResult -> UserDefinedResult -> UserDefinedResult
max :: UserDefinedResult -> UserDefinedResult -> UserDefinedResult
$cmax :: UserDefinedResult -> UserDefinedResult -> UserDefinedResult
>= :: UserDefinedResult -> UserDefinedResult -> Bool
$c>= :: UserDefinedResult -> UserDefinedResult -> Bool
> :: UserDefinedResult -> UserDefinedResult -> Bool
$c> :: UserDefinedResult -> UserDefinedResult -> Bool
<= :: UserDefinedResult -> UserDefinedResult -> Bool
$c<= :: UserDefinedResult -> UserDefinedResult -> Bool
< :: UserDefinedResult -> UserDefinedResult -> Bool
$c< :: UserDefinedResult -> UserDefinedResult -> Bool
compare :: UserDefinedResult -> UserDefinedResult -> Ordering
$ccompare :: UserDefinedResult -> UserDefinedResult -> Ordering
Ord, Int -> UserDefinedResult -> ShowS
[UserDefinedResult] -> ShowS
UserDefinedResult -> ResultLocale
forall a.
(Int -> a -> ShowS)
-> (a -> ResultLocale) -> ([a] -> ShowS) -> Show a
showList :: [UserDefinedResult] -> ShowS
$cshowList :: [UserDefinedResult] -> ShowS
show :: UserDefinedResult -> ResultLocale
$cshow :: UserDefinedResult -> ResultLocale
showsPrec :: Int -> UserDefinedResult -> ShowS
$cshowsPrec :: Int -> UserDefinedResult -> ShowS
Show)
data LocalisedResult =
LocalisedResult { LocalisedResult -> Map ResultLocale ResultLocale
localisedResultDescriptions :: M.Map ResultLocale ResultDescription,
LocalisedResult -> Map ResultLocale ResultLocale
localisedResultTitles :: M.Map ResultLocale ResultDescription
} deriving (LocalisedResult -> LocalisedResult -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LocalisedResult -> LocalisedResult -> Bool
$c/= :: LocalisedResult -> LocalisedResult -> Bool
== :: LocalisedResult -> LocalisedResult -> Bool
$c== :: LocalisedResult -> LocalisedResult -> Bool
Eq, Eq LocalisedResult
LocalisedResult -> LocalisedResult -> Bool
LocalisedResult -> LocalisedResult -> Ordering
LocalisedResult -> LocalisedResult -> LocalisedResult
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: LocalisedResult -> LocalisedResult -> LocalisedResult
$cmin :: LocalisedResult -> LocalisedResult -> LocalisedResult
max :: LocalisedResult -> LocalisedResult -> LocalisedResult
$cmax :: LocalisedResult -> LocalisedResult -> LocalisedResult
>= :: LocalisedResult -> LocalisedResult -> Bool
$c>= :: LocalisedResult -> LocalisedResult -> Bool
> :: LocalisedResult -> LocalisedResult -> Bool
$c> :: LocalisedResult -> LocalisedResult -> Bool
<= :: LocalisedResult -> LocalisedResult -> Bool
$c<= :: LocalisedResult -> LocalisedResult -> Bool
< :: LocalisedResult -> LocalisedResult -> Bool
$c< :: LocalisedResult -> LocalisedResult -> Bool
compare :: LocalisedResult -> LocalisedResult -> Ordering
$ccompare :: LocalisedResult -> LocalisedResult -> Ordering
Ord, Int -> LocalisedResult -> ShowS
[LocalisedResult] -> ShowS
LocalisedResult -> ResultLocale
forall a.
(Int -> a -> ShowS)
-> (a -> ResultLocale) -> ([a] -> ShowS) -> Show a
showList :: [LocalisedResult] -> ShowS
$cshowList :: [LocalisedResult] -> ShowS
show :: LocalisedResult -> ResultLocale
$cshow :: LocalisedResult -> ResultLocale
showsPrec :: Int -> LocalisedResult -> ShowS
$cshowsPrec :: Int -> LocalisedResult -> ShowS
Show)
type ResultName = String
type ResultDescription = String
data ResultId = TimeId
| VectorId
| VectorItemId String
| SamplingStatsId
| SamplingStatsCountId
| SamplingStatsMinId
| SamplingStatsMaxId
| SamplingStatsMeanId
| SamplingStatsMean2Id
| SamplingStatsVarianceId
| SamplingStatsDeviationId
| SamplingCounterId
| SamplingCounterValueId
| SamplingCounterStatsId
| TimingStatsId
| TimingStatsCountId
| TimingStatsMinId
| TimingStatsMaxId
| TimingStatsMeanId
| TimingStatsVarianceId
| TimingStatsDeviationId
| TimingStatsMinTimeId
| TimingStatsMaxTimeId
| TimingStatsStartTimeId
| TimingStatsLastTimeId
| TimingStatsSumId
| TimingStatsSum2Id
| TimingCounterId
| TimingCounterValueId
| TimingCounterStatsId
| FiniteQueueId
| InfiniteQueueId
| EnqueueStrategyId
| EnqueueStoringStrategyId
| DequeueStrategyId
| QueueNullId
| QueueFullId
| QueueMaxCountId
| QueueCountId
| QueueCountStatsId
| EnqueueCountId
| EnqueueLostCountId
| EnqueueStoreCountId
| DequeueCountId
|
| QueueLoadFactorId
| EnqueueRateId
| EnqueueStoreRateId
| DequeueRateId
|
| QueueWaitTimeId
| QueueTotalWaitTimeId
| EnqueueWaitTimeId
| DequeueWaitTimeId
| QueueRateId
| ArrivalTimerId
| ArrivalProcessingTimeId
| ServerId
| ServerInitStateId
| ServerStateId
| ServerTotalInputWaitTimeId
| ServerTotalProcessingTimeId
| ServerTotalOutputWaitTimeId
| ServerTotalPreemptionTimeId
| ServerInputWaitTimeId
| ServerProcessingTimeId
| ServerOutputWaitTimeId
| ServerPreemptionTimeId
| ServerInputWaitFactorId
| ServerProcessingFactorId
| ServerOutputWaitFactorId
| ServerPreemptionFactorId
| ActivityId
| ActivityInitStateId
| ActivityStateId
| ActivityTotalUtilisationTimeId
| ActivityTotalIdleTimeId
| ActivityTotalPreemptionTimeId
| ActivityUtilisationTimeId
| ActivityIdleTimeId
| ActivityPreemptionTimeId
| ActivityUtilisationFactorId
| ActivityIdleFactorId
| ActivityPreemptionFactorId
| ResourceId
| ResourceCountId
| ResourceCountStatsId
| ResourceUtilisationCountId
| ResourceUtilisationCountStatsId
| ResourceQueueCountId
| ResourceQueueCountStatsId
| ResourceTotalWaitTimeId
| ResourceWaitTimeId
| OperationId
| OperationTotalUtilisationTimeId
| OperationTotalPreemptionTimeId
| OperationUtilisationTimeId
| OperationPreemptionTimeId
| OperationUtilisationFactorId
| OperationPreemptionFactorId
| UserDefinedResultId UserDefinedResult
| LocalisedResultId LocalisedResult
deriving (ResultId -> ResultId -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ResultId -> ResultId -> Bool
$c/= :: ResultId -> ResultId -> Bool
== :: ResultId -> ResultId -> Bool
$c== :: ResultId -> ResultId -> Bool
Eq, Eq ResultId
ResultId -> ResultId -> Bool
ResultId -> ResultId -> Ordering
ResultId -> ResultId -> ResultId
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ResultId -> ResultId -> ResultId
$cmin :: ResultId -> ResultId -> ResultId
max :: ResultId -> ResultId -> ResultId
$cmax :: ResultId -> ResultId -> ResultId
>= :: ResultId -> ResultId -> Bool
$c>= :: ResultId -> ResultId -> Bool
> :: ResultId -> ResultId -> Bool
$c> :: ResultId -> ResultId -> Bool
<= :: ResultId -> ResultId -> Bool
$c<= :: ResultId -> ResultId -> Bool
< :: ResultId -> ResultId -> Bool
$c< :: ResultId -> ResultId -> Bool
compare :: ResultId -> ResultId -> Ordering
$ccompare :: ResultId -> ResultId -> Ordering
Ord, Int -> ResultId -> ShowS
[ResultId] -> ShowS
ResultId -> ResultLocale
forall a.
(Int -> a -> ShowS)
-> (a -> ResultLocale) -> ([a] -> ShowS) -> Show a
showList :: [ResultId] -> ShowS
$cshowList :: [ResultId] -> ShowS
show :: ResultId -> ResultLocale
$cshow :: ResultId -> ResultLocale
showsPrec :: Int -> ResultId -> ShowS
$cshowsPrec :: Int -> ResultId -> ShowS
Show)
russianResultLocale :: ResultLocale
russianResultLocale :: ResultLocale
russianResultLocale = ResultLocale
"ru"
englishResultLocale :: ResultLocale
englishResultLocale :: ResultLocale
englishResultLocale = ResultLocale
"en"
lookupResultLocalisation :: ResultLocale -> M.Map ResultLocale ResultDescription -> ResultDescription
lookupResultLocalisation :: ResultLocale -> Map ResultLocale ResultLocale -> ResultLocale
lookupResultLocalisation ResultLocale
loc Map ResultLocale ResultLocale
m =
case forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup ResultLocale
loc Map ResultLocale ResultLocale
m of
Just ResultLocale
x -> ResultLocale
x
Maybe ResultLocale
Nothing ->
case forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup ResultLocale
russianResultLocale Map ResultLocale ResultLocale
m of
Just ResultLocale
x -> ResultLocale
x
Maybe ResultLocale
Nothing ->
case forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup ResultLocale
englishResultLocale Map ResultLocale ResultLocale
m of
Just ResultLocale
x -> ResultLocale
x
Maybe ResultLocale
Nothing -> ResultLocale
""
pathResultLocalisation :: (ResultId -> ResultDescription) -> [ResultId] -> ResultDescription
pathResultLocalisation :: (ResultId -> ResultLocale) -> [ResultId] -> ResultLocale
pathResultLocalisation ResultId -> ResultLocale
loc [ResultId]
is = [ResultId] -> [ShowS] -> ResultLocale
loop [ResultId]
is []
where loop :: [ResultId] -> [ShowS] -> ResultLocale
loop [] [ShowS]
acc = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall a b. (a -> b) -> a -> b
($) [] (forall a. [a] -> [a]
reverse [ShowS]
acc)
loop (ResultId
x : [ResultId]
xs) [] = [ResultId] -> [ShowS] -> ResultLocale
loop [ResultId]
xs [(ResultId -> ResultLocale
loc ResultId
x forall a. [a] -> [a] -> [a]
++)]
loop ((VectorItemId ResultLocale
s) : [ResultId]
xs) [ShowS]
acc = [ResultId] -> [ShowS] -> ResultLocale
loop [ResultId]
xs forall a b. (a -> b) -> a -> b
$ (ResultLocale
s forall a. [a] -> [a] -> [a]
++) forall a. a -> [a] -> [a]
: (ResultLocale
" " forall a. [a] -> [a] -> [a]
++) forall a. a -> [a] -> [a]
: [ShowS]
acc
loop (ResultId
x : [ResultId]
xs) [ShowS]
acc = [ResultId] -> [ShowS] -> ResultLocale
loop [ResultId]
xs forall a b. (a -> b) -> a -> b
$ (ResultId -> ResultLocale
loc ResultId
x forall a. [a] -> [a] -> [a]
++) forall a. a -> [a] -> [a]
: (ResultLocale
" / " forall a. [a] -> [a] -> [a]
++) forall a. a -> [a] -> [a]
: [ShowS]
acc
localisePathResultDescription :: ResultLocalisation -> [ResultId] -> ResultDescription
localisePathResultDescription :: ResultLocalisation -> [ResultId] -> ResultLocale
localisePathResultDescription ResultLocalisation
loc [ResultId]
is = (ResultId -> ResultLocale) -> [ResultId] -> ResultLocale
pathResultLocalisation (ResultLocalisation -> ResultId -> ResultLocale
localiseResultDescription ResultLocalisation
loc) [ResultId]
is
localisePathResultTitle :: ResultLocalisation -> [ResultId] -> ResultDescription
localisePathResultTitle :: ResultLocalisation -> [ResultId] -> ResultLocale
localisePathResultTitle ResultLocalisation
loc [ResultId]
is = (ResultId -> ResultLocale) -> [ResultId] -> ResultLocale
pathResultLocalisation (ResultLocalisation -> ResultId -> ResultLocale
localiseResultTitle ResultLocalisation
loc) [ResultId]
is
resultNameToTitle :: ResultName -> ResultDescription
resultNameToTitle :: ShowS
resultNameToTitle =
[ResultLocale] -> ResultLocale
unwords forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map (forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map (forall a. (a -> a -> Bool) -> [a] -> [[a]]
groupBy (\Char
x Char
y -> Bool -> Bool
not forall a b. (a -> b) -> a -> b
$ Char -> Bool
isUpper Char
y)) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
ResultLocale -> [ResultLocale]
words