diff options
Diffstat (limited to 'design/preudfyldning.tex')
-rw-r--r-- | design/preudfyldning.tex | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/design/preudfyldning.tex b/design/preudfyldning.tex new file mode 100644 index 0000000..f7b2b7e --- /dev/null +++ b/design/preudfyldning.tex @@ -0,0 +1,94 @@ +\section{Preudfyldning} +Inden en makro sendes til klienten sker der en preudfyldningsprocess +på serveren.\\ +Et givet inputfelt kan blive preudfyldt med +\begin{itemize} +\item en målt værdi via Pentominos. +\item en tidligere lagret værdi i databasen. +\item en defaultværdi. +\end{itemize} +Præcis hvilken af de tre metoder som vil blive brugt til det enkeklte +felt afhænger af tidskoder. + +\subsection{Pentominos} +I headeren på en makro forefindes en række queries til pentominos +serveren. Disse udføres samlet inden makroen behandles, og producerer +et namespace hvor navnene er dikteret af deres nesting i svaret fra +pentominos serveren.\\ +En query kan f.eks se sådan ud: +\begin{verbatim} +<queries> + <query class="lensmeter" ttl="10000"/> +</queries> +\end{verbatim} +Et svar kan f.eks se sådan ud: +\begin{verbatim} +<results> + <result class="lensmeter" timestamp="1211808877"> + <group name="right"> + <value name="sphere" value="-4.75"/> + <value name="cyl" value="-0.25"/> + <value name="axis" value="56"/> + </group> + <group name="left"> + <value name="sphere" value="-4.76"/> + <value name="cyl" value="-0.23"/> + <value name="axis" value="32"/> + </group> + </result> +</results> +\end{verbatim} +For hvert resultat produceres en \texttt{result} knude med tilhørende +tidkode som beskriver hvornår den givne måling er indrapporteret.\\ +Disse knuder oversættes til et namespace med nesting, separeret med +\texttt{.} (punktum), bestående af først klassenavnet på querien, +dernest alle grupper og sidst navnet på værdien, f.eks +\texttt{lensmeter.right.axis}.\\ +Hver af disse værdier indeholder en value og en timestamp som sat +iflg. svaret.\\ +Svaret bliver nu filtreret igennem en række LUA mapper programmer som +hver især returnerer en værdi og en tidskode.\\ +Mapper programmerne kan f.eks se sådan ud: +\begin{verbatim} +<maps> + <map name="axis"> + -- LUA program, returning explicit values + return math.pi, 1234567890 + </map> + <map name="sphere"> + -- LUA program, returning a value and its timestamp + return lensmeter.right.sphere.value, lensmeter.right.sphere.timestamp + </map> + <map name="cyl"> + -- LUA program, returning an average, with oldest timestamp + timestamp = lensmeter.right.cyl.timestamp + if( timestamp > lensmeter.right.axis.timestamp ) timestamp = lensmeter.right.axis.timestamp + value = ( lensmeter.right.cyl.value + lensmeter.right.axis.value ) / 2.0 + return value, timestamp + </map> +</maps> +\end{verbatim} +Et inputfelt angiver at det skal (eller kan) udfyldes via sådan et +map, ved hjælp af et \texttt{map} tag. Hvis dette tag ikke findes, eller hvis +det er tomt, eller refererer til et ikke-eksisterende map, ignoreres +det. + +\subsection{Pracro} +Alle input felter i makroen har et navn tilknyttet. Disse navne +benyttes til at lave opslag i pracro databasen for at finde ud af om +der er tidligere indtastede værdier.\\ +Disse eventuelle værdier har ligesom værdierne fra pentominos +tidskoder.\\ +Ved opslaget benyttes en fast defineret (i configurationsfilen) +ttl. Overskrides denne af en værdi, ignoreres den i opslaget.\\ +Hvis pentominos svaret ikke har givet anledning til en konkret værdi, +eller hvis værdiens tidskode er ældre end den pracro opslaget giver, +så har pracro værdien precedens over pentominos. Hvis det modsatte er +tilfældet, benyttes værdien fra pentominos.\\ +Hvis hverken pentominos eller pracro giver noget bugbart resultat, +benyttes default værdien. + +\subsection{Default værdi} +Alle inputfelter har en predefineret værdi, i kraft af et value felt.\\ +Et ikke eksisterende value felt resulterer i en default værdi værende +den tomme streng. |