summaryrefslogtreecommitdiff
path: root/design/preudfyldning.tex
diff options
context:
space:
mode:
Diffstat (limited to 'design/preudfyldning.tex')
-rw-r--r--design/preudfyldning.tex94
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.