You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by ts...@apache.org on 2005/03/20 09:06:49 UTC

svn commit: r158319 - lenya/site/1_4/concepts/usecase-framework/index.html lenya/site/1_4/concepts/usecase-framework/index.pdf

Author: tschlabach
Date: Sun Mar 20 00:06:48 2005
New Revision: 158319

URL: http://svn.apache.org/viewcvs?view=rev&rev=158319
Log:
Added some more remarks to the introduction section of the document.

Modified:
    lenya/site/1_4/concepts/usecase-framework/index.html
    lenya/site/1_4/concepts/usecase-framework/index.pdf

Modified: lenya/site/1_4/concepts/usecase-framework/index.html
URL: http://svn.apache.org/viewcvs/lenya/site/1_4/concepts/usecase-framework/index.html?view=diff&r1=158318&r2=158319
==============================================================================
--- lenya/site/1_4/concepts/usecase-framework/index.html (original)
+++ lenya/site/1_4/concepts/usecase-framework/index.html Sun Mar 20 00:06:48 2005
@@ -3,9 +3,8 @@
 <head>
 <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <meta content="Apache Forrest" name="Generator">
-<meta name="Forrest-version" content="0.7-dev">
+<meta name="Forrest-version" content="0.6">
 <meta name="Forrest-skin-name" content="pelt">
-<meta-data></meta-data>
 <title>The Usecase Framework</title>
 <link type="text/css" href="../../../skin/basic.css" rel="stylesheet">
 <link media="screen" type="text/css" href="../../../skin/screen.css" rel="stylesheet">
@@ -156,6 +155,7 @@
     |start content
     +-->
 <div id="content">
+<div id="skinconf-txtlink"></div>
 <div title="Portable Document Format" class="pdflink">
 <a class="dida" href="index.pdf"><img alt="PDF -icon" src="../../../skin/images/pdfdoc.gif" class="skin"><br>
         PDF</a>
@@ -218,6 +218,41 @@
 <a name="N1000D"></a><a name="Introduction"></a>
 <h2 class="underlined_10">Introduction</h2>
 <div class="section">
+<p>A usecase in Lenya means a user triggered action. In most cases, a usecase is triggered by a CMS menu option on
+      a specific document of the publication. This document is the object of the usecases' action (such as edit, delete, publish, ...).</p>
+<p>There are usecases which are independent of a specific document, such as the <span class="codefrag">ac.logout</span> usecase. In that case it does 
+      not matter on what document the usecase is triggered. The part of the request which specifies the document is simple ignored
+      by usecases that are document independent.</p>
+<p>The CMS menus trigger usecases by setting the lenya.usecase request parameter on the current document. If for example
+      the user selects the Publish option from the Workflow menu, a request will be triggered such as:
+      
+<span class="codefrag">
+      GET http://www.server.com/lenya/default/authoring/tutorial.html?&amp;lenya.event=publish&amp;lenya.usecase=publish
+</span>
+</p>
+<p>The <span class="codefrag">lenya.event</span> parameter belongs to the Lenya workflow framework and can be ignored here. I can even be left
+      out and the usecase will still work fine, but workflow actions will not be triggered.</p>
+<p>The Lenya <span class="codefrag">global-sitemap.xmap</span> will redirect requests with a lenya.usecase request parameter to the 
+      <span class="codefrag">$LENYA_WEBAPP/lenya/usecase.xmap</span>
+      sub-sitemap. From version 1.4 on, the following pipeline in this sitemap is used to recognonize usecases which are implemented 
+      in Java using the new 1.4 usecase framework:</p>
+<pre class="code">
+&lt;map:pipeline&gt;
+  &lt;map:match type="registered-usecase"&gt;
+    &lt;map:mount src="usecases/usecase.xmap" uri-prefix="" check-reload="yes" reload-method="synchron"/&gt;
+  &lt;/map:match&gt;
+&lt;/map:pipeline&gt;
+</pre>
+<p>The <span class="codefrag">registered-usecase</span> matcher's default implementation 
+	(<span class="codefrag">org.apache.lenya.cms.cocoon.matching.UsecaseRegistrationMatcher</span>) will use the Avalon
+	component resolver mechanism to resolve the name of the usecase to a an Avalon component. In case it cannot
+	resolve the usecase to an Avalon component, sitemap processing will continue and the usecase is treated in the
+	traditional way using the <span class="codefrag">usecase</span> and <span class="codefrag">step</span> matchers 
+	(<span class="codefrag">org.apache.cocoon.matching.WildcardRequestParameterMatcher</span>). In order for this to work
+	correctly, there should be a <span class="codefrag">lenya.step</span> parameter in the request.</p>
+<p>If the usecase could be resolved successfully into an avalon component, processing will continue in the 
+	<span class="codefrag">$LENYA_WEBAPP/lenya/usecases/usecase.xmap</span> (as opposed to <span class="codefrag">$LENYA_WEBAPP/lenya/usecase.xmap</span>) with
+	the new JX and Java based 1.4 usecase framework.</p>
 <p>
         The <em>usecase framework</em> in Lenya 1.4 is a simple framework to implement usecases using JX templates and Java.
         This approach is an "85% solution". It enables the user to implement a big range of common usecases.
@@ -231,10 +266,10 @@
 </div>
     
     
-<a name="N1001D"></a><a name="Directory+Structure"></a>
+<a name="N1005C"></a><a name="Directory+Structure"></a>
 <h2 class="underlined_10">Directory Structure</h2>
 <div class="section">
-<a name="N10023"></a><a name="The+Lenya+Core"></a>
+<a name="N10062"></a><a name="The+Lenya+Core"></a>
 <h3 class="underlined_5">The Lenya Core</h3>
 <pre class="code">
 $LENYA_WEBAPP
@@ -245,7 +280,7 @@
                        /addUser.jx    JX templates for usecase views
                  ...                  more Lenya core usecases
 </pre>
-<a name="N1002E"></a><a name="Your+Publication"></a>
+<a name="N1006D"></a><a name="Your+Publication"></a>
 <h3 class="underlined_5">Your Publication</h3>
 <pre class="code">
 $PUB_HOME
@@ -257,7 +292,7 @@
     
     
     
-<a name="N1003A"></a><a name="Architecture"></a>
+<a name="N10079"></a><a name="Architecture"></a>
 <h2 class="underlined_10">Architecture</h2>
 <div class="section">
 <p>
@@ -273,7 +308,7 @@
 </div>
     
     
-<a name="N1005A"></a><a name="The+Contract+Between+Flowscript+And+Usecase+Handler"></a>
+<a name="N10099"></a><a name="The+Contract+Between+Flowscript+And+Usecase+Handler"></a>
 <h2 class="underlined_10">The Contract Between Flowscript And Usecase Handler</h2>
 <div class="section">
 <p>
@@ -295,10 +330,10 @@
 </div>
     
     
-<a name="N10079"></a><a name="Implementing+a+Custom+Usecase"></a>
+<a name="N100B8"></a><a name="Implementing+a+Custom+Usecase"></a>
 <h2 class="underlined_10">Implementing a Custom Usecase</h2>
 <div class="section">
-<a name="N1007F"></a><a name="Prerequisites"></a>
+<a name="N100BE"></a><a name="Prerequisites"></a>
 <h3 class="underlined_5">Prerequisites</h3>
 <ol>
           
@@ -307,7 +342,7 @@
           </li>
         
 </ol>
-<a name="N1008F"></a><a name="Add+a+Menu+Item"></a>
+<a name="N100CE"></a><a name="Add+a+Menu+Item"></a>
 <h3 class="underlined_5">Add a Menu Item</h3>
 <div class="frame note">
 <div class="label">Note</div>
@@ -323,7 +358,7 @@
 </li>
         
 </ol>
-<a name="N100A3"></a><a name="Implement+the+Usecase+Handler+Class"></a>
+<a name="N100E2"></a><a name="Implement+the+Usecase+Handler+Class"></a>
 <h3 class="underlined_5">Implement the Usecase Handler Class</h3>
 <ol>
           
@@ -355,15 +390,15 @@
 <li>
             Add the usecase handler class declaration to an XPatch file, e.g. <span class="codefrag">$PUB_HOME/config/usecases.xconf</span>:
 <pre class="code">&lt;xconf xpath="/cocoon/usecases" unless="/cocoon/usecases/component-instance[@name = 'article.editHeadline']"&gt;
-    &lt;component-instance name="article.editHeadline"
-                        logger="lenya.usecases.editHeadline"
-                        class="org.myproject.lenya.usecases.EditHeadline"/&gt;
-  &lt;/xconf&gt;</pre>
+  &lt;component-instance name="article.editHeadline"
+                      logger="lenya.usecases.editHeadline"
+                      class="org.myproject.lenya.usecases.EditHeadline"/&gt;
+&lt;/xconf&gt;</pre>
           
 </li>
         
 </ol>
-<a name="N100D6"></a><a name="Implement+the+View"></a>
+<a name="N10115"></a><a name="Implement+the+View"></a>
 <h3 class="underlined_5">Implement the View</h3>
 <ol>
           
@@ -371,26 +406,26 @@
           
 <li>
             The output of the view has to be a Lenya page:
-<pre class="code">  &lt;page:page
-    xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
-    xmlns:page="http://apache.org/cocoon/lenya/cms-page/1.0"
-    xmlns="http://www.w3.org/1999/xhtml"
-    xmlns:i18n="http://apache.org/cocoon/i18n/2.1"    
-    &gt;
+<pre class="code">&lt;page:page
+  xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
+  xmlns:page="http://apache.org/cocoon/lenya/cms-page/1.0"
+  xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:i18n="http://apache.org/cocoon/i18n/2.1"    
+  &gt;
+
+  &lt;page:title&gt;&lt;i18n:text&gt;Edit Headline&lt;/i18n:text&gt;&lt;/page:title&gt;
+  &lt;page:body&gt;
   
-    &lt;page:title&gt;&lt;i18n:text&gt;Edit Headline&lt;/i18n:text&gt;&lt;/page:title&gt;
-    &lt;page:body&gt;
-    
-      &lt;form&gt;
-        &lt;input type="hidden" name="lenya.continuation" value="${continuation.id}"/&gt;
-        &lt;input type="hidden" name="lenya.usecase" value="${request.getParameter('lenya.usecase')}"/&gt;
+    &lt;form&gt;
+      &lt;input type="hidden" name="lenya.continuation" value="${continuation.id}"/&gt;
+      &lt;input type="hidden" name="lenya.usecase" value="${request.getParameter('lenya.usecase')}"/&gt;
 
-        ...
+      ...
 
-      &lt;/form&gt;
+    &lt;/form&gt;
 
-    &lt;/page:body&gt;
-  &lt;/page:page&gt;</pre>
+  &lt;/page:body&gt;
+&lt;/page:page&gt;</pre>
           
 </li>
           
@@ -404,10 +439,10 @@
 </div>
     
     
-<a name="N100FA"></a><a name="Overriding+Core+Usecases+in+Publications"></a>
+<a name="N10139"></a><a name="Overriding+Core+Usecases+in+Publications"></a>
 <h2 class="underlined_10">Overriding Core Usecases in Publications</h2>
 <div class="section">
-<a name="N10100"></a><a name="Overriding+Usecase+Handler+Classes"></a>
+<a name="N1013F"></a><a name="Overriding+Usecase+Handler+Classes"></a>
 <h3 class="underlined_5">Overriding Usecase Handler Classes</h3>
 <p>
           The usecase resolver, which is responsible for obtaining the handler class for a usecase,
@@ -436,7 +471,7 @@
           Now, when the usecase is invoked from inside the publication mypub, the custom
           handler class will be used.
         </p>
-<a name="N10129"></a><a name="Overriding+JX+Templates"></a>
+<a name="N10168"></a><a name="Overriding+JX+Templates"></a>
 <h3 class="underlined_5">Overriding JX Templates</h3>
 <p>
           Overriding the JX template of a usecase follows the

Modified: lenya/site/1_4/concepts/usecase-framework/index.pdf
URL: http://svn.apache.org/viewcvs/lenya/site/1_4/concepts/usecase-framework/index.pdf?view=diff&r1=158318&r2=158319
==============================================================================
--- lenya/site/1_4/concepts/usecase-framework/index.pdf (original)
+++ lenya/site/1_4/concepts/usecase-framework/index.pdf Sun Mar 20 00:06:48 2005
@@ -5,10 +5,10 @@
 /Producer (FOP 0.20.5) >>
 endobj
 5 0 obj
-<< /Length 957 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 960 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!<O?#Q2d'Sc)P'u!?pl5>*"bHtK]<h%[>Ctc8`JqDIG&P.mqe:1isBrB)T]pX[$&St3;m"]Z="$R7/GF&G?$5!PF*icta%tT)R#KV;:d0p='6c&p:Y/.;1p`NAJ.2IKFYkV8A3%CJM9,4Sj[SVHL^`O+o)t*k'STi[3VZQ^JG:oZ&XRX-l98d7jcf65$1=tXGNWC6h\hfO+r\/n&[-i=n)"/AQoZHqYf;_BA=JnT:dS+KYO/a'u!J.%a*%^S-.)[7rerE6d3QCMd-"C5ZB7"];[5-Yi-'&:94o)FM(*9/La"n)+6p3,H.'Nu.Cra33PEs]GR6O3MHVkb#1S<&!)P+a(#;@!^*K%+fR:H6&W0F-#;r)#!*$&$kRb:Vh>("jSQrtm,(/MrUd5>71p`\2YaKj-+Db.eN'Z#E4dnrr%nP1!/Qti@i=PJsZWOGdfG2P,+[UlPgNFT?>'AIM!?9@X2b*,N!s*PX,s-m"`k@]ZkYN0MaT4<8VhILYD8oU6VgGQTH<gC6un)6(;TWCdtX(,[lNmTXHLcHF+Ib4Ke8L5IZZns48cB6%r<o6Kc-`]BF@ZYLdY4f$o1.h1/e7Y1N[WeS0qH+;t=UW^a(`>c_c3?FEn<!RWkT'1;.kN.9$JiHcC.R)1.d%G5o`I\X$qmL;1DQ2cg^[>:QCDAJ`pJ+&[kiSUW&;Bg8V'nUU#pd$f5j,&riYdX-`L(6lpuX'm.r3Y8ir3uH_95.&o2)s9FPKR4OhR_:bV*]64InXpT^3TQ?0&DFf;tS(^]u1msMbf\E<[=?2q.lTesk1c+BW,`DcDcfh9eLd!KRe<U+iC"pG+A_1<_@5Y83N^3\u8<X^%J+rF]RRBmRE#kS4LIE4HW(WGN>V=tMSDSQ+hbdT`o&3_rVAqtPQDjHk@G5Jbf8oGs9DW_^6Si$6NSY'J]m5,J)S\?YOHBJTACOZB[6bC_~>
+Gb!<Oc...@c>K`I=<gs2=jqj8!WU+bd30:O/(+bjhF6_>*g\b)k_4R1/<[h4uOi0Y'mj)=g[<GOV6S73FXnK4!.a&;ke43h'VKXWfk#;nl=bl59!2E2hk7g\5Iuhl1f3)fI8R(EX/lF`IMklq;BXSEg__^XV+f?f+TXdcsK:\QDmc*ptkI[-IR;*`rIii?T9Denb^9cF4jq<0upsV#8,0ra,h`n`e$FJNGjQ43*\=(:(RMu]Yfpj>>Kpm;gg5A!RU'=`^LY*W8Q?0&DD5dC80G6+Bn'#&ID"C$0DSDP1R&f:Bk$:fqiYfI*b]g>de8;4mo-P0+'X/&PJsZVU_:neQ?*mfj=AqXB_I5^3SJXtl*s(^q3WQdn[P&hSGa)h;jX6q>l!]87\N3PC1toWGD3NK;hc4I&98(!L;`/.;jY*ui<YVF[9q\rk]]S4AB@*aY%l_,4f`~>
 endstream
 endobj
 6 0 obj
@@ -179,10 +179,10 @@
 >>
 endobj
 36 0 obj
-<< /Length 2481 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2976 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau0E>B?Su(4P^Z5trZ51KC]=5SB0,Z=df*PKLk6C"I6;]p6I-mUcm+"10*3fC'<Ek(j5sa]?Pq]+NK=\UN_ifB^uKqnSna\B]E,Eh2TT3\L?G?W[X`-e&sX\o@Z?RZ]VTKu`l_l]5UUWUu9/R4@)Rs)loM!Zg]*YG6_aLr^qpkX_e!o!hnom.Mh>_V0L<AJ3U8\9CljKmZeK_nr77$5*M#Tr]5IHmd,#G^-$;%1cT)Hq&JJXOu^bCm_%g+Y%e^+j4J"l6WG"8lfhba)D!;BLs<X2gBOOVJ'oG(aEOlG8As1IAPq6f5&G_7HbB1BZ))YI!uh$09P0B5A2"N_R;sDaYLTV0qZ]c>!c;'CC$p:5!t4,ic9rjWm1#n;+72$;^IW6p35iQY:GqF045b6&;6b?K.<C+lV&o1oSp2OU"5D-VZ9fZJUjX+lB75iQ#uFqs'/j5(WfFBVsk(L2eO*?oO3hME7#`%[(lEq_`VB]S8KS-28M%9HH.i98`9<9re"tHf<u;:7VUeJs$nB,/.YA>3AF-:,Wo.`XVuRH?j,HEg%2W@k72]`pLgC_Vr8sbKh>/0&r[Gfni?r';?cXEH7tI5c7R'?s8QpB*f=dG6d\cQ?Op9c-c75je;Yph3p#Y+:9&-fI"`cI`'K9UhaZ72Fhk3'^Y'_f8*#J^jG;#I>-Td&V'Ig2ndqo#"2mhN<BUjcT:-*bbb:2eVLM4%#EUrnAnY'M)\L7<jF=4jPV"9?*^>(ZC<6i*&l[kI2Ubn6+UPD(?bVRt=<Xi7+IknA='p@LmY@F<IehU-l`6ME&N$t-\M#(1qV@LKk4B:3"ndP,4lrE$3^`,,d(e4D/J-[$h3PDq8.ZZe4TY+X&b"[8$SApl]eleaEKfb#/CcE))<<,mDX&.2GQ#oH2>O?,kKFsW-=U4[_nud"M:/4iNj]%Hl2+c%NPO<kVa]qBOm?2Zn#;]+p9c:Eo6%FH-m0QO#cG.nf?!,5I!`EXm+p.-g&!<4+#E^LD)i@9`&CFWM"YWLp'*$Nmklpki[*1!O`YYQ`.S@EJ=81/_>1DuTM0fU\BhK,7`F7or%QDe!**PO5:e#X)<&L2JFKd=8710-?N9TTa7%n[Kb!\U&pWE>#TX,[-kqEC9XEl6N70m>AS6MMrN#;BhX6!mR@J[#)61Eo\k4T%8+>[cG6c)r0%#YM*nMY.:EZtcH@uMd1Af/f<u%An,Ae]t0(s\oVDfK%S`D^kT?/#5QAa^3.SJ=Fa4,_i-WgQ7$'fq?o2)39T5QN183H=n]XD-6NbluJl%?0Z_<f'qGFT<UJrW:aM+?#5AAM)t=]o7qfcqW3jk,JNnSGM`[X!=2-/9BrP,%WL)7s#,;Rs3H,m=(fZ:!lqs+p#IG*s.0%*)=[gSP3)pZPHZgG)QnOt=o$#!/>26,FqJDQq!T3uUXJ=`Gk26rW4M'`3VJX'@YXDZQC%Ca/$kLN6/bk[^\\#C'P>kj18MYf>loA'JhVgRnS_N"5o!;8\Hp[Ns]s1Fl$5TLi"M+=4MQs.:PnWK/Ie-\<*`PL-0h(BX?"@>Q:$</TGV]r]r+2]!a=biLaki!VKXe(Qp($83(q]M.X9.(&6W,UFX3&3?D=LhCblm9mOK,i^=C[hMV(rH,X?(fUllf[4;P-21VL^;UD9MJLm-8Vt$@pUDP,2SnF6gTf4U0FCt,7@nD?9Kl\\?XCC'lY1E8bV:XVCVZl,EO+Zud"t*Fm+M<.j7s)RF20n!VE&968=2K(N[p2lKht[&8!Z&88;s*1b/p#AinVZq\/3,4XK7j-^Je-iNUjH?j\(^mQ%u^:;*E"ml\0l:qe5'!Fhr(M3GYmC:8#'(URPFFL]*c]=RC8<b2u+K<r#h7g8D#4oVFA/Wk,%=2h,1d0uh9.IOqfPMt?<0=iB`6HO29-i<*bb3,6WD&0A89_aIOTe.)IUSit6.f6;/!ZAo`\O'gEJosE]WLl%0$i0ah4aQKnS[+D9tP?!;kM5apHao\PgV[b^>I1RY#9%EtCk<f0k[LbV/3@_sSY_?K'1Wfj9802Xu#uX'qU@Zl-"qc5V@l.!,2*N[?f<jHf0@Tc)[VQO?:M[P&jComE1$KNR0+F^*oU3S`LIW?1\IGuO'b$ZUNTP+g=J"rd.:B0rKXhU(X2&W?S52p`l5,s9N!L*p"KWpY*-Ss3Yi#D&V\I]?P,O?0f[<B6WE-rLXqBtoLgj/C/X"?CS<8\+hSdFgX1HUEo,1lCPre8u\s?4@q22gOdc(I*k#h_rXq9JrX+#/o]'7B9fl")qD]jiilA_hk96*V.aG\qV0dttJ7:IsKGI!hAF@Hh@!HdWaA6*j%eSlmYhYY]eB&0\g*Rd9ebt5_Jd>ZA#f!P>(of2R_qKcFTRYg?)]LB;TR!H/&m?4]E[r5,p!o3*EHN/-;>IAs`bfIC@FQ[Y$aL\Nu!IsmKA4_4"(/)R:-adZ[qC8:BK0#6rJV<'gY5%H,=pAa6%(KV,aqT8roKVQRo9K~>
+Gatm>D3*G]&cTMZ_H=13%1mSL]dpU0OlV\`K"JoYEKCslU6&s?<_a...@s5Nh>S1Dk.0A6hAk72O"<ro]p-r0<k"XXk;:j56!rU\E]9VaXHB]'p.D[FinY[WU>gT`Ko[ZEl5^[='(d>58/'P'P3tB<Z.k0R)4)`^8%.6fZ_rRH!OPIM]a-sGT$UKO<s/s82kPk#XLn"?e;8;ceE0L^#*Qccq-jrj;^dlFB?b%8$DXICGJB2_BK$k\067T&E_GCR4M]FM+_Z-Nre;4:dIV$!keZs@&o1YD&q5)C/]I!Vm8Q5RJ)]5J.*omZ%(skE_uIi@bIZ*!]4_p-d5>^SH>ZQCnm?[20n0~>
 endstream
 endobj
 37 0 obj
@@ -194,10 +194,10 @@
 >>
 endobj
 38 0 obj
-<< /Length 2661 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2901 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gat=-D/\Gm')nJ0@2K/+!B-/jM0]Jki-*RDGDkcE]k.cYRc5I5[&mV:F=#Y$EOc&*TjEM[A9j*P3[-F$%\J%*6gFXAL%4A$W(kLXoA[WW/2-5*KR`J!>omQ&T[r1L4o,&>&W9mgXt?O->eZ]RgIBgZrl!9&g\N2kqJ,TAjS?iS&'l&A?C8[=4GSK.chB"1VO:u<8RM5,J!aJ;+*>#D9*3/'0[GI(2)U4d-Q/Q#/q1?Us*R^]cZffs@IW98_4DS3]7emE0oXOqjtd4J^_n"q^i#IB;ZqG]ZQBbDHR8+[&sD/9+9i=PhPC/*J9]T"Jll/RKBNmH>RUuW4HnFj6<H8AHkcS:i6q%.CnL<X7lKmuj49sD31'E3>lsf6MXr_OF3-@X$bo8Y`:H+8%d<S[I6IoNf_[@fD+fc[3=:rQ]ijm6Z-@P.k,;dPM=lDc5C%Q?Bsi]&RY;WYikTel8?qIDBbT&$BkGb5h6`GZ8(&]rX9b+i>g$g*Q:PO(cSm&=a6?L2#se`ohA`?8k37ZDWK($a@hBd6!V'G0N5f@X&d'(gK;;El`GJjZQ>>)'Oc=6.E:9Z4-K?N5K[40(Ob`NR:AOP]"128-])U>XHL;`Bg/=lC$=QU+TItjT.YFAERtLkTEWE\s?'g$Lds8g:[c8M;o6eKY/F\I*qWGFiM>L="rid":)h<Mi%G*QV7A^5MC<a1IJ<cm78]3BE:kYc9]PZDn/6aWW,:bA.'%aR66UeF/lbb%_?[*hfU>heE:<glcjNJ:\B+2q!=7KD@0]+$SNNP.!/r7-ImUn+I8lmqHZ-?-J`$:BWVik\N0]K!L1BV*UNc'Hc/_l$,MH?H>lb!F^2"<N7-HGcclfoIDb_%BL6Y;BH#3&A[)(Lr_67#s2MEBu_Sqr@-lE(h^\AG*kdU"4q;;i-:_Gi&j^g;gB&UUXK(!bib?,C^\R89p<rYNae-[]I:h#SlDoPTu</<&Z"UIn0!7a,eV":mJ+anI"5.bMcnZ'j=cF]/;8j=jD(l7Brk^(Xkaju*nTPp("j-=$->jf6oi2Jk8K/3r]TPCWQ<Hc*C3JR;Xq&/)$_a)NDb'6tUne`PW27V$N>3h8L2Z+Lj1lb1BR@W3Sl%]&XVEkdL,'d>._VBgO:P+>p(:e'I"HM?pnHXo_aVE%%ZN.$tL24oX/jdS^Ao(/I5RDZ\hK-kAl_d])N1PA=N&W$7;8+?ZL37qgPUbLi&p?J<alN!R;+N-<R3cCKt2!+"9X6VVhLB,a3)lp#7!5Vgi<G/\A3e>hIR:6)<`&h%+'%5IDjr?Ff:j;S/Pl14h8fV]+38s%!!Sd09?oe']^3f_SrkBP)roo%IM0'=_NJ7\NWf@Ym5eH=,USX">6QA-E/S/l(4,]Fd5"oZP'ecZtXGQ'iAEW5q$L<M$8=O`q&Tpe]?rk;lcs?h9L,oV%,*u^Vn_a@D0t(i\?!fWQYh-a;W\im5*uTP!a7R)%dSV\Z0'q#n?HD[/mDR/+!M\C-aXo?%<u@tp"*Il>lu(NcG\:]0-ujl39+eFQe$DX+eEF'g/eUqH#*&55_L#e5!QTlbMs&[3!TtD^"945RI\[,!E;$aCFtVBJi]^p:Ciib&e[ql8-Y``I&N?3pf0=Bn=SD%VnMdgk%V%lJa"!Yi-ZrTGGFX%2EOU/&@OjBAK_lnddrAOLm:p;:5\o_Vb7ufnYIrMZ"cf="H*JKJbd%"BKW+:Dp.Ts?9W3F:10>,Ef<%GJf1DFgI!NDpY,'k.(e-r9+D'hA;`cEe^:YB"kdu+A.KuF,S!m54rs?)%)B(l;Y*IqL@[jd7%u'"4kC1/nHb7WrK-2jS=)sl(/$XWSq3lF\p!XT*WRlknBYQUn_S/mHl`H=Ni50b2F,,]c_XDE.iYr1/P2XT=7cMua,C??Y+j_6HR[KNb]!>!5PNBB[LXrbml0GL>X-g*0<63U!EE]54AY_G)PY:'4S>XhRV6@D687e</$X/'KG%%Z[RIC-1hii<as5T8HRc/L1h#@1_<#+_4O&/D[fcID6e/H4[ro]U1Ot=.k!a;qm^mAC\he;<3]Nbma9KaNmPu9q>T*o<41o=E?dH?/!XjlqKoc(G-^D<55iFm+5]!2%A+/u4Rb!9@@F&1t`\HFBP<E$f=pdRV\bdaI'F8[jj/$YrNRX*`LH/3uRbgiWBr,KSeb79?iqYK,H>lkG[B*"K36191\C/:FHJP^M(/7P3pdIr.#P'eSLLa7a3YoDL,.>3LYqe_l%;o^5Lp$IHU?2qo]/eLsZD=sSb_;&$=#KdM.N0_#@Rm=l'Dl]d_o&]PoD3P,Ghc9MnR;l>)KM4h)9:a,WQLT!L%NcVTBmFMfn!kFP^_YkX+(&80dEanGA[*<M%g"-"kFRTlpA&Da9B)lU[![O9Wm<P':n'^?N&^ElRHGrJ=(8="4Lacgo8"Z(4BIjT)1oG@kC@8Wq=,SgB?AMCZ^Aig:/;RgOTXnT]7#TI>^XKmj%R(\*?pKj2Tt_CWRdIHW`CdQSe#ALG;NDb^Z2f/j&'Ygjm<OePQdCQjGnJ$iYGI[`+%GuY^qB-<OP*H4;FBkT#nuA=00jrIdnSarKbGG$%;K/XicA'YrQ@bE[=pY0,C="b;)d"W3+1q/oASr$9$JDIh`@%YP+=j!jPJ_-&"V%b$1[I;&GCi2U?ZWj)`Y#p(rDVDS#~>
+Gatm>D/\Gm')nJ0@0?b&"kJW#M0dk0/M>^g]3DYU>W9L,BSqD(BNlEIF<rq...@5>!kHE_4lk?<CLUT@:btqBB2OQG;8f74mD#XfAY]~>
 endstream
 endobj
 39 0 obj
@@ -209,10 +209,10 @@
 >>
 endobj
 40 0 obj
-<< /Length 1513 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2535 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GatU3Boh",&H2$(+W(Bg!Ff6.6r>G>Me:_65a/SF!\MinTI&=C7ODD4?EaBW7[H[eQ5:qX#UV,ecC<k=pi\B[^S)DiaL2kbM/B@BfWsH<:Y9-p7@rmMMll[F8j.teN?aQK[q::/5@<LkTbjCpNR^3++jZ+,%@9p9;P\LPS(PL`\^ZP6EA1;===oTR0-X)7)U#PFiZf4l4@qs5h"kV74ok!.7(]/Z":S/JCX[aCgFm2ZF>JDL"3r1LMOP7fmD2WF6+@<o6JJbCBmmSSCQ+D1]H,0Hk;!_r`ju:5`,-UN*l6JhO1);]4GrP^OcJ(N=b(H-_MjQ(hrF)V&R-FM6!%D!rB<:ZUMujeC>2Aoj+W/!RGkcQg?XG,76")bW(pT;O)+9?(H@6H2,B1N4QDd3]8/:]H/IfB9)`8:%F3D+FLO2:@e72O#roaBnm&qHf2&%-DZ>.Zl1`g$HiChD=W3=IEa0-;/qO])pI5=(<L0,NPDQVS35eC_=5kqN-J>;17&q.SkPH+LNJX!lS"#6a2^47-Kk\Z83&E+)0>fnQOsb6u7$l?BA&rB4LKmRrGhm9Tr)P;43$3:6-RW0&LC7P^>do^j\DqkE))I!Ma9+;7SQa!hkUM`RkG%Y]CnmXo,SO+S@]8?;?I.s,B'?MP(bsE\>_K_.5M$-H0.-]nMX)s.d%6\ED^VrZ?$OejGg7`$R:iA5>#,'agb()*m@i0/%l%>THYqT_ZV1.K6T<Uq+;$(L:F)h6NP/"RQM"U9ol^Sb9'3J"LL5N[RY<qO4dbP3Q9MFPGr?f(cb<+l3p3"g+WV's6-Z-R\%]8SiHdP84RJS9Aq3AgoWJT\;<tV\YG[5=7ug=V'iCL9'0Jlr.F*HOL'XhFb&Y1eWcX69LfE2g0Lm/%=1(Kg0%J*52FD?qY^%+kYmtT:3<<F1Xcr"E3Z.+1fEcal+F:`E*)U2@TY?mIB9eq1$QK];d2??]I1h=J:`Dc4MibS2Vj1'CNTXhsfd7GJ]j_b##2J<K6n,+j"`;+i$_OH8YLUNTr+4(Y!h(@[Mns?p,-HoE:e,L2Zpilb+g5h24)4GqR;\pb6lii`X!'$jFk31'XU1[<H(Z8/nY*%g[=p**XdoT.plnndlUrNXp$$R8Bk_B[9X:eY%pn,+Wjph+^Ut*9G9K3_",Q2E#V@EQhrreYAV<[Fc$otY7k3^<9pio;(^;92H2]]LL&8PD<,D>^=Y7cIQJjiF4=:VY^)7ch.Ig%('e(rXZ:^UUBsP,b*Q<Dn`!Z&^Z>P/gZCSSD85TqSO5%YL+)SQ!$cU@Cfi3*FH//YNrSs9-!C`dnX0mWQHT>Ra@)QM<6+E>K(7!KS+ludL\ji`[2^s"NT[N;rg*h9\%69@aKl0dn@j=<up:b:qH[ekebUKa9OSMY"qe*W$DKAP4leqidJhWN0q+]g$S8Z5p\qU*_G/lFGDfQ<Z&!XY3&_eWgGYl*(@f:&^6Z`2pXn"hB'%UqsHPr(eJW+*(VH8](JBV+'Lu*d8G&Z4IOgN-9~>
+GatU5H#M_$(B<9a...@TK>2PgUF6Ht+]][?1ji_ff_(Fl#EM;=0jkOF)H&3#Y"^"fB#)D%'uJDl>),p0i-2H'ae,mS>Y-POQ10W8(5-E>!+KnbYZ)7P?o(b,kP/"Y+1Sg/VcjKM4hdgQmN7e!Q\fgiYg;-s6T?4lV!o\dPJm?3k8ss1bLoj6<52PAU)rAt;b^DA]TQa-JoJCI+@ie[tpUg=nH1o)Wo8^95r;U1('';RkV\o+tSUBkKM@s6hYQr$WM>=Z;B*"UGTGo%2!ljTkO&niZ,cf^O9ICgWgi4^%a6h*CYP#IsjuMX67m:(eWKEi7!RL0LsgA1%IIY\k"<+5B^"4+P!YQdjeTQ2cPO\2gSY24f=l_Oa,[P`VL,%Cf6DnonRCP4?f*BF-ggF_K[:A`6kgT^>gLemFd@rV$1[YqD%oN3(8H%V]0"V3Pgr)lR(8!HR:mJbPbjFo[9o+1NOC1B~>
 endstream
 endobj
 41 0 obj
@@ -232,7 +232,7 @@
 43 0 obj
 << /Type /Annot
 /Subtype /Link
-/Rect [ 251.616 548.387 359.952 536.387 ]
+/Rect [ 251.616 154.507 359.952 142.507 ]
 /C [ 0 0 0 ]
 /Border [ 0 0 0 ]
 /A << /URI (../publication-templating/index.html)
@@ -428,79 +428,79 @@
 11 0 obj
 <<
 /S /GoTo
-/D [37 0 R /XYZ -5.0 617.856 null]
+/D [37 0 R /XYZ -5.0 212.296 null]
 >>
 endobj
 13 0 obj
 <<
 /S /GoTo
-/D [37 0 R /XYZ -5.0 586.722 null]
+/D [37 0 R /XYZ -5.0 181.162 null]
 >>
 endobj
 15 0 obj
 <<
 /S /GoTo
-/D [37 0 R /XYZ -5.0 477.789 null]
+/D [39 0 R /XYZ -5.0 731.0 null]
 >>
 endobj
 17 0 obj
 <<
 /S /GoTo
-/D [37 0 R /XYZ -5.0 398.436 null]
+/D [39 0 R /XYZ -5.0 651.647 null]
 >>
 endobj
 19 0 obj
 <<
 /S /GoTo
-/D [37 0 R /XYZ -5.0 258.602 null]
+/D [39 0 R /XYZ -5.0 511.813 null]
 >>
 endobj
 21 0 obj
 <<
 /S /GoTo
-/D [37 0 R /XYZ -5.0 153.468 null]
+/D [39 0 R /XYZ -5.0 406.679 null]
 >>
 endobj
 23 0 obj
 <<
 /S /GoTo
-/D [37 0 R /XYZ -5.0 122.334 null]
+/D [39 0 R /XYZ -5.0 375.545 null]
 >>
 endobj
 25 0 obj
 <<
 /S /GoTo
-/D [39 0 R /XYZ -5.0 731.0 null]
+/D [39 0 R /XYZ -5.0 319.092 null]
 >>
 endobj
 27 0 obj
 <<
 /S /GoTo
-/D [39 0 R /XYZ -5.0 630.277 null]
+/D [39 0 R /XYZ -5.0 218.369 null]
 >>
 endobj
 29 0 obj
 <<
 /S /GoTo
-/D [39 0 R /XYZ -5.0 422.264 null]
+/D [41 0 R /XYZ -5.0 691.56 null]
 >>
 endobj
 31 0 obj
 <<
 /S /GoTo
-/D [39 0 R /XYZ -5.0 132.351 null]
+/D [41 0 R /XYZ -5.0 411.507 null]
 >>
 endobj
 33 0 obj
 <<
 /S /GoTo
-/D [39 0 R /XYZ -5.0 101.217 null]
+/D [41 0 R /XYZ -5.0 380.373 null]
 >>
 endobj
 35 0 obj
 <<
 /S /GoTo
-/D [41 0 R /XYZ -5.0 576.64 null]
+/D [41 0 R /XYZ -5.0 182.76 null]
 >>
 endobj
 44 0 obj
@@ -511,71 +511,71 @@
 xref
 0 66
 0000000000 65535 f 
-0000015039 00000 n 
-0000015118 00000 n 
-0000015210 00000 n 
+0000016799 00000 n 
+0000016878 00000 n 
+0000016970 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
-0000001119 00000 n 
-0000001239 00000 n 
-0000001355 00000 n 
-0000015355 00000 n 
-0000001488 00000 n 
-0000015418 00000 n 
-0000001624 00000 n 
-0000015484 00000 n 
-0000001760 00000 n 
-0000015550 00000 n 
-0000001896 00000 n 
-0000015616 00000 n 
-0000002031 00000 n 
-0000015682 00000 n 
-0000002166 00000 n 
-0000015748 00000 n 
-0000002302 00000 n 
-0000015814 00000 n 
-0000002437 00000 n 
-0000015880 00000 n 
-0000002573 00000 n 
-0000015944 00000 n 
-0000002709 00000 n 
-0000016010 00000 n 
-0000002845 00000 n 
-0000016076 00000 n 
-0000002980 00000 n 
-0000016142 00000 n 
-0000003115 00000 n 
-0000016208 00000 n 
-0000003250 00000 n 
-0000005824 00000 n 
-0000005932 00000 n 
-0000008686 00000 n 
-0000008794 00000 n 
-0000010400 00000 n 
-0000010523 00000 n 
-0000010550 00000 n 
-0000016273 00000 n 
-0000010740 00000 n 
-0000010903 00000 n 
-0000011162 00000 n 
-0000011346 00000 n 
-0000011543 00000 n 
-0000011721 00000 n 
-0000012127 00000 n 
-0000012444 00000 n 
-0000012624 00000 n 
-0000012827 00000 n 
-0000013149 00000 n 
-0000013357 00000 n 
-0000013725 00000 n 
-0000014028 00000 n 
-0000014266 00000 n 
-0000014379 00000 n 
-0000014489 00000 n 
-0000014600 00000 n 
-0000014708 00000 n 
-0000014814 00000 n 
-0000014930 00000 n 
+0000001122 00000 n 
+0000001242 00000 n 
+0000001358 00000 n 
+0000017115 00000 n 
+0000001491 00000 n 
+0000017178 00000 n 
+0000001627 00000 n 
+0000017244 00000 n 
+0000001763 00000 n 
+0000017310 00000 n 
+0000001899 00000 n 
+0000017374 00000 n 
+0000002034 00000 n 
+0000017440 00000 n 
+0000002169 00000 n 
+0000017506 00000 n 
+0000002305 00000 n 
+0000017572 00000 n 
+0000002440 00000 n 
+0000017638 00000 n 
+0000002576 00000 n 
+0000017704 00000 n 
+0000002712 00000 n 
+0000017770 00000 n 
+0000002848 00000 n 
+0000017835 00000 n 
+0000002983 00000 n 
+0000017901 00000 n 
+0000003118 00000 n 
+0000017967 00000 n 
+0000003253 00000 n 
+0000006322 00000 n 
+0000006430 00000 n 
+0000009424 00000 n 
+0000009532 00000 n 
+0000012160 00000 n 
+0000012283 00000 n 
+0000012310 00000 n 
+0000018032 00000 n 
+0000012500 00000 n 
+0000012663 00000 n 
+0000012922 00000 n 
+0000013106 00000 n 
+0000013303 00000 n 
+0000013481 00000 n 
+0000013887 00000 n 
+0000014204 00000 n 
+0000014384 00000 n 
+0000014587 00000 n 
+0000014909 00000 n 
+0000015117 00000 n 
+0000015485 00000 n 
+0000015788 00000 n 
+0000016026 00000 n 
+0000016139 00000 n 
+0000016249 00000 n 
+0000016360 00000 n 
+0000016468 00000 n 
+0000016574 00000 n 
+0000016690 00000 n 
 trailer
 <<
 /Size 66
@@ -583,5 +583,5 @@
 /Info 4 0 R
 >>
 startxref
-16324
+18083
 %%EOF



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org