% -*- coding: utf-8 -*- \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} \end{verbatim} Et svar kan f.eks se sådan ud: \begin{verbatim} \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} -- LUA program, returning explicit values return math.pi, 1234567890 -- LUA program, returning a value and its timestamp return lensmeter.right.sphere.value, lensmeter.right.sphere.timestamp -- 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 \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.