module Simulation.Aivika.Trans.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.Trans.Dynamics
import Simulation.Aivika.Trans.Statistics
import Simulation.Aivika.Trans.Statistics.Accumulator
import qualified Simulation.Aivika.Trans.Queue as Q
import qualified Simulation.Aivika.Trans.Queue.Infinite as IQ
import Simulation.Aivika.Trans.Arrival
import Simulation.Aivika.Trans.Server
import Simulation.Aivika.Trans.Activity
import Simulation.Aivika.Trans.Resource
import Simulation.Aivika.Trans.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
(UserDefinedResult -> UserDefinedResult -> Bool)
-> (UserDefinedResult -> UserDefinedResult -> Bool)
-> Eq UserDefinedResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: UserDefinedResult -> UserDefinedResult -> Bool
== :: UserDefinedResult -> UserDefinedResult -> Bool
$c/= :: UserDefinedResult -> UserDefinedResult -> Bool
/= :: UserDefinedResult -> UserDefinedResult -> Bool
Eq, Eq UserDefinedResult
Eq UserDefinedResult =>
(UserDefinedResult -> UserDefinedResult -> Ordering)
-> (UserDefinedResult -> UserDefinedResult -> Bool)
-> (UserDefinedResult -> UserDefinedResult -> Bool)
-> (UserDefinedResult -> UserDefinedResult -> Bool)
-> (UserDefinedResult -> UserDefinedResult -> Bool)
-> (UserDefinedResult -> UserDefinedResult -> UserDefinedResult)
-> (UserDefinedResult -> UserDefinedResult -> UserDefinedResult)
-> Ord 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
$ccompare :: UserDefinedResult -> UserDefinedResult -> Ordering
compare :: UserDefinedResult -> UserDefinedResult -> Ordering
$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
>= :: UserDefinedResult -> UserDefinedResult -> Bool
$cmax :: UserDefinedResult -> UserDefinedResult -> UserDefinedResult
max :: UserDefinedResult -> UserDefinedResult -> UserDefinedResult
$cmin :: UserDefinedResult -> UserDefinedResult -> UserDefinedResult
min :: UserDefinedResult -> UserDefinedResult -> UserDefinedResult
Ord, Int -> UserDefinedResult -> ShowS
[UserDefinedResult] -> ShowS
UserDefinedResult -> ResultLocale
(Int -> UserDefinedResult -> ShowS)
-> (UserDefinedResult -> ResultLocale)
-> ([UserDefinedResult] -> ShowS)
-> Show UserDefinedResult
forall a.
(Int -> a -> ShowS)
-> (a -> ResultLocale) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UserDefinedResult -> ShowS
showsPrec :: Int -> UserDefinedResult -> ShowS
$cshow :: UserDefinedResult -> ResultLocale
show :: UserDefinedResult -> ResultLocale
$cshowList :: [UserDefinedResult] -> ShowS
showList :: [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
(LocalisedResult -> LocalisedResult -> Bool)
-> (LocalisedResult -> LocalisedResult -> Bool)
-> Eq LocalisedResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LocalisedResult -> LocalisedResult -> Bool
== :: LocalisedResult -> LocalisedResult -> Bool
$c/= :: LocalisedResult -> LocalisedResult -> Bool
/= :: LocalisedResult -> LocalisedResult -> Bool
Eq, Eq LocalisedResult
Eq LocalisedResult =>
(LocalisedResult -> LocalisedResult -> Ordering)
-> (LocalisedResult -> LocalisedResult -> Bool)
-> (LocalisedResult -> LocalisedResult -> Bool)
-> (LocalisedResult -> LocalisedResult -> Bool)
-> (LocalisedResult -> LocalisedResult -> Bool)
-> (LocalisedResult -> LocalisedResult -> LocalisedResult)
-> (LocalisedResult -> LocalisedResult -> LocalisedResult)
-> Ord 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
$ccompare :: LocalisedResult -> LocalisedResult -> Ordering
compare :: LocalisedResult -> LocalisedResult -> Ordering
$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
>= :: LocalisedResult -> LocalisedResult -> Bool
$cmax :: LocalisedResult -> LocalisedResult -> LocalisedResult
max :: LocalisedResult -> LocalisedResult -> LocalisedResult
$cmin :: LocalisedResult -> LocalisedResult -> LocalisedResult
min :: LocalisedResult -> LocalisedResult -> LocalisedResult
Ord, Int -> LocalisedResult -> ShowS
[LocalisedResult] -> ShowS
LocalisedResult -> ResultLocale
(Int -> LocalisedResult -> ShowS)
-> (LocalisedResult -> ResultLocale)
-> ([LocalisedResult] -> ShowS)
-> Show LocalisedResult
forall a.
(Int -> a -> ShowS)
-> (a -> ResultLocale) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LocalisedResult -> ShowS
showsPrec :: Int -> LocalisedResult -> ShowS
$cshow :: LocalisedResult -> ResultLocale
show :: LocalisedResult -> ResultLocale
$cshowList :: [LocalisedResult] -> ShowS
showList :: [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
(ResultId -> ResultId -> Bool)
-> (ResultId -> ResultId -> Bool) -> Eq ResultId
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ResultId -> ResultId -> Bool
== :: ResultId -> ResultId -> Bool
$c/= :: ResultId -> ResultId -> Bool
/= :: ResultId -> ResultId -> Bool
Eq, Eq ResultId
Eq ResultId =>
(ResultId -> ResultId -> Ordering)
-> (ResultId -> ResultId -> Bool)
-> (ResultId -> ResultId -> Bool)
-> (ResultId -> ResultId -> Bool)
-> (ResultId -> ResultId -> Bool)
-> (ResultId -> ResultId -> ResultId)
-> (ResultId -> ResultId -> ResultId)
-> Ord 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
$ccompare :: ResultId -> ResultId -> Ordering
compare :: ResultId -> ResultId -> Ordering
$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
>= :: ResultId -> ResultId -> Bool
$cmax :: ResultId -> ResultId -> ResultId
max :: ResultId -> ResultId -> ResultId
$cmin :: ResultId -> ResultId -> ResultId
min :: ResultId -> ResultId -> ResultId
Ord, Int -> ResultId -> ShowS
[ResultId] -> ShowS
ResultId -> ResultLocale
(Int -> ResultId -> ShowS)
-> (ResultId -> ResultLocale)
-> ([ResultId] -> ShowS)
-> Show ResultId
forall a.
(Int -> a -> ShowS)
-> (a -> ResultLocale) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ResultId -> ShowS
showsPrec :: Int -> ResultId -> ShowS
$cshow :: ResultId -> ResultLocale
show :: ResultId -> ResultLocale
$cshowList :: [ResultId] -> ShowS
showList :: [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 ResultLocale -> Map ResultLocale ResultLocale -> Maybe ResultLocale
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 ResultLocale -> Map ResultLocale ResultLocale -> Maybe ResultLocale
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 ResultLocale -> Map ResultLocale ResultLocale -> Maybe ResultLocale
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 = (ShowS -> ShowS) -> ResultLocale -> [ShowS] -> ResultLocale
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ShowS -> ShowS
forall a b. (a -> b) -> a -> b
($) [] ([ShowS] -> [ShowS]
forall a. [a] -> [a]
reverse [ShowS]
acc)
loop (ResultId
x : [ResultId]
xs) [] = [ResultId] -> [ShowS] -> ResultLocale
loop [ResultId]
xs [(ResultId -> ResultLocale
loc ResultId
x ResultLocale -> ShowS
forall a. [a] -> [a] -> [a]
++)]
loop ((VectorItemId ResultLocale
s) : [ResultId]
xs) [ShowS]
acc = [ResultId] -> [ShowS] -> ResultLocale
loop [ResultId]
xs ([ShowS] -> ResultLocale) -> [ShowS] -> ResultLocale
forall a b. (a -> b) -> a -> b
$ (ResultLocale
s ResultLocale -> ShowS
forall a. [a] -> [a] -> [a]
++) ShowS -> [ShowS] -> [ShowS]
forall a. a -> [a] -> [a]
: (ResultLocale
" " ResultLocale -> ShowS
forall a. [a] -> [a] -> [a]
++) ShowS -> [ShowS] -> [ShowS]
forall a. a -> [a] -> [a]
: [ShowS]
acc
loop (ResultId
x : [ResultId]
xs) [ShowS]
acc = [ResultId] -> [ShowS] -> ResultLocale
loop [ResultId]
xs ([ShowS] -> ResultLocale) -> [ShowS] -> ResultLocale
forall a b. (a -> b) -> a -> b
$ (ResultId -> ResultLocale
loc ResultId
x ResultLocale -> ShowS
forall a. [a] -> [a] -> [a]
++) ShowS -> [ShowS] -> [ShowS]
forall a. a -> [a] -> [a]
: (ResultLocale
" / " ResultLocale -> ShowS
forall a. [a] -> [a] -> [a]
++) ShowS -> [ShowS] -> [ShowS]
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 ([ResultLocale] -> ResultLocale)
-> (ResultLocale -> [ResultLocale]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
[[ResultLocale]] -> [ResultLocale]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[ResultLocale]] -> [ResultLocale])
-> (ResultLocale -> [[ResultLocale]])
-> ResultLocale
-> [ResultLocale]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
([ResultLocale] -> [ResultLocale])
-> [[ResultLocale]] -> [[ResultLocale]]
forall a b. (a -> b) -> [a] -> [b]
map (ShowS -> [ResultLocale] -> [ResultLocale]
forall a b. (a -> b) -> [a] -> [b]
map (ShowS -> [ResultLocale] -> [ResultLocale])
-> ShowS -> [ResultLocale] -> [ResultLocale]
forall a b. (a -> b) -> a -> b
$ (Char -> Char) -> ShowS
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower) ([[ResultLocale]] -> [[ResultLocale]])
-> (ResultLocale -> [[ResultLocale]])
-> ResultLocale
-> [[ResultLocale]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
(ResultLocale -> [ResultLocale])
-> [ResultLocale] -> [[ResultLocale]]
forall a b. (a -> b) -> [a] -> [b]
map ((Char -> Char -> Bool) -> ResultLocale -> [ResultLocale]
forall a. (a -> a -> Bool) -> [a] -> [[a]]
groupBy (\Char
x Char
y -> Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Char -> Bool
isUpper Char
y)) ([ResultLocale] -> [[ResultLocale]])
-> (ResultLocale -> [ResultLocale])
-> ResultLocale
-> [[ResultLocale]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
ResultLocale -> [ResultLocale]
words