diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/NOTES | 160 | ||||
-rw-r--r-- | server/xml/example2.xml | 38 |
2 files changed, 145 insertions, 53 deletions
diff --git a/server/NOTES b/server/NOTES index 8e99a1d..d9758b6 100644 --- a/server/NOTES +++ b/server/NOTES @@ -1,10 +1,21 @@ +################## +# Makro editoren # +################## +Den skal kunne uploade makroer/templates til serveren, som validerer + dem inden de lagres. Under lagringen skal versioneringen samtidig + foregaa. + +Editoren skal laese makroerne/templatesne direkte fra serveren, saa en + servernaer editering bliver bibeholdt. + ################### # Makro templates # ################### -En makro template består af tre dele: +En makro template består af fire dele: 1: Header 2: Queries - 3: Widgets + 3: Maps + 4: Widgets Headeren indeholder alle overordnede info, såsom cpr nummer og makro version. @@ -21,7 +32,7 @@ Widgets sektionen er som beskrevet andetsteds. ########### For at en query skal give mening, skal der være en stor mængde klasser man kan lave requests på. - Disse klasser skal tilsammen beskive al apparatur på afdelingen, + Disse klasser skal tilsammen beskrive al apparatur på afdelingen, hiraktisk, så man f.eks kan bede om "lensmeter" eller en konkret model. @@ -31,6 +42,21 @@ Der skal være mulighed for at hæfte flere klasser på det samme apparat, idet nogle apparater måler mere end een ting. (ala multipel nedarvning.) +En attribute "automap" soerger for at lave en default 1:1 mapning + mellem vaerdier i resultatet og value namespacet. + Disse vil blive overskrevet af maps ved eventuelle overlap i navnene. + +Eksempel paa en query til pentominos: +<query ttl="86400" class="lensmeter" automap="true"/> + +Queries til pracro serveren selv bliver automatisk udfoert vha. tag + navnet i wigdets sektionen. + +Alle queries sker til pentominos. Hvis der bliver behov for at traekke + data andre steder fra, skal dette ske via pentominos, istedet for + direkte (Det er hele tanken bag pentominos, at den skal vaere + samlingspunkt for alle taenkelige dataudtraek). + Sproget i en query som laver mapningen. -> class, cpr, timestamp (oldest) <- xml formateret @@ -53,17 +79,39 @@ ostemad.dims og ostemad.olm.fnuller. Eksempler på mapninger: <map name="myvalue"> - 2*fisk.dims + return 2 * fisk.dims </map> <map name="anothervalue"> - pi = 3.14 - sin(fisk.dims / pi) + 42 + return math.sin(fisk.dims / math.pi) + 42 </map> -Mapningssproget - LUA? - Simplere (ala bc)? +Mapningssproget: LUA + +En simpel map kan overvejes at bruges til enkelte expressions (det er + muligvis de simple som skal hedde map og de avancerede som skal hedde + complexmap). + +De simple kan i koden pakkes ind i en return statement: + <map name="myvalue" value="2 * dimmer"/> + bliver til "return 2 * dimmer" som LUA kode. + +De komplekse bliver ikke pakket ind i noget: + <complexmap name="myvalue"> + function recurser( var ) + recurser( tail(var) ) + return head( var ) + end + return recurser( [1, 2, 3, 4] ) + </complexmap> + +En endnu simplere map kan bruges ved 1:1 mapninger: + <simplemap name="myvalue" value="dimmer"/> + Denne map type skal ikke engang koeres igennem LUA, men kan blot + udfyldes direkte. +Hvis der performance maessigt ikke er nogen forskel paa map og + simplemap kan simplemap helt undlades, for at bibeholde simpliciteten + i serverkoden. ###################################### # Preudfyldning af felter i en makro # @@ -97,31 +145,34 @@ Data som allerede eksisterer paa serveren: Et felts ttl vil nok vaere defineret uafhaengigt af kilden, saa ovenstaeende loesning kan sikkert vaere fin nok. -Data som kommer fra eksterne kilder: +Data som kommer fra eksterne kilder (Pentominos): Et flest skal have en eller flere properties som indikerer at feltet skal udfyldes fra en ekstern datakilde. Disse properties skal beskrive hvilken kilde dataene skal hentes fra, samt hvor gamle dataene maksimalt maa vaere. - En maade at goere det paa kunne vaere at kalde en ekstern applikation - (via. popen eller lign.) som spytter data ud paa stdout i et af - pracro velkendt format. - Parametrene til dette eksterne program kan saa styres vha. af en - lignende mekanisme som i formatet til journal resumeet ($$, ${cpr}, - ${firstname}, etc). - - En anden maade at goere det paa kunne vaere at lave et indbygget - kommandosaet som kan tage en raa streng som parameter, som derved - fungerer som kald til et eksternt program, bortset fra at der kaldes - en intern rutine istedet. - - En tredie maade, som er en afart af den anden maade, vil vaere at - lave kommandsaet baseret udelukkende paa kilde. [kilde]/[apparat]/[parameter] - ex. pentominos/lensmeter/axis - Problem: Hvordan skelnes mellem flere ensnavngivne parametre? - I lensmeter findes axis parameteren principielt to gange, een gang - for hoejre og een gang for venstre linse. +%% +%% Flg. er slettet +%% +% En maade at goere det paa kunne vaere at kalde en ekstern applikation +% (via. popen eller lign.) som spytter data ud paa stdout i et af +% pracro velkendt format. +% Parametrene til dette eksterne program kan saa styres vha. af en +% lignende mekanisme som i formatet til journal resumeet ($$, ${cpr}, +% ${firstname}, etc). +% +% En anden maade at goere det paa kunne vaere at lave et indbygget +% kommandosaet som kan tage en raa streng som parameter, som derved +% fungerer som kald til et eksternt program, bortset fra at der kaldes +% en intern rutine istedet. +% +% En tredie maade, som er en afart af den anden maade, vil vaere at +% lave kommandsaet baseret udelukkende paa kilde. [kilde]/[apparat]/[parameter] +% ex. pentominos/lensmeter/axis +% Problem: Hvordan skelnes mellem flere ensnavngivne parametre? +% I lensmeter findes axis parameteren principielt to gange, een gang +% for hoejre og een gang for venstre linse. Hvis der baade eksisterer data paa serveren og findes ekstern data. Dataene paa serveren har precedens over data fra eksterne kilder, @@ -133,31 +184,34 @@ Hvis der baade eksisterer data paa serveren og findes ekstern data. udloebet) paa serveren eller fra den eksterne kilde (igen ikke eksisterende eller udloebet) benyttes value feltets indhold. -Pentominos data eksempel: - Serveren laeser: - <lineedit name="dioptri_odex" - source="pentominos/lensmeter" - command="cliclient --cpr=${cpr} query --filter=latest --deviceid=lensmeter --devicetype=lensmeter --format=xml" - ttl="86400" - value=""/> - - Serveren oversaetter dette til: - <lineedit name="dioptri_odex" - value="4" - source="pentominos/lensmeter"/> - -Taenkt eksempel med et fundus billede: - Serveren laeser: - <image name="dioptri_odex" - source="pentominos/fundus" - command="cliclient --cpr=${cpr} query --filter=latest --devicetype=fundus --format=raw" - ttl="86400" - value="SOMERAWJPEGCODEINBASE64-9823fasd73487234fas7asd8732487asd8fc7sd8f76328732"/> - - Serveren oversaetter dette til: - <image name="dioptri_odex" - value="SOMERAWJPEGCODEINBASE64-9823fasd73487234fas7asd8732487asd8fc7sd8f76328732" - source="pentominos/lensmeter"/> +%% +%% Flg. er slettet +%% +%Pentominos data eksempel: +% Serveren laeser: +% <lineedit name="dioptri_odex" +% source="pentominos/lensmeter" +% command="cliclient --cpr=${cpr} query --filter=latest --deviceid=lensmeter --devicetype=lensmeter --format=xml" +% ttl="86400" +% value=""/> +% +% Serveren oversaetter dette til: +% <lineedit name="dioptri_odex" +% value="4" +% source="pentominos/lensmeter"/> +% +%Taenkt eksempel med et fundus billede: +% Serveren laeser: +% <image name="dioptri_odex" +% source="pentominos/fundus" +% command="cliclient --cpr=${cpr} query --filter=latest --devicetype=fundus --format=raw" +% ttl="86400" +% value="SOMERAWJPEGCODEINBASE64-9823fasd73487234fas7asd8732487asd8fc7sd8f76328732"/> +% +% Serveren oversaetter dette til: +% <image name="dioptri_odex" +% value="SOMERAWJPEGCODEINBASE64-9823fasd73487234fas7asd8732487asd8fc7sd8f76328732" +% source="pentominos/lensmeter"/> ################################### diff --git a/server/xml/example2.xml b/server/xml/example2.xml new file mode 100644 index 0000000..1ac7dba --- /dev/null +++ b/server/xml/example2.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<macro name="example2" version="1.0" + resume="${linse1}\n${linse2}"> + <queries> + <query class="lensmeter" ttl="10000"/> + <query class="autophoropter" ttl="10000" automap="true"/> + </queries> + <maps> + <map name="axis"> + -- LUA program + return RIGHT.axis + </map> + <map name="dioptri"> + -- LUA program + return RIGHT.dioptri + </map> + </maps> + <window name="mainwindow" + caption="Fundus" + width="500" + height="560" + layout="vbox"> + <frame name="linse_frame" caption="Linser:" layout="vbox"> + <frame name="linse_framea" layout="hbox"> + <label name="a" width="300" caption="Akse rotation:"/> + <lineedit name="linse1" regexp="[0-9]{1,3}D" map="axis" value="90K"/> + </frame> + <frame name="linse_frameb" layout="hbox"> + <label name="b" width="300" caption="Diotri:"/> + <lineedit name="linse2" regexp="[0-9]{1,3}D" map="dioptri" value="90K"/> + </frame> + </frame> + <frame name="buttons" layout="hbox"> + <button name="cancel" caption="Annuller" action="cancel"/> + <button name="commit" caption="Godkend" action="commit"/> + </frame> + </window> +</macro> |