Dokumentnamn Dokumenttyp Datum Design Mallhantering NypsNYPS Handledning 2014-09-26 Diarienr/Projektnr Upprättad av Godkänd av Version Christina Pieslinger 0.7 NYPS Design Mallhantering 1 (12)
Innehåll 1 MALLHANTERING 3 1.1 Taggar 3 1.1.1 Allmänt 3 1.1.2 @@NAME{{object}} 5 1.1.3 @@NAME{{object.attribute}} 5 1.1.4 @@VALUE{{object.attribute}} 5 1.1.5 @@VALUE{{FID, object.attribute}} 5 1.1.6 @@USER{{userId, userattribute}} 5 1.1.7 @@USER{{object.attribute, userattribute}} 5 1.1.8 @@GROUP{{groupId, groupattribute}} 6 1.1.9 @@GROUP{{object.attribute, groupattribute}} 6 1.1.10 @@CONTACT{{type, attribute}} 6 1.1.11 @@ACTOR_CONTACT{{type, attribute}} 7 1.1.12 @@SUPPORT_TYPE{{object.attribute}} 8 1.1.13 @@RECIPIENT{{object.attribute}} 8 1.1.14 @@PAYMENT_RECIPIENT{{object.attribute, object.attribute}} 8 1.1.15 @@SHORTCODE_VALUE{{object.attribute, type, includecode=true}} 8 1.1.16 @@FORECAST{{type, year}} 8 1.1.17 @@FORECAST{{FID, type, year}} 8 1.1.18 @@FUNCTION{{type, FID, FID,...}} 9 1.1.19 @@ENUMERATION{{object, enum_template}} 9 1.1.20 @@ENUMERATION{{object, lookup_spec, enum_template}} 9 1.1.21 @@ENUMERATION_VALUE{{attribute}} 9 1.1.22 @@ENUMERATION_VALUE{{GFID, LFID, attribute}} 10 1.1.23 @@ENUMERATION_FUNCTION{{type, GFID, LFID, LFID,...}} 10 1.1.24 @@GENERATION_LOOP{{object_group, generation_template}} 10 1.1.25 @@FORMAT{{TAG, numbergroups=true, nrofdecimals=2}} 10 1.2 Parsning 11 1.2.1 Spara värden 11 1.2.2 Parsningen 11 Revisionshistorik Författare Ändringsbeskrivning Version Datum Henrik Brodin Daniel Madsén Daniel Madsén Daniel Madsén Henrik Hedlund Lagt till funktionen SUM_AND_CLEAR samt förtydligat SUM-funktionen. SUM_AND_CLEAR finns fr om version 2.14 av Nyps. Dokumentet är uppdaterat med uppgifter för KAP avseende @@USER. Dokumentet är uppdaterat med tabell för attributen till @@CONTACT. Dokumentet är uppdaterat med tabell för attributen till @@ACTOR_CONTACT. Dokumentet är uppdaterat med en ny tagg, @@ACTOR_CONTACT. 0.7 2014-09-26 0.6 2014-06-04 0.5 2011-10-03 0.4 2011-08-22 0.3 2009-11-04 Henrik Hedlund Rättat fel i 1.1.24 @@FORMAT 0.2 2009-09-30 Henrik Hedlund Christina Pieslinger Ida Infront Dokumentet är uppdaterat med tabell för attributen till @@ACTOR_CONTACT. 0.1 2009-09-18 Upprättat 66 2004-04-28-2009-03-31 1 2 (12)
1 Mallhantering En användare ska kunna skapa dokument till ett ärende angivet olika mallar. I många fall vill man även ha in ärendespecifika uppgifter i dessa dokument. Detta kan lösas genom att man i mallen talar om vilka värden som ska visas och var. För att kunna göra detta på ett generellt och kontrollerat sätt så behövs ett språk bestående av taggar vilka kan ersättas med attributvärden från olika objekt som tillhör ett ärende eller en aktör. Nedan beskrivs de taggar som ingår i taggspråket och hur parsningen sedan görs av en mall som innehåller dessa taggar. 1.1 Taggar Taggarna är uppbyggda av 5 delar. Den första delen är @@ vilken anger att taggen börjar. Detta följs av namnet på taggen. Därefter anges två vänster-måsvingar {{ för att visa att efter dessa kommer parametrarna till taggen. En parameter kan t ex vara vilket attribut ett värde ska hämtas från. När parametrarna har angivits avslutas taggen med två höger-måsvingar }}. Alla taggar kan omges av kommentarstecken. Detta finns för att de nutek-specifika taggarna i mallen inte ska störa övriga delar av mallen. Vilka kommentarstecken som ska användas är konfigurerbart. När parsern ersätter en tagg med ett värde så tas även de kommentarstecken som ligger före resp. efter taggen bort om det i konfigurationsfilen är angivet att kommentarstecken ska användas. Inga mellanslag får förekomma mellan kommentarstecknen och början resp. slutet av taggen. Taggnamnets format styr om/hur resultatet formateras, exempel: VALUE, värdets utseende bibehålls. Value, värdet formateras med inledande versal och gemener. value, värdet formateras till att endast innehålla gemener. De taggar som ingår i taggspråket och som får ingå i mallarna, presenteras i nedanstående avsnitt. 1.1.1 Allmänt De parametrar som förekommer i taggarna är följande: object namnet på det objekt som ett värde ska hämtas från. Används i samband med taggen @@Name{{object}} för att hämta namnet på objektet eller i samband med @@ENUMERATION{{object, enum_template}} för att ange på vilket objekt de attribut som anges i enum_template sitter på. attribute namnet på det attribut som värdet ska hämtas från. Används i taggarna @@ENUMERATION_VALUE{{attribute}} och @@ENUMERATION_VALUE{{GFID, LFID, attribute}} då objektet är angivet tidigare. object.attribute kombination som avser att ett värde ska hämtas från attributet med namn attribute på objektet med namn object. enum_template avser en sträng som innehåller den bit av mallen vilken ska genereras flera gånger. Typiskt är att man vill generera rader i en tabell och hämta dess cellvärden från flervärdesattribut. Antalet gånger som genereras beror på hur många värden attributen har. object_group anger den grupp av objekt (beredning eller utbetalning) som ingår i taggen @@GENERATION_LOOP. Endast objekt av den ena gruppen får ingå i loopen. 3 (12)
generation_template avser den sträng som innehåller den bit av mallen vilken ska genereras flera gånger och hämta sina värden från olika generationer av objekt. Antalet gånger som denna bit genereras beror på hur många generationer som finns av den grupp av objekt (beredning eller utbetalning) som generationsloopen är gjord för. FID förkortning för function identity. Anges i taggarna i kombination med ett attributnamn för att värdet på attributet associeras med detta id. Används för att kunna använda värdet i en funktion som ligger senare i mallen, exempelvis summering. Om ett och samma FID anges på flera ställen i mallen kommer alla värden sparas och associeras med detta id. I vissa enumerationtaggar kan man ange både globala och lokala FID s vilka då anges som GFID resp. LFID, se nedan. TYPE anger vilken typ av funktion som ska utföras på vissa attributvärden när den används i taggen @@FUNCTION och @@ENUMERATION_FUNCTION. När den används i taggen @@CONTACT anger den typen på kontaktobjektet som ett värde ska hämtas ifrån. När den används i taggen @@FORECAST anger den vilken typ av prognos som avses (manuell eller automatisk). För taggen @@SHORTCODE_VALUE anger TYPE vilken del av ett Län- Kommun-Församling attribut som ska hämtas när kortkodsbeskrivningen hämtas för dessa attribut. userid anger ett id på en användare från vilken ett attributvärde ska hämtas. userattribute anger ett attribut på ett användarobjekt från vilket ett värde ska hämtas. groupid anger ett id på en grupp från vilken ett attributvärde ska hämtas. groupattribute anger ett attribut på ett gruppobjekt från vilket ett värde ska hämtas. year används i taggen @@FORECAST och anger för vilket år (0-9) som ett prognosvärde ska hämtas. numbergroups - används i taggen @@FORMAT för att ange att ett värde ska ha tusentalsseparering. Anges som numbergroups=true. nrofdecimals - används i taggen @@FORMAT för att ange att ett värde ska visas med ett givet antal decimaler. Anges som nrofdecimals=x där X är en siffra, t ex nrofdecimals=3. Följande restriktioner gäller för taggarna: Inga radbrytningar får förekomma i taggarna. Enda undantaget är att de får förekomma i den malldel som representeras av enum_template samt i den malldel som representeras av object_group. Taggen @@ENUMERATION{{object, enum_template}} får inte nästlas, d v s den här taggen får inte förekomma i den malldel som representeras av enum_template. Taggarna @@ENUMERATION_VALUE{{attribute}}, @@ENUMERATION_VALUE{{GFID, LFID, attribute}} och @@ENUMERATION_FUNCTION{{type, GFID, LFID, LFID, }} får endast förekomma i malldelar som representeras av enum_template. Taggen @@GENERATION_LOOP{{object_type, generation_template}} får inte nästlas, d v s den här taggen får inte förekomma i den malldel som representeras av generation_template. Endast objekt av en typ (beredning eller utbetalning) får ingå i generationsloopen, d v s den typ som angivits som parameter object_type. Parametern type i taggen @@FORECAST kan bara ha ett av värdena manuell och automatisk. 4 (12)
1.1.2 @@NAME{{object}} Används för att ange att namnet på objektet som pekas ut av object ska ersätta taggen. 1.1.3 @@NAME{{object.attribute}} Används för att ange att namnet på attributet attribute som sitter på objektet som pekas ut av object ska ersätta taggen. 1.1.4 @@VALUE{{object.attribute}} Används för att ange att värdet på attributet attribute som sitter på objektet som pekas ut av object ska ersätta taggen. 1.1.5 @@VALUE{{FID, object.attribute}} Används för att ange att värdet på attributet attribute som sitter på objektet som pekas ut av object ska ersätta taggen. Dessutom innebär det att attributets värde sparas och kopplas ihop med det id som anges av parametern FID. Ett och samma FID som angivets i flera taggar medför att alla värden för de attribut som angivits i samband med parametern FID kommer att sparas och associeras med detta FID. 1.1.6 @@USER{{userId, userattribute}} Denna tag används när man vill hämta en uppgift om en användare i systemet och sedan ersätta den här taggen med den. Parametern userid anger id:t på den användare från vilken man ska hämta en uppgift. Parametern userattribute är namnet på det attribut som man vill hämta uppgiften ifrån. 1.1.7 @@USER{{object.attribute, userattribute}} Denna tag används när man vill hämta en uppgift om en användare i systemet. Parametern attribute anger det attribut som sitter på objektet som pekas ut av parametern object för vilket värdet är ett id på en användare. Denna användare kommer sedan att användas för den efterfrågade uppgiften. Parametern userattribute är namnet på det attribut som man vill hämta uppgiften ifrån. Giltiga värden för parametern UserAttribute userattribute Förklaring av förkortning Motsvarighet i KAP givenname Given name Förnamn sn Surename Efternamn cn Common name telephonenumber Office Phone Telefon homephone Home Phone Number Hemtelefon mobile Mobile Phone Number Mobiltelefon title Title Titel description Beskrivning Beskrivning mail Mail address Epost o Organization name Organisation 5 (12)
1.1.8 @@GROUP{{groupId, groupattribute}} Denna tag används när man vill hämta en uppgift om en grupp i systemet och sedan ersätta den här taggen med den. Parametern groupid anger id:t på den grupp från vilken man ska hämta en uppgift. Parametern groupattribute är namnet på det attribut som man vill hämta uppgiften ifrån. 1.1.9 @@GROUP{{object.attribute, groupattribute}} Denna tag används när man vill hämta en uppgift om en grupp i systemet. Parametern attribute anger det attribut som sitter på objektet som pekas ut av parametern object för vilket värdet är ett id på en grupp. Denna grupp kommer sedan att användas för den efterfrågade uppgiften. Parametern groupattribute är namnet på det attribut som man vill hämta uppgiften ifrån. 1.1.10 @@CONTACT{{type, attribute}} Denna tag används för att ange värdet på attributet attribute som sitter på kontaktobjektet av typen type. OBS! Denna tag hämtar endast värden från objekt som är av typen Kontakt dvs ej från objekten Bank resp Revisor. Attributet ct_contact_type talar om vilken typ av aktörskontakt det gäller. För giltiga aktörskontakttyper, se värdelistan ct_contact_type i Nyps Admins arbetsyta, Attributvärden. Arumentet attribute talar om vilken uppgift hos aktörskontakten som ska visas. attribute ct_name ct_contact_type ct_street_address ct_co_address ct_zip_code ct_postal_area ct_phone_nr ct_fax_nr ct_mobile_phone_nr ct_email_address ct_web_address ct_note Visningsnamn Namn Typ Utdelningsadress c/o adress Postnr Postort Telefonnr Telefaxnr Mobiltelefonnr E-postadress Webbadress Notering 6 (12)
1.1.11 @@ACTOR_CONTACT{{type, attribute}} Denna tag används när man vill hämta uppgifter från de aktörskontakter som finns inmatade på ärendet. Attributet contact_type talar om vilken typ av aktörskontakt det gäller. För giltiga aktörskontakttyper, se värdelistan actor_contact_type i Nyps Admins arbetsyta, Attributvärden. Arumentet attribute talar om vilken uppgift hos aktörskontakten som ska visas. attribute name contact_type street_address co_address zip_code postal_area phone_nr fax_nr email_address web_address note company_number legal_form country visit_street_address vat_accounting organisation_type company_signer payment_method payment_number Visningsnamn Namn Typ Utdelningsadress C/o Adress Postnummer Postort Telefonnummer Telefaxnr e-postadress Webbadress Notering Org.nr/Personnr Juridisk form Land Besöksadresss Momsredovisning Typ av organisation Firmatecknare Betalningssätt Pg/Bg/Bankkto-nr payment_mva Merverdiavgift (mva)? purchasing_unit no_legal_form other_support other_support_details trade_code Upphandlande enhet Juridisk form (Norge) Har ett annat stöd sökts för samma aktivitet? Om Ja, ange finansiär och belopp Bransch 7 (12)
1.1.12 @@SUPPORT_TYPE{{object.attribute}} Denna tag används när man vill hämta det fullständiga namnet på en stödtyp. Parametern attribute anger det attribut som sitter på objektet som pekas ut av parametern object, för vilket värdet är det interna namnet (kortkoden) på en stödtyp. Det interna namnet kommer sedan användas för att hämta det externa namnet. Om inget externt namn är satt så får man anges det interna namnet som värde istället. 1.1.13 @@RECIPIENT{{object.attribute}} Används för att kunna ange ett värde på en annan aktör än den som är kopplat till ett ärende (t ex i fallet med annan mottagare av brev). Värdet på attributet attribute som sitter på objektet som pekas ut av object ska ersätta taggen. Endast objekten company, workplace och parent_company är tillåtna och kommer att hämtas från den mottagare (aktör) som har angivits i dialogen Nytt dokument. 1.1.14 @@PAYMENT_RECIPIENT{{object.attribute, object.attribute}} Används för att kunna ange ett värde på en annan betalningsmottagare (aktör) än den som är kopplat till ett ärende. Den första parametern måste peka ut den tekniska nyckeln av ett arbetsställe-id (WorkplaceId) vilken sedan används för att slå upp värdet som pekas ut av den andra parametern. Object avser den objekttyp från vilken värdet på attributet attribute ska hämtas. För object i den andra parametern är endast objekten company, workplace och parent_company är tillåtna. 1.1.15 @@SHORTCODE_VALUE{{object.attribute, type, includecode=true}} Den här taggen används för att hämta beskrivningen av en kortkod, alltså den text beskrivning som är kopplad till en kortkod. Den första parametern anger vilket kortkods attribut som ska hämtas. Kortkoden för Län-Kommun-Församling är speciell och för att hämta ut en del av den (Län, Kommun eller Församling) används type parametern. Type parametern behövs bara anges om det är ett Län-Kommun-Församling attribut. Genom att ange LKF_COUNTY som type hämtas länet ut, LKF_MUNICIPAITY för kommunen och LKF_PARISH för församlingen. Anges includecode=true kommer även kortkoden att hämtas och läggas till kortkods beskrivningen. 1.1.16 @@FORECAST{{type, year}} Den här taggen används för att hämta ett prognosvärde för en viss prognostyp och för ett visst år. Parametern type avser prognostypen och ska vara ett av värdena manuell eller automatisk. Parametern year avser för vilket år i prognosen som värdet ska hämtas och kan ha värdet 0-9 där 0 avser Beslutsår, 1 avser Beslutsår+1 osv. 1.1.17 @@FORECAST{{FID, type, year}} Den här taggen används för att hämta ett prognosvärde för en viss prognostyp och för ett visst år. Parametern type avser prognostypen och ska vara ett av värdena manuell eller automatisk. Parametern year avser för vilket år i prognosen som värdet ska hämtas och kan ha värdet 0-9 där 0 avser Beslutsår, 1 avser Beslutsår+1 osv. Dessutom innebär det att värdet kommer att sparas och kopplas ihop med det id som anges av parametern FID. 8 (12)
1.1.18 @@FUNCTION{{type, FID, FID,...}} I denna tagg anges parametrarna type samt ett eller flera FID:s. Används när man vill att de värden som associerats med något av de FID:s som angivits ska användas i den funktion som anges av parametern type. Tillgängliga funktioner: SUM: Alla värden som associerats till angivna FID:s adderas ihop. Anges bara ett FID tillsammans med funktionen SUM kommer alla värden associerade med detta FID summeras ihop. SUM_AND_CLEAR: Fungerar som SUM ovan, med tillägget att de ingående variablerna nollställs efter användning. Det är speciellt användbart i utskriftsmallar där en sektion kan genereras flera gånger eller om en GENERATION_LOOP används. Används den vanliga SUM-funktionen hänger värdena med över flera generationer vilken man ibland vill undvika. 1.1.19 @@ENUMERATION{{object, enum_template}} Den här taggen används i samband med att en bit av mallen ska genereras flera gånger. object anger från vilket objekt värden ska hämtas ifrån. enum_template avser en sträng som innehåller den bit av mallen som ska genereras flera gånger. OBS! Den här taggen får inte nästlas, d v s den här taggen får inte förekomma i den malldel som representeras av enum_template. 1.1.20 @@ENUMERATION{{object, lookup_spec, enum_template}} I grunden utför denna tagg samma sak som enumeration taggen ovan, skillnaden är dock att denna tagg tillåter att det i lookup_spec specificeras vilka värden som ska visas, exempelvis vilka kostnandstyper som ska visas ur en kostnadstabell. lookup_spec består av två delar, dels en del som specificerar vilket attribut som kontrollen ska ske mot och dels en lista med värden. För att göra det enkelt att visa bara något värde eller nästan alla värden specificeras det om listan med värden innehåller godkända eller icke godkända värden. Detta gör att man enkelt kan visa bara ett värde, eller alla utom ett värde. Den syntax som används av lookup_spec är följande: TYPE <attribut_namn> LOOKUP <värde_1>;;<värde_1> END (visar endast enum_template om objektets attribut <attribut_namn> har värdet <värde_1> eller <värde_2>) eller TYPE <attribut_namn> NOT <värde_1>;;<värde_1> END (visar endast enum_template om objektets attribut <attribut_namn> inte har värdet <värde_1> eller <värde_2>) Observera att man inte kan blanda både LOOKUP och NOT. 1.1.21 @@ENUMERATION_VALUE{{attribute}} Används för att ange att värdet på attributet attribute ska ersätta taggen. Vilket objekt attributet sitter på har angivits i taggen @@ENUMERATION{{object, enum_template}}. OBS! Denna tagg får endast användas i den malldel som representeras av parametern enum_template i taggen @@ENUMERATION{{object, enum_template}}. Eftersom den del som utgörs av enum_template kommer att genereras flera gånger får endast flervärdesattribut anges som parameter till @@ENUMERATION_VALUE. 9 (12)
1.1.22 @@ENUMERATION_VALUE{{GFID, LFID, attribute}} Används för att ange att värdet på attributet attribute ska ersätta taggen. Vilket objekt attributet sitter på har angivits i taggen @@ENUMERATION{{object, enum_template}}. Dessutom innebär det att attributets värde sparas och kopplas ihop med det id som anges av parametern GFID resp LFID. Med GFID avses en global variabel vilken aldrig nollställs under parsningen av dokumentet medan LFID avser en lokal variabel vilken kommer att nollställas efter varje varv i enumeration-loopen. Vill man inte använda antingen den lokala variabeln eller den globala variabeln anger man null istället för ett variabelnamn. Ett och samma FID (GFID el LFID) som angivits i flera taggar medför att alla värden för de attribut som angivits i samband med parametern FID kommer att sparas och associeras med detta FID. OBS! Denna tagg får endast användas i den malldel som representeras av parametern enum_template i taggen @@ENUMERATION{{object, enum_template}}. Eftersom den del som utgörs av enum_template kommer att genereras flera gånger får endast flervärdesattribut anges som parameter till @@ENUMERATION_VALUE. 1.1.23 @@ENUMERATION_FUNCTION{{type, GFID, LFID, LFID,...}} I denna tagg anges parametrarna type, GFID samt ett eller flera FID:s. Används när man vill att de värden som associerats med något av de FID:s som angivits ska användas i den funktion som anges av parametern type. De FID:s som angivits som parametrar till den här taggen måste tidigare ha använts tillsammans med taggen ENUMERATION_VALUE. OBS! Denna tagg får endast användas i den malldel som representeras av parametern enum_template i taggen @@ENUMERATION{{object, enum_template}}. Tillgängliga funktioner: SUM: Alla värden som associerats till angivna FID:s ska adderas ihop. Anges bara ett FID tillsammans med funktionen SUM avses att alla värden associerade med detta FID ska summeras ihop. Vid två parametrar eller fler så antas första parametern vara en GFID. GFID kan användas för att lagra summan av alla LFID i en global variabel. Vill man inte utnyttja den funktionen måste null anges istället för ett GFID-namn. 1.1.24 @@GENERATION_LOOP{{object_group, generation_template}} Den här taggen används i samband med att en bit av mallen ska genereras flera gånger och hämta sina värden från olika generationer av objekt. object_group anger den grupp av objekt (beredning, utbetalning, appeal eller repayment) som loopen avser. generation_template avser en sträng som innehåller den bit som ska genereras flera gånger. Endast objekt av den grupptyp som angetts i object_group får ingå i loopen. OBS! Den här taggen får inte nästlas, d v s den här taggen får inte förekomma i den malldel som representeras av generation_template. 1.1.25 @@FORMAT{{TAG, numbergroups=true, nrofdecimals=2}} Den här taggen används när man vill formattera ett värde som är ett resultat ifrån en annan tagg. Första parametern, TAG, kan anges någon av taggarna @@VALUE, @@ENUMERATION_VALUE, @@FUNCTION, @@ENUMERATION_FUNCTION och @@FORECAST. Inga andra taggar är tillåtna. Som andra resp. tredje parameter anges någon av formatteringsparametrarna numbergroups resp. nrofdecimals. En eller båda av dessa parametrar måste sättas. Ordningen mellan dessa spelar ingen roll. Parametern numbergroups kan ha värdet true och anger att tusentalsseparering ska användas för ett värde (numbergroups=true). Parametern nrofdecimals används när man vill ange hur många 10 (12)
decimaler som ska visas för ett värde (t ex nrofdecimals=4). Nedan följer några exempel på hur formatteringstaggen kan användas. @@FORMAT{{@@VALUE{{case.ca_approved_amount}}, numbergroups=true}} Anger att värdet som fås från taggen @@VALUE ska ha tusentalsseparering. @@FORMAT{{@@VALUE{{case.ca_approved_amount}}, nrofdecimals=2}} Anger att värdet som fås från taggen @@VALUE ska visas med 2 decimaler. @@FORMAT{{@@VALUE{{case.ca_approved_amount}}, numbergroups=true, nrofdecimals=2}} Anger att värdet som fås från taggen @@VALUE ska ha tusentalsseparering och visas med 2 decimaler. @@FORMAT{{@@FUNCTION{{SUM, x1, x2}}, nrofdecimals=3, numbergroups=true}} Anger att värdet som fås från taggen @@FUNCTION ska ha tusentalsseparering och visas med 3 decimaler. 1.2 Parsning Parsern utgår från en mall (fil), bearbetar denna en bit i taget och skriver sedan ner resultatet, en bit i taget, i en temporär fil. Detta gör att hela mallen inte behöver hållas i minnet och inte heller resultatet. Det är konfigurerbart i vilken katalog som den temporära filen ska sparas i. En förutsättning för att parsern ska kunna parsa mallarna och hämta värden att ersätta taggarna med är att den vet vilket ärende eller vilken aktör som avses för mallen. Därför är en av parametrarna till parsern ett objekt av klassen AttributeResolver vilket utifrån aktuellt ärende eller aktör kan ta reda på attributvärden på olika objekt som är kopplade till ärendet resp. aktören. 1.2.1 Spara värden I en del taggar anges parametern FID. När parsern stöter på en sån tagg i mallen så sparas det hämtade värdet i en hashmap associerat till den identitet som FID anger. Beroende på om taggen ligger i en enum_template eller utanför så sparas värdet i olika hashmappar. Den hashmap som används när en tagg ligger i en enum_template är lokal för den delen av mallen och den nollställs för varje avslutat varv av genereringen. Den andra hashmappen är global och används för hela mallen. Den nollställs aldrig på vägen. 1.2.2 Parsningen I samband med att parsern skapas så skapar man upp den temporära fil i vilken resultatet av parsningen sedan ska skrivas ner. Detta görs i parserns initialiseringsmetod. För att börja att parsa en mall så anropas metoden parse med en InputStream för mallen som parameter. Parsern använder sig sedan av en BufferedReader för att läsa in mallen som en ström av tecken. Parsern betar av mallen en rad i taget. På grund av detta finns restriktionen att inga radbrytningar får förekomma i taggarna. Undantaget är i den del av mallen som representeras av parametern enum_template och generation_template. När en rad har lästs in bearbetas denna. Om man hittar en eller flera taggar i denna rad så görs uppslagningar för att hämta de värden som taggarna ska ersättas med. Taggarna ersätts och sedan skriver man ner den bearbetade raden i den temporära filen. Därefter hämtas nästa rad för bearbetning. Om man under en bearbetning av en rad upptäcker att den innehåller en malldel som ska genereras flera gånger (enum_template eller generation_template) så måste man se till 11 (12)
att hela malldelen som representeras av enum_template resp generation_template finns inläst i buffern innan bearbetning kan göras. Eftersom enum_template och generation_template får innehålla radbrytningar så kan den delen av mallen sträcka sig över flera rader. När den väl är inläst bearbetas den på samma sätt som när endast en rad är inläst. Parsern måste hålla reda på om den håller på att bearbeta en enumeration tagg, d v s @@ENUMERATION{{object, enum_template}}. Detta för att veta om värden associerade med en FID ska sparas i den globala mappen eller i den lokala enum-mappen, se avsnitt 1.2.1. För att byta ut taggar mot värden kommer parsern att behöva ha tillgång till en del objekt. För att slippa uppläsning av ett objekt flera gånger så använder sig parsern av ett objekt av klassen AttributeResolver vilken läser upp objekt vid behov och därefter sparar dem för ev senare användning. Först när parsningen är klar slängs dessa objekt. När parsningen är klar kan den temporära filen med resultatet hämtas genom att anropa metoden getresultfile. 12 (12)