You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2019/01/06 17:52:21 UTC

[1/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Repository: isis-site
Updated Branches:
  refs/heads/asf-site 1685fcc52 -> 3ebae1552


http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/current/guides/cgcom/cgcom.html
----------------------------------------------------------------------
diff --git a/content/versions/current/guides/cgcom/cgcom.html b/content/versions/current/guides/cgcom/cgcom.html
index 5860091..ecb1f55 100644
--- a/content/versions/current/guides/cgcom/cgcom.html
+++ b/content/versions/current/guides/cgcom/cgcom.html
@@ -2384,7 +2384,7 @@ mv content/versions/SNAPSHOT content/versions/current</code></pre>
              </div> 
             </div> </li> 
            <li> <p>publish the website once more (from the <code>isis</code> main repo).</p> </li> 
-           <li> <p>Finally, preview the changes (using <code>sh preview-html.sh</code> in the <code>isis-site</code>).</p> </li> 
+           <li> <p>Finally, preview the changes (using <code>sh preview.sh</code> in the <code>isis-site</code>).</p> </li> 
           </ul> 
          </div> 
          <div class="paragraph"> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/current/guides/cgcom/cgcom.pdf
----------------------------------------------------------------------
diff --git a/content/versions/current/guides/cgcom/cgcom.pdf b/content/versions/current/guides/cgcom/cgcom.pdf
index 13b4ec1..fac0b4c 100644
--- a/content/versions/current/guides/cgcom/cgcom.pdf
+++ b/content/versions/current/guides/cgcom/cgcom.pdf
@@ -4,8 +4,8 @@
 << /Title (Committers' Guide)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106163330+00'00')
-/CreationDate (D:20190106163330+00'00')
+/ModDate (D:20190106173125+00'00')
+/CreationDate (D:20190106173125+00'00')
 >>
 endobj
 2 0 obj
@@ -30216,7 +30216,7 @@ endobj
 >>
 endobj
 267 0 obj
-<< /Length 18236
+<< /Length 18226
 >>
 stream
 q
@@ -31461,7 +31461,7 @@ ET
 BT
 244.5106 312.206 Td
 /F4.0 10.5 Tf
-<736820707265766965772d68746d6c2e7368> Tj
+<736820707265766965772e7368> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -31470,7 +31470,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-339.0106 312.206 Td
+312.7606 312.206 Td
 /F1.0 10.5 Tf
 <20696e2074686520> Tj
 ET
@@ -31481,7 +31481,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-373.2616 312.206 Td
+347.0116 312.206 Td
 /F4.0 10.5 Tf
 <697369732d73697465> Tj
 ET
@@ -31492,7 +31492,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-420.5116 312.206 Td
+394.2616 312.206 Td
 /F1.0 10.5 Tf
 <292e> Tj
 ET
@@ -58462,520 +58462,520 @@ xref
 0001155587 00000 n 
 0001155768 00000 n 
 0001156003 00000 n 
-0001174294 00000 n 
-0001174683 00000 n 
-0001174729 00000 n 
-0001174901 00000 n 
-0001184440 00000 n 
-0001184823 00000 n 
-0001184869 00000 n 
-0001185054 00000 n 
-0001185229 00000 n 
-0001185275 00000 n 
-0001185321 00000 n 
-0001197194 00000 n 
-0001197569 00000 n 
-0001197615 00000 n 
-0001197843 00000 n 
-0001197889 00000 n 
-0001197935 00000 n 
-0001205719 00000 n 
-0001206126 00000 n 
-0001206295 00000 n 
-0001206341 00000 n 
-0001206543 00000 n 
-0001206729 00000 n 
-0001206775 00000 n 
-0001206821 00000 n 
-0001206992 00000 n 
-0001207234 00000 n 
-0001216198 00000 n 
-0001216589 00000 n 
-0001216635 00000 n 
-0001216822 00000 n 
-0001217011 00000 n 
-0001217203 00000 n 
-0001217249 00000 n 
-0001217665 00000 n 
-0001217711 00000 n 
-0001222029 00000 n 
-0001222404 00000 n 
-0001222450 00000 n 
-0001222623 00000 n 
-0001222669 00000 n 
-0001235321 00000 n 
-0001235717 00000 n 
-0001235763 00000 n 
-0001235809 00000 n 
-0001236017 00000 n 
-0001236203 00000 n 
-0001236249 00000 n 
-0001239773 00000 n 
-0001240161 00000 n 
-0001240207 00000 n 
-0001240382 00000 n 
-0001253051 00000 n 
-0001253517 00000 n 
-0001253563 00000 n 
-0001253757 00000 n 
-0001253964 00000 n 
-0001254153 00000 n 
-0001254341 00000 n 
-0001254541 00000 n 
-0001254718 00000 n 
-0001254889 00000 n 
-0001254935 00000 n 
-0001255098 00000 n 
-0001255264 00000 n 
-0001255310 00000 n 
-0001255356 00000 n 
-0001261907 00000 n 
-0001262278 00000 n 
-0001262324 00000 n 
-0001274455 00000 n 
-0001274899 00000 n 
-0001274945 00000 n 
-0001275123 00000 n 
-0001275290 00000 n 
-0001275459 00000 n 
-0001275639 00000 n 
-0001275840 00000 n 
-0001276007 00000 n 
-0001276053 00000 n 
-0001276251 00000 n 
-0001276426 00000 n 
-0001287717 00000 n 
-0001288087 00000 n 
-0001288133 00000 n 
-0001288179 00000 n 
-0001302086 00000 n 
-0001302456 00000 n 
-0001302502 00000 n 
-0001311872 00000 n 
-0001312263 00000 n 
-0001312309 00000 n 
-0001312501 00000 n 
-0001312695 00000 n 
-0001312886 00000 n 
-0001312932 00000 n 
-0001312978 00000 n 
-0001321890 00000 n 
-0001322234 00000 n 
-0001333056 00000 n 
-0001333400 00000 n 
-0001341350 00000 n 
-0001341720 00000 n 
-0001341766 00000 n 
-0001348520 00000 n 
-0001348877 00000 n 
-0001357089 00000 n 
-0001357464 00000 n 
-0001357510 00000 n 
-0001357710 00000 n 
-0001366073 00000 n 
-0001366417 00000 n 
-0001378547 00000 n 
-0001379018 00000 n 
-0001379064 00000 n 
-0001379110 00000 n 
-0001379634 00000 n 
-0001379796 00000 n 
-0001380003 00000 n 
-0001380208 00000 n 
-0001380373 00000 n 
-0001380578 00000 n 
-0001380784 00000 n 
-0001380990 00000 n 
-0001381196 00000 n 
-0001381402 00000 n 
-0001381608 00000 n 
-0001381814 00000 n 
-0001382020 00000 n 
-0001382226 00000 n 
-0001390318 00000 n 
-0001390733 00000 n 
-0001390779 00000 n 
-0001390825 00000 n 
-0001391013 00000 n 
-0001391202 00000 n 
-0001391391 00000 n 
-0001391580 00000 n 
-0001391769 00000 n 
-0001391815 00000 n 
-0001392360 00000 n 
-0001392550 00000 n 
-0001411587 00000 n 
-0001411931 00000 n 
-0001422847 00000 n 
-0001423238 00000 n 
-0001423284 00000 n 
-0001423463 00000 n 
-0001423509 00000 n 
-0001423555 00000 n 
-0001423764 00000 n 
-0001423955 00000 n 
-0001434853 00000 n 
-0001435210 00000 n 
-0001435256 00000 n 
-0001450650 00000 n 
-0001451078 00000 n 
-0001451124 00000 n 
-0001451311 00000 n 
-0001451357 00000 n 
-0001451567 00000 n 
-0001451613 00000 n 
-0001451798 00000 n 
-0001451961 00000 n 
-0001452128 00000 n 
-0001452174 00000 n 
-0001452347 00000 n 
-0001461102 00000 n 
-0001461485 00000 n 
-0001461694 00000 n 
-0001461880 00000 n 
-0001472338 00000 n 
-0001472745 00000 n 
-0001472791 00000 n 
-0001472837 00000 n 
-0001472883 00000 n 
-0001473045 00000 n 
-0001473091 00000 n 
-0001473685 00000 n 
-0001473903 00000 n 
-0001473949 00000 n 
-0001474115 00000 n 
-0001474301 00000 n 
-0001474481 00000 n 
-0001484536 00000 n 
-0001484911 00000 n 
-0001485101 00000 n 
-0001485147 00000 n 
-0001488544 00000 n 
-0001488927 00000 n 
-0001488973 00000 n 
-0001489160 00000 n 
-0001489334 00000 n 
-0001497929 00000 n 
-0001498354 00000 n 
-0001498400 00000 n 
-0001498578 00000 n 
-0001498624 00000 n 
-0001498829 00000 n 
-0001499034 00000 n 
-0001499080 00000 n 
-0001499266 00000 n 
-0001499312 00000 n 
-0001505837 00000 n 
-0001506207 00000 n 
-0001506253 00000 n 
-0001515528 00000 n 
-0001515916 00000 n 
-0001515962 00000 n 
-0001516196 00000 n 
-0001516242 00000 n 
-0001516288 00000 n 
-0001526480 00000 n 
-0001526881 00000 n 
-0001527062 00000 n 
-0001527109 00000 n 
-0001536803 00000 n 
-0001537204 00000 n 
-0001537250 00000 n 
-0001537296 00000 n 
-0001537470 00000 n 
-0001537516 00000 n 
-0001539539 00000 n 
-0001539883 00000 n 
-0001540003 00000 n 
-0001540124 00000 n 
-0001540249 00000 n 
-0001540375 00000 n 
-0001540510 00000 n 
-0001540647 00000 n 
-0001540769 00000 n 
-0001540893 00000 n 
-0001541016 00000 n 
-0001541141 00000 n 
-0001541283 00000 n 
-0001541426 00000 n 
-0001541555 00000 n 
-0001541686 00000 n 
-0001541812 00000 n 
-0001541939 00000 n 
-0001542058 00000 n 
-0001542178 00000 n 
-0001542309 00000 n 
-0001542441 00000 n 
-0001542577 00000 n 
-0001542715 00000 n 
-0001542870 00000 n 
-0001543026 00000 n 
-0001543189 00000 n 
-0001543354 00000 n 
-0001543517 00000 n 
-0001543682 00000 n 
-0001543843 00000 n 
-0001544007 00000 n 
-0001544170 00000 n 
-0001544336 00000 n 
-0001544500 00000 n 
-0001544652 00000 n 
-0001544806 00000 n 
-0001544977 00000 n 
-0001545152 00000 n 
-0001545326 00000 n 
-0001545498 00000 n 
-0001545670 00000 n 
-0001545846 00000 n 
-0001546021 00000 n 
-0001546194 00000 n 
-0001546356 00000 n 
-0001546519 00000 n 
-0001546671 00000 n 
-0001546827 00000 n 
-0001546982 00000 n 
-0001547135 00000 n 
-0001547287 00000 n 
-0001547439 00000 n 
-0001547584 00000 n 
-0001547729 00000 n 
-0001547867 00000 n 
-0001548005 00000 n 
-0001548155 00000 n 
-0001548305 00000 n 
-0001548458 00000 n 
-0001548611 00000 n 
-0001548777 00000 n 
-0001548943 00000 n 
-0001549099 00000 n 
-0001549255 00000 n 
-0001549402 00000 n 
-0001549549 00000 n 
-0001549703 00000 n 
-0001549857 00000 n 
-0001549999 00000 n 
-0001550142 00000 n 
-0001550268 00000 n 
-0001550394 00000 n 
-0001550517 00000 n 
-0001550641 00000 n 
-0001550778 00000 n 
-0001550915 00000 n 
-0001551046 00000 n 
-0001551177 00000 n 
-0001551300 00000 n 
-0001551424 00000 n 
-0001551564 00000 n 
-0001551704 00000 n 
-0001551829 00000 n 
-0001551954 00000 n 
-0001552085 00000 n 
-0001552216 00000 n 
-0001552338 00000 n 
-0001552460 00000 n 
-0001552596 00000 n 
-0001552732 00000 n 
-0001552864 00000 n 
-0001552996 00000 n 
-0001553123 00000 n 
-0001553251 00000 n 
-0001553376 00000 n 
-0001553501 00000 n 
-0001553667 00000 n 
-0001553835 00000 n 
-0001553980 00000 n 
-0001554125 00000 n 
-0001554253 00000 n 
-0001554381 00000 n 
-0001554510 00000 n 
-0001554639 00000 n 
-0001554773 00000 n 
-0001554908 00000 n 
-0001555026 00000 n 
-0001555144 00000 n 
-0001555292 00000 n 
-0001555441 00000 n 
-0001555569 00000 n 
-0001555697 00000 n 
-0001555822 00000 n 
-0001555947 00000 n 
-0001556066 00000 n 
-0001556185 00000 n 
-0001556340 00000 n 
-0001556496 00000 n 
-0001556624 00000 n 
-0001556752 00000 n 
-0001556879 00000 n 
-0001557006 00000 n 
-0001557124 00000 n 
-0001557244 00000 n 
-0001557388 00000 n 
-0001557534 00000 n 
-0001557660 00000 n 
-0001557787 00000 n 
-0001557905 00000 n 
-0001558025 00000 n 
-0001558159 00000 n 
-0001558293 00000 n 
-0001558427 00000 n 
-0001558561 00000 n 
-0001558697 00000 n 
-0001558835 00000 n 
-0001558962 00000 n 
-0001559089 00000 n 
-0001559219 00000 n 
-0001559349 00000 n 
-0001559495 00000 n 
-0001559641 00000 n 
-0001559765 00000 n 
-0001559889 00000 n 
-0001560046 00000 n 
-0001560203 00000 n 
-0001560368 00000 n 
-0001560538 00000 n 
-0001560706 00000 n 
-0001560871 00000 n 
-0001561014 00000 n 
-0001561157 00000 n 
-0001561297 00000 n 
-0001561437 00000 n 
-0001561568 00000 n 
-0001561699 00000 n 
-0001561840 00000 n 
-0001561986 00000 n 
-0001562127 00000 n 
-0001562254 00000 n 
-0001562382 00000 n 
-0001562528 00000 n 
-0001562674 00000 n 
-0001562813 00000 n 
-0001562952 00000 n 
-0001563080 00000 n 
-0001563208 00000 n 
-0001563325 00000 n 
-0001563443 00000 n 
-0001563577 00000 n 
-0001563712 00000 n 
-0001563844 00000 n 
-0001563977 00000 n 
-0001564248 00000 n 
-0001564519 00000 n 
-0001564597 00000 n 
-0001564774 00000 n 
-0001564966 00000 n 
-0001565231 00000 n 
-0001565395 00000 n 
-0001565656 00000 n 
-0001565826 00000 n 
-0001566000 00000 n 
-0001566285 00000 n 
-0001566483 00000 n 
-0001566679 00000 n 
-0001566847 00000 n 
-0001567049 00000 n 
-0001567315 00000 n 
-0001567509 00000 n 
-0001567753 00000 n 
-0001567997 00000 n 
-0001568277 00000 n 
-0001568477 00000 n 
-0001568738 00000 n 
-0001569003 00000 n 
-0001569244 00000 n 
-0001569483 00000 n 
-0001569686 00000 n 
-0001569845 00000 n 
-0001570119 00000 n 
-0001570290 00000 n 
-0001570487 00000 n 
-0001570736 00000 n 
-0001571029 00000 n 
-0001571270 00000 n 
-0001571457 00000 n 
-0001571756 00000 n 
-0001571939 00000 n 
-0001572128 00000 n 
-0001572369 00000 n 
-0001572588 00000 n 
-0001572777 00000 n 
-0001573030 00000 n 
-0001573232 00000 n 
-0001573457 00000 n 
-0001573638 00000 n 
-0001573879 00000 n 
-0001574104 00000 n 
-0001574313 00000 n 
-0001574510 00000 n 
-0001574745 00000 n 
-0001575051 00000 n 
-0001575234 00000 n 
-0001575443 00000 n 
-0001575676 00000 n 
-0001575827 00000 n 
-0001576093 00000 n 
-0001576276 00000 n 
-0001576469 00000 n 
-0001576624 00000 n 
-0001576886 00000 n 
-0001577069 00000 n 
-0001577262 00000 n 
-0001577421 00000 n 
-0001577699 00000 n 
-0001577890 00000 n 
-0001578067 00000 n 
-0001578294 00000 n 
-0001578552 00000 n 
-0001578787 00000 n 
-0001578992 00000 n 
-0001579209 00000 n 
-0001579490 00000 n 
-0001579683 00000 n 
-0001580016 00000 n 
-0001580339 00000 n 
-0001580641 00000 n 
-0001580884 00000 n 
-0001581105 00000 n 
-0001581312 00000 n 
-0001581546 00000 n 
-0001581749 00000 n 
-0001581924 00000 n 
-0001582164 00000 n 
-0001582327 00000 n 
-0001582572 00000 n 
-0001582787 00000 n 
-0001584142 00000 n 
-0001594204 00000 n 
-0001594420 00000 n 
-0001595783 00000 n 
-0001596829 00000 n 
-0001605153 00000 n 
-0001605374 00000 n 
-0001606737 00000 n 
-0001607809 00000 n 
-0001609262 00000 n 
-0001609471 00000 n 
-0001609791 00000 n 
-0001610707 00000 n 
-0001616803 00000 n 
-0001617017 00000 n 
-0001618380 00000 n 
-0001619425 00000 n 
-0001621407 00000 n 
-0001621621 00000 n 
-0001621952 00000 n 
-0001623090 00000 n 
-0001624352 00000 n 
-0001624568 00000 n 
-0001624872 00000 n 
-0001626009 00000 n 
-0001628798 00000 n 
-0001629024 00000 n 
-0001630387 00000 n 
+0001174284 00000 n 
+0001174673 00000 n 
+0001174719 00000 n 
+0001174891 00000 n 
+0001184430 00000 n 
+0001184813 00000 n 
+0001184859 00000 n 
+0001185044 00000 n 
+0001185219 00000 n 
+0001185265 00000 n 
+0001185311 00000 n 
+0001197184 00000 n 
+0001197559 00000 n 
+0001197605 00000 n 
+0001197833 00000 n 
+0001197879 00000 n 
+0001197925 00000 n 
+0001205709 00000 n 
+0001206116 00000 n 
+0001206285 00000 n 
+0001206331 00000 n 
+0001206533 00000 n 
+0001206719 00000 n 
+0001206765 00000 n 
+0001206811 00000 n 
+0001206982 00000 n 
+0001207224 00000 n 
+0001216188 00000 n 
+0001216579 00000 n 
+0001216625 00000 n 
+0001216812 00000 n 
+0001217001 00000 n 
+0001217193 00000 n 
+0001217239 00000 n 
+0001217655 00000 n 
+0001217701 00000 n 
+0001222019 00000 n 
+0001222394 00000 n 
+0001222440 00000 n 
+0001222613 00000 n 
+0001222659 00000 n 
+0001235311 00000 n 
+0001235707 00000 n 
+0001235753 00000 n 
+0001235799 00000 n 
+0001236007 00000 n 
+0001236193 00000 n 
+0001236239 00000 n 
+0001239763 00000 n 
+0001240151 00000 n 
+0001240197 00000 n 
+0001240372 00000 n 
+0001253041 00000 n 
+0001253507 00000 n 
+0001253553 00000 n 
+0001253747 00000 n 
+0001253954 00000 n 
+0001254143 00000 n 
+0001254331 00000 n 
+0001254531 00000 n 
+0001254708 00000 n 
+0001254879 00000 n 
+0001254925 00000 n 
+0001255088 00000 n 
+0001255254 00000 n 
+0001255300 00000 n 
+0001255346 00000 n 
+0001261897 00000 n 
+0001262268 00000 n 
+0001262314 00000 n 
+0001274445 00000 n 
+0001274889 00000 n 
+0001274935 00000 n 
+0001275113 00000 n 
+0001275280 00000 n 
+0001275449 00000 n 
+0001275629 00000 n 
+0001275830 00000 n 
+0001275997 00000 n 
+0001276043 00000 n 
+0001276241 00000 n 
+0001276416 00000 n 
+0001287707 00000 n 
+0001288077 00000 n 
+0001288123 00000 n 
+0001288169 00000 n 
+0001302076 00000 n 
+0001302446 00000 n 
+0001302492 00000 n 
+0001311862 00000 n 
+0001312253 00000 n 
+0001312299 00000 n 
+0001312491 00000 n 
+0001312685 00000 n 
+0001312876 00000 n 
+0001312922 00000 n 
+0001312968 00000 n 
+0001321880 00000 n 
+0001322224 00000 n 
+0001333046 00000 n 
+0001333390 00000 n 
+0001341340 00000 n 
+0001341710 00000 n 
+0001341756 00000 n 
+0001348510 00000 n 
+0001348867 00000 n 
+0001357079 00000 n 
+0001357454 00000 n 
+0001357500 00000 n 
+0001357700 00000 n 
+0001366063 00000 n 
+0001366407 00000 n 
+0001378537 00000 n 
+0001379008 00000 n 
+0001379054 00000 n 
+0001379100 00000 n 
+0001379624 00000 n 
+0001379786 00000 n 
+0001379993 00000 n 
+0001380198 00000 n 
+0001380363 00000 n 
+0001380568 00000 n 
+0001380774 00000 n 
+0001380980 00000 n 
+0001381186 00000 n 
+0001381392 00000 n 
+0001381598 00000 n 
+0001381804 00000 n 
+0001382010 00000 n 
+0001382216 00000 n 
+0001390308 00000 n 
+0001390723 00000 n 
+0001390769 00000 n 
+0001390815 00000 n 
+0001391003 00000 n 
+0001391192 00000 n 
+0001391381 00000 n 
+0001391570 00000 n 
+0001391759 00000 n 
+0001391805 00000 n 
+0001392350 00000 n 
+0001392540 00000 n 
+0001411577 00000 n 
+0001411921 00000 n 
+0001422837 00000 n 
+0001423228 00000 n 
+0001423274 00000 n 
+0001423453 00000 n 
+0001423499 00000 n 
+0001423545 00000 n 
+0001423754 00000 n 
+0001423945 00000 n 
+0001434843 00000 n 
+0001435200 00000 n 
+0001435246 00000 n 
+0001450640 00000 n 
+0001451068 00000 n 
+0001451114 00000 n 
+0001451301 00000 n 
+0001451347 00000 n 
+0001451557 00000 n 
+0001451603 00000 n 
+0001451788 00000 n 
+0001451951 00000 n 
+0001452118 00000 n 
+0001452164 00000 n 
+0001452337 00000 n 
+0001461092 00000 n 
+0001461475 00000 n 
+0001461684 00000 n 
+0001461870 00000 n 
+0001472328 00000 n 
+0001472735 00000 n 
+0001472781 00000 n 
+0001472827 00000 n 
+0001472873 00000 n 
+0001473035 00000 n 
+0001473081 00000 n 
+0001473675 00000 n 
+0001473893 00000 n 
+0001473939 00000 n 
+0001474105 00000 n 
+0001474291 00000 n 
+0001474471 00000 n 
+0001484526 00000 n 
+0001484901 00000 n 
+0001485091 00000 n 
+0001485137 00000 n 
+0001488534 00000 n 
+0001488917 00000 n 
+0001488963 00000 n 
+0001489150 00000 n 
+0001489324 00000 n 
+0001497919 00000 n 
+0001498344 00000 n 
+0001498390 00000 n 
+0001498568 00000 n 
+0001498614 00000 n 
+0001498819 00000 n 
+0001499024 00000 n 
+0001499070 00000 n 
+0001499256 00000 n 
+0001499302 00000 n 
+0001505827 00000 n 
+0001506197 00000 n 
+0001506243 00000 n 
+0001515518 00000 n 
+0001515906 00000 n 
+0001515952 00000 n 
+0001516186 00000 n 
+0001516232 00000 n 
+0001516278 00000 n 
+0001526470 00000 n 
+0001526871 00000 n 
+0001527052 00000 n 
+0001527099 00000 n 
+0001536793 00000 n 
+0001537194 00000 n 
+0001537240 00000 n 
+0001537286 00000 n 
+0001537460 00000 n 
+0001537506 00000 n 
+0001539529 00000 n 
+0001539873 00000 n 
+0001539993 00000 n 
+0001540114 00000 n 
+0001540239 00000 n 
+0001540365 00000 n 
+0001540500 00000 n 
+0001540637 00000 n 
+0001540759 00000 n 
+0001540883 00000 n 
+0001541006 00000 n 
+0001541131 00000 n 
+0001541273 00000 n 
+0001541416 00000 n 
+0001541545 00000 n 
+0001541676 00000 n 
+0001541802 00000 n 
+0001541929 00000 n 
+0001542048 00000 n 
+0001542168 00000 n 
+0001542299 00000 n 
+0001542431 00000 n 
+0001542567 00000 n 
+0001542705 00000 n 
+0001542860 00000 n 
+0001543016 00000 n 
+0001543179 00000 n 
+0001543344 00000 n 
+0001543507 00000 n 
+0001543672 00000 n 
+0001543833 00000 n 
+0001543997 00000 n 
+0001544160 00000 n 
+0001544326 00000 n 
+0001544490 00000 n 
+0001544642 00000 n 
+0001544796 00000 n 
+0001544967 00000 n 
+0001545142 00000 n 
+0001545316 00000 n 
+0001545488 00000 n 
+0001545660 00000 n 
+0001545836 00000 n 
+0001546011 00000 n 
+0001546184 00000 n 
+0001546346 00000 n 
+0001546509 00000 n 
+0001546661 00000 n 
+0001546817 00000 n 
+0001546972 00000 n 
+0001547125 00000 n 
+0001547277 00000 n 
+0001547429 00000 n 
+0001547574 00000 n 
+0001547719 00000 n 
+0001547857 00000 n 
+0001547995 00000 n 
+0001548145 00000 n 
+0001548295 00000 n 
+0001548448 00000 n 
+0001548601 00000 n 
+0001548767 00000 n 
+0001548933 00000 n 
+0001549089 00000 n 
+0001549245 00000 n 
+0001549392 00000 n 
+0001549539 00000 n 
+0001549693 00000 n 
+0001549847 00000 n 
+0001549989 00000 n 
+0001550132 00000 n 
+0001550258 00000 n 
+0001550384 00000 n 
+0001550507 00000 n 
+0001550631 00000 n 
+0001550768 00000 n 
+0001550905 00000 n 
+0001551036 00000 n 
+0001551167 00000 n 
+0001551290 00000 n 
+0001551414 00000 n 
+0001551554 00000 n 
+0001551694 00000 n 
+0001551819 00000 n 
+0001551944 00000 n 
+0001552075 00000 n 
+0001552206 00000 n 
+0001552328 00000 n 
+0001552450 00000 n 
+0001552586 00000 n 
+0001552722 00000 n 
+0001552854 00000 n 
+0001552986 00000 n 
+0001553113 00000 n 
+0001553241 00000 n 
+0001553366 00000 n 
+0001553491 00000 n 
+0001553657 00000 n 
+0001553825 00000 n 
+0001553970 00000 n 
+0001554115 00000 n 
+0001554243 00000 n 
+0001554371 00000 n 
+0001554500 00000 n 
+0001554629 00000 n 
+0001554763 00000 n 
+0001554898 00000 n 
+0001555016 00000 n 
+0001555134 00000 n 
+0001555282 00000 n 
+0001555431 00000 n 
+0001555559 00000 n 
+0001555687 00000 n 
+0001555812 00000 n 
+0001555937 00000 n 
+0001556056 00000 n 
+0001556175 00000 n 
+0001556330 00000 n 
+0001556486 00000 n 
+0001556614 00000 n 
+0001556742 00000 n 
+0001556869 00000 n 
+0001556996 00000 n 
+0001557114 00000 n 
+0001557234 00000 n 
+0001557378 00000 n 
+0001557524 00000 n 
+0001557650 00000 n 
+0001557777 00000 n 
+0001557895 00000 n 
+0001558015 00000 n 
+0001558149 00000 n 
+0001558283 00000 n 
+0001558417 00000 n 
+0001558551 00000 n 
+0001558687 00000 n 
+0001558825 00000 n 
+0001558952 00000 n 
+0001559079 00000 n 
+0001559209 00000 n 
+0001559339 00000 n 
+0001559485 00000 n 
+0001559631 00000 n 
+0001559755 00000 n 
+0001559879 00000 n 
+0001560036 00000 n 
+0001560193 00000 n 
+0001560358 00000 n 
+0001560528 00000 n 
+0001560696 00000 n 
+0001560861 00000 n 
+0001561004 00000 n 
+0001561147 00000 n 
+0001561287 00000 n 
+0001561427 00000 n 
+0001561558 00000 n 
+0001561689 00000 n 
+0001561830 00000 n 
+0001561976 00000 n 
+0001562117 00000 n 
+0001562244 00000 n 
+0001562372 00000 n 
+0001562518 00000 n 
+0001562664 00000 n 
+0001562803 00000 n 
+0001562942 00000 n 
+0001563070 00000 n 
+0001563198 00000 n 
+0001563315 00000 n 
+0001563433 00000 n 
+0001563567 00000 n 
+0001563702 00000 n 
+0001563834 00000 n 
+0001563967 00000 n 
+0001564238 00000 n 
+0001564509 00000 n 
+0001564587 00000 n 
+0001564764 00000 n 
+0001564956 00000 n 
+0001565221 00000 n 
+0001565385 00000 n 
+0001565646 00000 n 
+0001565816 00000 n 
+0001565990 00000 n 
+0001566275 00000 n 
+0001566473 00000 n 
+0001566669 00000 n 
+0001566837 00000 n 
+0001567039 00000 n 
+0001567305 00000 n 
+0001567499 00000 n 
+0001567743 00000 n 
+0001567987 00000 n 
+0001568267 00000 n 
+0001568467 00000 n 
+0001568728 00000 n 
+0001568993 00000 n 
+0001569234 00000 n 
+0001569473 00000 n 
+0001569676 00000 n 
+0001569835 00000 n 
+0001570109 00000 n 
+0001570280 00000 n 
+0001570477 00000 n 
+0001570726 00000 n 
+0001571019 00000 n 
+0001571260 00000 n 
+0001571447 00000 n 
+0001571746 00000 n 
+0001571929 00000 n 
+0001572118 00000 n 
+0001572359 00000 n 
+0001572578 00000 n 
+0001572767 00000 n 
+0001573020 00000 n 
+0001573222 00000 n 
+0001573447 00000 n 
+0001573628 00000 n 
+0001573869 00000 n 
+0001574094 00000 n 
+0001574303 00000 n 
+0001574500 00000 n 
+0001574735 00000 n 
+0001575041 00000 n 
+0001575224 00000 n 
+0001575433 00000 n 
+0001575666 00000 n 
+0001575817 00000 n 
+0001576083 00000 n 
+0001576266 00000 n 
+0001576459 00000 n 
+0001576614 00000 n 
+0001576876 00000 n 
+0001577059 00000 n 
+0001577252 00000 n 
+0001577411 00000 n 
+0001577689 00000 n 
+0001577880 00000 n 
+0001578057 00000 n 
+0001578284 00000 n 
+0001578542 00000 n 
+0001578777 00000 n 
+0001578982 00000 n 
+0001579199 00000 n 
+0001579480 00000 n 
+0001579673 00000 n 
+0001580006 00000 n 
+0001580329 00000 n 
+0001580631 00000 n 
+0001580874 00000 n 
+0001581095 00000 n 
+0001581302 00000 n 
+0001581536 00000 n 
+0001581739 00000 n 
+0001581914 00000 n 
+0001582154 00000 n 
+0001582317 00000 n 
+0001582562 00000 n 
+0001582777 00000 n 
+0001584132 00000 n 
+0001594194 00000 n 
+0001594410 00000 n 
+0001595773 00000 n 
+0001596819 00000 n 
+0001605143 00000 n 
+0001605364 00000 n 
+0001606727 00000 n 
+0001607799 00000 n 
+0001609252 00000 n 
+0001609461 00000 n 
+0001609781 00000 n 
+0001610697 00000 n 
+0001616793 00000 n 
+0001617007 00000 n 
+0001618370 00000 n 
+0001619415 00000 n 
+0001621397 00000 n 
+0001621611 00000 n 
+0001621942 00000 n 
+0001623080 00000 n 
+0001624342 00000 n 
+0001624558 00000 n 
+0001624862 00000 n 
+0001625999 00000 n 
+0001628788 00000 n 
+0001629014 00000 n 
+0001630377 00000 n 
 trailer
 << /Size 777
 /Root 2 0 R
 /Info 1 0 R
 >>
 startxref
-1631507
+1631497
 %%EOF

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/current/migration-notes/migration-notes.html
----------------------------------------------------------------------
diff --git a/content/versions/current/migration-notes/migration-notes.html b/content/versions/current/migration-notes/migration-notes.html
index c8277c9..6bff5ee 100644
--- a/content/versions/current/migration-notes/migration-notes.html
+++ b/content/versions/current/migration-notes/migration-notes.html
@@ -292,33 +292,55 @@ table.CodeRay td.code>pre{padding:0}
         </ul>
        </div> 
        <div class="sectionbody"> 
-        <div class="paragraph"> 
-         <p>TODO</p> 
-        </div> 
-        <div class="ulist"> 
-         <ul> 
-          <li> <p>parallelized introspection</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>specify <code>isis.reflector.introspector.parallelize</code></p> </li> 
-             <li> <p>is enabled by default</p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>lazy introspection</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>specify <code>isis.reflector.introspector.mode</code></p> </li> 
-             <li> <p>is set to <code>lazy_unless_production</code> by default, can switch to <code>lazy</code> or <code>full</code></p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>sidebar dialogs</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>set <code>isis.viewer.wicket.dialogMode</code> to <code>modal</code> to retain previous behaviour</p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>new <code>MetaModelService#exportMetaModel(Config)</code></p> </li> 
-         </ul> 
+        <div class="sect2"> 
+         <h3 id="_sidebar_dialogs">Sidebar Dialogs</h3> 
+         <div class="paragraph"> 
+          <p>In this release sidebar dialogs vs modal dialogs is configured globally, and they are enabled by default.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>To revert to previous behaviour, set the configuration property:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="title">
+           isis.properties
+          </div> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="ini">isis.viewer.wicket.dialogMode=modal</code></pre> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_metamodelservice">MetaModelService</h3> 
+         <div class="paragraph"> 
+          <p>To export the metamodel as XML, use <code>MetaModelService6#exportMetaModel(Config)</code>.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Why would you want to do this? The main reason is as a regression test when moving up to new versions of the framework; you can check that the metamodel built up by the next version is the same as the previous.</p> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_introspection">Introspection</h3> 
+         <div class="paragraph"> 
+          <p>A number of new configuration properties are available to control how introspection (the building of the framework’s internal metamodel) is performed:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p>parallelized introspection</p> 
+            <div class="ulist"> 
+             <ul> 
+              <li> <p>specify <code>isis.reflector.introspector.parallelize</code></p> </li> 
+              <li> <p>is enabled by default</p> </li> 
+             </ul> 
+            </div> </li> 
+           <li> <p>lazy introspection</p> 
+            <div class="ulist"> 
+             <ul> 
+              <li> <p>specify <code>isis.reflector.introspector.mode</code></p> </li> 
+              <li> <p>is set to <code>lazy_unless_production</code> by default, can switch to <code>lazy</code> or <code>full</code></p> </li> 
+             </ul> 
+            </div> </li> 
+          </ul> 
+         </div> 
         </div> 
        </div> 
       </div> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/current/release-notes/release-notes.html
----------------------------------------------------------------------
diff --git a/content/versions/current/release-notes/release-notes.html b/content/versions/current/release-notes/release-notes.html
index 220a887..7bf931f 100644
--- a/content/versions/current/release-notes/release-notes.html
+++ b/content/versions/current/release-notes/release-notes.html
@@ -310,20 +310,20 @@ table.CodeRay td.code>pre{padding:0}
           </tr> 
           <tr> 
            <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_release-notes_1.17.0">1.17.0</a></p></td> 
-           <td class="tableblock halign-left valign-top"><p class="tableblock">dd-mm-yyyy</p></td> 
+           <td class="tableblock halign-left valign-top"><p class="tableblock">06-01-2019</p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>TODO</p> 
+              <p>Sidebar dialogs, metamodel export</p> 
              </div>
             </div></td> 
-           <td class="tableblock halign-right valign-top"></td> 
-           <td class="tableblock halign-right valign-top"></td> 
-           <td class="tableblock halign-right valign-top"></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">4</p></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">17</p></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">9</p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>TODO</p> 
+              <p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311171&amp;version=12342854">Release notes for 1.17.0</a></p> 
              </div>
             </div></td> 
           </tr> 


[6/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/1.17.0/elasticlunr/index.json
----------------------------------------------------------------------
diff --git a/content/versions/1.17.0/elasticlunr/index.json b/content/versions/1.17.0/elasticlunr/index.json
index 13c9860..ec7cdd9 100644
--- a/content/versions/1.17.0/elasticlunr/index.json
+++ b/content/versions/1.17.0/elasticlunr/index.json
@@ -1 +1 @@
-{"version":"0.9.5","fields":["title","body","description","url"],"ref":"id","documentStore":{"docs":{"372886":{"title":"Rows, full-width cols, and tabs","url":"guides/ugvw/ugvw.html#_rows_full_width_cols_and_tabs","body":"Rows, full-width cols, and tabs  The example layout consists of three rows: a row for the object/icon, a row containing a properties, and a row containing collections. In all three cases the row contains a single column spanning the full width of the page. For the property and collection rows, the column contains a tab group.  This corresponds to the following XML:  You will notice that one of the columns has an unreferencedActions attribute, while one of the tabGroups has a similar unreferencedCollections attribute. This topic is discussed in more detail below. ","description":" The example layout consists of three rows: a row for the object/icon, a row containing a properties, and a row containing collections. In all three cases the row contains a single column s
 panning the full width of the page. For the property and collection rows, the column contains a","id":372886},"2646929":{"title":"Apache Isis vs …​","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_apache-isis-vs","body":"Apache Isis vs …​  Many other frameworks promise rapid application development and provide automatically generated user interfaces, so how do they compare to Apache Isis? ","description":" Many other frameworks promise rapid application development and provide automatically generated user interfaces, so how do they compare to Apache Isis? ","id":2646929},"3836440":{"title":"Running","url":"guides/dg/dg.html#__dg_ide_intellij_running","body":"Running  Let’s see how to run both the app and the tests. ","description":" Let’s see how to run both the app and the tests. ","id":3836440},"11600575":{"title":"Using Contributions","url":"pages/tg/tg.html#_using_contributions","body":"Using Contributions ","description":"","id":11600575},"12196042":{"title":"Te
 rtiary Menu","url":"guides/ugvw/ugvw.html#_tertiary_menu","body":"Tertiary Menu  Domain services' actions can be associated with the tertiary menu using the same @DomainServiceLayout annotation, but be aware that the @DomainServiceLayout#name() attribute will be ignored (there is only one effective menu).  For example, the updateEpochDate(…​) and listAllSettings(…​) actions come from the following service:  Because the number of items on the tertiary menu is expected to be small and most will pertain to the current user, the viewer does not place dividers between actions from different services on the tertiary menu. ","description":" Domain services' actions can be associated with the tertiary menu using the same @DomainServiceLayout annotation, but be aware that the @DomainServiceLayout#name() attribute will be ignored (there is only one effective menu). ","id":12196042},"12649581":{"title":"Mark the version as released","url":"guides/cgcom/cgcom.html#_mark_the_version_as_r
 eleased","body":"Mark the version as released  In JIRA, go to the administration section for the Apache Isis project and update the version as being released.  In the Kanban view this will have the effect of marking all tickets as released (clearing the \"done\" column). ","description":" In JIRA, go to the administration section for the Apache Isis project and update the version as being released. ","id":12649581},"13573617":{"title":"hide…​()","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_hide","body":"hide…​()  The hide…​() supporting method is called for properties, collections and actions. It allows the property/collection to be completely hidden from view.  It’s comparatively rare for properties or collections to be imperatively hidden from view, but actions are sometimes hidden or shown visible (as opposed to being just disabled, ie greyed out).  The signature of the supporting method is simply:  Returning true will hide the property, collection or acti
 on, returning false leaves it visible.  For example, to hide an action:  Or, to hide a property: ","description":" The hide…​() supporting method is called for properties, collections and actions. It allows the property/collection to be completely hidden from view. ","id":13573617},"14290952":{"title":"Vetoing Visibility","url":"guides/htg.html#_ugbtb_hints-and-tips_vetoing-visibility","body":"Vetoing Visibility  eg if included an addon such as auditing or security.  solution is to write a domain event subscriber that vetoes the visibility  All the addons actions inherit from common base classes so this can be as broad-brush or fine-grained as required ","description":" eg if included an addon such as auditing or security. ","id":14290952},"17000573":{"title":"ObjectCreatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectCreatedEvent","body":"ObjectCreatedEvent  Subclass of AbstractLifecycleEvent, broadcast when an object is first instantiated using the 
 FactoryServuce's #instantiate(…​) method.  ObjectCreatedEvent.Default is the implementation that is used by default, but this can be overridden using @DomainObject#createdLifecycleEvent(). ","description":" Subclass of AbstractLifecycleEvent, broadcast when an object is first instantiated using the FactoryServuce's #instantiate(…​) method. ","id":17000573},"17618894":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_20","body":"New Feature ","description":"","id":17618894},"17724516":{"title":"Multi-select action parameters","url":"guides/ugfun/ugfun.html#_multi_select_action_parameters","body":"Multi-select action parameters  As well as scalar values, action parameters can also be collections. For this to be valid, a choices or autoComplete supporting method must be provided.  For example, suppose we want to \"tag\" or \"label\" an object: ","description":" As well as scalar values, action parameters can also be collections. For this to be valid, a
  choices or autoComplete supporting method must be provided. ","id":17724516},"18445041":{"title":"Verifying Releases","url":"downloads.html#_verifying_releases","body":"Verifying Releases ","description":"","id":18445041},"19254915":{"title":"API & Implementation","url":"guides/rgsvc/rgsvc.html#_api_implementation_7","body":"API & Implementation  The CommandContext request-scoped service defines the following very simple API:  This class (o.a.i.applib.services.CommandContext) is also the default implementation.  Under normal circumstances there shouldn’t be any need to replace this implementation with another. But if you do need to for some reason, then subclass and use @DomainServiceLayout#menuOrder() (as explained in the introduction to this guide).  The Command type referenced above is in fact an interface, defined as: ","description":" The CommandContext request-scoped service defines the following very simple API: ","id":19254915},"21190750":{"title":"Run the archetype","url
 ":"pages/tg/tg.html#_run_the_archetype","body":"Run the archetype ","description":"","id":21190750},"21212015":{"title":"Key features","url":"pages/powered-by/powered-by.html#_key_features","body":"Key features ","description":"","id":21212015},"21857601":{"title":"Other Guides","url":"guides/cgcom/cgcom.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are:  This guide provides guidance for Apache Isis' own committers. ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides. ","id":21857601},"22342496":{"title":"Deploy","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_deploy","body":"Deploy  Previously the release procedures used mvn release:prepare and mvn release:perform. These are however not compatible w
 ith ${revision} that we now use for CI/CD.  We therefore just use mvn deploy directly, activating the (inherited) apache-release profile that, amongst other things, brings in the gpg plugin for code signing.  To build and deploy and tag, we use:  using your own GPG passphrase, of course. ","description":" Previously the release procedures used mvn release:prepare and mvn release:perform. These are however not compatible with ${revision} that we now use for CI/CD. ","id":22342496},"23125949":{"title":"Editing","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_editing","body":"Editing ","description":"","id":23125949},"23524101":{"title":"Collections","url":"guides/ugvw/ugvw.html#_collections","body":"Collections  In the final row the collections are placed in tabs, simply one collection per tab. This corresponds to the following XML:  As with properties, actions can be associated with collections; this indicates that they should be rendered in the collection’s header. ","de
 scription":" In the final row the collections are placed in tabs, simply one collection per tab. This corresponds to the following XML: ","id":23524101},"26509816":{"title":"Commit changes","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_commit-changes","body":"Commit changes  Commit any changes from the preceding steps: ","description":" Commit any changes from the preceding steps: ","id":26509816},"27806498":{"title":"renderedAsDayBefore()","url":"guides/rgant/rgant.html#_rgant-ParameterLayout_renderedAsDayBefore","body":"renderedAsDayBefore()  The renderedAsDayBefore() attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for properties.  This behaviour might at first glance appear odd, but the rationale is to support the use case of a sequence of instances that represent adjacent intervals of t
 ime. In such cases there would typically be startDate and endDate properties, eg for all of Q2. Storing this as a half-closed interval — eg [1-Apr-2015, 1-July-2015) — can substantially simplify internal algorithms; the endDate of one interval will correspond to the startDate of the next.  However, from an end-user perspective the requirement may be to render the interval as a fully closed interval; eg the end date should be shown as 30-Jun-2015.  This attribute therefore bridges the gap; it presents the information in a way that makes sense to an end-user, but also stores the domain object in a way that is easy work with internally.  For example: ","description":" The renderedAsDayBefore() attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for properties. ","id":27806498},"31312523":{"title":"Declarative style","u
 rl":"guides/htg.html#_declarative_style_3","body":"Declarative style  To render an object with a particular CSS, use @DomainObjectLayout#cssClass().  When the domain object is rendered on its own page, this CSS class will appear on a top-level <div>. Or, when the domain object is rendered as a row in a collection, then the CSS class will appear in a <div> wrapped by the <tr> of the row.  One possible use case would be to render the most important object types with a subtle background colour: Customers shown in light green, or Orders shown in a light pink, for example. ","description":" To render an object with a particular CSS, use @DomainObjectLayout#cssClass(). ","id":31312523},"31857620":{"title":"Interacting with the services","url":"guides/rgsvc/rgsvc.html#_interacting_with_the_services","body":"Interacting with the services  Typically domain objects will have little need to interact with the CommandContext and Command directly; what is more useful is that these are persisted i
 n support of the various use cases identified above.  One case however where a domain object might want to obtain the Command is to determine whether it has been invoked in the foreground, or in the background. It can do this using the getExecutedIn() method:  Although not often needed, this then allows the domain object to access the Command object through the CommandContext service. To expand the above example:  If run in the background, it might then notify the user (eg by email) if all work is done.  This leads us onto a related point, distinguishing the current effective user vs the originating \"real\" user. When running in the foreground, the current user can be obtained from the UserService, using:  If running in the background, however, then the current user will be the credentials of the background process, for example as run by a Quartz scheduler job.  The domain object can still obtain the original (\"effective\") user that caused the job to be created, using: ","descrip
 tion":" Typically domain objects will have little need to interact with the CommandContext and Command directly; what is more useful is that these are persisted in support of the various use cases identified above. ","id":31857620},"31966407":{"title":"Icons","url":"guides/htg.html#_icons","body":"Icons  Action icons can be specified in several ways.  One option is to use the @ActionLayout#cssClassFa(). For example:  Alternatively, you can specify these hints dynamically in the Xxx.layout.xml for the entity:  Rather than annotating every action with @ActionLayout#cssClassFa() and @ActionLayout#cssClass() you can instead specify the UI hint globally using regular expressions. Not only does this save a lot of boilerplate/editing, it helps ensure consistency across all actions.  To declare fa classes globally, use the configuration property isis.reflector.facet.cssClassFa.patterns (a comma separated list of key:value pairs).  For example:  Here:  For example, \"fa-plus\" is applied to 
 all action members called \"newXxx\" ","description":" Action icons can be specified in several ways. ","id":31966407},"32950878":{"title":"@MemberOrder","url":"guides/ugvw/ugvw.html#_code_memberorder_code","body":"@MemberOrder  The @MemberOrder annotation is used to specify the relative order of domain class properties, collections and actions.  The annotation defines two attributes, name() and sequence(). Their usage depends on the member type:  Within any of these, the sequence() then determines the relative ordering of the action with respect to other actions that have been similarly associated with properties/collections or left as \"free-standing\".  For example:  This defines three property (or member) groups, \"General\", \"Detail\" and \"Misc\"; \"General\" is the default if no name attribute is specified. Properties in the same member group are rendered together, as a fieldset.  In addition, actions can optionally be associated (rendered close to) either properties or acti
 ons. This is done by overloading the @MemberOrder's name() attribute, holding the value of the property or collection.  For example:  will associate the completed() and notYetCompleted() actions with the complete property, and will associate the add() and remove() actions with the dependencies collection.  The value of sequence() is a string. The simplest convention (as shown in the example above) is to use numbers — 1, 2, 3 — though it is a better idea to leave gaps in the numbers — 10, 20, 30 perhaps — such that a new member may be added without having to edit existing numbers.  Even better is to adopt the 'dewey-decimal' notation — 1, 1.1, 1.2, 2, 3, 5.1.1, 5.2.2, 5.2, 5.3 — which allows for an indefinite amount of future insertion. It also allows subclasses to insert their class members as required. ","description":" The @MemberOrder annotation is used to specify the relative order of domain class properties, collections and actions. ","id":32950878},"36734123":{"tit
 le":"Bug","url":"release-notes/release-notes.html#_bug_8","body":"Bug ","description":"","id":36734123},"39248326":{"title":"Runtime vs Noop implementation","url":"guides/rgfis/rgfis.html#_runtime_vs_noop_implementation","body":"Runtime vs Noop implementation  The framework provides two implementations:  The …​Default implementation takes priority over the …​Noop implementation. ","description":" The framework provides two implementations: ","id":39248326},"39290887":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_22","body":"Implementation  The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). ","description":" The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). ","id":39290887},"44483327":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_17","body":"
 New Feature ","description":"","id":44483327},"45128293":{"title":"getConfigurationProperties()","url":"guides/rgcms/rgcms.html#__rgcms_classes_AppManifest-bootstrapping_api_getConfigurationProperties","body":"getConfigurationProperties()  This method allow arbitrary other configuration properties to be overridden. One common use case is in conjunction with the getFixtures() method, discussed above: ","description":" This method allow arbitrary other configuration properties to be overridden. One common use case is in conjunction with the getFixtures() method, discussed above: ","id":45128293},"45847666":{"title":"Recreate the archetype","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-the-helloworld-archetype_create-the-archetype","body":"Recreate the archetype  Make sure you are in the correct directory and environment variables are correct.  To recreate the helloworld archetype:  Then, run the script (which also builds the archetype once generated) and then swit
 ch to the archetype’s directory:  The script automatically commits its changes. If you wish use git log and git diff (or a tool such as SourceTree) to review changes made. ","description":" Make sure you are in the correct directory and environment variables are correct. ","id":45847666},"57327287":{"title":"cssClassFa()","url":"guides/rgant/rgant.html#_rgant-ViewModelLayout_cssClassFa","body":"cssClassFa()  The cssClassFa() attribute is used to specify the name of a Font Awesome icon name, to be rendered as the domain object’s icon.  These attribute can also be applied to domain objects to specify the object’s icon, and to actions to specify an icon for the action’s representation as a button or menu item.  If necessary the icon specified can be overridden by a particular object instance using the iconName() method.  For example:  There can be multiple \"fa-\" classes, eg to mirror or rotate the icon. There is no need to include the mandatory fa \"marker\" CSS class; it wil
 l be automatically added to the list. The fa- prefix can also be omitted from the class names; it will be prepended to each if required.  The related cssClassFaPosition() attribute is currently unused for domain objects; the icon is always rendered to the left. ","description":" The cssClassFa() attribute is used to specify the name of a Font Awesome icon name, to be rendered as the domain object’s icon. ","id":57327287},"62314289":{"title":"Menu Bars Layout","url":"guides/ugvw/ugvw.html#_ugvw_menubars-layout","body":"Menu Bars Layout ","description":"","id":62314289},"64932464":{"title":"Other Guides","url":"guides/ugtst/ugtst.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are: ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\"
  guides. ","id":64932464},"66604001":{"title":"@Programmatic","url":"guides/rgant/rgant.html#_rgant-Programmatic","body":"@Programmatic ","description":"","id":66604001},"68327083":{"title":"(Optional) Verifying binary artifacts","url":"guides/cgcom/cgcom.html#__cgcom_verifying-releases_binary-artifacts","body":"(Optional) Verifying binary artifacts  You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the HelloWorld archetype or the SimpleApp archetype and running the resultant app.  Configuring your local Maven install amounts to updating the ~/.m2/settings.xml file:  where the repository URL is as provided in the VOTE email. If there is more than one repository (as is sometimes the case if multiple components have been released), then repeat the <repository> section for each.  Once the vote has completed, the staging repositories will be removed and so you should deacti
 ve the profile (comment out the <activeProfile> element). If you forget to deactive the profile, there should be no adverse effects; Maven will just spend unnecessary cycles attempting to hit a non-existent repo. ","description":" You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the HelloWorld archetype or the SimpleApp archetype and running the resultant app. ","id":68327083},"68441589":{"title":"License headers","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_license-headers","body":"License headers  The Apache Release Audit Tool RAT (from the Apache Creadur project) checks for missing license header files. The parent pom.xml of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions.  To run the RAT tool, use:  where rat.numUnapprovedLicenses property is set to a high figure, temporarily overriding the defaul
 t value of 0. This will allow the command to run over all submodules, rather than failing after the first one. The command writes out a target\\rat.txt for each submodule. missing license notes are indicated using the key !???. The for command collates all the errors.  Investigate and fix any reported violations, typically by either:  Once you’ve fixed all issues, confirm once more that apache-rat-plugin no longer reports any license violations, this time leaving the rat.numUnapprovedLicenses property to its default, 0: ","description":" The Apache Release Audit Tool RAT (from the Apache Creadur project) checks for missing license header files. The parent pom.xml of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions. ","id":68441589},"73703450":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_29","body":"New Feature ","description":"","id":73703450},"74705826":{"title":"How to implement a spellchecker?","url":"guide
 s/htg.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How to implement a spellchecker?  From this thread on the Apache Isis users mailing list:  One way to implement is to use the event bus:  if if the change is made through an edit, you can use @Property#domainEvent().  You’ll need some way to know which fields should be spell checked. Two ways spring to mind:  And you’ll (obviously) also need some sort of spell checker implementation to call. ","description":" From this thread on the Apache Isis users mailing list: ","id":74705826},"75054401":{"title":"Supporting Method Prefixes","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes","body":"Supporting Method Prefixes  Supporting methods are those that are associated with properties, collections and actions, providing additional imperative business rule checking and behaviour to be performed when the user interacts with those object members.  This association is performed by name matching. Thus, a property
  called \"firstName\", derived from a method getFirstName() may have supporting methods hideFirstName(), disableFirstName() and validateFirstName(). Supporting methods are, therefore, each characterized by their own particular prefix.  The table below lists the method prefixes that are recognized as part of Apache Isis' default programming model. ","description":" Supporting methods are those that are associated with properties, collections and actions, providing additional imperative business rule checking and behaviour to be performed when the user interacts with those object members. ","id":75054401},"77231561":{"title":"Interaction Execution","url":"guides/rgcms/rgcms.html#_rgcms_schema-ixn","body":"Interaction Execution  The interaction (\"ixn\") schema defines the serialized form of an action invocation or a property edit. In fact, it actually defines a call-graph of such executions for those cases where the WrapperFactory is used to execute sub-actions/property edits.  Each e
 xecution identifies the target object, the member to invoke, and the arguments. It also captures metrics about the execution, and the result of the execution (eg return value of an action invocation). ","description":" The interaction (\"ixn\") schema defines the serialized form of an action invocation or a property edit. In fact, it actually defines a call-graph of such executions for those cases where the WrapperFactory is used to execute sub-actions/property edits. ","id":77231561},"78112488":{"title":"Screencast","url":"guides/ugvw/ugvw.html#_screencast","body":"Screencast  This screencast describes the feature. ","description":" This screencast describes the feature. ","id":78112488},"78624086":{"title":"Other Guides","url":"guides/ugsec/ugsec.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are:
  ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides. ","id":78624086},"80534397":{"title":"ContentMappingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService","body":"ContentMappingService  The ContentMappingService supports the (default implementation of the) ContentNegotiationService enabling the RestfulObjects viewer to represent domain objects in some other format as specified by the HTTP Accept header.  See ContentNegotiationService for further discussion. ","description":" The ContentMappingService supports the (default implementation of the) ContentNegotiationService enabling the RestfulObjects viewer to represent domain objects in some other format as specified by the HTTP Accept header. ","id":80534397},"83803344":{"title":"MessageService","url":"guides/rgsvc/rgsvc.html#_rgsvc_application-layer-api_MessageService","body":"MessageService  The MessageService all
 ows domain objects to raise information, warning or error messages. These messages can either be simple strings, or can be translated. ","description":" The MessageService allows domain objects to raise information, warning or error messages. These messages can either be simple strings, or can be translated. ","id":83803344},"83933647":{"title":"Persistence Concerns","url":"guides/ugbtb/ugbtb.html#_persistence_concerns","body":"Persistence Concerns ","description":"","id":83933647},"85931482":{"title":"Task","url":"release-notes/release-notes.html#_task_24","body":"Task ","description":"","id":85931482},"87271564":{"title":"2004:","url":"pages/articles-and-presentations/articles-and-presentations.html#_2004","body":"2004: ","description":"","id":87271564},"90561824":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wicket_viewer_8","body":"Wicket Viewer ","description":"","id":90561824},"90935214":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wick
 et_viewer_10","body":"Wicket Viewer ","description":"","id":90935214},"91902412":{"title":"The issue in more detail","url":"guides/ugodn/ugodn.html#_the_issue_in_more_detail","body":"The issue in more detail  Consider these entities (yuml.me/b8681268):  In the course of a transaction, the Agreement entity is loaded into memory (not necessarily modified), and then new AgreementRoles are associated to it.  All these entities implement Comparable using ObjectContracts, and the implementation of AgreementRole's (simplified) is:  while Agreement's is implemented as:  and Party's is similarly implemented as:  DataNucleus’s persistence-by-reachability algorithm adds the AgreementRole instances into a SortedSet, which causes AgreementRole#compareTo() to fire:  In other words, in figuring out whether AgreementRole requires the persistence-by-reachability algorithm to run, it causes the adjacent associated entity Party to also be retrieved. ","description":" Consider these entities (yuml.me
 /b8681268): ","id":91902412},"92467660":{"title":"API and Usage","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage","body":"API and Usage  There are two main parts to using fixture scripts: the FixtureScripts domain service class, and the FixtureScript view model class:  Let’s look at FixtureScripts domain service in more detail first. ","description":" There are two main parts to using fixture scripts: the FixtureScripts domain service class, and the FixtureScript view model class: ","id":92467660},"96583162":{"title":"Configure toolchains plugin","url":"guides/cgcom/cgcom.html#_configure_toolchains_plugin","body":"Configure toolchains plugin  Apache Isis releases are built using Java 7, enforced using the maven toolchains plugin. Ensure that Java 7 is installed and the toolchains plugin is configured, as described in the contributors' guide. ","description":" Apache Isis releases are built using Java 7, enforced using the maven toolchains plugin. Ensure that Ja
 va 7 is installed and the toolchains plugin is configured, as described in the contributors' guide. ","id":96583162},"99090360":{"title":"Running the App","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_simpleapp-archetype_running-the-app","body":"Running the App  The simpleapp archetype generates a single WAR file, configured to run both the Wicket viewer and the Restful Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection.  Once you’ve built the app, you can run the WAR in a variety of ways. ","description":" The simpleapp archetype generates a single WAR file, configured to run both the Wicket viewer and the Restful Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection. ","id":99090360},"100682258":{"title":"Update dependencies","url":"guides/cgcom/cgcom.html#_update_dependencies","body":"Update dependencies  With the release complete, now is a goo
 d time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues).  You will probably want to create a new JIRA ticket for these updates (or if minor then use the \"catch-all\" JIRA ticket raised earlier for the next release). ","description":" With the release complete, now is a good time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues). ","id":100682258},"102347041":{"title":"Bug","url":"release-notes/release-notes.html#_bug_10","body":"Bug ","description":"","id":102347041},"104167755":{"title":"How to implement a spellchecker?","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How to implement a spellchecker?  From this thread on the Apache Isis users mailing list:  One way to implement is to use the event bus:  if if the change is made through an edit, you can use @Property#domainEvent().  You’ll need some way to know which fields s
 hould be spell checked. Two ways spring to mind:  And you’ll (obviously) also need some sort of spell checker implementation to call. ","description":" From this thread on the Apache Isis users mailing list: ","id":104167755},"104756776":{"title":"BookmarkHolder","url":"guides/rgsvc/rgsvc.html#_code_bookmarkholder_code","body":"BookmarkHolder  The BookmarkHolder interface is intended to be implemented by domain objects that use a Bookmark to reference a (single) domain object; an example might be a class such as the audit entry, mentioned above. The interface is simply:  There are two services that will contribute to this interface:  Either of these can be suppressed, if required, using a vetoing subscriber. For example, to suppress the object property (so that only the lookup(…​) action is ever shown for implementations of BookmarkHolder, define:  A more sophisticated implementation could look inside the passed ev argument and selectively hide or not based on the contributee.
  ","description":" The BookmarkHolder interface is intended to be implemented by domain objects that use a Bookmark to reference a (single) domain object; an example might be a class such as the audit entry, mentioned above. The interface is simply: ","id":104756776},"106558909":{"title":"contributedAs()","url":"guides/rgant/rgant.html#_rgant-ActionLayout_contributedAs","body":"contributedAs()  For a domain service action that can be contributed, the contributedAs() attribute determines how it is contributed: as an action or as an association (ie a property or collection).  The distinction between property or collection is automatic: if the action returns a java.util.Collection (or subtype) then the action is contributed as a collection; otherwise it is contributed as a property.  For a domain service action to be contributed, the domain services must have a nature nature of either VIEW or VIEW_CONTRIBUTIONS_ONLY, and the action must have safe action semantics, and takes a single ar
 gument, namely the contributee domain object.  For example:  It’s also possible to use the attribute to suppress the action completely:  In such cases, though, it would probably make more sense to annotate the action as either hidden or indeed @Programmatic. ","description":" For a domain service action that can be contributed, the contributedAs() attribute determines how it is contributed: as an action or as an association (ie a property or collection). ","id":106558909},"106606865":{"title":"Using the Wicket Viewer","url":"guides/rgcfg/rgcfg.html#_using_the_wicket_viewer","body":"Using the Wicket Viewer  Most of the you’re likely to run Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to Wicket’s \"configuration\" concept:  Wicket’s mechanism for specifying the \"configuration\" is to use a context parameter in web.xml; Apache Isis automatically infers its own deployment type from this. In other words: ","description":" Most o
 f the you’re likely to run Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to Wicket’s \"configuration\" concept: ","id":106606865},"108815435":{"title":"unchanging()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_unchanging","body":"unchanging()  The unchanging() attribute is used to indicate that the value held by the property never changes over time, even when other properties of the object do change.  Setting this attribute to true is used as a hint to the viewer to not redraw the property after an AJAX update of some other property/ies of the object have changed. This is primarily for performance, eg can improve the user experience when rendering PDFs/blobs.  Note that for this to work, the viewer will also ensure that none of the property’s parent component (such as a tab group panel) are re-rendered.  For example: ","description":" The unchanging() attribute is used to indicate that the value held by the property ne
 ver changes over time, even when other properties of the object do change. ","id":108815435},"109833874":{"title":"Persistable","url":"guides/rgcms/rgcms.html#_rgcms_classes_mixins_Persistable","body":"Persistable  All domain entities automatically implement the DataNucleus Persistable role interface as a result of the enhancer process (the fully qualified class name is org.datanucleus.enhancement.Persistable). So as a developer you do not need to write any code to obtain the mixins that contribute to this interface.  These mixin properties/actions are all associated with the \"Metadata\" fieldset. A number of other mixins also contribute properties or actions to the \"Metadata\" fieldset. ","description":" All domain entities automatically implement the DataNucleus Persistable role interface as a result of the enhancer process (the fully qualified class name is org.datanucleus.enhancement.Persistable). So as a developer you do not need to write any code to obtain the mixins that co
 ntribute to this interface. ","id":109833874},"112375674":{"title":"Auditing","url":"migration-notes/migration-notes.html#_auditing","body":"Auditing  The AuditingService SPI service has been deprecated, instead replaced by the AuditerService.  There can be more than one implementation of this new SPI, and a framework-provided implementation (AuditerServiceLogging) will log to a file. The (non-ASF) Incode Platform's audit module also implements the new SPI. ","description":" The AuditingService SPI service has been deprecated, instead replaced by the AuditerService. ","id":112375674},"113098816":{"title":"DataNucleus Object Store","url":"guides/htg.html#_datanucleus_object_store","body":"DataNucleus Object Store ","description":"","id":113098816},"114685873":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_19","body":"Usage  To indicate that an action invocation should be published, annotate it with the @Action#publishing() annotation.  To indicate that an property edit should
  be published, annotate it with the @Property#publishing() annotation.  To indicate that a changed object should be published is to annotate it with the @DomainObject#publishing() annotation. ","description":" To indicate that an action invocation should be published, annotate it with the @Action#publishing() annotation. ","id":114685873},"115229271":{"title":"Domain Entities","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-entities","body":"Domain Entities  Entities are persistent domain objects, with their persistence handled by JDO/DataNucleus. As such, they are mapped to a persistent object store, typically an RDBMS, with DataNucleus taking care of both lazy loading and also the persisting of modified (\"dirty\") objects.  Domain entities are generally decorated with both DataNucleus and Apache Isis annotations. Let’s look at some of the most commonly-used annotations.  To start with, entities are flagged as being \"persistence capable\", indicating how JDO/Data
 Nucleus should manage their identity:  All domain entities will have some sort of mandatory key properties. The example below is a very simple case, where the entity is identified by a name property:  It’s also common for domain entities to have queries annotated on them. These are used by repository domain services to query for instances of the entity:  DataNucleus provides several APIs for defining queries, including entirely programmatic and type-safe APIs; but JDOQL is very similar to SQL and so easily learnt.  The corresponding repository method for the above query is: ","description":" Entities are persistent domain objects, with their persistence handled by JDO/DataNucleus. As such, they are mapped to a persistent object store, typically an RDBMS, with DataNucleus taking care of both lazy loading and also the persisting of modified (\"dirty\") objects. ","id":115229271},"115955772":{"title":"domainClassDto","url":"guides/rgcms/rgcms.html#__rgcms_schema-mml_domainClassDto","
 body":"domainClassDto  The domainClassDto element describes the behaviour and structure of a single domain class within the metamodel. ","description":" The domainClassDto element describes the behaviour and structure of a single domain class within the metamodel. ","id":115955772},"117553409":{"title":"Object Icon","url":"guides/ugfun/ugfun.html#_object_icon","body":"Object Icon  The icon is often the same for all instances of a particular class, and is picked up by convention.  It’s is also possible for an individual instance to return a custom icon, typically so that some significant state of that domain object is represented. For example, a custom icon could be used to represent a shipped order, say, or an overdue library loan. ","description":" The icon is often the same for all instances of a particular class, and is picked up by convention. ","id":117553409},"121574190":{"title":"Related Services","url":"guides/rgsvc/rgsvc.html#_related_services_18","body":"Related Services
   The ActionInteractionContext service allows bulk actions to co-ordinate with each other.  The QueryResultsCache is useful for caching the results of expensive method calls. ","description":" The ActionInteractionContext service allows bulk actions to co-ordinate with each other. ","id":121574190},"121879267":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wicket_viewer_2","body":"Wicket Viewer ","description":"","id":121879267},"122762699":{"title":"Contributee","url":"guides/rgcms/rgcms.html#_rgcms_classes_contributee","body":"Contributee  The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces. ","description":" The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces. ","id":122762699},"125299345":{"title":"
 Example","url":"guides/rgant/rgant.html#_example_2","body":"Example  This example is taken from the (non-ASF) Isis addons' todoapp: ","description":" This example is taken from the (non-ASF) Isis addons' todoapp: ","id":125299345},"125961908":{"title":"Do it!","url":"pages/tg/tg.html#_do_it","body":"Do it! ","description":"","id":125961908},"134804772":{"title":"How to handle void/null results","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-handle-void-and-null-results","body":"How to handle void/null results  From this thread on the Apache Isis users mailing list:  One way to implement this idea is to provide a custom implementation of the RoutingService SPI domain service. The default implementation will either return the current object (if not null), else the home page (as defined by @HomePage) if one exists.  The following custom implementation refines this to use the breadcrumbs (available in the Wicket viewer) to return the first non-deleted domain object found in
  the list of breadcrumbs:  Note that the above implementation uses Java 8, so if you are using Java 7 then you’ll need to backport accordingly. ","description":" From this thread on the Apache Isis users mailing list: ","id":134804772},"144529895":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_44","body":"Improvement ","description":"","id":144529895},"148135206":{"title":"Layout Metadata Reader (deprecated)","url":"guides/ugbtb/ugbtb.html#_ugbtb_programming-model_layout-metadata-reader","body":"Layout Metadata Reader (deprecated)  The metadata for domain objects is obtained both annotations and files. There is also deprecated support for reading layouts from .layout.json files. This service provides an SPI (and default implementation) for reading layouts defined in this fashion. ","description":" The metadata for domain objects is obtained both annotations and files. There is also deprecated support for reading layouts from .layout.json files. This se
 rvice provides an SPI (and default implementation) for reading layouts defined in this fashion. ","id":148135206},"153666205":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_17","body":"Implementation  The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.title.TitleServiceDefault). ","description":" The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.title.TitleServiceDefault). ","id":153666205},"155655500":{"title":"@PrimaryKey (javax.jdo)","url":"guides/rgant/rgant.html#_rgant-PrimaryKey","body":"@PrimaryKey (javax.jdo) ","description":"","id":155655500},"158033412":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_27","body":"SPI  The SPI defined by the service is: ","description":" The SPI defined by the service is: ","id":158033412},"158069558":{"title":"Usability: Defaults","url":"pages/tg/tg.html#_usability_defaults","body":"Usability: Defaults ","descripti
 on":"","id":158069558},"158897592":{"title":"Refactoring","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_refactoring","body":"Refactoring  Loads of good stuff on the Refactor menu; most used are:  If you can’t remember all those shortcuts, just use ctrl-shift-alt-T (might want to rebind that to something else!) and get a context-sensitive list of refactorings available for the currently selected object ","description":" Loads of good stuff on the Refactor menu; most used are: ","id":158897592},"159072030":{"title":"(non-ASF) Incode Platform","url":"migration-notes/migration-notes.html#_migration-notes_1.14.0-to-1.15.0_incode-platform","body":"(non-ASF) Incode Platform  The various (non-ASF) Isis Addons and Incode Catalog have also been combined into a single \"Incode Platform\".  While each module can still be consumed individually, the new platform versions consistently (a change in any one module will result in a re-release of all). This should make these modules easi
 er to consume, and easier to maintain/develop.  All the modules remain open source, still licensed under the ASF v2.0 license.  As of this release, none of the groupIds or artifactIds have changed. They will be rationalized/made consistent in a future release; most probably to coincide with v2.0.0 of the framework. ","description":" The various (non-ASF) Isis Addons and Incode Catalog have also been combined into a single \"Incode Platform\". ","id":159072030},"160872749":{"title":"Related Services","url":"guides/rgfis/rgfis.html#_related_services","body":"Related Services  The default implementation of ContentNegotiationService delegates to ContentMappingService (if present) to convert domain entities into a stable form (eg DTO).  The ContentNegotiationService is itself called by the (default implementation of) RepresentationService. ","description":" The default implementation of ContentNegotiationService delegates to ContentMappingService (if present) to convert domain entities i
 nto a stable form (eg DTO). ","id":160872749},"163456888":{"title":"Dependency upgrade","url":"release-notes/release-notes.html#_dependency_upgrade_9","body":"Dependency upgrade ","description":"","id":163456888},"163915714":{"title":"web.xml","url":"migration-notes/migration-notes.html#_web_xml","body":"web.xml  In the web.xml, the \"isis.viewers\" context-param is now ignored. Instead the viewer_wicket.properties and viewer_restfulobjects.properties will both be loaded if present (but neither need be present). ","description":" In the web.xml, the \"isis.viewers\" context-param is now ignored. Instead the viewer_wicket.properties and viewer_restfulobjects.properties will both be loaded if present (but neither need be present). ","id":163915714},"165602306":{"title":"GridLoaderService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridLoaderService","body":"GridLoaderService  The GridLoaderService provides the ability to load the XML layout (grid) for a domain class.
  ","description":" The GridLoaderService provides the ability to load the XML layout (grid) for a domain class. ","id":165602306},"165750333":{"title":"loaded()","url":"guides/rgcms/rgcms.html#_rgcms_methods_lifecycle_loaded","body":"loaded()  The loaded() lifecycle callback method is called when a (persistent) object has just been loaded from the object store. ","description":" The loaded() lifecycle callback method is called when a (persistent) object has just been loaded from the object store. ","id":165750333},"166045728":{"title":"Sanity Check","url":"guides/cgcom/cgcom.html#_sanity_check_2","body":"Sanity Check  Ensure that the framework builds ok using the same command that your CI server is set up to execute (see section above). ","description":" Ensure that the framework builds ok using the same command that your CI server is set up to execute (see section above). ","id":166045728},"166899251":{"title":"Installing and Setting up","url":"guides/dg/dg.html#__dg_ide_intellij_i
 nstalling","body":"Installing and Setting up  This section covers installation and setup. These notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but are believed to be compatible with more recent versions/other editions of the IDE. ","description":" This section covers installation and setup. These notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but are believed to be compatible with more recent versions/other editions of the IDE. ","id":166899251},"167039338":{"title":"Task","url":"release-notes/release-notes.html#_task_14","body":"Task ","description":"","id":167039338},"174738887":{"title":"Related functionality","url":"guides/ugvw/ugvw.html#_related_functionality_2","body":"Related functionality  The Recent Pages also lists recently visited pages, selected from a drop-down. ","description":" The Recent Pages also lists recently visited pages, selected from a drop-down. ","id":174738887},"175028546":{"title":"Implementation","url":
 "guides/rgsvc/rgsvc.html#_implementation_5","body":"Implementation  The framework provides a default implementation of this service, namely GridServiceDefault. ","description":" The framework provides a default implementation of this service, namely GridServiceDefault. ","id":175028546},"175197970":{"title":"Performance tuning","url":"pages/tg/tg.html#_performance_tuning","body":"Performance tuning ","description":"","id":175197970},"175636232":{"title":"RepositoryService","url":"guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_RepositoryService","body":"RepositoryService  The RepositoryService collects together methods for creating, persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the JDO/DataNucleus objectstore.  You can use it during prototyping to write naive queries (find all rows, then filter using the Guava Predicate API, or you can use it to call JDO named queries using JDOQL.  As an alternative, you could also u
 se JDO typesafe queries through the IsisJdoSupport service. ","description":" The RepositoryService collects together methods for creating, persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the JDO/DataNucleus objectstore. ","id":175636232},"176767338":{"title":"Command and Events","url":"guides/rgsvc/rgsvc.html#__rgsvc_intro_commands-and-events","body":"Command and Events  A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these. These services capture information which can then be used for various purposes, most notably for auditing or for publishing events, or for deferring execution such that the execution be performed in the background at some later date.  The diagram below shows how these services fit together. The outline boxes are services while the coloured boxes represent data structures - defined in 
 the applib and therefore accessible to domain applications - which hold various information about the executions.  To explain:  Implementations of CommandService can use the Command#getMemento() method to obtain a XML equivalent of that Command, reified using the cmd.xsd schema. This can be converted back into a CommandDto using the CommandDtoUtils utility class (part of the applib).  Similarly, implementations of PublisherService can use the InteractionDtoUtils utility class to obtain a InteractionDto representing the interaction, either just for a single execution or for the entire call-graph. This can be converted into XML in a similar fashion.  Likewise, the PublishedObjects class passed to the PublisherService at the end of the interaction provides the PublishedObjects#getDto() method which returns a ChangesDto instance. This can be converted into XML using the ChangesDtoUtils utility class.  One final point: multiple PublisherService implementations are supported because diffe
 rent implementations may have different responsibilities. For example, the (non-ASF) Incode Platform's publishmq module is responsible for publishing messages onto an ActiveMQ event bus, for inter-system communication. However, the SPI can also be used for profiling; each execution within the call-graph contains metrics of the number of objects loaded or modified as a result of that execution, and thus could be used for application profiling. The framework provides a default PublisherServiceLogging implementation that logs this using SLF4J. ","description":" A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these. These services capture information which can then be used for various purposes, most notably for auditing or for publishing events","id":176767338},"177970240":{"title":"InteractionContext","url":"guides/rgsvc/rgsvc.html#_code_interactioncontext_code","body
 ":"InteractionContext  The public API of the InteractionContext domain service itself consists of simply:  This class is concrete (that is, it is also the implementation). ","description":" The public API of the InteractionContext domain service itself consists of simply: ","id":177970240},"178125062":{"title":"domainEvent()","url":"guides/rgant/rgant.html#_rgant-Action_domainEvent","body":"domainEvent()  Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s actions, the events that are fired are:  Subscribers subscribe through the EventBusService using either Guava or Axon Framework annotations and can influence each of these phases.  By default the event raised is ActionDomainEvent.Default. For example:  The domainEvent() attribute allows a custom subclass to be emitted allowing more precise subscriptions (to those s
 ubclasses) to be defined instead. This attribute is also supported for collections and properties.  For example:  The benefit is that subscribers can be more targeted as to the events that they subscribe to. ","description":" Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s actions, the events that are fired are: ","id":178125062},"183226640":{"title":"updatedLifecycleEvent()","url":"guides/rgant/rgant.html#_rgant-DomainObject_updatedLifecycleEvent","body":"updatedLifecycleEvent()  Whenever a (persistent) domain object has been modified and has been updated in the database, an \"updated\" lifecycle event is fired.  Subscribers subscribe through the EventBusService and can use the event to obtain a reference to the domain object.  By default the event raised is ObjectUpdatedEvent.Default. For example:  The purpose 
 of the updatedLifecycleEvent() attribute is to allows a custom subclass to be emitted instead. A similar attribute is available for other lifecycle events.  For example:  The benefit is that subscribers can be more targeted as to the events that they subscribe to. ","description":" Whenever a (persistent) domain object has been modified and has been updated in the database, an \"updated\" lifecycle event is fired. ","id":183226640},"188123644":{"title":"2013","url":"pages/articles-and-presentations/articles-and-presentations.html#_2013","body":"2013 ","description":"","id":188123644},"189180810":{"title":"HoldsUpdatedAt","url":"guides/rgcms/rgcms.html#_rgcms_classes_roles_HoldsUpdatedAt","body":"HoldsUpdatedAt  The HoldsUpdatedAt role interface allows the (framework-provided) TimestampService to update each object with the current timestamp whenever it is modified in a transaction.  The interface is defined as:  The current time is obtained from the ClockService.  Entities that impl
 ement this interface often also implement HoldsUpdatedBy role interface; as a convenience the Timestampable interface combines the two roles. ","description":" The HoldsUpdatedAt role interface allows the (framework-provided) TimestampService to update each object with the current timestamp whenever it is modified in a transaction. ","id":189180810},"191180113":{"title":"persistence.xml","url":"guides/ugodn/ugodn.html#_ugodn_configuring_persistence-xml","body":"persistence.xml  DataNucleus will for itself also and read the META-INF/persistence.xml. In theory it can hold mappings and even connection strings. However, with Apache Isis we tend to use annotations instead and externalize connection strings. so its definition is extremely simply, specifying just the name of the \"persistence unit\".  Here’s the one provided by the SimpleApp archetype:  Normally all one needs to do is to change the persistence-unit name.  See DataNucleus' documentation on persistence.xml to learn more. "
 ,"description":" DataNucleus will for itself also and read the META-INF/persistence.xml. In theory it can hold mappings and even connection strings. However, with Apache Isis we tend to use annotations instead and externalize connection strings. so its definition is extremely simply, specifying just the name of the \"persistence unit","id":191180113},"193219460":{"title":"API","url":"guides/rgsvc/rgsvc.html#_rgsvc_metadata-api_MetamodelService_api","body":"API  The API defined by the service is: ","description":" The API defined by the service is: ","id":193219460},"193237835":{"title":"Core","url":"release-notes/release-notes.html#_core_8","body":"Core ","description":"","id":193237835},"193497711":{"title":"UI Hints","url":"guides/ugfun/ugfun.html#_ugfun_ui-hints","body":"UI Hints ","description":"","id":193497711},"194608562":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_19","body":"SPI  It is also possible to define use some other underlying event bus implementation, by imp
 lementing the EventBusImplementation SPI:  As is probably obvious, the EventBusService just delegates down to these method calls when its own similarly named methods are called.  If you do provide your own implementation of this SPI, be aware that your subscribers will need to use whatever convention is required (eg different annotations) such that the events are correctly routed through to your subscribers.  If you have written your own implementation of the EventBusServiceImplementation SPI, then specify instead its fully-qualified class name: ","description":" It is also possible to define use some other underlying event bus implementation, by implementing the EventBusImplementation SPI: ","id":194608562},"195374240":{"title":"Update the LDAP committee (if a PMC member)","url":"guides/cgcom/cgcom.html#_update_the_ldap_committee_if_a_pmc_member","body":"Update the LDAP committee (if a PMC member)  (Assuming that the new committer is a PMC member), also add them as to the PMC commi
 ttee. This takes two steps:  The new committer does not officially become a member of the PMC until the ASF records have been updated. ","description":" (Assuming that the new committer is a PMC member), also add them as to the PMC committee. This takes two steps: ","id":195374240},"195848147":{"title":"ICLA, obtain new account","url":"guides/cgcom/cgcom.html#_icla_obtain_new_account","body":"ICLA, obtain new account  If required (that is, if the committer is not already a committer for a different ASF project), then ask them to complete an ICLA. As a result of this, they should also get an @apache.org user name.  More info can be found in the ASF new committers guide. ","description":" If required (that is, if the committer is not already a committer for a different ASF project), then ask them to complete an ICLA. As a result of this, they should also get an @apache.org user name. ","id":195848147},"196560907":{"title":"XJC profile","url":"guides/rgmvn/rgmvn.html#__rgmvn_xsd_xsd-su
 bmodule_xjc-profile","body":"XJC profile  The xjc profile reads the XSD generated by the xsd goal, and from it generates Java DTOs. Note that this isn’t round-tripping: the original view model is only for use within the Isis app, whereas the DTO generated from the XSDs is for use in a standalone context, eg in a Java subscriber on an event bus.  The xjc profile is defined as:  The referenced catalog.xml file instructs the xjc plugin how to resolve referenced schema locations. Only a reference for the Apache Isis common schema is likely to be needed: ","description":" The xjc profile reads the XSD generated by the xsd goal, and from it generates Java DTOs. Note that this isn’t round-tripping: the original view model is only for use within the Isis app, whereas the DTO generated from the XSDs is for use in a standalone context","id":196560907},"198329644":{"title":"Strings (Length)","url":"guides/ugfun/ugfun.html#__ugfun_programming-model_properties_datatypes_strings","body":"Stri
 ngs (Length)  By default JDO/DataNucleus will map string properties to a VARCHAR(255). To limit the length, use the @Column(length=…​) annotation.  For example:  This is a good example of a case where Apache Isis infers domain semantics from the JDO annotation. ","description":" By default JDO/DataNucleus will map string properties to a VARCHAR(255). To limit the length, use the @Column(length=…​) annotation. ","id":198329644},"198382465":{"title":"Actions","url":"pages/tg/tg.html#_actions","body":"Actions ","description":"","id":198382465},"201216196":{"title":"GitLab","url":"guides/ugfun/ugfun.html#_gitlab","body":"GitLab  Create a git repository \"myapp\" in GitLab.  Using Settings > CI/CD, specify the following Secret Variables:  Finally, push a copy of the generated application to this repository using the instructions provided by GitLab.  This will kick off a pipeline that will build the image and push to DockerHub.  The tag name is based on a combination of the date, 
 the branch and the git shaId. ","description":" Create a git repository \"myapp\" in GitLab. ","id":201216196},"203208629":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_18","body":"New Feature ","description":"","id":203208629},"203740710":{"title":"RoutingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_RoutingService","body":"RoutingService  The RoutingService provides the ability to return (and therefore render) an alternative object from an action invocation.  There are two primary use cases:  Currently the routing service is used only by the Wicket viewer; it is ignored by the Restful Objects viewer. ","description":" The RoutingService provides the ability to return (and therefore render) an alternative object from an action invocation. ","id":203740710},"204452611":{"title":"Related services","url":"guides/rgsvc/rgsvc.html#_related_services_15","body":"Related services  The ConfigurationServiceMenu exposes the allConfiguratio
 nProperties action in the user interface. ","description":" The ConfigurationServiceMenu exposes the allConfigurationProperties action in the user interface. ","id":204452611},"207811701":{"title":"API","url":"guides/rgsvc/rgsvc.html#_api_2","body":"API  The API of TitleService is: ","description":" The API of TitleService is: ","id":207811701},"209853740":{"title":"To run","url":"guides/rgmvn/rgmvn.html#_to_run","body":"To run  The plugin is activated by default, so is run simply using:  This will run any tests, and then also - because the plugin is activated by the isis-validate property and bound to the test phase, will run the plugin’s validate goal.  If for any reason you want to disable the validation, use: ","description":" The plugin is activated by default, so is run simply using: ","id":209853740},"213642269":{"title":"Moving on","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_helloworld-archetype_moving-on","body":"Moving on  When you are ready to start working o
 n your own app, we don’t recommend building on top of the helloworld app.  Instead, we suggest that you start with the simpleapp archetype instead. Although a little more complex, it provides more structure and tests, all of which will help you as your application grows. ","description":" When you are ready to start working on your own app, we don’t recommend building on top of the helloworld app. ","id":213642269},"216231183":{"title":"Raising a pull request","url":"guides/dg/dg.html#_raising_a_pull_request","body":"Raising a pull request  If you have your own fork, you can now simply push the changes you’ve made locally to your fork:  This will create a corresponding branch in the remote github repo. If you use gitk --all, you’ll also see a remotes/origin/ISIS-123-blobs branch.  Then, use github to raise a pull request. Pull requests sent to the Apache GitHub repositories will forward a pull request e-mail to the dev mailing list. You’ll probably want to sign up to the d
 ev mailing list first before issuing your first pull request (though that isn’t mandatory).  The process to raise the pull request, broadly speaking: ","description":" If you have your own fork, you can now simply push the changes you’ve made locally to your fork: ","id":216231183},"220685197":{"title":"AbstractSubscriber","url":"guides/rgcms/rgcms.html#_rgcms_classes_super_AbstractSubscriber","body":"AbstractSubscriber  This is a convenience superclass for creating subscriber domain services on the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to automatically register/unregister itself with the EventBusService.  It’s important that subscribers register before any domain services that might emit events on the EventBusService. For example, the (non-ASF) Incode Platform security module provides a domain service that automatically seeds certain domain entities; these will generate lifecycle events and so any subscribers must be registered before such seed ser
 vices. The easiest way to do this is to use the @DomainServiceLayout#menuOrder() attribute.  As a convenience, the AbstractSubscriber specifies this attribute. ","description":" This is a convenience superclass for creating subscriber domain services on the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to automatically register/unregister itself with the EventBusService. ","id":220685197},"222371586":{"title":"Nullability","url":"guides/rgant/rgant.html#_rgant-Column_allowsNull","body":"Nullability  The allowsNull() attribute is used to specify if a property is mandatory or is optional.  For example:  Isis also provides @Property#optionality() attribute. If both are specified, Apache Isis will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.  You should also be aware that in the lack of either the @Column#allowsNull() or the @Property#optionality() attributes, that the JDO and Apache I
 sis defaults differ. Apache Isis rule is straight-forward: properties are assumed to be required. JDO on the other hand specifies that only primitive types are mandatory; everything else is assumed to be optional. Therefore a lack of either annotation can also trigger the fail-fast validation check.  In the vast majority of cases you should be fine just to add the @Column#allowsNull() attribute to the getter. But see the documentation for @Property#optionality() attribute for discussion on one or two minor edge cases. ","description":" The allowsNull() attribute is used to specify if a property is mandatory or is optional. ","id":222371586},"227377078":{"title":"Initialization","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-services_initialization","body":"Initialization  Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed).  An Apache Isis session is available when initia
 lization occurs (so services can interact with the object store, for example).  The framework will call any public method annotated with @PostConstruct with either no arguments of an argument of type Map<String,String>. In the latter case, the framework passes in the configuration (isis.properties and any other component-specific configuration files).  Shutdown is similar; the framework will call any method annotated with @PreDestroy. ","description":" Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed). ","id":227377078},"228550183":{"title":"Policies","url":"guides/cgcom/cgcom.html#_cgcom_policies","body":"Policies ","description":"","id":228550183},"229025509":{"title":"Remove references to isis-viewer-wicket parent pom.","url":"migration-notes/migration-notes.html#_remove_references_to_code_isis_viewer_wicket_code_parent_pom","body":"Remove references to isis-viewer-wicket parent pom
 .  In earlier releases the Wicket viewer defined its own parent pom.xml for dependency management and its dependencies and to declare the various submodules that make up the viewer. This pom.xml has now been incorporated into the parent pom.xml for the Core framework.  Therefore, in the parent pom.xml of your own domain applications, remove: ","description":" In earlier releases the Wicket viewer defined its own parent pom.xml for dependency management and its dependencies and to declare the various submodules that make up the viewer. This pom.xml has now been incorporated into the parent pom.xml for the Core framework. ","id":229025509},"230599582":{"title":"AuditingServiceInternal","url":"guides/rgfis/rgfis.html#_rgfis_persistence-layer_AuditingServiceInternal","body":"AuditingServiceInternal  The (internal) AuditingServiceInternal domain service acts as an internal facade to any configured AuditingService and AuditerService services. It is responsible for obtaining the details of
  all changes to domain objects within an interaction, and then to call the configured AuditingService to actually create audit entries of those changes. ","description":" The (internal) AuditingServiceInternal domain service acts as an internal facade to any configured AuditingService and AuditerService services. It is responsible for obtaining the details of all changes to domain objects within an interaction, and then to call the configured AuditingService to actually create audit entries of those changes. ","id":230599582},"232471644":{"title":"Registering Subscribers","url":"guides/rgsvc/rgsvc.html#_registering_subscribers","body":"Registering Subscribers  The register() method should be called in the @PostConstruct lifecycle method. It is valid and probably the least confusing to readers to also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, unregistering is actually a no-op).  For example:  This works for both singleton (application-scoped) and also
  @RequestScoped domain services. ","description":" The register() method should be called in the @PostConstruct lifecycle method. It is valid and probably the least confusing to readers to also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, unregistering is actually a no-op). ","id":232471644},"238546442":{"title":"rebuildMetamodel()","url":"guides/rgcms/rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel","body":"rebuildMetamodel()  The Object_rebuildMetamodel mixin provides the ability to discard the current internal metamodel data (an instance of ObjectSpecification) for the domain class of the rendered object, and recreate from code and other sources (most notably, layout XML data). It has the following signature: ","description":" The Object_rebuildMetamodel mixin provides the ability to discard the current internal metamodel data (an instance of ObjectSpecification) for the domain class of the rendered object, and recreate from code and other 
 sources (most notably, layout XML data). It has the following signature: ","id":238546442},"238801420":{"title":"REST API Mapping","url":"guides/rgsvc/rgsvc.html#_rest_api_mapping","body":"REST API Mapping  The /restful/health path must be specified as a \"passThru\" so that no authentication challenge is issued.  This is a comma separated list, so there may be other values also (for example /restful/swagger, as shown above). ","description":" The /restful/health path must be specified as a \"passThru\" so that no authentication challenge is issued. ","id":238801420},"238979657":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_22","body":"New Feature ","description":"","id":238979657},"240026998":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_14","body":"Improvement ","description":"","id":240026998},"242030985":{"title":"1.4.0","url":"release-notes/release-notes.html#_release-notes_1.4.0","body":"1.4.0 ","description":"","id":
 242030985},"243439147":{"title":"hidden()","url":"guides/rgant/rgant.html#_rgant-Property_hidden","body":"hidden()  Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to actions and collections.  For example:  The acceptable values for the where parameter are:  For example, if a property is annotated with @Title, then normally this should be hidden from all tables. Annotating with @Property(where=Where.NOWHERE) overrides this. ","description":" Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to actions and collections. ","id":243439147},"243876171":{"title":"Task","url":"release-notes/release-notes.html#_task_28","body":"Task ","description":"","id":243876171},"244520152":{"title":"SessionLoggingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_SessionLoggingService","body":"SessionLoggingServic
 e  The SessionLoggingService defines an SPI to keep track of (typically: to log) the current sessions that are using the application. ","description":" The SessionLoggingService defines an SPI to keep track of (typically: to log) the current sessions that are using the application. ","id":244520152},"246409050":{"title":"Using system properties","url":"guides/ugbtb/ugbtb.html#_using_system_properties","body":"Using system properties  The servlet context initializer will search for any system properties called isis.xxx and if present will use them as overrides.  Thus, an alternative option for a Docker image is to bootstrap the servlet container (Tomcat, Jetty) with appropriate system properties set up. For example, with Tomcat this can be done by writing into the conf/catalina.properties file (see for example this stackoverflow post).  The Docker’s ENTRYPOINT therefore just needs to parse the Docker container’s own command line arguments and use to create this file. ","descripti
 on":" The servlet context initializer will search for any system properties called isis.xxx and if present will use them as overrides. ","id":246409050},"255768608":{"title":"Multi-tenancy support","url":"pages/isis-in-pictures/isis-in-pictures.html#_multi_tenancy_support","body":"Multi-tenancy support  One significant feature of the (non-ASF) Incode Platform's security module is the ability to associate users and objects with a \"tenancy\". The todoapp uses this feature so that different users' list of todo items are kept separate from one another. A user with administrator is able to switch their own \"tenancy\" to the tenancy of some other user, in order to access the objects in that tenancy:  For more details, see the (non-ASF) Incode Platform's security module README. ","description":" One significant feature of the (non-ASF) Incode Platform's security module is the ability to associate users and objects with a \"tenancy\". The todoapp uses this feature so that different users'
  list of todo items are kept separate from one another. A user with administrator is able to switch","id":255768608},"257661017":{"title":"AppManifest (bootstrapping)","url":"guides/rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping","body":"AppManifest (bootstrapping)  This section describes how to implement the AppManifest interface to bootstrap both an Apache Isis web application, and also its integration tests. ","description":" This section describes how to implement the AppManifest interface to bootstrap both an Apache Isis web application, and also its integration tests. ","id":257661017},"259202548":{"title":"Run-as","url":"guides/htg.html#_ugsec_hints-and-tips_run-as","body":"Run-as  This hint shows how to temporarily change the current user as reported by Shiro. This can be useful to support \"Run As\", for example.  The heavy lifting is done in ShiroService:  This could be exposed in the UI using a simple RunAsService, for example:  Credits: adapted from this gist.
  ","description":" This hint shows how to temporarily change the current user as reported by Shiro. This can be useful to support \"Run As\", for example. ","id":259202548},"259358868":{"title":"Hints and Tips","url":"guides/ugodn/ugodn.html#_ugodn_hints-and-tips","body":"Hints and Tips ","description":"","id":259358868},"262898169":{"title":"ResourceCachingFilter","url":"guides/ugbtb/ugbtb.html#_code_resourcecachingfilter_code","body":"ResourceCachingFilter  The ResourceCachingFilter adds HTTP cache headers to specified resources, based on their pattern.  Its definition is:  Its mapping is: ","description":" The ResourceCachingFilter adds HTTP cache headers to specified resources, based on their pattern. ","id":262898169},"266250802":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_2","body":"Implementation  There is no default implementation of this service.  The (non-ASF) Isis addons' kitchensink app provides an example implementation:  which is rendered a
 s: ","description":" There is no default implementation of this service. ","id":266250802},"267695496":{"title":"Building Apache Isis","url":"guides/dg/dg.html#_dg_building-isis","body":"Building Apache Isis ","description":"","id":267695496},"273843820":{"title":"Simulated UI (WrapperFactory)","url":"guides/ugtst/ugtst.html#_simulated_ui_code_wrapperfactory_code","body":"Simulated UI (WrapperFactory)  When we talk about integration tests/specs here, we mean tests that exercise the domain object logic, through to the actual database. But we also want the tests to exercise the app from the users’s perspective, which means including the user interface.  For most other frameworks that would require having to test the application in a very heavy weight/fragile fashion using a tool such as Selenium, driving a web browser to navigate . In this regard though, Apache Isis has a significant trick up its sleeve. Because Apache Isis implements the naked objects pattern, it means that the UI 
 is generated automatically from declared domain-objects, -views and -services. This therefore allows for other implementations of the UI.  The WrapperFactory domain service allows a test to wrap domain objects and thus to interact with said objects \"as if\" through the UI:  If the test invokes an action that is disabled, then the wrapper will throw an appropriate exception. If the action is ok to invoke, it delegates through.  What this means is that an Apache Isis application can be tested end-to-end without having to deploy it onto a webserver; the whole app can be tested while running in-memory. Although integration tests re (necessarily) slower than unit tests, they are not any harder to write (in fact, in some respects they are easier). ","description":" When we talk about integration tests/specs here, we mean tests that exercise the domain object logic, through to the actual database. But we also want the tests to exercise the app from the users’s perspective, which means i
 ncluding the user interface. ","id":273843820},"273985863":{"title":"addTo…​() (deprecated)","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_addTo","body":"addTo…​() (deprecated)  The addTo…​() supporting method is called whenever an object is added to a collection. Its purpose is to allow additional business logic to be performed.  For example:  See also removeFrom…​()` ","description":" The addTo…​() supporting method is called whenever an object is added to a collection. Its purpose is to allow additional business logic to be performed. ","id":273985863},"278859977":{"title":"promptStyle()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_promptStyle","body":"promptStyle()  The promptStyle() attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page).  If the attribute is not set, then the valu
 e of the configuration property isis.viewer.wicket.promptStyle is used. If this is itself not set, then an inline prompt is used.  For example:  Alternatively, the promptStyle() can be specified using file-based layouts. ","description":" The promptStyle() attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page). ","id":278859977},"278890330":{"title":"Build a domain app","url":"pages/tg/tg.html#_build_a_domain_app","body":"Build a domain app ","description":"","id":278890330},"278999912":{"title":"Integration API","url":"guides/rgsvc/rgsvc.html#_rgsvc_integration-api","body":"Integration API ","description":"","id":278999912},"280598039":{"title":"_repos.txt","url":"guides/dg/dg.html#_code_repos_txt_code","body":"_repos.txt  Create a file _repos.txt that catalogues the repositories, eg: ","description":" Create a file _repo
 s.txt that catalogues the repositories, eg: ","id":280598039},"282766365":{"title":"Object CSS Styling","url":"guides/ugfun/ugfun.html#_object_css_styling","body":"Object CSS Styling  It is also possible for an object to return a CSS class. In conjunction with customized CSS this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour. ","description":" It is also possible for an object to return a CSS class. In conjunction with customized CSS this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour. ","id":282766365},"285898371":{"title":"ObjectUpdatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectUpdatedEvent","body":"ObjectUpdatedEvent  Subclass of AbstractLifecycleEvent, broadcast when an object has just been updated in the database. This is done either explicitly when the current transaction is flushed using
  the RepositoryService's #flush(…​) method, else is done implicitly when the transaction commits at the end of the user request.  ObjectUpdatedEvent.Default is the implementation that is used by default, but this can be overridden using @DomainObject#updatedLifecycleEvent(). ","description":" Subclass of AbstractLifecycleEvent, broadcast when an object has just been updated in the database. This is done either explicitly when the current transaction is flushed using the RepositoryService's #flush(…​) method, else is done implicitly when the transaction commits at the end of the user request. ","id":285898371},"286850218":{"title":"Dependent choices for action parameters","url":"guides/ugfun/ugfun.html#_dependent_choices_for_action_parameters","body":"Dependent choices for action parameters  For action it is also possible (in a limited form) to define dependencies between parameters. Specifically, if one parameter is a drop-down choice, then other drop-down choices can be der
 ived from it.  A good example is a category/sub-category:  Note how the choices method for the 2nd parameter also accepts the first parameter. ","description":" For action it is also possible (in a limited form) to define dependencies between parameters. Specifically, if one parameter is a drop-down choice, then other drop-down choices can be derived from it. ","id":286850218},"286919998":{"title":"Install Project Lombok","url":"guides/dg/dg.html#__dg_ide_eclipse_configure-lombok","body":"Install Project Lombok  The SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this requires an installation step:  Then restart Eclipse. ","description":" The SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this requires an installation step: ","id":286919998},"287120012":{"title":"Actions","url":"guides/ugfun/ugfun.html#_actions_2","body":"Acti
 ons  Of course, the precondition business rules described above are only one type of business rule.  More generally, business rules are implemented in the form of the implementation of actions. Rather than have the end-user have to edit individual properties of numerous objects, an action can encode these rules and allow only safe transformations of the application from one consistent state to the next. ","description":" Of course, the precondition business rules described above are only one type of business rule. ","id":287120012},"288377989":{"title":"Philosophy and Architecture","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_philosophy","body":"Philosophy and Architecture  This section describes some of the core ideas and architectural patterns upon which Apache Isis builds. ","description":" This section describes some of the core ideas and architectural patterns upon which Apache Isis builds. ","id":288377989},"288392697":{"title":"User Experience","url":"guides/ugvw/ugvw.
 html#_user_experience_3","body":"User Experience  The copy URL dialog is typically obtained by clicking on the icon.  Alternatively, alt+] will also open the dialog. It can be closed with either OK or the Esc key. ","description":" The copy URL dialog is typically obtained by clicking on the icon. ","id":288392697},"291813215":{"title":"Raising events programmatically","url":"guides/rgant/rgant.html#_raising_events_programmatically","body":"Raising events programmatically  Normally events are only raised for interactions through the UI. However, events can be raised programmatically either by calling the EventBusService API directly, or by emulating the UI by wrapping the target object using the WrapperFactory domain service. ","description":" Normally events are only raised for interactions through the UI. However, events can be raised programmatically either by calling the EventBusService API directly, or by emulating the UI by wrapping the target object using the WrapperFactory d
 omain service. ","id":291813215},"292881794":{"title":"FixtureScript","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage_FixtureScript","body":"FixtureScript  A fixture script is ultimately just a block of code that can be executed, so it’s up to you how you implement it to set up the system. However, we strongly recommend that you use it to invoke actions on business objects, in essence to replay what a real-life user would have done. That way, the fixture script will remain valid even if the underlying implementation of the system changes in the future.  For example, here’s a fixture script called RecreateSimpleObjects. (This used to be part of the SimpleApp archetype, though the archetype now ships with a more sophisticated design, discussed below):  Because this script has exposed a \"number\" property, it’s possible to set this from within the UI. For example:  When this is executed, the framework will parse the text and attempt to reflectively set the co
 rresponding properties on the fixture result. So, in this case, when the fixture script is executed we actually get 6 objects created. ","description":" A fixture script is ultimately just a block of code that can be executed, so it’s up to you how you implement it to set up the system. However, we strongly recommend that you use it to invoke actions on business objects, in essence to replay what a real","id":292881794},"293860175":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_10","body":"Usage  For example:

<TRUNCATED>

[4/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/elasticlunr/index.json
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/elasticlunr/index.json b/content/versions/SNAPSHOT/elasticlunr/index.json
index ecc5d5b..ec7cdd9 100644
--- a/content/versions/SNAPSHOT/elasticlunr/index.json
+++ b/content/versions/SNAPSHOT/elasticlunr/index.json
@@ -1 +1 @@
-{"version":"0.9.5","fields":["title","body","description","url"],"ref":"id","documentStore":{"docs":{"372886":{"title":"Rows, full-width cols, and tabs","url":"guides/ugvw/ugvw.html#_rows_full_width_cols_and_tabs","body":"Rows, full-width cols, and tabs  The example layout consists of three rows: a row for the object/icon, a row containing a properties, and a row containing collections. In all three cases the row contains a single column spanning the full width of the page. For the property and collection rows, the column contains a tab group.  This corresponds to the following XML:  You will notice that one of the columns has an unreferencedActions attribute, while one of the tabGroups has a similar unreferencedCollections attribute. This topic is discussed in more detail below. ","description":" The example layout consists of three rows: a row for the object/icon, a row containing a properties, and a row containing collections. In all three cases the row contains a single column s
 panning the full width of the page. For the property and collection rows, the column contains a","id":372886},"2646929":{"title":"Apache Isis vs …​","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_apache-isis-vs","body":"Apache Isis vs …​  Many other frameworks promise rapid application development and provide automatically generated user interfaces, so how do they compare to Apache Isis? ","description":" Many other frameworks promise rapid application development and provide automatically generated user interfaces, so how do they compare to Apache Isis? ","id":2646929},"3836440":{"title":"Running","url":"guides/dg/dg.html#__dg_ide_intellij_running","body":"Running  Let’s see how to run both the app and the tests. ","description":" Let’s see how to run both the app and the tests. ","id":3836440},"11600575":{"title":"Using Contributions","url":"pages/tg/tg.html#_using_contributions","body":"Using Contributions ","description":"","id":11600575},"12196042":{"title":"Te
 rtiary Menu","url":"guides/ugvw/ugvw.html#_tertiary_menu","body":"Tertiary Menu  Domain services' actions can be associated with the tertiary menu using the same @DomainServiceLayout annotation, but be aware that the @DomainServiceLayout#name() attribute will be ignored (there is only one effective menu).  For example, the updateEpochDate(…​) and listAllSettings(…​) actions come from the following service:  Because the number of items on the tertiary menu is expected to be small and most will pertain to the current user, the viewer does not place dividers between actions from different services on the tertiary menu. ","description":" Domain services' actions can be associated with the tertiary menu using the same @DomainServiceLayout annotation, but be aware that the @DomainServiceLayout#name() attribute will be ignored (there is only one effective menu). ","id":12196042},"12649581":{"title":"Mark the version as released","url":"guides/cgcom/cgcom.html#_mark_the_version_as_r
 eleased","body":"Mark the version as released  In JIRA, go to the administration section for the Apache Isis project and update the version as being released.  In the Kanban view this will have the effect of marking all tickets as released (clearing the \"done\" column). ","description":" In JIRA, go to the administration section for the Apache Isis project and update the version as being released. ","id":12649581},"13573617":{"title":"hide…​()","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_hide","body":"hide…​()  The hide…​() supporting method is called for properties, collections and actions. It allows the property/collection to be completely hidden from view.  It’s comparatively rare for properties or collections to be imperatively hidden from view, but actions are sometimes hidden or shown visible (as opposed to being just disabled, ie greyed out).  The signature of the supporting method is simply:  Returning true will hide the property, collection or acti
 on, returning false leaves it visible.  For example, to hide an action:  Or, to hide a property: ","description":" The hide…​() supporting method is called for properties, collections and actions. It allows the property/collection to be completely hidden from view. ","id":13573617},"14290952":{"title":"Vetoing Visibility","url":"guides/htg.html#_ugbtb_hints-and-tips_vetoing-visibility","body":"Vetoing Visibility  eg if included an addon such as auditing or security.  solution is to write a domain event subscriber that vetoes the visibility  All the addons actions inherit from common base classes so this can be as broad-brush or fine-grained as required ","description":" eg if included an addon such as auditing or security. ","id":14290952},"17000573":{"title":"ObjectCreatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectCreatedEvent","body":"ObjectCreatedEvent  Subclass of AbstractLifecycleEvent, broadcast when an object is first instantiated using the 
 FactoryServuce's #instantiate(…​) method.  ObjectCreatedEvent.Default is the implementation that is used by default, but this can be overridden using @DomainObject#createdLifecycleEvent(). ","description":" Subclass of AbstractLifecycleEvent, broadcast when an object is first instantiated using the FactoryServuce's #instantiate(…​) method. ","id":17000573},"17618894":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_20","body":"New Feature ","description":"","id":17618894},"17724516":{"title":"Multi-select action parameters","url":"guides/ugfun/ugfun.html#_multi_select_action_parameters","body":"Multi-select action parameters  As well as scalar values, action parameters can also be collections. For this to be valid, a choices or autoComplete supporting method must be provided.  For example, suppose we want to \"tag\" or \"label\" an object: ","description":" As well as scalar values, action parameters can also be collections. For this to be valid, a
  choices or autoComplete supporting method must be provided. ","id":17724516},"18445041":{"title":"Verifying Releases","url":"downloads.html#_verifying_releases","body":"Verifying Releases ","description":"","id":18445041},"19254915":{"title":"API & Implementation","url":"guides/rgsvc/rgsvc.html#_api_implementation_7","body":"API & Implementation  The CommandContext request-scoped service defines the following very simple API:  This class (o.a.i.applib.services.CommandContext) is also the default implementation.  Under normal circumstances there shouldn’t be any need to replace this implementation with another. But if you do need to for some reason, then subclass and use @DomainServiceLayout#menuOrder() (as explained in the introduction to this guide).  The Command type referenced above is in fact an interface, defined as: ","description":" The CommandContext request-scoped service defines the following very simple API: ","id":19254915},"21190750":{"title":"Run the archetype","url
 ":"pages/tg/tg.html#_run_the_archetype","body":"Run the archetype ","description":"","id":21190750},"21212015":{"title":"Key features","url":"pages/powered-by/powered-by.html#_key_features","body":"Key features ","description":"","id":21212015},"21857601":{"title":"Other Guides","url":"guides/cgcom/cgcom.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are:  This guide provides guidance for Apache Isis' own committers. ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides. ","id":21857601},"22342496":{"title":"Deploy","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_deploy","body":"Deploy  Previously the release procedures used mvn release:prepare and mvn release:perform. These are however not compatible w
 ith ${revision} that we now use for CI/CD.  We therefore just use mvn deploy directly, activating the (inherited) apache-release profile that, amongst other things, brings in the gpg plugin for code signing.  To build and deploy and tag, we use:  using your own GPG passphrase, of course. ","description":" Previously the release procedures used mvn release:prepare and mvn release:perform. These are however not compatible with ${revision} that we now use for CI/CD. ","id":22342496},"23125949":{"title":"Editing","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_editing","body":"Editing ","description":"","id":23125949},"23524101":{"title":"Collections","url":"guides/ugvw/ugvw.html#_collections","body":"Collections  In the final row the collections are placed in tabs, simply one collection per tab. This corresponds to the following XML:  As with properties, actions can be associated with collections; this indicates that they should be rendered in the collection’s header. ","de
 scription":" In the final row the collections are placed in tabs, simply one collection per tab. This corresponds to the following XML: ","id":23524101},"26509816":{"title":"Commit changes","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_commit-changes","body":"Commit changes  Commit any changes from the preceding steps: ","description":" Commit any changes from the preceding steps: ","id":26509816},"27806498":{"title":"renderedAsDayBefore()","url":"guides/rgant/rgant.html#_rgant-ParameterLayout_renderedAsDayBefore","body":"renderedAsDayBefore()  The renderedAsDayBefore() attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for properties.  This behaviour might at first glance appear odd, but the rationale is to support the use case of a sequence of instances that represent adjacent intervals of t
 ime. In such cases there would typically be startDate and endDate properties, eg for all of Q2. Storing this as a half-closed interval — eg [1-Apr-2015, 1-July-2015) — can substantially simplify internal algorithms; the endDate of one interval will correspond to the startDate of the next.  However, from an end-user perspective the requirement may be to render the interval as a fully closed interval; eg the end date should be shown as 30-Jun-2015.  This attribute therefore bridges the gap; it presents the information in a way that makes sense to an end-user, but also stores the domain object in a way that is easy work with internally.  For example: ","description":" The renderedAsDayBefore() attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for properties. ","id":27806498},"31312523":{"title":"Declarative style","u
 rl":"guides/htg.html#_declarative_style_3","body":"Declarative style  To render an object with a particular CSS, use @DomainObjectLayout#cssClass().  When the domain object is rendered on its own page, this CSS class will appear on a top-level <div>. Or, when the domain object is rendered as a row in a collection, then the CSS class will appear in a <div> wrapped by the <tr> of the row.  One possible use case would be to render the most important object types with a subtle background colour: Customers shown in light green, or Orders shown in a light pink, for example. ","description":" To render an object with a particular CSS, use @DomainObjectLayout#cssClass(). ","id":31312523},"31857620":{"title":"Interacting with the services","url":"guides/rgsvc/rgsvc.html#_interacting_with_the_services","body":"Interacting with the services  Typically domain objects will have little need to interact with the CommandContext and Command directly; what is more useful is that these are persisted i
 n support of the various use cases identified above.  One case however where a domain object might want to obtain the Command is to determine whether it has been invoked in the foreground, or in the background. It can do this using the getExecutedIn() method:  Although not often needed, this then allows the domain object to access the Command object through the CommandContext service. To expand the above example:  If run in the background, it might then notify the user (eg by email) if all work is done.  This leads us onto a related point, distinguishing the current effective user vs the originating \"real\" user. When running in the foreground, the current user can be obtained from the UserService, using:  If running in the background, however, then the current user will be the credentials of the background process, for example as run by a Quartz scheduler job.  The domain object can still obtain the original (\"effective\") user that caused the job to be created, using: ","descrip
 tion":" Typically domain objects will have little need to interact with the CommandContext and Command directly; what is more useful is that these are persisted in support of the various use cases identified above. ","id":31857620},"31966407":{"title":"Icons","url":"guides/htg.html#_icons","body":"Icons  Action icons can be specified in several ways.  One option is to use the @ActionLayout#cssClassFa(). For example:  Alternatively, you can specify these hints dynamically in the Xxx.layout.xml for the entity:  Rather than annotating every action with @ActionLayout#cssClassFa() and @ActionLayout#cssClass() you can instead specify the UI hint globally using regular expressions. Not only does this save a lot of boilerplate/editing, it helps ensure consistency across all actions.  To declare fa classes globally, use the configuration property isis.reflector.facet.cssClassFa.patterns (a comma separated list of key:value pairs).  For example:  Here:  For example, \"fa-plus\" is applied to 
 all action members called \"newXxx\" ","description":" Action icons can be specified in several ways. ","id":31966407},"32950878":{"title":"@MemberOrder","url":"guides/ugvw/ugvw.html#_code_memberorder_code","body":"@MemberOrder  The @MemberOrder annotation is used to specify the relative order of domain class properties, collections and actions.  The annotation defines two attributes, name() and sequence(). Their usage depends on the member type:  Within any of these, the sequence() then determines the relative ordering of the action with respect to other actions that have been similarly associated with properties/collections or left as \"free-standing\".  For example:  This defines three property (or member) groups, \"General\", \"Detail\" and \"Misc\"; \"General\" is the default if no name attribute is specified. Properties in the same member group are rendered together, as a fieldset.  In addition, actions can optionally be associated (rendered close to) either properties or acti
 ons. This is done by overloading the @MemberOrder's name() attribute, holding the value of the property or collection.  For example:  will associate the completed() and notYetCompleted() actions with the complete property, and will associate the add() and remove() actions with the dependencies collection.  The value of sequence() is a string. The simplest convention (as shown in the example above) is to use numbers — 1, 2, 3 — though it is a better idea to leave gaps in the numbers — 10, 20, 30 perhaps — such that a new member may be added without having to edit existing numbers.  Even better is to adopt the 'dewey-decimal' notation — 1, 1.1, 1.2, 2, 3, 5.1.1, 5.2.2, 5.2, 5.3 — which allows for an indefinite amount of future insertion. It also allows subclasses to insert their class members as required. ","description":" The @MemberOrder annotation is used to specify the relative order of domain class properties, collections and actions. ","id":32950878},"36734123":{"tit
 le":"Bug","url":"release-notes/release-notes.html#_bug_8","body":"Bug ","description":"","id":36734123},"39248326":{"title":"Runtime vs Noop implementation","url":"guides/rgfis/rgfis.html#_runtime_vs_noop_implementation","body":"Runtime vs Noop implementation  The framework provides two implementations:  The …​Default implementation takes priority over the …​Noop implementation. ","description":" The framework provides two implementations: ","id":39248326},"39290887":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_22","body":"Implementation  The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). ","description":" The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). ","id":39290887},"44483327":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_17","body":"
 New Feature ","description":"","id":44483327},"45128293":{"title":"getConfigurationProperties()","url":"guides/rgcms/rgcms.html#__rgcms_classes_AppManifest-bootstrapping_api_getConfigurationProperties","body":"getConfigurationProperties()  This method allow arbitrary other configuration properties to be overridden. One common use case is in conjunction with the getFixtures() method, discussed above: ","description":" This method allow arbitrary other configuration properties to be overridden. One common use case is in conjunction with the getFixtures() method, discussed above: ","id":45128293},"45847666":{"title":"Recreate the archetype","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-the-helloworld-archetype_create-the-archetype","body":"Recreate the archetype  Make sure you are in the correct directory and environment variables are correct.  To recreate the helloworld archetype:  Then, run the script (which also builds the archetype once generated) and then swit
 ch to the archetype’s directory:  The script automatically commits its changes. If you wish use git log and git diff (or a tool such as SourceTree) to review changes made. ","description":" Make sure you are in the correct directory and environment variables are correct. ","id":45847666},"57327287":{"title":"cssClassFa()","url":"guides/rgant/rgant.html#_rgant-ViewModelLayout_cssClassFa","body":"cssClassFa()  The cssClassFa() attribute is used to specify the name of a Font Awesome icon name, to be rendered as the domain object’s icon.  These attribute can also be applied to domain objects to specify the object’s icon, and to actions to specify an icon for the action’s representation as a button or menu item.  If necessary the icon specified can be overridden by a particular object instance using the iconName() method.  For example:  There can be multiple \"fa-\" classes, eg to mirror or rotate the icon. There is no need to include the mandatory fa \"marker\" CSS class; it wil
 l be automatically added to the list. The fa- prefix can also be omitted from the class names; it will be prepended to each if required.  The related cssClassFaPosition() attribute is currently unused for domain objects; the icon is always rendered to the left. ","description":" The cssClassFa() attribute is used to specify the name of a Font Awesome icon name, to be rendered as the domain object’s icon. ","id":57327287},"62314289":{"title":"Menu Bars Layout","url":"guides/ugvw/ugvw.html#_ugvw_menubars-layout","body":"Menu Bars Layout ","description":"","id":62314289},"64932464":{"title":"Other Guides","url":"guides/ugtst/ugtst.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are: ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\"
  guides. ","id":64932464},"66604001":{"title":"@Programmatic","url":"guides/rgant/rgant.html#_rgant-Programmatic","body":"@Programmatic ","description":"","id":66604001},"68327083":{"title":"(Optional) Verifying binary artifacts","url":"guides/cgcom/cgcom.html#__cgcom_verifying-releases_binary-artifacts","body":"(Optional) Verifying binary artifacts  You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the HelloWorld archetype or the SimpleApp archetype and running the resultant app.  Configuring your local Maven install amounts to updating the ~/.m2/settings.xml file:  where the repository URL is as provided in the VOTE email. If there is more than one repository (as is sometimes the case if multiple components have been released), then repeat the <repository> section for each.  Once the vote has completed, the staging repositories will be removed and so you should deacti
 ve the profile (comment out the <activeProfile> element). If you forget to deactive the profile, there should be no adverse effects; Maven will just spend unnecessary cycles attempting to hit a non-existent repo. ","description":" You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the HelloWorld archetype or the SimpleApp archetype and running the resultant app. ","id":68327083},"68441589":{"title":"License headers","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_license-headers","body":"License headers  The Apache Release Audit Tool RAT (from the Apache Creadur project) checks for missing license header files. The parent pom.xml of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions.  To run the RAT tool, use:  where rat.numUnapprovedLicenses property is set to a high figure, temporarily overriding the defaul
 t value of 0. This will allow the command to run over all submodules, rather than failing after the first one. The command writes out a target\\rat.txt for each submodule. missing license notes are indicated using the key !???. The for command collates all the errors.  Investigate and fix any reported violations, typically by either:  Once you’ve fixed all issues, confirm once more that apache-rat-plugin no longer reports any license violations, this time leaving the rat.numUnapprovedLicenses property to its default, 0: ","description":" The Apache Release Audit Tool RAT (from the Apache Creadur project) checks for missing license header files. The parent pom.xml of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions. ","id":68441589},"73703450":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_29","body":"New Feature ","description":"","id":73703450},"74705826":{"title":"How to implement a spellchecker?","url":"guide
 s/htg.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How to implement a spellchecker?  From this thread on the Apache Isis users mailing list:  One way to implement is to use the event bus:  if if the change is made through an edit, you can use @Property#domainEvent().  You’ll need some way to know which fields should be spell checked. Two ways spring to mind:  And you’ll (obviously) also need some sort of spell checker implementation to call. ","description":" From this thread on the Apache Isis users mailing list: ","id":74705826},"75054401":{"title":"Supporting Method Prefixes","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes","body":"Supporting Method Prefixes  Supporting methods are those that are associated with properties, collections and actions, providing additional imperative business rule checking and behaviour to be performed when the user interacts with those object members.  This association is performed by name matching. Thus, a property
  called \"firstName\", derived from a method getFirstName() may have supporting methods hideFirstName(), disableFirstName() and validateFirstName(). Supporting methods are, therefore, each characterized by their own particular prefix.  The table below lists the method prefixes that are recognized as part of Apache Isis' default programming model. ","description":" Supporting methods are those that are associated with properties, collections and actions, providing additional imperative business rule checking and behaviour to be performed when the user interacts with those object members. ","id":75054401},"77231561":{"title":"Interaction Execution","url":"guides/rgcms/rgcms.html#_rgcms_schema-ixn","body":"Interaction Execution  The interaction (\"ixn\") schema defines the serialized form of an action invocation or a property edit. In fact, it actually defines a call-graph of such executions for those cases where the WrapperFactory is used to execute sub-actions/property edits.  Each e
 xecution identifies the target object, the member to invoke, and the arguments. It also captures metrics about the execution, and the result of the execution (eg return value of an action invocation). ","description":" The interaction (\"ixn\") schema defines the serialized form of an action invocation or a property edit. In fact, it actually defines a call-graph of such executions for those cases where the WrapperFactory is used to execute sub-actions/property edits. ","id":77231561},"78112488":{"title":"Screencast","url":"guides/ugvw/ugvw.html#_screencast","body":"Screencast  This screencast describes the feature. ","description":" This screencast describes the feature. ","id":78112488},"78624086":{"title":"Other Guides","url":"guides/ugsec/ugsec.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are:
  ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides. ","id":78624086},"80534397":{"title":"ContentMappingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService","body":"ContentMappingService  The ContentMappingService supports the (default implementation of the) ContentNegotiationService enabling the RestfulObjects viewer to represent domain objects in some other format as specified by the HTTP Accept header.  See ContentNegotiationService for further discussion. ","description":" The ContentMappingService supports the (default implementation of the) ContentNegotiationService enabling the RestfulObjects viewer to represent domain objects in some other format as specified by the HTTP Accept header. ","id":80534397},"83803344":{"title":"MessageService","url":"guides/rgsvc/rgsvc.html#_rgsvc_application-layer-api_MessageService","body":"MessageService  The MessageService all
 ows domain objects to raise information, warning or error messages. These messages can either be simple strings, or can be translated. ","description":" The MessageService allows domain objects to raise information, warning or error messages. These messages can either be simple strings, or can be translated. ","id":83803344},"83933647":{"title":"Persistence Concerns","url":"guides/ugbtb/ugbtb.html#_persistence_concerns","body":"Persistence Concerns ","description":"","id":83933647},"85931482":{"title":"Task","url":"release-notes/release-notes.html#_task_24","body":"Task ","description":"","id":85931482},"87271564":{"title":"2004:","url":"pages/articles-and-presentations/articles-and-presentations.html#_2004","body":"2004: ","description":"","id":87271564},"90561824":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wicket_viewer_8","body":"Wicket Viewer ","description":"","id":90561824},"90935214":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wick
 et_viewer_10","body":"Wicket Viewer ","description":"","id":90935214},"91902412":{"title":"The issue in more detail","url":"guides/ugodn/ugodn.html#_the_issue_in_more_detail","body":"The issue in more detail  Consider these entities (yuml.me/b8681268):  In the course of a transaction, the Agreement entity is loaded into memory (not necessarily modified), and then new AgreementRoles are associated to it.  All these entities implement Comparable using ObjectContracts, and the implementation of AgreementRole's (simplified) is:  while Agreement's is implemented as:  and Party's is similarly implemented as:  DataNucleus’s persistence-by-reachability algorithm adds the AgreementRole instances into a SortedSet, which causes AgreementRole#compareTo() to fire:  In other words, in figuring out whether AgreementRole requires the persistence-by-reachability algorithm to run, it causes the adjacent associated entity Party to also be retrieved. ","description":" Consider these entities (yuml.me
 /b8681268): ","id":91902412},"92467660":{"title":"API and Usage","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage","body":"API and Usage  There are two main parts to using fixture scripts: the FixtureScripts domain service class, and the FixtureScript view model class:  Let’s look at FixtureScripts domain service in more detail first. ","description":" There are two main parts to using fixture scripts: the FixtureScripts domain service class, and the FixtureScript view model class: ","id":92467660},"96583162":{"title":"Configure toolchains plugin","url":"guides/cgcom/cgcom.html#_configure_toolchains_plugin","body":"Configure toolchains plugin  Apache Isis releases are built using Java 7, enforced using the maven toolchains plugin. Ensure that Java 7 is installed and the toolchains plugin is configured, as described in the contributors' guide. ","description":" Apache Isis releases are built using Java 7, enforced using the maven toolchains plugin. Ensure that Ja
 va 7 is installed and the toolchains plugin is configured, as described in the contributors' guide. ","id":96583162},"99090360":{"title":"Running the App","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_simpleapp-archetype_running-the-app","body":"Running the App  The simpleapp archetype generates a single WAR file, configured to run both the Wicket viewer and the Restful Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection.  Once you’ve built the app, you can run the WAR in a variety of ways. ","description":" The simpleapp archetype generates a single WAR file, configured to run both the Wicket viewer and the Restful Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection. ","id":99090360},"100682258":{"title":"Update dependencies","url":"guides/cgcom/cgcom.html#_update_dependencies","body":"Update dependencies  With the release complete, now is a goo
 d time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues).  You will probably want to create a new JIRA ticket for these updates (or if minor then use the \"catch-all\" JIRA ticket raised earlier for the next release). ","description":" With the release complete, now is a good time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues). ","id":100682258},"102347041":{"title":"Bug","url":"release-notes/release-notes.html#_bug_10","body":"Bug ","description":"","id":102347041},"104167755":{"title":"How to implement a spellchecker?","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How to implement a spellchecker?  From this thread on the Apache Isis users mailing list:  One way to implement is to use the event bus:  if if the change is made through an edit, you can use @Property#domainEvent().  You’ll need some way to know which fields s
 hould be spell checked. Two ways spring to mind:  And you’ll (obviously) also need some sort of spell checker implementation to call. ","description":" From this thread on the Apache Isis users mailing list: ","id":104167755},"104756776":{"title":"BookmarkHolder","url":"guides/rgsvc/rgsvc.html#_code_bookmarkholder_code","body":"BookmarkHolder  The BookmarkHolder interface is intended to be implemented by domain objects that use a Bookmark to reference a (single) domain object; an example might be a class such as the audit entry, mentioned above. The interface is simply:  There are two services that will contribute to this interface:  Either of these can be suppressed, if required, using a vetoing subscriber. For example, to suppress the object property (so that only the lookup(…​) action is ever shown for implementations of BookmarkHolder, define:  A more sophisticated implementation could look inside the passed ev argument and selectively hide or not based on the contributee.
  ","description":" The BookmarkHolder interface is intended to be implemented by domain objects that use a Bookmark to reference a (single) domain object; an example might be a class such as the audit entry, mentioned above. The interface is simply: ","id":104756776},"106558909":{"title":"contributedAs()","url":"guides/rgant/rgant.html#_rgant-ActionLayout_contributedAs","body":"contributedAs()  For a domain service action that can be contributed, the contributedAs() attribute determines how it is contributed: as an action or as an association (ie a property or collection).  The distinction between property or collection is automatic: if the action returns a java.util.Collection (or subtype) then the action is contributed as a collection; otherwise it is contributed as a property.  For a domain service action to be contributed, the domain services must have a nature nature of either VIEW or VIEW_CONTRIBUTIONS_ONLY, and the action must have safe action semantics, and takes a single ar
 gument, namely the contributee domain object.  For example:  It’s also possible to use the attribute to suppress the action completely:  In such cases, though, it would probably make more sense to annotate the action as either hidden or indeed @Programmatic. ","description":" For a domain service action that can be contributed, the contributedAs() attribute determines how it is contributed: as an action or as an association (ie a property or collection). ","id":106558909},"106606865":{"title":"Using the Wicket Viewer","url":"guides/rgcfg/rgcfg.html#_using_the_wicket_viewer","body":"Using the Wicket Viewer  Most of the you’re likely to run Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to Wicket’s \"configuration\" concept:  Wicket’s mechanism for specifying the \"configuration\" is to use a context parameter in web.xml; Apache Isis automatically infers its own deployment type from this. In other words: ","description":" Most o
 f the you’re likely to run Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to Wicket’s \"configuration\" concept: ","id":106606865},"108815435":{"title":"unchanging()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_unchanging","body":"unchanging()  The unchanging() attribute is used to indicate that the value held by the property never changes over time, even when other properties of the object do change.  Setting this attribute to true is used as a hint to the viewer to not redraw the property after an AJAX update of some other property/ies of the object have changed. This is primarily for performance, eg can improve the user experience when rendering PDFs/blobs.  Note that for this to work, the viewer will also ensure that none of the property’s parent component (such as a tab group panel) are re-rendered.  For example: ","description":" The unchanging() attribute is used to indicate that the value held by the property ne
 ver changes over time, even when other properties of the object do change. ","id":108815435},"109833874":{"title":"Persistable","url":"guides/rgcms/rgcms.html#_rgcms_classes_mixins_Persistable","body":"Persistable  All domain entities automatically implement the DataNucleus Persistable role interface as a result of the enhancer process (the fully qualified class name is org.datanucleus.enhancement.Persistable). So as a developer you do not need to write any code to obtain the mixins that contribute to this interface.  These mixin properties/actions are all associated with the \"Metadata\" fieldset. A number of other mixins also contribute properties or actions to the \"Metadata\" fieldset. ","description":" All domain entities automatically implement the DataNucleus Persistable role interface as a result of the enhancer process (the fully qualified class name is org.datanucleus.enhancement.Persistable). So as a developer you do not need to write any code to obtain the mixins that co
 ntribute to this interface. ","id":109833874},"112375674":{"title":"Auditing","url":"migration-notes/migration-notes.html#_auditing","body":"Auditing  The AuditingService SPI service has been deprecated, instead replaced by the AuditerService.  There can be more than one implementation of this new SPI, and a framework-provided implementation (AuditerServiceLogging) will log to a file. The (non-ASF) Incode Platform's audit module also implements the new SPI. ","description":" The AuditingService SPI service has been deprecated, instead replaced by the AuditerService. ","id":112375674},"113098816":{"title":"DataNucleus Object Store","url":"guides/htg.html#_datanucleus_object_store","body":"DataNucleus Object Store ","description":"","id":113098816},"114685873":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_19","body":"Usage  To indicate that an action invocation should be published, annotate it with the @Action#publishing() annotation.  To indicate that an property edit should
  be published, annotate it with the @Property#publishing() annotation.  To indicate that a changed object should be published is to annotate it with the @DomainObject#publishing() annotation. ","description":" To indicate that an action invocation should be published, annotate it with the @Action#publishing() annotation. ","id":114685873},"115229271":{"title":"Domain Entities","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-entities","body":"Domain Entities  Entities are persistent domain objects, with their persistence handled by JDO/DataNucleus. As such, they are mapped to a persistent object store, typically an RDBMS, with DataNucleus taking care of both lazy loading and also the persisting of modified (\"dirty\") objects.  Domain entities are generally decorated with both DataNucleus and Apache Isis annotations. Let’s look at some of the most commonly-used annotations.  To start with, entities are flagged as being \"persistence capable\", indicating how JDO/Data
 Nucleus should manage their identity:  All domain entities will have some sort of mandatory key properties. The example below is a very simple case, where the entity is identified by a name property:  It’s also common for domain entities to have queries annotated on them. These are used by repository domain services to query for instances of the entity:  DataNucleus provides several APIs for defining queries, including entirely programmatic and type-safe APIs; but JDOQL is very similar to SQL and so easily learnt.  The corresponding repository method for the above query is: ","description":" Entities are persistent domain objects, with their persistence handled by JDO/DataNucleus. As such, they are mapped to a persistent object store, typically an RDBMS, with DataNucleus taking care of both lazy loading and also the persisting of modified (\"dirty\") objects. ","id":115229271},"115955772":{"title":"domainClassDto","url":"guides/rgcms/rgcms.html#__rgcms_schema-mml_domainClassDto","
 body":"domainClassDto  The domainClassDto element describes the behaviour and structure of a single domain class within the metamodel. ","description":" The domainClassDto element describes the behaviour and structure of a single domain class within the metamodel. ","id":115955772},"117553409":{"title":"Object Icon","url":"guides/ugfun/ugfun.html#_object_icon","body":"Object Icon  The icon is often the same for all instances of a particular class, and is picked up by convention.  It’s is also possible for an individual instance to return a custom icon, typically so that some significant state of that domain object is represented. For example, a custom icon could be used to represent a shipped order, say, or an overdue library loan. ","description":" The icon is often the same for all instances of a particular class, and is picked up by convention. ","id":117553409},"121574190":{"title":"Related Services","url":"guides/rgsvc/rgsvc.html#_related_services_18","body":"Related Services
   The ActionInteractionContext service allows bulk actions to co-ordinate with each other.  The QueryResultsCache is useful for caching the results of expensive method calls. ","description":" The ActionInteractionContext service allows bulk actions to co-ordinate with each other. ","id":121574190},"121879267":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wicket_viewer_2","body":"Wicket Viewer ","description":"","id":121879267},"122762699":{"title":"Contributee","url":"guides/rgcms/rgcms.html#_rgcms_classes_contributee","body":"Contributee  The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces. ","description":" The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces. ","id":122762699},"125299345":{"title":"
 Example","url":"guides/rgant/rgant.html#_example_2","body":"Example  This example is taken from the (non-ASF) Isis addons' todoapp: ","description":" This example is taken from the (non-ASF) Isis addons' todoapp: ","id":125299345},"125961908":{"title":"Do it!","url":"pages/tg/tg.html#_do_it","body":"Do it! ","description":"","id":125961908},"134804772":{"title":"How to handle void/null results","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-handle-void-and-null-results","body":"How to handle void/null results  From this thread on the Apache Isis users mailing list:  One way to implement this idea is to provide a custom implementation of the RoutingService SPI domain service. The default implementation will either return the current object (if not null), else the home page (as defined by @HomePage) if one exists.  The following custom implementation refines this to use the breadcrumbs (available in the Wicket viewer) to return the first non-deleted domain object found in
  the list of breadcrumbs:  Note that the above implementation uses Java 8, so if you are using Java 7 then you’ll need to backport accordingly. ","description":" From this thread on the Apache Isis users mailing list: ","id":134804772},"144529895":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_44","body":"Improvement ","description":"","id":144529895},"148135206":{"title":"Layout Metadata Reader (deprecated)","url":"guides/ugbtb/ugbtb.html#_ugbtb_programming-model_layout-metadata-reader","body":"Layout Metadata Reader (deprecated)  The metadata for domain objects is obtained both annotations and files. There is also deprecated support for reading layouts from .layout.json files. This service provides an SPI (and default implementation) for reading layouts defined in this fashion. ","description":" The metadata for domain objects is obtained both annotations and files. There is also deprecated support for reading layouts from .layout.json files. This se
 rvice provides an SPI (and default implementation) for reading layouts defined in this fashion. ","id":148135206},"153666205":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_17","body":"Implementation  The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.title.TitleServiceDefault). ","description":" The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.title.TitleServiceDefault). ","id":153666205},"155655500":{"title":"@PrimaryKey (javax.jdo)","url":"guides/rgant/rgant.html#_rgant-PrimaryKey","body":"@PrimaryKey (javax.jdo) ","description":"","id":155655500},"158033412":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_27","body":"SPI  The SPI defined by the service is: ","description":" The SPI defined by the service is: ","id":158033412},"158069558":{"title":"Usability: Defaults","url":"pages/tg/tg.html#_usability_defaults","body":"Usability: Defaults ","descripti
 on":"","id":158069558},"158897592":{"title":"Refactoring","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_refactoring","body":"Refactoring  Loads of good stuff on the Refactor menu; most used are:  If you can’t remember all those shortcuts, just use ctrl-shift-alt-T (might want to rebind that to something else!) and get a context-sensitive list of refactorings available for the currently selected object ","description":" Loads of good stuff on the Refactor menu; most used are: ","id":158897592},"159072030":{"title":"(non-ASF) Incode Platform","url":"migration-notes/migration-notes.html#_migration-notes_1.14.0-to-1.15.0_incode-platform","body":"(non-ASF) Incode Platform  The various (non-ASF) Isis Addons and Incode Catalog have also been combined into a single \"Incode Platform\".  While each module can still be consumed individually, the new platform versions consistently (a change in any one module will result in a re-release of all). This should make these modules easi
 er to consume, and easier to maintain/develop.  All the modules remain open source, still licensed under the ASF v2.0 license.  As of this release, none of the groupIds or artifactIds have changed. They will be rationalized/made consistent in a future release; most probably to coincide with v2.0.0 of the framework. ","description":" The various (non-ASF) Isis Addons and Incode Catalog have also been combined into a single \"Incode Platform\". ","id":159072030},"160872749":{"title":"Related Services","url":"guides/rgfis/rgfis.html#_related_services","body":"Related Services  The default implementation of ContentNegotiationService delegates to ContentMappingService (if present) to convert domain entities into a stable form (eg DTO).  The ContentNegotiationService is itself called by the (default implementation of) RepresentationService. ","description":" The default implementation of ContentNegotiationService delegates to ContentMappingService (if present) to convert domain entities i
 nto a stable form (eg DTO). ","id":160872749},"163456888":{"title":"Dependency upgrade","url":"release-notes/release-notes.html#_dependency_upgrade_9","body":"Dependency upgrade ","description":"","id":163456888},"163915714":{"title":"web.xml","url":"migration-notes/migration-notes.html#_web_xml","body":"web.xml  In the web.xml, the \"isis.viewers\" context-param is now ignored. Instead the viewer_wicket.properties and viewer_restfulobjects.properties will both be loaded if present (but neither need be present). ","description":" In the web.xml, the \"isis.viewers\" context-param is now ignored. Instead the viewer_wicket.properties and viewer_restfulobjects.properties will both be loaded if present (but neither need be present). ","id":163915714},"165602306":{"title":"GridLoaderService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridLoaderService","body":"GridLoaderService  The GridLoaderService provides the ability to load the XML layout (grid) for a domain class.
  ","description":" The GridLoaderService provides the ability to load the XML layout (grid) for a domain class. ","id":165602306},"165750333":{"title":"loaded()","url":"guides/rgcms/rgcms.html#_rgcms_methods_lifecycle_loaded","body":"loaded()  The loaded() lifecycle callback method is called when a (persistent) object has just been loaded from the object store. ","description":" The loaded() lifecycle callback method is called when a (persistent) object has just been loaded from the object store. ","id":165750333},"166045728":{"title":"Sanity Check","url":"guides/cgcom/cgcom.html#_sanity_check_2","body":"Sanity Check  Ensure that the framework builds ok using the same command that your CI server is set up to execute (see section above). ","description":" Ensure that the framework builds ok using the same command that your CI server is set up to execute (see section above). ","id":166045728},"166899251":{"title":"Installing and Setting up","url":"guides/dg/dg.html#__dg_ide_intellij_i
 nstalling","body":"Installing and Setting up  This section covers installation and setup. These notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but are believed to be compatible with more recent versions/other editions of the IDE. ","description":" This section covers installation and setup. These notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but are believed to be compatible with more recent versions/other editions of the IDE. ","id":166899251},"167039338":{"title":"Task","url":"release-notes/release-notes.html#_task_14","body":"Task ","description":"","id":167039338},"174738887":{"title":"Related functionality","url":"guides/ugvw/ugvw.html#_related_functionality_2","body":"Related functionality  The Recent Pages also lists recently visited pages, selected from a drop-down. ","description":" The Recent Pages also lists recently visited pages, selected from a drop-down. ","id":174738887},"175028546":{"title":"Implementation","url":
 "guides/rgsvc/rgsvc.html#_implementation_5","body":"Implementation  The framework provides a default implementation of this service, namely GridServiceDefault. ","description":" The framework provides a default implementation of this service, namely GridServiceDefault. ","id":175028546},"175197970":{"title":"Performance tuning","url":"pages/tg/tg.html#_performance_tuning","body":"Performance tuning ","description":"","id":175197970},"175636232":{"title":"RepositoryService","url":"guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_RepositoryService","body":"RepositoryService  The RepositoryService collects together methods for creating, persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the JDO/DataNucleus objectstore.  You can use it during prototyping to write naive queries (find all rows, then filter using the Guava Predicate API, or you can use it to call JDO named queries using JDOQL.  As an alternative, you could also u
 se JDO typesafe queries through the IsisJdoSupport service. ","description":" The RepositoryService collects together methods for creating, persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the JDO/DataNucleus objectstore. ","id":175636232},"176767338":{"title":"Command and Events","url":"guides/rgsvc/rgsvc.html#__rgsvc_intro_commands-and-events","body":"Command and Events  A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these. These services capture information which can then be used for various purposes, most notably for auditing or for publishing events, or for deferring execution such that the execution be performed in the background at some later date.  The diagram below shows how these services fit together. The outline boxes are services while the coloured boxes represent data structures - defined in 
 the applib and therefore accessible to domain applications - which hold various information about the executions.  To explain:  Implementations of CommandService can use the Command#getMemento() method to obtain a XML equivalent of that Command, reified using the cmd.xsd schema. This can be converted back into a CommandDto using the CommandDtoUtils utility class (part of the applib).  Similarly, implementations of PublisherService can use the InteractionDtoUtils utility class to obtain a InteractionDto representing the interaction, either just for a single execution or for the entire call-graph. This can be converted into XML in a similar fashion.  Likewise, the PublishedObjects class passed to the PublisherService at the end of the interaction provides the PublishedObjects#getDto() method which returns a ChangesDto instance. This can be converted into XML using the ChangesDtoUtils utility class.  One final point: multiple PublisherService implementations are supported because diffe
 rent implementations may have different responsibilities. For example, the (non-ASF) Incode Platform's publishmq module is responsible for publishing messages onto an ActiveMQ event bus, for inter-system communication. However, the SPI can also be used for profiling; each execution within the call-graph contains metrics of the number of objects loaded or modified as a result of that execution, and thus could be used for application profiling. The framework provides a default PublisherServiceLogging implementation that logs this using SLF4J. ","description":" A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these. These services capture information which can then be used for various purposes, most notably for auditing or for publishing events","id":176767338},"177970240":{"title":"InteractionContext","url":"guides/rgsvc/rgsvc.html#_code_interactioncontext_code","body
 ":"InteractionContext  The public API of the InteractionContext domain service itself consists of simply:  This class is concrete (that is, it is also the implementation). ","description":" The public API of the InteractionContext domain service itself consists of simply: ","id":177970240},"178125062":{"title":"domainEvent()","url":"guides/rgant/rgant.html#_rgant-Action_domainEvent","body":"domainEvent()  Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s actions, the events that are fired are:  Subscribers subscribe through the EventBusService using either Guava or Axon Framework annotations and can influence each of these phases.  By default the event raised is ActionDomainEvent.Default. For example:  The domainEvent() attribute allows a custom subclass to be emitted allowing more precise subscriptions (to those s
 ubclasses) to be defined instead. This attribute is also supported for collections and properties.  For example:  The benefit is that subscribers can be more targeted as to the events that they subscribe to. ","description":" Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s actions, the events that are fired are: ","id":178125062},"183226640":{"title":"updatedLifecycleEvent()","url":"guides/rgant/rgant.html#_rgant-DomainObject_updatedLifecycleEvent","body":"updatedLifecycleEvent()  Whenever a (persistent) domain object has been modified and has been updated in the database, an \"updated\" lifecycle event is fired.  Subscribers subscribe through the EventBusService and can use the event to obtain a reference to the domain object.  By default the event raised is ObjectUpdatedEvent.Default. For example:  The purpose 
 of the updatedLifecycleEvent() attribute is to allows a custom subclass to be emitted instead. A similar attribute is available for other lifecycle events.  For example:  The benefit is that subscribers can be more targeted as to the events that they subscribe to. ","description":" Whenever a (persistent) domain object has been modified and has been updated in the database, an \"updated\" lifecycle event is fired. ","id":183226640},"188123644":{"title":"2013","url":"pages/articles-and-presentations/articles-and-presentations.html#_2013","body":"2013 ","description":"","id":188123644},"189180810":{"title":"HoldsUpdatedAt","url":"guides/rgcms/rgcms.html#_rgcms_classes_roles_HoldsUpdatedAt","body":"HoldsUpdatedAt  The HoldsUpdatedAt role interface allows the (framework-provided) TimestampService to update each object with the current timestamp whenever it is modified in a transaction.  The interface is defined as:  The current time is obtained from the ClockService.  Entities that impl
 ement this interface often also implement HoldsUpdatedBy role interface; as a convenience the Timestampable interface combines the two roles. ","description":" The HoldsUpdatedAt role interface allows the (framework-provided) TimestampService to update each object with the current timestamp whenever it is modified in a transaction. ","id":189180810},"191180113":{"title":"persistence.xml","url":"guides/ugodn/ugodn.html#_ugodn_configuring_persistence-xml","body":"persistence.xml  DataNucleus will for itself also and read the META-INF/persistence.xml. In theory it can hold mappings and even connection strings. However, with Apache Isis we tend to use annotations instead and externalize connection strings. so its definition is extremely simply, specifying just the name of the \"persistence unit\".  Here’s the one provided by the SimpleApp archetype:  Normally all one needs to do is to change the persistence-unit name.  See DataNucleus' documentation on persistence.xml to learn more. "
 ,"description":" DataNucleus will for itself also and read the META-INF/persistence.xml. In theory it can hold mappings and even connection strings. However, with Apache Isis we tend to use annotations instead and externalize connection strings. so its definition is extremely simply, specifying just the name of the \"persistence unit","id":191180113},"193219460":{"title":"API","url":"guides/rgsvc/rgsvc.html#_rgsvc_metadata-api_MetamodelService_api","body":"API  The API defined by the service is: ","description":" The API defined by the service is: ","id":193219460},"193237835":{"title":"Core","url":"release-notes/release-notes.html#_core_8","body":"Core ","description":"","id":193237835},"193497711":{"title":"UI Hints","url":"guides/ugfun/ugfun.html#_ugfun_ui-hints","body":"UI Hints ","description":"","id":193497711},"194608562":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_19","body":"SPI  It is also possible to define use some other underlying event bus implementation, by imp
 lementing the EventBusImplementation SPI:  As is probably obvious, the EventBusService just delegates down to these method calls when its own similarly named methods are called.  If you do provide your own implementation of this SPI, be aware that your subscribers will need to use whatever convention is required (eg different annotations) such that the events are correctly routed through to your subscribers.  If you have written your own implementation of the EventBusServiceImplementation SPI, then specify instead its fully-qualified class name: ","description":" It is also possible to define use some other underlying event bus implementation, by implementing the EventBusImplementation SPI: ","id":194608562},"195374240":{"title":"Update the LDAP committee (if a PMC member)","url":"guides/cgcom/cgcom.html#_update_the_ldap_committee_if_a_pmc_member","body":"Update the LDAP committee (if a PMC member)  (Assuming that the new committer is a PMC member), also add them as to the PMC commi
 ttee. This takes two steps:  The new committer does not officially become a member of the PMC until the ASF records have been updated. ","description":" (Assuming that the new committer is a PMC member), also add them as to the PMC committee. This takes two steps: ","id":195374240},"195848147":{"title":"ICLA, obtain new account","url":"guides/cgcom/cgcom.html#_icla_obtain_new_account","body":"ICLA, obtain new account  If required (that is, if the committer is not already a committer for a different ASF project), then ask them to complete an ICLA. As a result of this, they should also get an @apache.org user name.  More info can be found in the ASF new committers guide. ","description":" If required (that is, if the committer is not already a committer for a different ASF project), then ask them to complete an ICLA. As a result of this, they should also get an @apache.org user name. ","id":195848147},"196560907":{"title":"XJC profile","url":"guides/rgmvn/rgmvn.html#__rgmvn_xsd_xsd-su
 bmodule_xjc-profile","body":"XJC profile  The xjc profile reads the XSD generated by the xsd goal, and from it generates Java DTOs. Note that this isn’t round-tripping: the original view model is only for use within the Isis app, whereas the DTO generated from the XSDs is for use in a standalone context, eg in a Java subscriber on an event bus.  The xjc profile is defined as:  The referenced catalog.xml file instructs the xjc plugin how to resolve referenced schema locations. Only a reference for the Apache Isis common schema is likely to be needed: ","description":" The xjc profile reads the XSD generated by the xsd goal, and from it generates Java DTOs. Note that this isn’t round-tripping: the original view model is only for use within the Isis app, whereas the DTO generated from the XSDs is for use in a standalone context","id":196560907},"198329644":{"title":"Strings (Length)","url":"guides/ugfun/ugfun.html#__ugfun_programming-model_properties_datatypes_strings","body":"Stri
 ngs (Length)  By default JDO/DataNucleus will map string properties to a VARCHAR(255). To limit the length, use the @Column(length=…​) annotation.  For example:  This is a good example of a case where Apache Isis infers domain semantics from the JDO annotation. ","description":" By default JDO/DataNucleus will map string properties to a VARCHAR(255). To limit the length, use the @Column(length=…​) annotation. ","id":198329644},"198382465":{"title":"Actions","url":"pages/tg/tg.html#_actions","body":"Actions ","description":"","id":198382465},"201216196":{"title":"GitLab","url":"guides/ugfun/ugfun.html#_gitlab","body":"GitLab  Create a git repository \"myapp\" in GitLab.  Using Settings > CI/CD, specify the following Secret Variables:  Finally, push a copy of the generated application to this repository using the instructions provided by GitLab.  This will kick off a pipeline that will build the image and push to DockerHub.  The tag name is based on a combination of the date, 
 the branch and the git shaId. ","description":" Create a git repository \"myapp\" in GitLab. ","id":201216196},"203208629":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_18","body":"New Feature ","description":"","id":203208629},"203740710":{"title":"RoutingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_RoutingService","body":"RoutingService  The RoutingService provides the ability to return (and therefore render) an alternative object from an action invocation.  There are two primary use cases:  Currently the routing service is used only by the Wicket viewer; it is ignored by the Restful Objects viewer. ","description":" The RoutingService provides the ability to return (and therefore render) an alternative object from an action invocation. ","id":203740710},"204452611":{"title":"Related services","url":"guides/rgsvc/rgsvc.html#_related_services_15","body":"Related services  The ConfigurationServiceMenu exposes the allConfiguratio
 nProperties action in the user interface. ","description":" The ConfigurationServiceMenu exposes the allConfigurationProperties action in the user interface. ","id":204452611},"207811701":{"title":"API","url":"guides/rgsvc/rgsvc.html#_api_2","body":"API  The API of TitleService is: ","description":" The API of TitleService is: ","id":207811701},"209853740":{"title":"To run","url":"guides/rgmvn/rgmvn.html#_to_run","body":"To run  The plugin is activated by default, so is run simply using:  This will run any tests, and then also - because the plugin is activated by the isis-validate property and bound to the test phase, will run the plugin’s validate goal.  If for any reason you want to disable the validation, use: ","description":" The plugin is activated by default, so is run simply using: ","id":209853740},"213642269":{"title":"Moving on","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_helloworld-archetype_moving-on","body":"Moving on  When you are ready to start working o
 n your own app, we don’t recommend building on top of the helloworld app.  Instead, we suggest that you start with the simpleapp archetype instead. Although a little more complex, it provides more structure and tests, all of which will help you as your application grows. ","description":" When you are ready to start working on your own app, we don’t recommend building on top of the helloworld app. ","id":213642269},"216231183":{"title":"Raising a pull request","url":"guides/dg/dg.html#_raising_a_pull_request","body":"Raising a pull request  If you have your own fork, you can now simply push the changes you’ve made locally to your fork:  This will create a corresponding branch in the remote github repo. If you use gitk --all, you’ll also see a remotes/origin/ISIS-123-blobs branch.  Then, use github to raise a pull request. Pull requests sent to the Apache GitHub repositories will forward a pull request e-mail to the dev mailing list. You’ll probably want to sign up to the d
 ev mailing list first before issuing your first pull request (though that isn’t mandatory).  The process to raise the pull request, broadly speaking: ","description":" If you have your own fork, you can now simply push the changes you’ve made locally to your fork: ","id":216231183},"220685197":{"title":"AbstractSubscriber","url":"guides/rgcms/rgcms.html#_rgcms_classes_super_AbstractSubscriber","body":"AbstractSubscriber  This is a convenience superclass for creating subscriber domain services on the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to automatically register/unregister itself with the EventBusService.  It’s important that subscribers register before any domain services that might emit events on the EventBusService. For example, the (non-ASF) Incode Platform security module provides a domain service that automatically seeds certain domain entities; these will generate lifecycle events and so any subscribers must be registered before such seed ser
 vices. The easiest way to do this is to use the @DomainServiceLayout#menuOrder() attribute.  As a convenience, the AbstractSubscriber specifies this attribute. ","description":" This is a convenience superclass for creating subscriber domain services on the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to automatically register/unregister itself with the EventBusService. ","id":220685197},"222371586":{"title":"Nullability","url":"guides/rgant/rgant.html#_rgant-Column_allowsNull","body":"Nullability  The allowsNull() attribute is used to specify if a property is mandatory or is optional.  For example:  Isis also provides @Property#optionality() attribute. If both are specified, Apache Isis will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.  You should also be aware that in the lack of either the @Column#allowsNull() or the @Property#optionality() attributes, that the JDO and Apache I
 sis defaults differ. Apache Isis rule is straight-forward: properties are assumed to be required. JDO on the other hand specifies that only primitive types are mandatory; everything else is assumed to be optional. Therefore a lack of either annotation can also trigger the fail-fast validation check.  In the vast majority of cases you should be fine just to add the @Column#allowsNull() attribute to the getter. But see the documentation for @Property#optionality() attribute for discussion on one or two minor edge cases. ","description":" The allowsNull() attribute is used to specify if a property is mandatory or is optional. ","id":222371586},"227377078":{"title":"Initialization","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-services_initialization","body":"Initialization  Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed).  An Apache Isis session is available when initia
 lization occurs (so services can interact with the object store, for example).  The framework will call any public method annotated with @PostConstruct with either no arguments of an argument of type Map<String,String>. In the latter case, the framework passes in the configuration (isis.properties and any other component-specific configuration files).  Shutdown is similar; the framework will call any method annotated with @PreDestroy. ","description":" Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed). ","id":227377078},"228550183":{"title":"Policies","url":"guides/cgcom/cgcom.html#_cgcom_policies","body":"Policies ","description":"","id":228550183},"229025509":{"title":"Remove references to isis-viewer-wicket parent pom.","url":"migration-notes/migration-notes.html#_remove_references_to_code_isis_viewer_wicket_code_parent_pom","body":"Remove references to isis-viewer-wicket parent pom
 .  In earlier releases the Wicket viewer defined its own parent pom.xml for dependency management and its dependencies and to declare the various submodules that make up the viewer. This pom.xml has now been incorporated into the parent pom.xml for the Core framework.  Therefore, in the parent pom.xml of your own domain applications, remove: ","description":" In earlier releases the Wicket viewer defined its own parent pom.xml for dependency management and its dependencies and to declare the various submodules that make up the viewer. This pom.xml has now been incorporated into the parent pom.xml for the Core framework. ","id":229025509},"230599582":{"title":"AuditingServiceInternal","url":"guides/rgfis/rgfis.html#_rgfis_persistence-layer_AuditingServiceInternal","body":"AuditingServiceInternal  The (internal) AuditingServiceInternal domain service acts as an internal facade to any configured AuditingService and AuditerService services. It is responsible for obtaining the details of
  all changes to domain objects within an interaction, and then to call the configured AuditingService to actually create audit entries of those changes. ","description":" The (internal) AuditingServiceInternal domain service acts as an internal facade to any configured AuditingService and AuditerService services. It is responsible for obtaining the details of all changes to domain objects within an interaction, and then to call the configured AuditingService to actually create audit entries of those changes. ","id":230599582},"232471644":{"title":"Registering Subscribers","url":"guides/rgsvc/rgsvc.html#_registering_subscribers","body":"Registering Subscribers  The register() method should be called in the @PostConstruct lifecycle method. It is valid and probably the least confusing to readers to also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, unregistering is actually a no-op).  For example:  This works for both singleton (application-scoped) and also
  @RequestScoped domain services. ","description":" The register() method should be called in the @PostConstruct lifecycle method. It is valid and probably the least confusing to readers to also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, unregistering is actually a no-op). ","id":232471644},"238546442":{"title":"rebuildMetamodel()","url":"guides/rgcms/rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel","body":"rebuildMetamodel()  The Object_rebuildMetamodel mixin provides the ability to discard the current internal metamodel data (an instance of ObjectSpecification) for the domain class of the rendered object, and recreate from code and other sources (most notably, layout XML data). It has the following signature: ","description":" The Object_rebuildMetamodel mixin provides the ability to discard the current internal metamodel data (an instance of ObjectSpecification) for the domain class of the rendered object, and recreate from code and other 
 sources (most notably, layout XML data). It has the following signature: ","id":238546442},"238801420":{"title":"REST API Mapping","url":"guides/rgsvc/rgsvc.html#_rest_api_mapping","body":"REST API Mapping  The /restful/health path must be specified as a \"passThru\" so that no authentication challenge is issued.  This is a comma separated list, so there may be other values also (for example /restful/swagger, as shown above). ","description":" The /restful/health path must be specified as a \"passThru\" so that no authentication challenge is issued. ","id":238801420},"238979657":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_22","body":"New Feature ","description":"","id":238979657},"240026998":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_14","body":"Improvement ","description":"","id":240026998},"242030985":{"title":"1.4.0","url":"release-notes/release-notes.html#_release-notes_1.4.0","body":"1.4.0 ","description":"","id":
 242030985},"243439147":{"title":"hidden()","url":"guides/rgant/rgant.html#_rgant-Property_hidden","body":"hidden()  Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to actions and collections.  For example:  The acceptable values for the where parameter are:  For example, if a property is annotated with @Title, then normally this should be hidden from all tables. Annotating with @Property(where=Where.NOWHERE) overrides this. ","description":" Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to actions and collections. ","id":243439147},"243876171":{"title":"Task","url":"release-notes/release-notes.html#_task_28","body":"Task ","description":"","id":243876171},"244520152":{"title":"SessionLoggingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_SessionLoggingService","body":"SessionLoggingServic
 e  The SessionLoggingService defines an SPI to keep track of (typically: to log) the current sessions that are using the application. ","description":" The SessionLoggingService defines an SPI to keep track of (typically: to log) the current sessions that are using the application. ","id":244520152},"246409050":{"title":"Using system properties","url":"guides/ugbtb/ugbtb.html#_using_system_properties","body":"Using system properties  The servlet context initializer will search for any system properties called isis.xxx and if present will use them as overrides.  Thus, an alternative option for a Docker image is to bootstrap the servlet container (Tomcat, Jetty) with appropriate system properties set up. For example, with Tomcat this can be done by writing into the conf/catalina.properties file (see for example this stackoverflow post).  The Docker’s ENTRYPOINT therefore just needs to parse the Docker container’s own command line arguments and use to create this file. ","descripti
 on":" The servlet context initializer will search for any system properties called isis.xxx and if present will use them as overrides. ","id":246409050},"255768608":{"title":"Multi-tenancy support","url":"pages/isis-in-pictures/isis-in-pictures.html#_multi_tenancy_support","body":"Multi-tenancy support  One significant feature of the (non-ASF) Incode Platform's security module is the ability to associate users and objects with a \"tenancy\". The todoapp uses this feature so that different users' list of todo items are kept separate from one another. A user with administrator is able to switch their own \"tenancy\" to the tenancy of some other user, in order to access the objects in that tenancy:  For more details, see the (non-ASF) Incode Platform's security module README. ","description":" One significant feature of the (non-ASF) Incode Platform's security module is the ability to associate users and objects with a \"tenancy\". The todoapp uses this feature so that different users'
  list of todo items are kept separate from one another. A user with administrator is able to switch","id":255768608},"257661017":{"title":"AppManifest (bootstrapping)","url":"guides/rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping","body":"AppManifest (bootstrapping)  This section describes how to implement the AppManifest interface to bootstrap both an Apache Isis web application, and also its integration tests. ","description":" This section describes how to implement the AppManifest interface to bootstrap both an Apache Isis web application, and also its integration tests. ","id":257661017},"259202548":{"title":"Run-as","url":"guides/htg.html#_ugsec_hints-and-tips_run-as","body":"Run-as  This hint shows how to temporarily change the current user as reported by Shiro. This can be useful to support \"Run As\", for example.  The heavy lifting is done in ShiroService:  This could be exposed in the UI using a simple RunAsService, for example:  Credits: adapted from this gist.
  ","description":" This hint shows how to temporarily change the current user as reported by Shiro. This can be useful to support \"Run As\", for example. ","id":259202548},"259358868":{"title":"Hints and Tips","url":"guides/ugodn/ugodn.html#_ugodn_hints-and-tips","body":"Hints and Tips ","description":"","id":259358868},"262898169":{"title":"ResourceCachingFilter","url":"guides/ugbtb/ugbtb.html#_code_resourcecachingfilter_code","body":"ResourceCachingFilter  The ResourceCachingFilter adds HTTP cache headers to specified resources, based on their pattern.  Its definition is:  Its mapping is: ","description":" The ResourceCachingFilter adds HTTP cache headers to specified resources, based on their pattern. ","id":262898169},"266250802":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_2","body":"Implementation  There is no default implementation of this service.  The (non-ASF) Isis addons' kitchensink app provides an example implementation:  which is rendered a
 s: ","description":" There is no default implementation of this service. ","id":266250802},"267695496":{"title":"Building Apache Isis","url":"guides/dg/dg.html#_dg_building-isis","body":"Building Apache Isis ","description":"","id":267695496},"273843820":{"title":"Simulated UI (WrapperFactory)","url":"guides/ugtst/ugtst.html#_simulated_ui_code_wrapperfactory_code","body":"Simulated UI (WrapperFactory)  When we talk about integration tests/specs here, we mean tests that exercise the domain object logic, through to the actual database. But we also want the tests to exercise the app from the users’s perspective, which means including the user interface.  For most other frameworks that would require having to test the application in a very heavy weight/fragile fashion using a tool such as Selenium, driving a web browser to navigate . In this regard though, Apache Isis has a significant trick up its sleeve. Because Apache Isis implements the naked objects pattern, it means that the UI 
 is generated automatically from declared domain-objects, -views and -services. This therefore allows for other implementations of the UI.  The WrapperFactory domain service allows a test to wrap domain objects and thus to interact with said objects \"as if\" through the UI:  If the test invokes an action that is disabled, then the wrapper will throw an appropriate exception. If the action is ok to invoke, it delegates through.  What this means is that an Apache Isis application can be tested end-to-end without having to deploy it onto a webserver; the whole app can be tested while running in-memory. Although integration tests re (necessarily) slower than unit tests, they are not any harder to write (in fact, in some respects they are easier). ","description":" When we talk about integration tests/specs here, we mean tests that exercise the domain object logic, through to the actual database. But we also want the tests to exercise the app from the users’s perspective, which means i
 ncluding the user interface. ","id":273843820},"273985863":{"title":"addTo…​() (deprecated)","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_addTo","body":"addTo…​() (deprecated)  The addTo…​() supporting method is called whenever an object is added to a collection. Its purpose is to allow additional business logic to be performed.  For example:  See also removeFrom…​()` ","description":" The addTo…​() supporting method is called whenever an object is added to a collection. Its purpose is to allow additional business logic to be performed. ","id":273985863},"278859977":{"title":"promptStyle()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_promptStyle","body":"promptStyle()  The promptStyle() attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page).  If the attribute is not set, then the valu
 e of the configuration property isis.viewer.wicket.promptStyle is used. If this is itself not set, then an inline prompt is used.  For example:  Alternatively, the promptStyle() can be specified using file-based layouts. ","description":" The promptStyle() attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page). ","id":278859977},"278890330":{"title":"Build a domain app","url":"pages/tg/tg.html#_build_a_domain_app","body":"Build a domain app ","description":"","id":278890330},"278999912":{"title":"Integration API","url":"guides/rgsvc/rgsvc.html#_rgsvc_integration-api","body":"Integration API ","description":"","id":278999912},"280598039":{"title":"_repos.txt","url":"guides/dg/dg.html#_code_repos_txt_code","body":"_repos.txt  Create a file _repos.txt that catalogues the repositories, eg: ","description":" Create a file _repo
 s.txt that catalogues the repositories, eg: ","id":280598039},"282766365":{"title":"Object CSS Styling","url":"guides/ugfun/ugfun.html#_object_css_styling","body":"Object CSS Styling  It is also possible for an object to return a CSS class. In conjunction with customized CSS this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour. ","description":" It is also possible for an object to return a CSS class. In conjunction with customized CSS this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour. ","id":282766365},"285898371":{"title":"ObjectUpdatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectUpdatedEvent","body":"ObjectUpdatedEvent  Subclass of AbstractLifecycleEvent, broadcast when an object has just been updated in the database. This is done either explicitly when the current transaction is flushed using
  the RepositoryService's #flush(…​) method, else is done implicitly when the transaction commits at the end of the user request.  ObjectUpdatedEvent.Default is the implementation that is used by default, but this can be overridden using @DomainObject#updatedLifecycleEvent(). ","description":" Subclass of AbstractLifecycleEvent, broadcast when an object has just been updated in the database. This is done either explicitly when the current transaction is flushed using the RepositoryService's #flush(…​) method, else is done implicitly when the transaction commits at the end of the user request. ","id":285898371},"286850218":{"title":"Dependent choices for action parameters","url":"guides/ugfun/ugfun.html#_dependent_choices_for_action_parameters","body":"Dependent choices for action parameters  For action it is also possible (in a limited form) to define dependencies between parameters. Specifically, if one parameter is a drop-down choice, then other drop-down choices can be der
 ived from it.  A good example is a category/sub-category:  Note how the choices method for the 2nd parameter also accepts the first parameter. ","description":" For action it is also possible (in a limited form) to define dependencies between parameters. Specifically, if one parameter is a drop-down choice, then other drop-down choices can be derived from it. ","id":286850218},"286919998":{"title":"Install Project Lombok","url":"guides/dg/dg.html#__dg_ide_eclipse_configure-lombok","body":"Install Project Lombok  The SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this requires an installation step:  Then restart Eclipse. ","description":" The SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this requires an installation step: ","id":286919998},"287120012":{"title":"Actions","url":"guides/ugfun/ugfun.html#_actions_2","body":"Acti
 ons  Of course, the precondition business rules described above are only one type of business rule.  More generally, business rules are implemented in the form of the implementation of actions. Rather than have the end-user have to edit individual properties of numerous objects, an action can encode these rules and allow only safe transformations of the application from one consistent state to the next. ","description":" Of course, the precondition business rules described above are only one type of business rule. ","id":287120012},"288377989":{"title":"Philosophy and Architecture","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_philosophy","body":"Philosophy and Architecture  This section describes some of the core ideas and architectural patterns upon which Apache Isis builds. ","description":" This section describes some of the core ideas and architectural patterns upon which Apache Isis builds. ","id":288377989},"288392697":{"title":"User Experience","url":"guides/ugvw/ugvw.
 html#_user_experience_3","body":"User Experience  The copy URL dialog is typically obtained by clicking on the icon.  Alternatively, alt+] will also open the dialog. It can be closed with either OK or the Esc key. ","description":" The copy URL dialog is typically obtained by clicking on the icon. ","id":288392697},"291813215":{"title":"Raising events programmatically","url":"guides/rgant/rgant.html#_raising_events_programmatically","body":"Raising events programmatically  Normally events are only raised for interactions through the UI. However, events can be raised programmatically either by calling the EventBusService API directly, or by emulating the UI by wrapping the target object using the WrapperFactory domain service. ","description":" Normally events are only raised for interactions through the UI. However, events can be raised programmatically either by calling the EventBusService API directly, or by emulating the UI by wrapping the target object using the WrapperFactory d
 omain service. ","id":291813215},"292881794":{"title":"FixtureScript","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage_FixtureScript","body":"FixtureScript  A fixture script is ultimately just a block of code that can be executed, so it’s up to you how you implement it to set up the system. However, we strongly recommend that you use it to invoke actions on business objects, in essence to replay what a real-life user would have done. That way, the fixture script will remain valid even if the underlying implementation of the system changes in the future.  For example, here’s a fixture script called RecreateSimpleObjects. (This used to be part of the SimpleApp archetype, though the archetype now ships with a more sophisticated design, discussed below):  Because this script has exposed a \"number\" property, it’s possible to set this from within the UI. For example:  When this is executed, the framework will parse the text and attempt to reflectively set the co
 rresponding properties on the fixture result. So, in this case, when the fixture script is executed we actually get 6 objects created. ","description":" A fixture script is ultimately just a block of code that can be executed, so it’s up to you how you implement it to set up the system. However, we strongly recommend that you use it to invoke actions on business objects, in essence to replay what a real","id":292881794},"293860175":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_10","body":"Usage  Fo

<TRUNCATED>

[7/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/guides/cgcom/cgcom.html
----------------------------------------------------------------------
diff --git a/content/guides/cgcom/cgcom.html b/content/guides/cgcom/cgcom.html
index 5860091..ecb1f55 100644
--- a/content/guides/cgcom/cgcom.html
+++ b/content/guides/cgcom/cgcom.html
@@ -2384,7 +2384,7 @@ mv content/versions/SNAPSHOT content/versions/current</code></pre>
              </div> 
             </div> </li> 
            <li> <p>publish the website once more (from the <code>isis</code> main repo).</p> </li> 
-           <li> <p>Finally, preview the changes (using <code>sh preview-html.sh</code> in the <code>isis-site</code>).</p> </li> 
+           <li> <p>Finally, preview the changes (using <code>sh preview.sh</code> in the <code>isis-site</code>).</p> </li> 
           </ul> 
          </div> 
          <div class="paragraph"> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/guides/cgcom/cgcom.pdf
----------------------------------------------------------------------
diff --git a/content/guides/cgcom/cgcom.pdf b/content/guides/cgcom/cgcom.pdf
index 13b4ec1..fac0b4c 100644
--- a/content/guides/cgcom/cgcom.pdf
+++ b/content/guides/cgcom/cgcom.pdf
@@ -4,8 +4,8 @@
 << /Title (Committers' Guide)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106163330+00'00')
-/CreationDate (D:20190106163330+00'00')
+/ModDate (D:20190106173125+00'00')
+/CreationDate (D:20190106173125+00'00')
 >>
 endobj
 2 0 obj
@@ -30216,7 +30216,7 @@ endobj
 >>
 endobj
 267 0 obj
-<< /Length 18236
+<< /Length 18226
 >>
 stream
 q
@@ -31461,7 +31461,7 @@ ET
 BT
 244.5106 312.206 Td
 /F4.0 10.5 Tf
-<736820707265766965772d68746d6c2e7368> Tj
+<736820707265766965772e7368> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -31470,7 +31470,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-339.0106 312.206 Td
+312.7606 312.206 Td
 /F1.0 10.5 Tf
 <20696e2074686520> Tj
 ET
@@ -31481,7 +31481,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-373.2616 312.206 Td
+347.0116 312.206 Td
 /F4.0 10.5 Tf
 <697369732d73697465> Tj
 ET
@@ -31492,7 +31492,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-420.5116 312.206 Td
+394.2616 312.206 Td
 /F1.0 10.5 Tf
 <292e> Tj
 ET
@@ -58462,520 +58462,520 @@ xref
 0001155587 00000 n 
 0001155768 00000 n 
 0001156003 00000 n 
-0001174294 00000 n 
-0001174683 00000 n 
-0001174729 00000 n 
-0001174901 00000 n 
-0001184440 00000 n 
-0001184823 00000 n 
-0001184869 00000 n 
-0001185054 00000 n 
-0001185229 00000 n 
-0001185275 00000 n 
-0001185321 00000 n 
-0001197194 00000 n 
-0001197569 00000 n 
-0001197615 00000 n 
-0001197843 00000 n 
-0001197889 00000 n 
-0001197935 00000 n 
-0001205719 00000 n 
-0001206126 00000 n 
-0001206295 00000 n 
-0001206341 00000 n 
-0001206543 00000 n 
-0001206729 00000 n 
-0001206775 00000 n 
-0001206821 00000 n 
-0001206992 00000 n 
-0001207234 00000 n 
-0001216198 00000 n 
-0001216589 00000 n 
-0001216635 00000 n 
-0001216822 00000 n 
-0001217011 00000 n 
-0001217203 00000 n 
-0001217249 00000 n 
-0001217665 00000 n 
-0001217711 00000 n 
-0001222029 00000 n 
-0001222404 00000 n 
-0001222450 00000 n 
-0001222623 00000 n 
-0001222669 00000 n 
-0001235321 00000 n 
-0001235717 00000 n 
-0001235763 00000 n 
-0001235809 00000 n 
-0001236017 00000 n 
-0001236203 00000 n 
-0001236249 00000 n 
-0001239773 00000 n 
-0001240161 00000 n 
-0001240207 00000 n 
-0001240382 00000 n 
-0001253051 00000 n 
-0001253517 00000 n 
-0001253563 00000 n 
-0001253757 00000 n 
-0001253964 00000 n 
-0001254153 00000 n 
-0001254341 00000 n 
-0001254541 00000 n 
-0001254718 00000 n 
-0001254889 00000 n 
-0001254935 00000 n 
-0001255098 00000 n 
-0001255264 00000 n 
-0001255310 00000 n 
-0001255356 00000 n 
-0001261907 00000 n 
-0001262278 00000 n 
-0001262324 00000 n 
-0001274455 00000 n 
-0001274899 00000 n 
-0001274945 00000 n 
-0001275123 00000 n 
-0001275290 00000 n 
-0001275459 00000 n 
-0001275639 00000 n 
-0001275840 00000 n 
-0001276007 00000 n 
-0001276053 00000 n 
-0001276251 00000 n 
-0001276426 00000 n 
-0001287717 00000 n 
-0001288087 00000 n 
-0001288133 00000 n 
-0001288179 00000 n 
-0001302086 00000 n 
-0001302456 00000 n 
-0001302502 00000 n 
-0001311872 00000 n 
-0001312263 00000 n 
-0001312309 00000 n 
-0001312501 00000 n 
-0001312695 00000 n 
-0001312886 00000 n 
-0001312932 00000 n 
-0001312978 00000 n 
-0001321890 00000 n 
-0001322234 00000 n 
-0001333056 00000 n 
-0001333400 00000 n 
-0001341350 00000 n 
-0001341720 00000 n 
-0001341766 00000 n 
-0001348520 00000 n 
-0001348877 00000 n 
-0001357089 00000 n 
-0001357464 00000 n 
-0001357510 00000 n 
-0001357710 00000 n 
-0001366073 00000 n 
-0001366417 00000 n 
-0001378547 00000 n 
-0001379018 00000 n 
-0001379064 00000 n 
-0001379110 00000 n 
-0001379634 00000 n 
-0001379796 00000 n 
-0001380003 00000 n 
-0001380208 00000 n 
-0001380373 00000 n 
-0001380578 00000 n 
-0001380784 00000 n 
-0001380990 00000 n 
-0001381196 00000 n 
-0001381402 00000 n 
-0001381608 00000 n 
-0001381814 00000 n 
-0001382020 00000 n 
-0001382226 00000 n 
-0001390318 00000 n 
-0001390733 00000 n 
-0001390779 00000 n 
-0001390825 00000 n 
-0001391013 00000 n 
-0001391202 00000 n 
-0001391391 00000 n 
-0001391580 00000 n 
-0001391769 00000 n 
-0001391815 00000 n 
-0001392360 00000 n 
-0001392550 00000 n 
-0001411587 00000 n 
-0001411931 00000 n 
-0001422847 00000 n 
-0001423238 00000 n 
-0001423284 00000 n 
-0001423463 00000 n 
-0001423509 00000 n 
-0001423555 00000 n 
-0001423764 00000 n 
-0001423955 00000 n 
-0001434853 00000 n 
-0001435210 00000 n 
-0001435256 00000 n 
-0001450650 00000 n 
-0001451078 00000 n 
-0001451124 00000 n 
-0001451311 00000 n 
-0001451357 00000 n 
-0001451567 00000 n 
-0001451613 00000 n 
-0001451798 00000 n 
-0001451961 00000 n 
-0001452128 00000 n 
-0001452174 00000 n 
-0001452347 00000 n 
-0001461102 00000 n 
-0001461485 00000 n 
-0001461694 00000 n 
-0001461880 00000 n 
-0001472338 00000 n 
-0001472745 00000 n 
-0001472791 00000 n 
-0001472837 00000 n 
-0001472883 00000 n 
-0001473045 00000 n 
-0001473091 00000 n 
-0001473685 00000 n 
-0001473903 00000 n 
-0001473949 00000 n 
-0001474115 00000 n 
-0001474301 00000 n 
-0001474481 00000 n 
-0001484536 00000 n 
-0001484911 00000 n 
-0001485101 00000 n 
-0001485147 00000 n 
-0001488544 00000 n 
-0001488927 00000 n 
-0001488973 00000 n 
-0001489160 00000 n 
-0001489334 00000 n 
-0001497929 00000 n 
-0001498354 00000 n 
-0001498400 00000 n 
-0001498578 00000 n 
-0001498624 00000 n 
-0001498829 00000 n 
-0001499034 00000 n 
-0001499080 00000 n 
-0001499266 00000 n 
-0001499312 00000 n 
-0001505837 00000 n 
-0001506207 00000 n 
-0001506253 00000 n 
-0001515528 00000 n 
-0001515916 00000 n 
-0001515962 00000 n 
-0001516196 00000 n 
-0001516242 00000 n 
-0001516288 00000 n 
-0001526480 00000 n 
-0001526881 00000 n 
-0001527062 00000 n 
-0001527109 00000 n 
-0001536803 00000 n 
-0001537204 00000 n 
-0001537250 00000 n 
-0001537296 00000 n 
-0001537470 00000 n 
-0001537516 00000 n 
-0001539539 00000 n 
-0001539883 00000 n 
-0001540003 00000 n 
-0001540124 00000 n 
-0001540249 00000 n 
-0001540375 00000 n 
-0001540510 00000 n 
-0001540647 00000 n 
-0001540769 00000 n 
-0001540893 00000 n 
-0001541016 00000 n 
-0001541141 00000 n 
-0001541283 00000 n 
-0001541426 00000 n 
-0001541555 00000 n 
-0001541686 00000 n 
-0001541812 00000 n 
-0001541939 00000 n 
-0001542058 00000 n 
-0001542178 00000 n 
-0001542309 00000 n 
-0001542441 00000 n 
-0001542577 00000 n 
-0001542715 00000 n 
-0001542870 00000 n 
-0001543026 00000 n 
-0001543189 00000 n 
-0001543354 00000 n 
-0001543517 00000 n 
-0001543682 00000 n 
-0001543843 00000 n 
-0001544007 00000 n 
-0001544170 00000 n 
-0001544336 00000 n 
-0001544500 00000 n 
-0001544652 00000 n 
-0001544806 00000 n 
-0001544977 00000 n 
-0001545152 00000 n 
-0001545326 00000 n 
-0001545498 00000 n 
-0001545670 00000 n 
-0001545846 00000 n 
-0001546021 00000 n 
-0001546194 00000 n 
-0001546356 00000 n 
-0001546519 00000 n 
-0001546671 00000 n 
-0001546827 00000 n 
-0001546982 00000 n 
-0001547135 00000 n 
-0001547287 00000 n 
-0001547439 00000 n 
-0001547584 00000 n 
-0001547729 00000 n 
-0001547867 00000 n 
-0001548005 00000 n 
-0001548155 00000 n 
-0001548305 00000 n 
-0001548458 00000 n 
-0001548611 00000 n 
-0001548777 00000 n 
-0001548943 00000 n 
-0001549099 00000 n 
-0001549255 00000 n 
-0001549402 00000 n 
-0001549549 00000 n 
-0001549703 00000 n 
-0001549857 00000 n 
-0001549999 00000 n 
-0001550142 00000 n 
-0001550268 00000 n 
-0001550394 00000 n 
-0001550517 00000 n 
-0001550641 00000 n 
-0001550778 00000 n 
-0001550915 00000 n 
-0001551046 00000 n 
-0001551177 00000 n 
-0001551300 00000 n 
-0001551424 00000 n 
-0001551564 00000 n 
-0001551704 00000 n 
-0001551829 00000 n 
-0001551954 00000 n 
-0001552085 00000 n 
-0001552216 00000 n 
-0001552338 00000 n 
-0001552460 00000 n 
-0001552596 00000 n 
-0001552732 00000 n 
-0001552864 00000 n 
-0001552996 00000 n 
-0001553123 00000 n 
-0001553251 00000 n 
-0001553376 00000 n 
-0001553501 00000 n 
-0001553667 00000 n 
-0001553835 00000 n 
-0001553980 00000 n 
-0001554125 00000 n 
-0001554253 00000 n 
-0001554381 00000 n 
-0001554510 00000 n 
-0001554639 00000 n 
-0001554773 00000 n 
-0001554908 00000 n 
-0001555026 00000 n 
-0001555144 00000 n 
-0001555292 00000 n 
-0001555441 00000 n 
-0001555569 00000 n 
-0001555697 00000 n 
-0001555822 00000 n 
-0001555947 00000 n 
-0001556066 00000 n 
-0001556185 00000 n 
-0001556340 00000 n 
-0001556496 00000 n 
-0001556624 00000 n 
-0001556752 00000 n 
-0001556879 00000 n 
-0001557006 00000 n 
-0001557124 00000 n 
-0001557244 00000 n 
-0001557388 00000 n 
-0001557534 00000 n 
-0001557660 00000 n 
-0001557787 00000 n 
-0001557905 00000 n 
-0001558025 00000 n 
-0001558159 00000 n 
-0001558293 00000 n 
-0001558427 00000 n 
-0001558561 00000 n 
-0001558697 00000 n 
-0001558835 00000 n 
-0001558962 00000 n 
-0001559089 00000 n 
-0001559219 00000 n 
-0001559349 00000 n 
-0001559495 00000 n 
-0001559641 00000 n 
-0001559765 00000 n 
-0001559889 00000 n 
-0001560046 00000 n 
-0001560203 00000 n 
-0001560368 00000 n 
-0001560538 00000 n 
-0001560706 00000 n 
-0001560871 00000 n 
-0001561014 00000 n 
-0001561157 00000 n 
-0001561297 00000 n 
-0001561437 00000 n 
-0001561568 00000 n 
-0001561699 00000 n 
-0001561840 00000 n 
-0001561986 00000 n 
-0001562127 00000 n 
-0001562254 00000 n 
-0001562382 00000 n 
-0001562528 00000 n 
-0001562674 00000 n 
-0001562813 00000 n 
-0001562952 00000 n 
-0001563080 00000 n 
-0001563208 00000 n 
-0001563325 00000 n 
-0001563443 00000 n 
-0001563577 00000 n 
-0001563712 00000 n 
-0001563844 00000 n 
-0001563977 00000 n 
-0001564248 00000 n 
-0001564519 00000 n 
-0001564597 00000 n 
-0001564774 00000 n 
-0001564966 00000 n 
-0001565231 00000 n 
-0001565395 00000 n 
-0001565656 00000 n 
-0001565826 00000 n 
-0001566000 00000 n 
-0001566285 00000 n 
-0001566483 00000 n 
-0001566679 00000 n 
-0001566847 00000 n 
-0001567049 00000 n 
-0001567315 00000 n 
-0001567509 00000 n 
-0001567753 00000 n 
-0001567997 00000 n 
-0001568277 00000 n 
-0001568477 00000 n 
-0001568738 00000 n 
-0001569003 00000 n 
-0001569244 00000 n 
-0001569483 00000 n 
-0001569686 00000 n 
-0001569845 00000 n 
-0001570119 00000 n 
-0001570290 00000 n 
-0001570487 00000 n 
-0001570736 00000 n 
-0001571029 00000 n 
-0001571270 00000 n 
-0001571457 00000 n 
-0001571756 00000 n 
-0001571939 00000 n 
-0001572128 00000 n 
-0001572369 00000 n 
-0001572588 00000 n 
-0001572777 00000 n 
-0001573030 00000 n 
-0001573232 00000 n 
-0001573457 00000 n 
-0001573638 00000 n 
-0001573879 00000 n 
-0001574104 00000 n 
-0001574313 00000 n 
-0001574510 00000 n 
-0001574745 00000 n 
-0001575051 00000 n 
-0001575234 00000 n 
-0001575443 00000 n 
-0001575676 00000 n 
-0001575827 00000 n 
-0001576093 00000 n 
-0001576276 00000 n 
-0001576469 00000 n 
-0001576624 00000 n 
-0001576886 00000 n 
-0001577069 00000 n 
-0001577262 00000 n 
-0001577421 00000 n 
-0001577699 00000 n 
-0001577890 00000 n 
-0001578067 00000 n 
-0001578294 00000 n 
-0001578552 00000 n 
-0001578787 00000 n 
-0001578992 00000 n 
-0001579209 00000 n 
-0001579490 00000 n 
-0001579683 00000 n 
-0001580016 00000 n 
-0001580339 00000 n 
-0001580641 00000 n 
-0001580884 00000 n 
-0001581105 00000 n 
-0001581312 00000 n 
-0001581546 00000 n 
-0001581749 00000 n 
-0001581924 00000 n 
-0001582164 00000 n 
-0001582327 00000 n 
-0001582572 00000 n 
-0001582787 00000 n 
-0001584142 00000 n 
-0001594204 00000 n 
-0001594420 00000 n 
-0001595783 00000 n 
-0001596829 00000 n 
-0001605153 00000 n 
-0001605374 00000 n 
-0001606737 00000 n 
-0001607809 00000 n 
-0001609262 00000 n 
-0001609471 00000 n 
-0001609791 00000 n 
-0001610707 00000 n 
-0001616803 00000 n 
-0001617017 00000 n 
-0001618380 00000 n 
-0001619425 00000 n 
-0001621407 00000 n 
-0001621621 00000 n 
-0001621952 00000 n 
-0001623090 00000 n 
-0001624352 00000 n 
-0001624568 00000 n 
-0001624872 00000 n 
-0001626009 00000 n 
-0001628798 00000 n 
-0001629024 00000 n 
-0001630387 00000 n 
+0001174284 00000 n 
+0001174673 00000 n 
+0001174719 00000 n 
+0001174891 00000 n 
+0001184430 00000 n 
+0001184813 00000 n 
+0001184859 00000 n 
+0001185044 00000 n 
+0001185219 00000 n 
+0001185265 00000 n 
+0001185311 00000 n 
+0001197184 00000 n 
+0001197559 00000 n 
+0001197605 00000 n 
+0001197833 00000 n 
+0001197879 00000 n 
+0001197925 00000 n 
+0001205709 00000 n 
+0001206116 00000 n 
+0001206285 00000 n 
+0001206331 00000 n 
+0001206533 00000 n 
+0001206719 00000 n 
+0001206765 00000 n 
+0001206811 00000 n 
+0001206982 00000 n 
+0001207224 00000 n 
+0001216188 00000 n 
+0001216579 00000 n 
+0001216625 00000 n 
+0001216812 00000 n 
+0001217001 00000 n 
+0001217193 00000 n 
+0001217239 00000 n 
+0001217655 00000 n 
+0001217701 00000 n 
+0001222019 00000 n 
+0001222394 00000 n 
+0001222440 00000 n 
+0001222613 00000 n 
+0001222659 00000 n 
+0001235311 00000 n 
+0001235707 00000 n 
+0001235753 00000 n 
+0001235799 00000 n 
+0001236007 00000 n 
+0001236193 00000 n 
+0001236239 00000 n 
+0001239763 00000 n 
+0001240151 00000 n 
+0001240197 00000 n 
+0001240372 00000 n 
+0001253041 00000 n 
+0001253507 00000 n 
+0001253553 00000 n 
+0001253747 00000 n 
+0001253954 00000 n 
+0001254143 00000 n 
+0001254331 00000 n 
+0001254531 00000 n 
+0001254708 00000 n 
+0001254879 00000 n 
+0001254925 00000 n 
+0001255088 00000 n 
+0001255254 00000 n 
+0001255300 00000 n 
+0001255346 00000 n 
+0001261897 00000 n 
+0001262268 00000 n 
+0001262314 00000 n 
+0001274445 00000 n 
+0001274889 00000 n 
+0001274935 00000 n 
+0001275113 00000 n 
+0001275280 00000 n 
+0001275449 00000 n 
+0001275629 00000 n 
+0001275830 00000 n 
+0001275997 00000 n 
+0001276043 00000 n 
+0001276241 00000 n 
+0001276416 00000 n 
+0001287707 00000 n 
+0001288077 00000 n 
+0001288123 00000 n 
+0001288169 00000 n 
+0001302076 00000 n 
+0001302446 00000 n 
+0001302492 00000 n 
+0001311862 00000 n 
+0001312253 00000 n 
+0001312299 00000 n 
+0001312491 00000 n 
+0001312685 00000 n 
+0001312876 00000 n 
+0001312922 00000 n 
+0001312968 00000 n 
+0001321880 00000 n 
+0001322224 00000 n 
+0001333046 00000 n 
+0001333390 00000 n 
+0001341340 00000 n 
+0001341710 00000 n 
+0001341756 00000 n 
+0001348510 00000 n 
+0001348867 00000 n 
+0001357079 00000 n 
+0001357454 00000 n 
+0001357500 00000 n 
+0001357700 00000 n 
+0001366063 00000 n 
+0001366407 00000 n 
+0001378537 00000 n 
+0001379008 00000 n 
+0001379054 00000 n 
+0001379100 00000 n 
+0001379624 00000 n 
+0001379786 00000 n 
+0001379993 00000 n 
+0001380198 00000 n 
+0001380363 00000 n 
+0001380568 00000 n 
+0001380774 00000 n 
+0001380980 00000 n 
+0001381186 00000 n 
+0001381392 00000 n 
+0001381598 00000 n 
+0001381804 00000 n 
+0001382010 00000 n 
+0001382216 00000 n 
+0001390308 00000 n 
+0001390723 00000 n 
+0001390769 00000 n 
+0001390815 00000 n 
+0001391003 00000 n 
+0001391192 00000 n 
+0001391381 00000 n 
+0001391570 00000 n 
+0001391759 00000 n 
+0001391805 00000 n 
+0001392350 00000 n 
+0001392540 00000 n 
+0001411577 00000 n 
+0001411921 00000 n 
+0001422837 00000 n 
+0001423228 00000 n 
+0001423274 00000 n 
+0001423453 00000 n 
+0001423499 00000 n 
+0001423545 00000 n 
+0001423754 00000 n 
+0001423945 00000 n 
+0001434843 00000 n 
+0001435200 00000 n 
+0001435246 00000 n 
+0001450640 00000 n 
+0001451068 00000 n 
+0001451114 00000 n 
+0001451301 00000 n 
+0001451347 00000 n 
+0001451557 00000 n 
+0001451603 00000 n 
+0001451788 00000 n 
+0001451951 00000 n 
+0001452118 00000 n 
+0001452164 00000 n 
+0001452337 00000 n 
+0001461092 00000 n 
+0001461475 00000 n 
+0001461684 00000 n 
+0001461870 00000 n 
+0001472328 00000 n 
+0001472735 00000 n 
+0001472781 00000 n 
+0001472827 00000 n 
+0001472873 00000 n 
+0001473035 00000 n 
+0001473081 00000 n 
+0001473675 00000 n 
+0001473893 00000 n 
+0001473939 00000 n 
+0001474105 00000 n 
+0001474291 00000 n 
+0001474471 00000 n 
+0001484526 00000 n 
+0001484901 00000 n 
+0001485091 00000 n 
+0001485137 00000 n 
+0001488534 00000 n 
+0001488917 00000 n 
+0001488963 00000 n 
+0001489150 00000 n 
+0001489324 00000 n 
+0001497919 00000 n 
+0001498344 00000 n 
+0001498390 00000 n 
+0001498568 00000 n 
+0001498614 00000 n 
+0001498819 00000 n 
+0001499024 00000 n 
+0001499070 00000 n 
+0001499256 00000 n 
+0001499302 00000 n 
+0001505827 00000 n 
+0001506197 00000 n 
+0001506243 00000 n 
+0001515518 00000 n 
+0001515906 00000 n 
+0001515952 00000 n 
+0001516186 00000 n 
+0001516232 00000 n 
+0001516278 00000 n 
+0001526470 00000 n 
+0001526871 00000 n 
+0001527052 00000 n 
+0001527099 00000 n 
+0001536793 00000 n 
+0001537194 00000 n 
+0001537240 00000 n 
+0001537286 00000 n 
+0001537460 00000 n 
+0001537506 00000 n 
+0001539529 00000 n 
+0001539873 00000 n 
+0001539993 00000 n 
+0001540114 00000 n 
+0001540239 00000 n 
+0001540365 00000 n 
+0001540500 00000 n 
+0001540637 00000 n 
+0001540759 00000 n 
+0001540883 00000 n 
+0001541006 00000 n 
+0001541131 00000 n 
+0001541273 00000 n 
+0001541416 00000 n 
+0001541545 00000 n 
+0001541676 00000 n 
+0001541802 00000 n 
+0001541929 00000 n 
+0001542048 00000 n 
+0001542168 00000 n 
+0001542299 00000 n 
+0001542431 00000 n 
+0001542567 00000 n 
+0001542705 00000 n 
+0001542860 00000 n 
+0001543016 00000 n 
+0001543179 00000 n 
+0001543344 00000 n 
+0001543507 00000 n 
+0001543672 00000 n 
+0001543833 00000 n 
+0001543997 00000 n 
+0001544160 00000 n 
+0001544326 00000 n 
+0001544490 00000 n 
+0001544642 00000 n 
+0001544796 00000 n 
+0001544967 00000 n 
+0001545142 00000 n 
+0001545316 00000 n 
+0001545488 00000 n 
+0001545660 00000 n 
+0001545836 00000 n 
+0001546011 00000 n 
+0001546184 00000 n 
+0001546346 00000 n 
+0001546509 00000 n 
+0001546661 00000 n 
+0001546817 00000 n 
+0001546972 00000 n 
+0001547125 00000 n 
+0001547277 00000 n 
+0001547429 00000 n 
+0001547574 00000 n 
+0001547719 00000 n 
+0001547857 00000 n 
+0001547995 00000 n 
+0001548145 00000 n 
+0001548295 00000 n 
+0001548448 00000 n 
+0001548601 00000 n 
+0001548767 00000 n 
+0001548933 00000 n 
+0001549089 00000 n 
+0001549245 00000 n 
+0001549392 00000 n 
+0001549539 00000 n 
+0001549693 00000 n 
+0001549847 00000 n 
+0001549989 00000 n 
+0001550132 00000 n 
+0001550258 00000 n 
+0001550384 00000 n 
+0001550507 00000 n 
+0001550631 00000 n 
+0001550768 00000 n 
+0001550905 00000 n 
+0001551036 00000 n 
+0001551167 00000 n 
+0001551290 00000 n 
+0001551414 00000 n 
+0001551554 00000 n 
+0001551694 00000 n 
+0001551819 00000 n 
+0001551944 00000 n 
+0001552075 00000 n 
+0001552206 00000 n 
+0001552328 00000 n 
+0001552450 00000 n 
+0001552586 00000 n 
+0001552722 00000 n 
+0001552854 00000 n 
+0001552986 00000 n 
+0001553113 00000 n 
+0001553241 00000 n 
+0001553366 00000 n 
+0001553491 00000 n 
+0001553657 00000 n 
+0001553825 00000 n 
+0001553970 00000 n 
+0001554115 00000 n 
+0001554243 00000 n 
+0001554371 00000 n 
+0001554500 00000 n 
+0001554629 00000 n 
+0001554763 00000 n 
+0001554898 00000 n 
+0001555016 00000 n 
+0001555134 00000 n 
+0001555282 00000 n 
+0001555431 00000 n 
+0001555559 00000 n 
+0001555687 00000 n 
+0001555812 00000 n 
+0001555937 00000 n 
+0001556056 00000 n 
+0001556175 00000 n 
+0001556330 00000 n 
+0001556486 00000 n 
+0001556614 00000 n 
+0001556742 00000 n 
+0001556869 00000 n 
+0001556996 00000 n 
+0001557114 00000 n 
+0001557234 00000 n 
+0001557378 00000 n 
+0001557524 00000 n 
+0001557650 00000 n 
+0001557777 00000 n 
+0001557895 00000 n 
+0001558015 00000 n 
+0001558149 00000 n 
+0001558283 00000 n 
+0001558417 00000 n 
+0001558551 00000 n 
+0001558687 00000 n 
+0001558825 00000 n 
+0001558952 00000 n 
+0001559079 00000 n 
+0001559209 00000 n 
+0001559339 00000 n 
+0001559485 00000 n 
+0001559631 00000 n 
+0001559755 00000 n 
+0001559879 00000 n 
+0001560036 00000 n 
+0001560193 00000 n 
+0001560358 00000 n 
+0001560528 00000 n 
+0001560696 00000 n 
+0001560861 00000 n 
+0001561004 00000 n 
+0001561147 00000 n 
+0001561287 00000 n 
+0001561427 00000 n 
+0001561558 00000 n 
+0001561689 00000 n 
+0001561830 00000 n 
+0001561976 00000 n 
+0001562117 00000 n 
+0001562244 00000 n 
+0001562372 00000 n 
+0001562518 00000 n 
+0001562664 00000 n 
+0001562803 00000 n 
+0001562942 00000 n 
+0001563070 00000 n 
+0001563198 00000 n 
+0001563315 00000 n 
+0001563433 00000 n 
+0001563567 00000 n 
+0001563702 00000 n 
+0001563834 00000 n 
+0001563967 00000 n 
+0001564238 00000 n 
+0001564509 00000 n 
+0001564587 00000 n 
+0001564764 00000 n 
+0001564956 00000 n 
+0001565221 00000 n 
+0001565385 00000 n 
+0001565646 00000 n 
+0001565816 00000 n 
+0001565990 00000 n 
+0001566275 00000 n 
+0001566473 00000 n 
+0001566669 00000 n 
+0001566837 00000 n 
+0001567039 00000 n 
+0001567305 00000 n 
+0001567499 00000 n 
+0001567743 00000 n 
+0001567987 00000 n 
+0001568267 00000 n 
+0001568467 00000 n 
+0001568728 00000 n 
+0001568993 00000 n 
+0001569234 00000 n 
+0001569473 00000 n 
+0001569676 00000 n 
+0001569835 00000 n 
+0001570109 00000 n 
+0001570280 00000 n 
+0001570477 00000 n 
+0001570726 00000 n 
+0001571019 00000 n 
+0001571260 00000 n 
+0001571447 00000 n 
+0001571746 00000 n 
+0001571929 00000 n 
+0001572118 00000 n 
+0001572359 00000 n 
+0001572578 00000 n 
+0001572767 00000 n 
+0001573020 00000 n 
+0001573222 00000 n 
+0001573447 00000 n 
+0001573628 00000 n 
+0001573869 00000 n 
+0001574094 00000 n 
+0001574303 00000 n 
+0001574500 00000 n 
+0001574735 00000 n 
+0001575041 00000 n 
+0001575224 00000 n 
+0001575433 00000 n 
+0001575666 00000 n 
+0001575817 00000 n 
+0001576083 00000 n 
+0001576266 00000 n 
+0001576459 00000 n 
+0001576614 00000 n 
+0001576876 00000 n 
+0001577059 00000 n 
+0001577252 00000 n 
+0001577411 00000 n 
+0001577689 00000 n 
+0001577880 00000 n 
+0001578057 00000 n 
+0001578284 00000 n 
+0001578542 00000 n 
+0001578777 00000 n 
+0001578982 00000 n 
+0001579199 00000 n 
+0001579480 00000 n 
+0001579673 00000 n 
+0001580006 00000 n 
+0001580329 00000 n 
+0001580631 00000 n 
+0001580874 00000 n 
+0001581095 00000 n 
+0001581302 00000 n 
+0001581536 00000 n 
+0001581739 00000 n 
+0001581914 00000 n 
+0001582154 00000 n 
+0001582317 00000 n 
+0001582562 00000 n 
+0001582777 00000 n 
+0001584132 00000 n 
+0001594194 00000 n 
+0001594410 00000 n 
+0001595773 00000 n 
+0001596819 00000 n 
+0001605143 00000 n 
+0001605364 00000 n 
+0001606727 00000 n 
+0001607799 00000 n 
+0001609252 00000 n 
+0001609461 00000 n 
+0001609781 00000 n 
+0001610697 00000 n 
+0001616793 00000 n 
+0001617007 00000 n 
+0001618370 00000 n 
+0001619415 00000 n 
+0001621397 00000 n 
+0001621611 00000 n 
+0001621942 00000 n 
+0001623080 00000 n 
+0001624342 00000 n 
+0001624558 00000 n 
+0001624862 00000 n 
+0001625999 00000 n 
+0001628788 00000 n 
+0001629014 00000 n 
+0001630377 00000 n 
 trailer
 << /Size 777
 /Root 2 0 R
 /Info 1 0 R
 >>
 startxref
-1631507
+1631497
 %%EOF

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/migration-notes/migration-notes.html
----------------------------------------------------------------------
diff --git a/content/migration-notes/migration-notes.html b/content/migration-notes/migration-notes.html
index c8277c9..6bff5ee 100644
--- a/content/migration-notes/migration-notes.html
+++ b/content/migration-notes/migration-notes.html
@@ -292,33 +292,55 @@ table.CodeRay td.code>pre{padding:0}
         </ul>
        </div> 
        <div class="sectionbody"> 
-        <div class="paragraph"> 
-         <p>TODO</p> 
-        </div> 
-        <div class="ulist"> 
-         <ul> 
-          <li> <p>parallelized introspection</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>specify <code>isis.reflector.introspector.parallelize</code></p> </li> 
-             <li> <p>is enabled by default</p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>lazy introspection</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>specify <code>isis.reflector.introspector.mode</code></p> </li> 
-             <li> <p>is set to <code>lazy_unless_production</code> by default, can switch to <code>lazy</code> or <code>full</code></p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>sidebar dialogs</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>set <code>isis.viewer.wicket.dialogMode</code> to <code>modal</code> to retain previous behaviour</p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>new <code>MetaModelService#exportMetaModel(Config)</code></p> </li> 
-         </ul> 
+        <div class="sect2"> 
+         <h3 id="_sidebar_dialogs">Sidebar Dialogs</h3> 
+         <div class="paragraph"> 
+          <p>In this release sidebar dialogs vs modal dialogs is configured globally, and they are enabled by default.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>To revert to previous behaviour, set the configuration property:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="title">
+           isis.properties
+          </div> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="ini">isis.viewer.wicket.dialogMode=modal</code></pre> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_metamodelservice">MetaModelService</h3> 
+         <div class="paragraph"> 
+          <p>To export the metamodel as XML, use <code>MetaModelService6#exportMetaModel(Config)</code>.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Why would you want to do this? The main reason is as a regression test when moving up to new versions of the framework; you can check that the metamodel built up by the next version is the same as the previous.</p> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_introspection">Introspection</h3> 
+         <div class="paragraph"> 
+          <p>A number of new configuration properties are available to control how introspection (the building of the framework’s internal metamodel) is performed:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p>parallelized introspection</p> 
+            <div class="ulist"> 
+             <ul> 
+              <li> <p>specify <code>isis.reflector.introspector.parallelize</code></p> </li> 
+              <li> <p>is enabled by default</p> </li> 
+             </ul> 
+            </div> </li> 
+           <li> <p>lazy introspection</p> 
+            <div class="ulist"> 
+             <ul> 
+              <li> <p>specify <code>isis.reflector.introspector.mode</code></p> </li> 
+              <li> <p>is set to <code>lazy_unless_production</code> by default, can switch to <code>lazy</code> or <code>full</code></p> </li> 
+             </ul> 
+            </div> </li> 
+          </ul> 
+         </div> 
         </div> 
        </div> 
       </div> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/release-notes/release-notes.html
----------------------------------------------------------------------
diff --git a/content/release-notes/release-notes.html b/content/release-notes/release-notes.html
index 220a887..7bf931f 100644
--- a/content/release-notes/release-notes.html
+++ b/content/release-notes/release-notes.html
@@ -310,20 +310,20 @@ table.CodeRay td.code>pre{padding:0}
           </tr> 
           <tr> 
            <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_release-notes_1.17.0">1.17.0</a></p></td> 
-           <td class="tableblock halign-left valign-top"><p class="tableblock">dd-mm-yyyy</p></td> 
+           <td class="tableblock halign-left valign-top"><p class="tableblock">06-01-2019</p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>TODO</p> 
+              <p>Sidebar dialogs, metamodel export</p> 
              </div>
             </div></td> 
-           <td class="tableblock halign-right valign-top"></td> 
-           <td class="tableblock halign-right valign-top"></td> 
-           <td class="tableblock halign-right valign-top"></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">4</p></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">17</p></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">9</p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>TODO</p> 
+              <p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311171&amp;version=12342854">Release notes for 1.17.0</a></p> 
              </div>
             </div></td> 
           </tr> 


[3/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/ad/ad.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/ad/ad.pdf b/content/versions/SNAPSHOT/guides/ad/ad.pdf
index 6b0bbcb..58f7830 100644
--- a/content/versions/SNAPSHOT/guides/ad/ad.pdf
+++ b/content/versions/SNAPSHOT/guides/ad/ad.pdf
@@ -4,8 +4,8 @@
 << /Title (Architecture and Design)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170420+00'00')
-/CreationDate (D:20190106170420+00'00')
+/ModDate (D:20190106173122+00'00')
+/CreationDate (D:20190106173122+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/cgcom/cgcom.html
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/cgcom/cgcom.html b/content/versions/SNAPSHOT/guides/cgcom/cgcom.html
index 5860091..ecb1f55 100644
--- a/content/versions/SNAPSHOT/guides/cgcom/cgcom.html
+++ b/content/versions/SNAPSHOT/guides/cgcom/cgcom.html
@@ -2384,7 +2384,7 @@ mv content/versions/SNAPSHOT content/versions/current</code></pre>
              </div> 
             </div> </li> 
            <li> <p>publish the website once more (from the <code>isis</code> main repo).</p> </li> 
-           <li> <p>Finally, preview the changes (using <code>sh preview-html.sh</code> in the <code>isis-site</code>).</p> </li> 
+           <li> <p>Finally, preview the changes (using <code>sh preview.sh</code> in the <code>isis-site</code>).</p> </li> 
           </ul> 
          </div> 
          <div class="paragraph"> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/cgcom/cgcom.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/cgcom/cgcom.pdf b/content/versions/SNAPSHOT/guides/cgcom/cgcom.pdf
index aee36ca..fac0b4c 100644
--- a/content/versions/SNAPSHOT/guides/cgcom/cgcom.pdf
+++ b/content/versions/SNAPSHOT/guides/cgcom/cgcom.pdf
@@ -4,8 +4,8 @@
 << /Title (Committers' Guide)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170422+00'00')
-/CreationDate (D:20190106170422+00'00')
+/ModDate (D:20190106173125+00'00')
+/CreationDate (D:20190106173125+00'00')
 >>
 endobj
 2 0 obj
@@ -30216,7 +30216,7 @@ endobj
 >>
 endobj
 267 0 obj
-<< /Length 18236
+<< /Length 18226
 >>
 stream
 q
@@ -31461,7 +31461,7 @@ ET
 BT
 244.5106 312.206 Td
 /F4.0 10.5 Tf
-<736820707265766965772d68746d6c2e7368> Tj
+<736820707265766965772e7368> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -31470,7 +31470,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-339.0106 312.206 Td
+312.7606 312.206 Td
 /F1.0 10.5 Tf
 <20696e2074686520> Tj
 ET
@@ -31481,7 +31481,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-373.2616 312.206 Td
+347.0116 312.206 Td
 /F4.0 10.5 Tf
 <697369732d73697465> Tj
 ET
@@ -31492,7 +31492,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-420.5116 312.206 Td
+394.2616 312.206 Td
 /F1.0 10.5 Tf
 <292e> Tj
 ET
@@ -58462,520 +58462,520 @@ xref
 0001155587 00000 n 
 0001155768 00000 n 
 0001156003 00000 n 
-0001174294 00000 n 
-0001174683 00000 n 
-0001174729 00000 n 
-0001174901 00000 n 
-0001184440 00000 n 
-0001184823 00000 n 
-0001184869 00000 n 
-0001185054 00000 n 
-0001185229 00000 n 
-0001185275 00000 n 
-0001185321 00000 n 
-0001197194 00000 n 
-0001197569 00000 n 
-0001197615 00000 n 
-0001197843 00000 n 
-0001197889 00000 n 
-0001197935 00000 n 
-0001205719 00000 n 
-0001206126 00000 n 
-0001206295 00000 n 
-0001206341 00000 n 
-0001206543 00000 n 
-0001206729 00000 n 
-0001206775 00000 n 
-0001206821 00000 n 
-0001206992 00000 n 
-0001207234 00000 n 
-0001216198 00000 n 
-0001216589 00000 n 
-0001216635 00000 n 
-0001216822 00000 n 
-0001217011 00000 n 
-0001217203 00000 n 
-0001217249 00000 n 
-0001217665 00000 n 
-0001217711 00000 n 
-0001222029 00000 n 
-0001222404 00000 n 
-0001222450 00000 n 
-0001222623 00000 n 
-0001222669 00000 n 
-0001235321 00000 n 
-0001235717 00000 n 
-0001235763 00000 n 
-0001235809 00000 n 
-0001236017 00000 n 
-0001236203 00000 n 
-0001236249 00000 n 
-0001239773 00000 n 
-0001240161 00000 n 
-0001240207 00000 n 
-0001240382 00000 n 
-0001253051 00000 n 
-0001253517 00000 n 
-0001253563 00000 n 
-0001253757 00000 n 
-0001253964 00000 n 
-0001254153 00000 n 
-0001254341 00000 n 
-0001254541 00000 n 
-0001254718 00000 n 
-0001254889 00000 n 
-0001254935 00000 n 
-0001255098 00000 n 
-0001255264 00000 n 
-0001255310 00000 n 
-0001255356 00000 n 
-0001261907 00000 n 
-0001262278 00000 n 
-0001262324 00000 n 
-0001274455 00000 n 
-0001274899 00000 n 
-0001274945 00000 n 
-0001275123 00000 n 
-0001275290 00000 n 
-0001275459 00000 n 
-0001275639 00000 n 
-0001275840 00000 n 
-0001276007 00000 n 
-0001276053 00000 n 
-0001276251 00000 n 
-0001276426 00000 n 
-0001287717 00000 n 
-0001288087 00000 n 
-0001288133 00000 n 
-0001288179 00000 n 
-0001302086 00000 n 
-0001302456 00000 n 
-0001302502 00000 n 
-0001311872 00000 n 
-0001312263 00000 n 
-0001312309 00000 n 
-0001312501 00000 n 
-0001312695 00000 n 
-0001312886 00000 n 
-0001312932 00000 n 
-0001312978 00000 n 
-0001321890 00000 n 
-0001322234 00000 n 
-0001333056 00000 n 
-0001333400 00000 n 
-0001341350 00000 n 
-0001341720 00000 n 
-0001341766 00000 n 
-0001348520 00000 n 
-0001348877 00000 n 
-0001357089 00000 n 
-0001357464 00000 n 
-0001357510 00000 n 
-0001357710 00000 n 
-0001366073 00000 n 
-0001366417 00000 n 
-0001378547 00000 n 
-0001379018 00000 n 
-0001379064 00000 n 
-0001379110 00000 n 
-0001379634 00000 n 
-0001379796 00000 n 
-0001380003 00000 n 
-0001380208 00000 n 
-0001380373 00000 n 
-0001380578 00000 n 
-0001380784 00000 n 
-0001380990 00000 n 
-0001381196 00000 n 
-0001381402 00000 n 
-0001381608 00000 n 
-0001381814 00000 n 
-0001382020 00000 n 
-0001382226 00000 n 
-0001390318 00000 n 
-0001390733 00000 n 
-0001390779 00000 n 
-0001390825 00000 n 
-0001391013 00000 n 
-0001391202 00000 n 
-0001391391 00000 n 
-0001391580 00000 n 
-0001391769 00000 n 
-0001391815 00000 n 
-0001392360 00000 n 
-0001392550 00000 n 
-0001411587 00000 n 
-0001411931 00000 n 
-0001422847 00000 n 
-0001423238 00000 n 
-0001423284 00000 n 
-0001423463 00000 n 
-0001423509 00000 n 
-0001423555 00000 n 
-0001423764 00000 n 
-0001423955 00000 n 
-0001434853 00000 n 
-0001435210 00000 n 
-0001435256 00000 n 
-0001450650 00000 n 
-0001451078 00000 n 
-0001451124 00000 n 
-0001451311 00000 n 
-0001451357 00000 n 
-0001451567 00000 n 
-0001451613 00000 n 
-0001451798 00000 n 
-0001451961 00000 n 
-0001452128 00000 n 
-0001452174 00000 n 
-0001452347 00000 n 
-0001461102 00000 n 
-0001461485 00000 n 
-0001461694 00000 n 
-0001461880 00000 n 
-0001472338 00000 n 
-0001472745 00000 n 
-0001472791 00000 n 
-0001472837 00000 n 
-0001472883 00000 n 
-0001473045 00000 n 
-0001473091 00000 n 
-0001473685 00000 n 
-0001473903 00000 n 
-0001473949 00000 n 
-0001474115 00000 n 
-0001474301 00000 n 
-0001474481 00000 n 
-0001484536 00000 n 
-0001484911 00000 n 
-0001485101 00000 n 
-0001485147 00000 n 
-0001488544 00000 n 
-0001488927 00000 n 
-0001488973 00000 n 
-0001489160 00000 n 
-0001489334 00000 n 
-0001497929 00000 n 
-0001498354 00000 n 
-0001498400 00000 n 
-0001498578 00000 n 
-0001498624 00000 n 
-0001498829 00000 n 
-0001499034 00000 n 
-0001499080 00000 n 
-0001499266 00000 n 
-0001499312 00000 n 
-0001505837 00000 n 
-0001506207 00000 n 
-0001506253 00000 n 
-0001515528 00000 n 
-0001515916 00000 n 
-0001515962 00000 n 
-0001516196 00000 n 
-0001516242 00000 n 
-0001516288 00000 n 
-0001526480 00000 n 
-0001526881 00000 n 
-0001527062 00000 n 
-0001527109 00000 n 
-0001536803 00000 n 
-0001537204 00000 n 
-0001537250 00000 n 
-0001537296 00000 n 
-0001537470 00000 n 
-0001537516 00000 n 
-0001539539 00000 n 
-0001539883 00000 n 
-0001540003 00000 n 
-0001540124 00000 n 
-0001540249 00000 n 
-0001540375 00000 n 
-0001540510 00000 n 
-0001540647 00000 n 
-0001540769 00000 n 
-0001540893 00000 n 
-0001541016 00000 n 
-0001541141 00000 n 
-0001541283 00000 n 
-0001541426 00000 n 
-0001541555 00000 n 
-0001541686 00000 n 
-0001541812 00000 n 
-0001541939 00000 n 
-0001542058 00000 n 
-0001542178 00000 n 
-0001542309 00000 n 
-0001542441 00000 n 
-0001542577 00000 n 
-0001542715 00000 n 
-0001542870 00000 n 
-0001543026 00000 n 
-0001543189 00000 n 
-0001543354 00000 n 
-0001543517 00000 n 
-0001543682 00000 n 
-0001543843 00000 n 
-0001544007 00000 n 
-0001544170 00000 n 
-0001544336 00000 n 
-0001544500 00000 n 
-0001544652 00000 n 
-0001544806 00000 n 
-0001544977 00000 n 
-0001545152 00000 n 
-0001545326 00000 n 
-0001545498 00000 n 
-0001545670 00000 n 
-0001545846 00000 n 
-0001546021 00000 n 
-0001546194 00000 n 
-0001546356 00000 n 
-0001546519 00000 n 
-0001546671 00000 n 
-0001546827 00000 n 
-0001546982 00000 n 
-0001547135 00000 n 
-0001547287 00000 n 
-0001547439 00000 n 
-0001547584 00000 n 
-0001547729 00000 n 
-0001547867 00000 n 
-0001548005 00000 n 
-0001548155 00000 n 
-0001548305 00000 n 
-0001548458 00000 n 
-0001548611 00000 n 
-0001548777 00000 n 
-0001548943 00000 n 
-0001549099 00000 n 
-0001549255 00000 n 
-0001549402 00000 n 
-0001549549 00000 n 
-0001549703 00000 n 
-0001549857 00000 n 
-0001549999 00000 n 
-0001550142 00000 n 
-0001550268 00000 n 
-0001550394 00000 n 
-0001550517 00000 n 
-0001550641 00000 n 
-0001550778 00000 n 
-0001550915 00000 n 
-0001551046 00000 n 
-0001551177 00000 n 
-0001551300 00000 n 
-0001551424 00000 n 
-0001551564 00000 n 
-0001551704 00000 n 
-0001551829 00000 n 
-0001551954 00000 n 
-0001552085 00000 n 
-0001552216 00000 n 
-0001552338 00000 n 
-0001552460 00000 n 
-0001552596 00000 n 
-0001552732 00000 n 
-0001552864 00000 n 
-0001552996 00000 n 
-0001553123 00000 n 
-0001553251 00000 n 
-0001553376 00000 n 
-0001553501 00000 n 
-0001553667 00000 n 
-0001553835 00000 n 
-0001553980 00000 n 
-0001554125 00000 n 
-0001554253 00000 n 
-0001554381 00000 n 
-0001554510 00000 n 
-0001554639 00000 n 
-0001554773 00000 n 
-0001554908 00000 n 
-0001555026 00000 n 
-0001555144 00000 n 
-0001555292 00000 n 
-0001555441 00000 n 
-0001555569 00000 n 
-0001555697 00000 n 
-0001555822 00000 n 
-0001555947 00000 n 
-0001556066 00000 n 
-0001556185 00000 n 
-0001556340 00000 n 
-0001556496 00000 n 
-0001556624 00000 n 
-0001556752 00000 n 
-0001556879 00000 n 
-0001557006 00000 n 
-0001557124 00000 n 
-0001557244 00000 n 
-0001557388 00000 n 
-0001557534 00000 n 
-0001557660 00000 n 
-0001557787 00000 n 
-0001557905 00000 n 
-0001558025 00000 n 
-0001558159 00000 n 
-0001558293 00000 n 
-0001558427 00000 n 
-0001558561 00000 n 
-0001558697 00000 n 
-0001558835 00000 n 
-0001558962 00000 n 
-0001559089 00000 n 
-0001559219 00000 n 
-0001559349 00000 n 
-0001559495 00000 n 
-0001559641 00000 n 
-0001559765 00000 n 
-0001559889 00000 n 
-0001560046 00000 n 
-0001560203 00000 n 
-0001560368 00000 n 
-0001560538 00000 n 
-0001560706 00000 n 
-0001560871 00000 n 
-0001561014 00000 n 
-0001561157 00000 n 
-0001561297 00000 n 
-0001561437 00000 n 
-0001561568 00000 n 
-0001561699 00000 n 
-0001561840 00000 n 
-0001561986 00000 n 
-0001562127 00000 n 
-0001562254 00000 n 
-0001562382 00000 n 
-0001562528 00000 n 
-0001562674 00000 n 
-0001562813 00000 n 
-0001562952 00000 n 
-0001563080 00000 n 
-0001563208 00000 n 
-0001563325 00000 n 
-0001563443 00000 n 
-0001563577 00000 n 
-0001563712 00000 n 
-0001563844 00000 n 
-0001563977 00000 n 
-0001564248 00000 n 
-0001564519 00000 n 
-0001564597 00000 n 
-0001564774 00000 n 
-0001564966 00000 n 
-0001565231 00000 n 
-0001565395 00000 n 
-0001565656 00000 n 
-0001565826 00000 n 
-0001566000 00000 n 
-0001566285 00000 n 
-0001566483 00000 n 
-0001566679 00000 n 
-0001566847 00000 n 
-0001567049 00000 n 
-0001567315 00000 n 
-0001567509 00000 n 
-0001567753 00000 n 
-0001567997 00000 n 
-0001568277 00000 n 
-0001568477 00000 n 
-0001568738 00000 n 
-0001569003 00000 n 
-0001569244 00000 n 
-0001569483 00000 n 
-0001569686 00000 n 
-0001569845 00000 n 
-0001570119 00000 n 
-0001570290 00000 n 
-0001570487 00000 n 
-0001570736 00000 n 
-0001571029 00000 n 
-0001571270 00000 n 
-0001571457 00000 n 
-0001571756 00000 n 
-0001571939 00000 n 
-0001572128 00000 n 
-0001572369 00000 n 
-0001572588 00000 n 
-0001572777 00000 n 
-0001573030 00000 n 
-0001573232 00000 n 
-0001573457 00000 n 
-0001573638 00000 n 
-0001573879 00000 n 
-0001574104 00000 n 
-0001574313 00000 n 
-0001574510 00000 n 
-0001574745 00000 n 
-0001575051 00000 n 
-0001575234 00000 n 
-0001575443 00000 n 
-0001575676 00000 n 
-0001575827 00000 n 
-0001576093 00000 n 
-0001576276 00000 n 
-0001576469 00000 n 
-0001576624 00000 n 
-0001576886 00000 n 
-0001577069 00000 n 
-0001577262 00000 n 
-0001577421 00000 n 
-0001577699 00000 n 
-0001577890 00000 n 
-0001578067 00000 n 
-0001578294 00000 n 
-0001578552 00000 n 
-0001578787 00000 n 
-0001578992 00000 n 
-0001579209 00000 n 
-0001579490 00000 n 
-0001579683 00000 n 
-0001580016 00000 n 
-0001580339 00000 n 
-0001580641 00000 n 
-0001580884 00000 n 
-0001581105 00000 n 
-0001581312 00000 n 
-0001581546 00000 n 
-0001581749 00000 n 
-0001581924 00000 n 
-0001582164 00000 n 
-0001582327 00000 n 
-0001582572 00000 n 
-0001582787 00000 n 
-0001584142 00000 n 
-0001594204 00000 n 
-0001594420 00000 n 
-0001595783 00000 n 
-0001596829 00000 n 
-0001605153 00000 n 
-0001605374 00000 n 
-0001606737 00000 n 
-0001607809 00000 n 
-0001609262 00000 n 
-0001609471 00000 n 
-0001609791 00000 n 
-0001610707 00000 n 
-0001616803 00000 n 
-0001617017 00000 n 
-0001618380 00000 n 
-0001619425 00000 n 
-0001621407 00000 n 
-0001621621 00000 n 
-0001621952 00000 n 
-0001623090 00000 n 
-0001624352 00000 n 
-0001624568 00000 n 
-0001624872 00000 n 
-0001626009 00000 n 
-0001628798 00000 n 
-0001629024 00000 n 
-0001630387 00000 n 
+0001174284 00000 n 
+0001174673 00000 n 
+0001174719 00000 n 
+0001174891 00000 n 
+0001184430 00000 n 
+0001184813 00000 n 
+0001184859 00000 n 
+0001185044 00000 n 
+0001185219 00000 n 
+0001185265 00000 n 
+0001185311 00000 n 
+0001197184 00000 n 
+0001197559 00000 n 
+0001197605 00000 n 
+0001197833 00000 n 
+0001197879 00000 n 
+0001197925 00000 n 
+0001205709 00000 n 
+0001206116 00000 n 
+0001206285 00000 n 
+0001206331 00000 n 
+0001206533 00000 n 
+0001206719 00000 n 
+0001206765 00000 n 
+0001206811 00000 n 
+0001206982 00000 n 
+0001207224 00000 n 
+0001216188 00000 n 
+0001216579 00000 n 
+0001216625 00000 n 
+0001216812 00000 n 
+0001217001 00000 n 
+0001217193 00000 n 
+0001217239 00000 n 
+0001217655 00000 n 
+0001217701 00000 n 
+0001222019 00000 n 
+0001222394 00000 n 
+0001222440 00000 n 
+0001222613 00000 n 
+0001222659 00000 n 
+0001235311 00000 n 
+0001235707 00000 n 
+0001235753 00000 n 
+0001235799 00000 n 
+0001236007 00000 n 
+0001236193 00000 n 
+0001236239 00000 n 
+0001239763 00000 n 
+0001240151 00000 n 
+0001240197 00000 n 
+0001240372 00000 n 
+0001253041 00000 n 
+0001253507 00000 n 
+0001253553 00000 n 
+0001253747 00000 n 
+0001253954 00000 n 
+0001254143 00000 n 
+0001254331 00000 n 
+0001254531 00000 n 
+0001254708 00000 n 
+0001254879 00000 n 
+0001254925 00000 n 
+0001255088 00000 n 
+0001255254 00000 n 
+0001255300 00000 n 
+0001255346 00000 n 
+0001261897 00000 n 
+0001262268 00000 n 
+0001262314 00000 n 
+0001274445 00000 n 
+0001274889 00000 n 
+0001274935 00000 n 
+0001275113 00000 n 
+0001275280 00000 n 
+0001275449 00000 n 
+0001275629 00000 n 
+0001275830 00000 n 
+0001275997 00000 n 
+0001276043 00000 n 
+0001276241 00000 n 
+0001276416 00000 n 
+0001287707 00000 n 
+0001288077 00000 n 
+0001288123 00000 n 
+0001288169 00000 n 
+0001302076 00000 n 
+0001302446 00000 n 
+0001302492 00000 n 
+0001311862 00000 n 
+0001312253 00000 n 
+0001312299 00000 n 
+0001312491 00000 n 
+0001312685 00000 n 
+0001312876 00000 n 
+0001312922 00000 n 
+0001312968 00000 n 
+0001321880 00000 n 
+0001322224 00000 n 
+0001333046 00000 n 
+0001333390 00000 n 
+0001341340 00000 n 
+0001341710 00000 n 
+0001341756 00000 n 
+0001348510 00000 n 
+0001348867 00000 n 
+0001357079 00000 n 
+0001357454 00000 n 
+0001357500 00000 n 
+0001357700 00000 n 
+0001366063 00000 n 
+0001366407 00000 n 
+0001378537 00000 n 
+0001379008 00000 n 
+0001379054 00000 n 
+0001379100 00000 n 
+0001379624 00000 n 
+0001379786 00000 n 
+0001379993 00000 n 
+0001380198 00000 n 
+0001380363 00000 n 
+0001380568 00000 n 
+0001380774 00000 n 
+0001380980 00000 n 
+0001381186 00000 n 
+0001381392 00000 n 
+0001381598 00000 n 
+0001381804 00000 n 
+0001382010 00000 n 
+0001382216 00000 n 
+0001390308 00000 n 
+0001390723 00000 n 
+0001390769 00000 n 
+0001390815 00000 n 
+0001391003 00000 n 
+0001391192 00000 n 
+0001391381 00000 n 
+0001391570 00000 n 
+0001391759 00000 n 
+0001391805 00000 n 
+0001392350 00000 n 
+0001392540 00000 n 
+0001411577 00000 n 
+0001411921 00000 n 
+0001422837 00000 n 
+0001423228 00000 n 
+0001423274 00000 n 
+0001423453 00000 n 
+0001423499 00000 n 
+0001423545 00000 n 
+0001423754 00000 n 
+0001423945 00000 n 
+0001434843 00000 n 
+0001435200 00000 n 
+0001435246 00000 n 
+0001450640 00000 n 
+0001451068 00000 n 
+0001451114 00000 n 
+0001451301 00000 n 
+0001451347 00000 n 
+0001451557 00000 n 
+0001451603 00000 n 
+0001451788 00000 n 
+0001451951 00000 n 
+0001452118 00000 n 
+0001452164 00000 n 
+0001452337 00000 n 
+0001461092 00000 n 
+0001461475 00000 n 
+0001461684 00000 n 
+0001461870 00000 n 
+0001472328 00000 n 
+0001472735 00000 n 
+0001472781 00000 n 
+0001472827 00000 n 
+0001472873 00000 n 
+0001473035 00000 n 
+0001473081 00000 n 
+0001473675 00000 n 
+0001473893 00000 n 
+0001473939 00000 n 
+0001474105 00000 n 
+0001474291 00000 n 
+0001474471 00000 n 
+0001484526 00000 n 
+0001484901 00000 n 
+0001485091 00000 n 
+0001485137 00000 n 
+0001488534 00000 n 
+0001488917 00000 n 
+0001488963 00000 n 
+0001489150 00000 n 
+0001489324 00000 n 
+0001497919 00000 n 
+0001498344 00000 n 
+0001498390 00000 n 
+0001498568 00000 n 
+0001498614 00000 n 
+0001498819 00000 n 
+0001499024 00000 n 
+0001499070 00000 n 
+0001499256 00000 n 
+0001499302 00000 n 
+0001505827 00000 n 
+0001506197 00000 n 
+0001506243 00000 n 
+0001515518 00000 n 
+0001515906 00000 n 
+0001515952 00000 n 
+0001516186 00000 n 
+0001516232 00000 n 
+0001516278 00000 n 
+0001526470 00000 n 
+0001526871 00000 n 
+0001527052 00000 n 
+0001527099 00000 n 
+0001536793 00000 n 
+0001537194 00000 n 
+0001537240 00000 n 
+0001537286 00000 n 
+0001537460 00000 n 
+0001537506 00000 n 
+0001539529 00000 n 
+0001539873 00000 n 
+0001539993 00000 n 
+0001540114 00000 n 
+0001540239 00000 n 
+0001540365 00000 n 
+0001540500 00000 n 
+0001540637 00000 n 
+0001540759 00000 n 
+0001540883 00000 n 
+0001541006 00000 n 
+0001541131 00000 n 
+0001541273 00000 n 
+0001541416 00000 n 
+0001541545 00000 n 
+0001541676 00000 n 
+0001541802 00000 n 
+0001541929 00000 n 
+0001542048 00000 n 
+0001542168 00000 n 
+0001542299 00000 n 
+0001542431 00000 n 
+0001542567 00000 n 
+0001542705 00000 n 
+0001542860 00000 n 
+0001543016 00000 n 
+0001543179 00000 n 
+0001543344 00000 n 
+0001543507 00000 n 
+0001543672 00000 n 
+0001543833 00000 n 
+0001543997 00000 n 
+0001544160 00000 n 
+0001544326 00000 n 
+0001544490 00000 n 
+0001544642 00000 n 
+0001544796 00000 n 
+0001544967 00000 n 
+0001545142 00000 n 
+0001545316 00000 n 
+0001545488 00000 n 
+0001545660 00000 n 
+0001545836 00000 n 
+0001546011 00000 n 
+0001546184 00000 n 
+0001546346 00000 n 
+0001546509 00000 n 
+0001546661 00000 n 
+0001546817 00000 n 
+0001546972 00000 n 
+0001547125 00000 n 
+0001547277 00000 n 
+0001547429 00000 n 
+0001547574 00000 n 
+0001547719 00000 n 
+0001547857 00000 n 
+0001547995 00000 n 
+0001548145 00000 n 
+0001548295 00000 n 
+0001548448 00000 n 
+0001548601 00000 n 
+0001548767 00000 n 
+0001548933 00000 n 
+0001549089 00000 n 
+0001549245 00000 n 
+0001549392 00000 n 
+0001549539 00000 n 
+0001549693 00000 n 
+0001549847 00000 n 
+0001549989 00000 n 
+0001550132 00000 n 
+0001550258 00000 n 
+0001550384 00000 n 
+0001550507 00000 n 
+0001550631 00000 n 
+0001550768 00000 n 
+0001550905 00000 n 
+0001551036 00000 n 
+0001551167 00000 n 
+0001551290 00000 n 
+0001551414 00000 n 
+0001551554 00000 n 
+0001551694 00000 n 
+0001551819 00000 n 
+0001551944 00000 n 
+0001552075 00000 n 
+0001552206 00000 n 
+0001552328 00000 n 
+0001552450 00000 n 
+0001552586 00000 n 
+0001552722 00000 n 
+0001552854 00000 n 
+0001552986 00000 n 
+0001553113 00000 n 
+0001553241 00000 n 
+0001553366 00000 n 
+0001553491 00000 n 
+0001553657 00000 n 
+0001553825 00000 n 
+0001553970 00000 n 
+0001554115 00000 n 
+0001554243 00000 n 
+0001554371 00000 n 
+0001554500 00000 n 
+0001554629 00000 n 
+0001554763 00000 n 
+0001554898 00000 n 
+0001555016 00000 n 
+0001555134 00000 n 
+0001555282 00000 n 
+0001555431 00000 n 
+0001555559 00000 n 
+0001555687 00000 n 
+0001555812 00000 n 
+0001555937 00000 n 
+0001556056 00000 n 
+0001556175 00000 n 
+0001556330 00000 n 
+0001556486 00000 n 
+0001556614 00000 n 
+0001556742 00000 n 
+0001556869 00000 n 
+0001556996 00000 n 
+0001557114 00000 n 
+0001557234 00000 n 
+0001557378 00000 n 
+0001557524 00000 n 
+0001557650 00000 n 
+0001557777 00000 n 
+0001557895 00000 n 
+0001558015 00000 n 
+0001558149 00000 n 
+0001558283 00000 n 
+0001558417 00000 n 
+0001558551 00000 n 
+0001558687 00000 n 
+0001558825 00000 n 
+0001558952 00000 n 
+0001559079 00000 n 
+0001559209 00000 n 
+0001559339 00000 n 
+0001559485 00000 n 
+0001559631 00000 n 
+0001559755 00000 n 
+0001559879 00000 n 
+0001560036 00000 n 
+0001560193 00000 n 
+0001560358 00000 n 
+0001560528 00000 n 
+0001560696 00000 n 
+0001560861 00000 n 
+0001561004 00000 n 
+0001561147 00000 n 
+0001561287 00000 n 
+0001561427 00000 n 
+0001561558 00000 n 
+0001561689 00000 n 
+0001561830 00000 n 
+0001561976 00000 n 
+0001562117 00000 n 
+0001562244 00000 n 
+0001562372 00000 n 
+0001562518 00000 n 
+0001562664 00000 n 
+0001562803 00000 n 
+0001562942 00000 n 
+0001563070 00000 n 
+0001563198 00000 n 
+0001563315 00000 n 
+0001563433 00000 n 
+0001563567 00000 n 
+0001563702 00000 n 
+0001563834 00000 n 
+0001563967 00000 n 
+0001564238 00000 n 
+0001564509 00000 n 
+0001564587 00000 n 
+0001564764 00000 n 
+0001564956 00000 n 
+0001565221 00000 n 
+0001565385 00000 n 
+0001565646 00000 n 
+0001565816 00000 n 
+0001565990 00000 n 
+0001566275 00000 n 
+0001566473 00000 n 
+0001566669 00000 n 
+0001566837 00000 n 
+0001567039 00000 n 
+0001567305 00000 n 
+0001567499 00000 n 
+0001567743 00000 n 
+0001567987 00000 n 
+0001568267 00000 n 
+0001568467 00000 n 
+0001568728 00000 n 
+0001568993 00000 n 
+0001569234 00000 n 
+0001569473 00000 n 
+0001569676 00000 n 
+0001569835 00000 n 
+0001570109 00000 n 
+0001570280 00000 n 
+0001570477 00000 n 
+0001570726 00000 n 
+0001571019 00000 n 
+0001571260 00000 n 
+0001571447 00000 n 
+0001571746 00000 n 
+0001571929 00000 n 
+0001572118 00000 n 
+0001572359 00000 n 
+0001572578 00000 n 
+0001572767 00000 n 
+0001573020 00000 n 
+0001573222 00000 n 
+0001573447 00000 n 
+0001573628 00000 n 
+0001573869 00000 n 
+0001574094 00000 n 
+0001574303 00000 n 
+0001574500 00000 n 
+0001574735 00000 n 
+0001575041 00000 n 
+0001575224 00000 n 
+0001575433 00000 n 
+0001575666 00000 n 
+0001575817 00000 n 
+0001576083 00000 n 
+0001576266 00000 n 
+0001576459 00000 n 
+0001576614 00000 n 
+0001576876 00000 n 
+0001577059 00000 n 
+0001577252 00000 n 
+0001577411 00000 n 
+0001577689 00000 n 
+0001577880 00000 n 
+0001578057 00000 n 
+0001578284 00000 n 
+0001578542 00000 n 
+0001578777 00000 n 
+0001578982 00000 n 
+0001579199 00000 n 
+0001579480 00000 n 
+0001579673 00000 n 
+0001580006 00000 n 
+0001580329 00000 n 
+0001580631 00000 n 
+0001580874 00000 n 
+0001581095 00000 n 
+0001581302 00000 n 
+0001581536 00000 n 
+0001581739 00000 n 
+0001581914 00000 n 
+0001582154 00000 n 
+0001582317 00000 n 
+0001582562 00000 n 
+0001582777 00000 n 
+0001584132 00000 n 
+0001594194 00000 n 
+0001594410 00000 n 
+0001595773 00000 n 
+0001596819 00000 n 
+0001605143 00000 n 
+0001605364 00000 n 
+0001606727 00000 n 
+0001607799 00000 n 
+0001609252 00000 n 
+0001609461 00000 n 
+0001609781 00000 n 
+0001610697 00000 n 
+0001616793 00000 n 
+0001617007 00000 n 
+0001618370 00000 n 
+0001619415 00000 n 
+0001621397 00000 n 
+0001621611 00000 n 
+0001621942 00000 n 
+0001623080 00000 n 
+0001624342 00000 n 
+0001624558 00000 n 
+0001624862 00000 n 
+0001625999 00000 n 
+0001628788 00000 n 
+0001629014 00000 n 
+0001630377 00000 n 
 trailer
 << /Size 777
 /Root 2 0 R
 /Info 1 0 R
 >>
 startxref
-1631507
+1631497
 %%EOF

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/dg/dg.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/dg/dg.pdf b/content/versions/SNAPSHOT/guides/dg/dg.pdf
index 89f2e53..a0f782e 100644
--- a/content/versions/SNAPSHOT/guides/dg/dg.pdf
+++ b/content/versions/SNAPSHOT/guides/dg/dg.pdf
@@ -4,8 +4,8 @@
 << /Title (Developers' Guide)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170441+00'00')
-/CreationDate (D:20190106170441+00'00')
+/ModDate (D:20190106173141+00'00')
+/CreationDate (D:20190106173141+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/htg.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/htg.pdf b/content/versions/SNAPSHOT/guides/htg.pdf
index 97d5ef7..21a0da9 100644
--- a/content/versions/SNAPSHOT/guides/htg.pdf
+++ b/content/versions/SNAPSHOT/guides/htg.pdf
@@ -4,8 +4,8 @@
 << /Title (Hints & Tips Guide)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170506+00'00')
-/CreationDate (D:20190106170506+00'00')
+/ModDate (D:20190106173206+00'00')
+/CreationDate (D:20190106173206+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/rgant/rgant.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgant/rgant.pdf b/content/versions/SNAPSHOT/guides/rgant/rgant.pdf
index c6c8ae6..3c2136a 100644
--- a/content/versions/SNAPSHOT/guides/rgant/rgant.pdf
+++ b/content/versions/SNAPSHOT/guides/rgant/rgant.pdf
@@ -4,8 +4,8 @@
 << /Title (Annotations)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170540+00'00')
-/CreationDate (D:20190106170540+00'00')
+/ModDate (D:20190106173239+00'00')
+/CreationDate (D:20190106173239+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/rgcfg/rgcfg.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgcfg/rgcfg.pdf b/content/versions/SNAPSHOT/guides/rgcfg/rgcfg.pdf
index 9199e45..f5ecf52 100644
--- a/content/versions/SNAPSHOT/guides/rgcfg/rgcfg.pdf
+++ b/content/versions/SNAPSHOT/guides/rgcfg/rgcfg.pdf
@@ -4,8 +4,8 @@
 << /Title <feff0043006f0072006500200043006f006e0066006900672019006e002000500072006f0070006500720074006900650073>
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170715+00'00')
-/CreationDate (D:20190106170715+00'00')
+/ModDate (D:20190106173410+00'00')
+/CreationDate (D:20190106173410+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/rgcms/rgcms.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgcms/rgcms.pdf b/content/versions/SNAPSHOT/guides/rgcms/rgcms.pdf
index 9e5d24d..0affd1b 100644
--- a/content/versions/SNAPSHOT/guides/rgcms/rgcms.pdf
+++ b/content/versions/SNAPSHOT/guides/rgcms/rgcms.pdf
@@ -4,8 +4,8 @@
 << /Title (Classes, Methods and Schema)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170724+00'00')
-/CreationDate (D:20190106170724+00'00')
+/ModDate (D:20190106173418+00'00')
+/CreationDate (D:20190106173418+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf b/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf
index 34f3cb9..47b9f44 100644
--- a/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf
+++ b/content/versions/SNAPSHOT/guides/rgfis/rgfis.pdf
@@ -4,8 +4,8 @@
 << /Title (Framework Internal Services)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170827+00'00')
-/CreationDate (D:20190106170827+00'00')
+/ModDate (D:20190106173521+00'00')
+/CreationDate (D:20190106173521+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf b/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf
index 55dfee7..ce11f4b 100644
--- a/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf
+++ b/content/versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf
@@ -4,8 +4,8 @@
 << /Title (Apache Isis Maven plugin)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170836+00'00')
-/CreationDate (D:20190106170836+00'00')
+/ModDate (D:20190106173529+00'00')
+/CreationDate (D:20190106173529+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.pdf b/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.pdf
index f262eea..dcaad3f 100644
--- a/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.pdf
+++ b/content/versions/SNAPSHOT/guides/rgsvc/rgsvc.pdf
@@ -4,8 +4,8 @@
 << /Title (Domain Services)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106170844+00'00')
-/CreationDate (D:20190106170844+00'00')
+/ModDate (D:20190106173536+00'00')
+/CreationDate (D:20190106173536+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/ugbtb/ugbtb.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/ugbtb/ugbtb.pdf b/content/versions/SNAPSHOT/guides/ugbtb/ugbtb.pdf
index 3957403..82024af 100644
--- a/content/versions/SNAPSHOT/guides/ugbtb/ugbtb.pdf
+++ b/content/versions/SNAPSHOT/guides/ugbtb/ugbtb.pdf
@@ -4,8 +4,8 @@
 << /Title (Beyond the Basics)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106171018+00'00')
-/CreationDate (D:20190106171018+00'00')
+/ModDate (D:20190106173708+00'00')
+/CreationDate (D:20190106173708+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/ugfun/ugfun.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/ugfun/ugfun.pdf b/content/versions/SNAPSHOT/guides/ugfun/ugfun.pdf
index 622cd24..d6da851 100644
--- a/content/versions/SNAPSHOT/guides/ugfun/ugfun.pdf
+++ b/content/versions/SNAPSHOT/guides/ugfun/ugfun.pdf
@@ -4,8 +4,8 @@
 << /Title (Fundamentals)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106171046+00'00')
-/CreationDate (D:20190106171046+00'00')
+/ModDate (D:20190106173737+00'00')
+/CreationDate (D:20190106173737+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/ugodn/ugodn.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/ugodn/ugodn.pdf b/content/versions/SNAPSHOT/guides/ugodn/ugodn.pdf
index d704ccb..998f0dd 100644
--- a/content/versions/SNAPSHOT/guides/ugodn/ugodn.pdf
+++ b/content/versions/SNAPSHOT/guides/ugodn/ugodn.pdf
@@ -4,8 +4,8 @@
 << /Title (DataNucleus Object Store)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106171146+00'00')
-/CreationDate (D:20190106171146+00'00')
+/ModDate (D:20190106173838+00'00')
+/CreationDate (D:20190106173838+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/ugsec/ugsec.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/ugsec/ugsec.pdf b/content/versions/SNAPSHOT/guides/ugsec/ugsec.pdf
index c9d7f39..12c4bfc 100644
--- a/content/versions/SNAPSHOT/guides/ugsec/ugsec.pdf
+++ b/content/versions/SNAPSHOT/guides/ugsec/ugsec.pdf
@@ -4,8 +4,8 @@
 << /Title (Security)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106171201+00'00')
-/CreationDate (D:20190106171201+00'00')
+/ModDate (D:20190106173852+00'00')
+/CreationDate (D:20190106173852+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/ugtst/ugtst.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/ugtst/ugtst.pdf b/content/versions/SNAPSHOT/guides/ugtst/ugtst.pdf
index 5b2665e..b391f3b 100644
--- a/content/versions/SNAPSHOT/guides/ugtst/ugtst.pdf
+++ b/content/versions/SNAPSHOT/guides/ugtst/ugtst.pdf
@@ -4,8 +4,8 @@
 << /Title (Testing)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106171210+00'00')
-/CreationDate (D:20190106171210+00'00')
+/ModDate (D:20190106173902+00'00')
+/CreationDate (D:20190106173902+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/ugvro/ugvro.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/ugvro/ugvro.pdf b/content/versions/SNAPSHOT/guides/ugvro/ugvro.pdf
index 821a081..d436bd8 100644
--- a/content/versions/SNAPSHOT/guides/ugvro/ugvro.pdf
+++ b/content/versions/SNAPSHOT/guides/ugvro/ugvro.pdf
@@ -4,8 +4,8 @@
 << /Title (Restful Objects Viewer)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106171232+00'00')
-/CreationDate (D:20190106171232+00'00')
+/ModDate (D:20190106173925+00'00')
+/CreationDate (D:20190106173925+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/guides/ugvw/ugvw.pdf
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/guides/ugvw/ugvw.pdf b/content/versions/SNAPSHOT/guides/ugvw/ugvw.pdf
index 90c8283..8df9528 100644
--- a/content/versions/SNAPSHOT/guides/ugvw/ugvw.pdf
+++ b/content/versions/SNAPSHOT/guides/ugvw/ugvw.pdf
@@ -4,8 +4,8 @@
 << /Title (Wicket Viewer)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106171245+00'00')
-/CreationDate (D:20190106171245+00'00')
+/ModDate (D:20190106173937+00'00')
+/CreationDate (D:20190106173937+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/migration-notes/migration-notes.html
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/migration-notes/migration-notes.html b/content/versions/SNAPSHOT/migration-notes/migration-notes.html
index c8277c9..6bff5ee 100644
--- a/content/versions/SNAPSHOT/migration-notes/migration-notes.html
+++ b/content/versions/SNAPSHOT/migration-notes/migration-notes.html
@@ -292,33 +292,55 @@ table.CodeRay td.code>pre{padding:0}
         </ul>
        </div> 
        <div class="sectionbody"> 
-        <div class="paragraph"> 
-         <p>TODO</p> 
-        </div> 
-        <div class="ulist"> 
-         <ul> 
-          <li> <p>parallelized introspection</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>specify <code>isis.reflector.introspector.parallelize</code></p> </li> 
-             <li> <p>is enabled by default</p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>lazy introspection</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>specify <code>isis.reflector.introspector.mode</code></p> </li> 
-             <li> <p>is set to <code>lazy_unless_production</code> by default, can switch to <code>lazy</code> or <code>full</code></p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>sidebar dialogs</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>set <code>isis.viewer.wicket.dialogMode</code> to <code>modal</code> to retain previous behaviour</p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>new <code>MetaModelService#exportMetaModel(Config)</code></p> </li> 
-         </ul> 
+        <div class="sect2"> 
+         <h3 id="_sidebar_dialogs">Sidebar Dialogs</h3> 
+         <div class="paragraph"> 
+          <p>In this release sidebar dialogs vs modal dialogs is configured globally, and they are enabled by default.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>To revert to previous behaviour, set the configuration property:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="title">
+           isis.properties
+          </div> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="ini">isis.viewer.wicket.dialogMode=modal</code></pre> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_metamodelservice">MetaModelService</h3> 
+         <div class="paragraph"> 
+          <p>To export the metamodel as XML, use <code>MetaModelService6#exportMetaModel(Config)</code>.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Why would you want to do this? The main reason is as a regression test when moving up to new versions of the framework; you can check that the metamodel built up by the next version is the same as the previous.</p> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_introspection">Introspection</h3> 
+         <div class="paragraph"> 
+          <p>A number of new configuration properties are available to control how introspection (the building of the framework’s internal metamodel) is performed:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p>parallelized introspection</p> 
+            <div class="ulist"> 
+             <ul> 
+              <li> <p>specify <code>isis.reflector.introspector.parallelize</code></p> </li> 
+              <li> <p>is enabled by default</p> </li> 
+             </ul> 
+            </div> </li> 
+           <li> <p>lazy introspection</p> 
+            <div class="ulist"> 
+             <ul> 
+              <li> <p>specify <code>isis.reflector.introspector.mode</code></p> </li> 
+              <li> <p>is set to <code>lazy_unless_production</code> by default, can switch to <code>lazy</code> or <code>full</code></p> </li> 
+             </ul> 
+            </div> </li> 
+          </ul> 
+         </div> 
         </div> 
        </div> 
       </div> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/SNAPSHOT/release-notes/release-notes.html
----------------------------------------------------------------------
diff --git a/content/versions/SNAPSHOT/release-notes/release-notes.html b/content/versions/SNAPSHOT/release-notes/release-notes.html
index 220a887..7bf931f 100644
--- a/content/versions/SNAPSHOT/release-notes/release-notes.html
+++ b/content/versions/SNAPSHOT/release-notes/release-notes.html
@@ -310,20 +310,20 @@ table.CodeRay td.code>pre{padding:0}
           </tr> 
           <tr> 
            <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_release-notes_1.17.0">1.17.0</a></p></td> 
-           <td class="tableblock halign-left valign-top"><p class="tableblock">dd-mm-yyyy</p></td> 
+           <td class="tableblock halign-left valign-top"><p class="tableblock">06-01-2019</p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>TODO</p> 
+              <p>Sidebar dialogs, metamodel export</p> 
              </div>
             </div></td> 
-           <td class="tableblock halign-right valign-top"></td> 
-           <td class="tableblock halign-right valign-top"></td> 
-           <td class="tableblock halign-right valign-top"></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">4</p></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">17</p></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">9</p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>TODO</p> 
+              <p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311171&amp;version=12342854">Release notes for 1.17.0</a></p> 
              </div>
             </div></td> 
           </tr> 


[2/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/current/elasticlunr/index.json
----------------------------------------------------------------------
diff --git a/content/versions/current/elasticlunr/index.json b/content/versions/current/elasticlunr/index.json
index 13c9860..ec7cdd9 100644
--- a/content/versions/current/elasticlunr/index.json
+++ b/content/versions/current/elasticlunr/index.json
@@ -1 +1 @@
-{"version":"0.9.5","fields":["title","body","description","url"],"ref":"id","documentStore":{"docs":{"372886":{"title":"Rows, full-width cols, and tabs","url":"guides/ugvw/ugvw.html#_rows_full_width_cols_and_tabs","body":"Rows, full-width cols, and tabs  The example layout consists of three rows: a row for the object/icon, a row containing a properties, and a row containing collections. In all three cases the row contains a single column spanning the full width of the page. For the property and collection rows, the column contains a tab group.  This corresponds to the following XML:  You will notice that one of the columns has an unreferencedActions attribute, while one of the tabGroups has a similar unreferencedCollections attribute. This topic is discussed in more detail below. ","description":" The example layout consists of three rows: a row for the object/icon, a row containing a properties, and a row containing collections. In all three cases the row contains a single column s
 panning the full width of the page. For the property and collection rows, the column contains a","id":372886},"2646929":{"title":"Apache Isis vs …​","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_apache-isis-vs","body":"Apache Isis vs …​  Many other frameworks promise rapid application development and provide automatically generated user interfaces, so how do they compare to Apache Isis? ","description":" Many other frameworks promise rapid application development and provide automatically generated user interfaces, so how do they compare to Apache Isis? ","id":2646929},"3836440":{"title":"Running","url":"guides/dg/dg.html#__dg_ide_intellij_running","body":"Running  Let’s see how to run both the app and the tests. ","description":" Let’s see how to run both the app and the tests. ","id":3836440},"11600575":{"title":"Using Contributions","url":"pages/tg/tg.html#_using_contributions","body":"Using Contributions ","description":"","id":11600575},"12196042":{"title":"Te
 rtiary Menu","url":"guides/ugvw/ugvw.html#_tertiary_menu","body":"Tertiary Menu  Domain services' actions can be associated with the tertiary menu using the same @DomainServiceLayout annotation, but be aware that the @DomainServiceLayout#name() attribute will be ignored (there is only one effective menu).  For example, the updateEpochDate(…​) and listAllSettings(…​) actions come from the following service:  Because the number of items on the tertiary menu is expected to be small and most will pertain to the current user, the viewer does not place dividers between actions from different services on the tertiary menu. ","description":" Domain services' actions can be associated with the tertiary menu using the same @DomainServiceLayout annotation, but be aware that the @DomainServiceLayout#name() attribute will be ignored (there is only one effective menu). ","id":12196042},"12649581":{"title":"Mark the version as released","url":"guides/cgcom/cgcom.html#_mark_the_version_as_r
 eleased","body":"Mark the version as released  In JIRA, go to the administration section for the Apache Isis project and update the version as being released.  In the Kanban view this will have the effect of marking all tickets as released (clearing the \"done\" column). ","description":" In JIRA, go to the administration section for the Apache Isis project and update the version as being released. ","id":12649581},"13573617":{"title":"hide…​()","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_hide","body":"hide…​()  The hide…​() supporting method is called for properties, collections and actions. It allows the property/collection to be completely hidden from view.  It’s comparatively rare for properties or collections to be imperatively hidden from view, but actions are sometimes hidden or shown visible (as opposed to being just disabled, ie greyed out).  The signature of the supporting method is simply:  Returning true will hide the property, collection or acti
 on, returning false leaves it visible.  For example, to hide an action:  Or, to hide a property: ","description":" The hide…​() supporting method is called for properties, collections and actions. It allows the property/collection to be completely hidden from view. ","id":13573617},"14290952":{"title":"Vetoing Visibility","url":"guides/htg.html#_ugbtb_hints-and-tips_vetoing-visibility","body":"Vetoing Visibility  eg if included an addon such as auditing or security.  solution is to write a domain event subscriber that vetoes the visibility  All the addons actions inherit from common base classes so this can be as broad-brush or fine-grained as required ","description":" eg if included an addon such as auditing or security. ","id":14290952},"17000573":{"title":"ObjectCreatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectCreatedEvent","body":"ObjectCreatedEvent  Subclass of AbstractLifecycleEvent, broadcast when an object is first instantiated using the 
 FactoryServuce's #instantiate(…​) method.  ObjectCreatedEvent.Default is the implementation that is used by default, but this can be overridden using @DomainObject#createdLifecycleEvent(). ","description":" Subclass of AbstractLifecycleEvent, broadcast when an object is first instantiated using the FactoryServuce's #instantiate(…​) method. ","id":17000573},"17618894":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_20","body":"New Feature ","description":"","id":17618894},"17724516":{"title":"Multi-select action parameters","url":"guides/ugfun/ugfun.html#_multi_select_action_parameters","body":"Multi-select action parameters  As well as scalar values, action parameters can also be collections. For this to be valid, a choices or autoComplete supporting method must be provided.  For example, suppose we want to \"tag\" or \"label\" an object: ","description":" As well as scalar values, action parameters can also be collections. For this to be valid, a
  choices or autoComplete supporting method must be provided. ","id":17724516},"18445041":{"title":"Verifying Releases","url":"downloads.html#_verifying_releases","body":"Verifying Releases ","description":"","id":18445041},"19254915":{"title":"API & Implementation","url":"guides/rgsvc/rgsvc.html#_api_implementation_7","body":"API & Implementation  The CommandContext request-scoped service defines the following very simple API:  This class (o.a.i.applib.services.CommandContext) is also the default implementation.  Under normal circumstances there shouldn’t be any need to replace this implementation with another. But if you do need to for some reason, then subclass and use @DomainServiceLayout#menuOrder() (as explained in the introduction to this guide).  The Command type referenced above is in fact an interface, defined as: ","description":" The CommandContext request-scoped service defines the following very simple API: ","id":19254915},"21190750":{"title":"Run the archetype","url
 ":"pages/tg/tg.html#_run_the_archetype","body":"Run the archetype ","description":"","id":21190750},"21212015":{"title":"Key features","url":"pages/powered-by/powered-by.html#_key_features","body":"Key features ","description":"","id":21212015},"21857601":{"title":"Other Guides","url":"guides/cgcom/cgcom.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are:  This guide provides guidance for Apache Isis' own committers. ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides. ","id":21857601},"22342496":{"title":"Deploy","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_deploy","body":"Deploy  Previously the release procedures used mvn release:prepare and mvn release:perform. These are however not compatible w
 ith ${revision} that we now use for CI/CD.  We therefore just use mvn deploy directly, activating the (inherited) apache-release profile that, amongst other things, brings in the gpg plugin for code signing.  To build and deploy and tag, we use:  using your own GPG passphrase, of course. ","description":" Previously the release procedures used mvn release:prepare and mvn release:perform. These are however not compatible with ${revision} that we now use for CI/CD. ","id":22342496},"23125949":{"title":"Editing","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_editing","body":"Editing ","description":"","id":23125949},"23524101":{"title":"Collections","url":"guides/ugvw/ugvw.html#_collections","body":"Collections  In the final row the collections are placed in tabs, simply one collection per tab. This corresponds to the following XML:  As with properties, actions can be associated with collections; this indicates that they should be rendered in the collection’s header. ","de
 scription":" In the final row the collections are placed in tabs, simply one collection per tab. This corresponds to the following XML: ","id":23524101},"26509816":{"title":"Commit changes","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_commit-changes","body":"Commit changes  Commit any changes from the preceding steps: ","description":" Commit any changes from the preceding steps: ","id":26509816},"27806498":{"title":"renderedAsDayBefore()","url":"guides/rgant/rgant.html#_rgant-ParameterLayout_renderedAsDayBefore","body":"renderedAsDayBefore()  The renderedAsDayBefore() attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for properties.  This behaviour might at first glance appear odd, but the rationale is to support the use case of a sequence of instances that represent adjacent intervals of t
 ime. In such cases there would typically be startDate and endDate properties, eg for all of Q2. Storing this as a half-closed interval — eg [1-Apr-2015, 1-July-2015) — can substantially simplify internal algorithms; the endDate of one interval will correspond to the startDate of the next.  However, from an end-user perspective the requirement may be to render the interval as a fully closed interval; eg the end date should be shown as 30-Jun-2015.  This attribute therefore bridges the gap; it presents the information in a way that makes sense to an end-user, but also stores the domain object in a way that is easy work with internally.  For example: ","description":" The renderedAsDayBefore() attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for properties. ","id":27806498},"31312523":{"title":"Declarative style","u
 rl":"guides/htg.html#_declarative_style_3","body":"Declarative style  To render an object with a particular CSS, use @DomainObjectLayout#cssClass().  When the domain object is rendered on its own page, this CSS class will appear on a top-level <div>. Or, when the domain object is rendered as a row in a collection, then the CSS class will appear in a <div> wrapped by the <tr> of the row.  One possible use case would be to render the most important object types with a subtle background colour: Customers shown in light green, or Orders shown in a light pink, for example. ","description":" To render an object with a particular CSS, use @DomainObjectLayout#cssClass(). ","id":31312523},"31857620":{"title":"Interacting with the services","url":"guides/rgsvc/rgsvc.html#_interacting_with_the_services","body":"Interacting with the services  Typically domain objects will have little need to interact with the CommandContext and Command directly; what is more useful is that these are persisted i
 n support of the various use cases identified above.  One case however where a domain object might want to obtain the Command is to determine whether it has been invoked in the foreground, or in the background. It can do this using the getExecutedIn() method:  Although not often needed, this then allows the domain object to access the Command object through the CommandContext service. To expand the above example:  If run in the background, it might then notify the user (eg by email) if all work is done.  This leads us onto a related point, distinguishing the current effective user vs the originating \"real\" user. When running in the foreground, the current user can be obtained from the UserService, using:  If running in the background, however, then the current user will be the credentials of the background process, for example as run by a Quartz scheduler job.  The domain object can still obtain the original (\"effective\") user that caused the job to be created, using: ","descrip
 tion":" Typically domain objects will have little need to interact with the CommandContext and Command directly; what is more useful is that these are persisted in support of the various use cases identified above. ","id":31857620},"31966407":{"title":"Icons","url":"guides/htg.html#_icons","body":"Icons  Action icons can be specified in several ways.  One option is to use the @ActionLayout#cssClassFa(). For example:  Alternatively, you can specify these hints dynamically in the Xxx.layout.xml for the entity:  Rather than annotating every action with @ActionLayout#cssClassFa() and @ActionLayout#cssClass() you can instead specify the UI hint globally using regular expressions. Not only does this save a lot of boilerplate/editing, it helps ensure consistency across all actions.  To declare fa classes globally, use the configuration property isis.reflector.facet.cssClassFa.patterns (a comma separated list of key:value pairs).  For example:  Here:  For example, \"fa-plus\" is applied to 
 all action members called \"newXxx\" ","description":" Action icons can be specified in several ways. ","id":31966407},"32950878":{"title":"@MemberOrder","url":"guides/ugvw/ugvw.html#_code_memberorder_code","body":"@MemberOrder  The @MemberOrder annotation is used to specify the relative order of domain class properties, collections and actions.  The annotation defines two attributes, name() and sequence(). Their usage depends on the member type:  Within any of these, the sequence() then determines the relative ordering of the action with respect to other actions that have been similarly associated with properties/collections or left as \"free-standing\".  For example:  This defines three property (or member) groups, \"General\", \"Detail\" and \"Misc\"; \"General\" is the default if no name attribute is specified. Properties in the same member group are rendered together, as a fieldset.  In addition, actions can optionally be associated (rendered close to) either properties or acti
 ons. This is done by overloading the @MemberOrder's name() attribute, holding the value of the property or collection.  For example:  will associate the completed() and notYetCompleted() actions with the complete property, and will associate the add() and remove() actions with the dependencies collection.  The value of sequence() is a string. The simplest convention (as shown in the example above) is to use numbers — 1, 2, 3 — though it is a better idea to leave gaps in the numbers — 10, 20, 30 perhaps — such that a new member may be added without having to edit existing numbers.  Even better is to adopt the 'dewey-decimal' notation — 1, 1.1, 1.2, 2, 3, 5.1.1, 5.2.2, 5.2, 5.3 — which allows for an indefinite amount of future insertion. It also allows subclasses to insert their class members as required. ","description":" The @MemberOrder annotation is used to specify the relative order of domain class properties, collections and actions. ","id":32950878},"36734123":{"tit
 le":"Bug","url":"release-notes/release-notes.html#_bug_8","body":"Bug ","description":"","id":36734123},"39248326":{"title":"Runtime vs Noop implementation","url":"guides/rgfis/rgfis.html#_runtime_vs_noop_implementation","body":"Runtime vs Noop implementation  The framework provides two implementations:  The …​Default implementation takes priority over the …​Noop implementation. ","description":" The framework provides two implementations: ","id":39248326},"39290887":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_22","body":"Implementation  The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). ","description":" The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). ","id":39290887},"44483327":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_17","body":"
 New Feature ","description":"","id":44483327},"45128293":{"title":"getConfigurationProperties()","url":"guides/rgcms/rgcms.html#__rgcms_classes_AppManifest-bootstrapping_api_getConfigurationProperties","body":"getConfigurationProperties()  This method allow arbitrary other configuration properties to be overridden. One common use case is in conjunction with the getFixtures() method, discussed above: ","description":" This method allow arbitrary other configuration properties to be overridden. One common use case is in conjunction with the getFixtures() method, discussed above: ","id":45128293},"45847666":{"title":"Recreate the archetype","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-the-helloworld-archetype_create-the-archetype","body":"Recreate the archetype  Make sure you are in the correct directory and environment variables are correct.  To recreate the helloworld archetype:  Then, run the script (which also builds the archetype once generated) and then swit
 ch to the archetype’s directory:  The script automatically commits its changes. If you wish use git log and git diff (or a tool such as SourceTree) to review changes made. ","description":" Make sure you are in the correct directory and environment variables are correct. ","id":45847666},"57327287":{"title":"cssClassFa()","url":"guides/rgant/rgant.html#_rgant-ViewModelLayout_cssClassFa","body":"cssClassFa()  The cssClassFa() attribute is used to specify the name of a Font Awesome icon name, to be rendered as the domain object’s icon.  These attribute can also be applied to domain objects to specify the object’s icon, and to actions to specify an icon for the action’s representation as a button or menu item.  If necessary the icon specified can be overridden by a particular object instance using the iconName() method.  For example:  There can be multiple \"fa-\" classes, eg to mirror or rotate the icon. There is no need to include the mandatory fa \"marker\" CSS class; it wil
 l be automatically added to the list. The fa- prefix can also be omitted from the class names; it will be prepended to each if required.  The related cssClassFaPosition() attribute is currently unused for domain objects; the icon is always rendered to the left. ","description":" The cssClassFa() attribute is used to specify the name of a Font Awesome icon name, to be rendered as the domain object’s icon. ","id":57327287},"62314289":{"title":"Menu Bars Layout","url":"guides/ugvw/ugvw.html#_ugvw_menubars-layout","body":"Menu Bars Layout ","description":"","id":62314289},"64932464":{"title":"Other Guides","url":"guides/ugtst/ugtst.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are: ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\"
  guides. ","id":64932464},"66604001":{"title":"@Programmatic","url":"guides/rgant/rgant.html#_rgant-Programmatic","body":"@Programmatic ","description":"","id":66604001},"68327083":{"title":"(Optional) Verifying binary artifacts","url":"guides/cgcom/cgcom.html#__cgcom_verifying-releases_binary-artifacts","body":"(Optional) Verifying binary artifacts  You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the HelloWorld archetype or the SimpleApp archetype and running the resultant app.  Configuring your local Maven install amounts to updating the ~/.m2/settings.xml file:  where the repository URL is as provided in the VOTE email. If there is more than one repository (as is sometimes the case if multiple components have been released), then repeat the <repository> section for each.  Once the vote has completed, the staging repositories will be removed and so you should deacti
 ve the profile (comment out the <activeProfile> element). If you forget to deactive the profile, there should be no adverse effects; Maven will just spend unnecessary cycles attempting to hit a non-existent repo. ","description":" You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the HelloWorld archetype or the SimpleApp archetype and running the resultant app. ","id":68327083},"68441589":{"title":"License headers","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_license-headers","body":"License headers  The Apache Release Audit Tool RAT (from the Apache Creadur project) checks for missing license header files. The parent pom.xml of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions.  To run the RAT tool, use:  where rat.numUnapprovedLicenses property is set to a high figure, temporarily overriding the defaul
 t value of 0. This will allow the command to run over all submodules, rather than failing after the first one. The command writes out a target\\rat.txt for each submodule. missing license notes are indicated using the key !???. The for command collates all the errors.  Investigate and fix any reported violations, typically by either:  Once you’ve fixed all issues, confirm once more that apache-rat-plugin no longer reports any license violations, this time leaving the rat.numUnapprovedLicenses property to its default, 0: ","description":" The Apache Release Audit Tool RAT (from the Apache Creadur project) checks for missing license header files. The parent pom.xml of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions. ","id":68441589},"73703450":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_29","body":"New Feature ","description":"","id":73703450},"74705826":{"title":"How to implement a spellchecker?","url":"guide
 s/htg.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How to implement a spellchecker?  From this thread on the Apache Isis users mailing list:  One way to implement is to use the event bus:  if if the change is made through an edit, you can use @Property#domainEvent().  You’ll need some way to know which fields should be spell checked. Two ways spring to mind:  And you’ll (obviously) also need some sort of spell checker implementation to call. ","description":" From this thread on the Apache Isis users mailing list: ","id":74705826},"75054401":{"title":"Supporting Method Prefixes","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes","body":"Supporting Method Prefixes  Supporting methods are those that are associated with properties, collections and actions, providing additional imperative business rule checking and behaviour to be performed when the user interacts with those object members.  This association is performed by name matching. Thus, a property
  called \"firstName\", derived from a method getFirstName() may have supporting methods hideFirstName(), disableFirstName() and validateFirstName(). Supporting methods are, therefore, each characterized by their own particular prefix.  The table below lists the method prefixes that are recognized as part of Apache Isis' default programming model. ","description":" Supporting methods are those that are associated with properties, collections and actions, providing additional imperative business rule checking and behaviour to be performed when the user interacts with those object members. ","id":75054401},"77231561":{"title":"Interaction Execution","url":"guides/rgcms/rgcms.html#_rgcms_schema-ixn","body":"Interaction Execution  The interaction (\"ixn\") schema defines the serialized form of an action invocation or a property edit. In fact, it actually defines a call-graph of such executions for those cases where the WrapperFactory is used to execute sub-actions/property edits.  Each e
 xecution identifies the target object, the member to invoke, and the arguments. It also captures metrics about the execution, and the result of the execution (eg return value of an action invocation). ","description":" The interaction (\"ixn\") schema defines the serialized form of an action invocation or a property edit. In fact, it actually defines a call-graph of such executions for those cases where the WrapperFactory is used to execute sub-actions/property edits. ","id":77231561},"78112488":{"title":"Screencast","url":"guides/ugvw/ugvw.html#_screencast","body":"Screencast  This screencast describes the feature. ","description":" This screencast describes the feature. ","id":78112488},"78624086":{"title":"Other Guides","url":"guides/ugsec/ugsec.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are:
  ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides. ","id":78624086},"80534397":{"title":"ContentMappingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService","body":"ContentMappingService  The ContentMappingService supports the (default implementation of the) ContentNegotiationService enabling the RestfulObjects viewer to represent domain objects in some other format as specified by the HTTP Accept header.  See ContentNegotiationService for further discussion. ","description":" The ContentMappingService supports the (default implementation of the) ContentNegotiationService enabling the RestfulObjects viewer to represent domain objects in some other format as specified by the HTTP Accept header. ","id":80534397},"83803344":{"title":"MessageService","url":"guides/rgsvc/rgsvc.html#_rgsvc_application-layer-api_MessageService","body":"MessageService  The MessageService all
 ows domain objects to raise information, warning or error messages. These messages can either be simple strings, or can be translated. ","description":" The MessageService allows domain objects to raise information, warning or error messages. These messages can either be simple strings, or can be translated. ","id":83803344},"83933647":{"title":"Persistence Concerns","url":"guides/ugbtb/ugbtb.html#_persistence_concerns","body":"Persistence Concerns ","description":"","id":83933647},"85931482":{"title":"Task","url":"release-notes/release-notes.html#_task_24","body":"Task ","description":"","id":85931482},"87271564":{"title":"2004:","url":"pages/articles-and-presentations/articles-and-presentations.html#_2004","body":"2004: ","description":"","id":87271564},"90561824":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wicket_viewer_8","body":"Wicket Viewer ","description":"","id":90561824},"90935214":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wick
 et_viewer_10","body":"Wicket Viewer ","description":"","id":90935214},"91902412":{"title":"The issue in more detail","url":"guides/ugodn/ugodn.html#_the_issue_in_more_detail","body":"The issue in more detail  Consider these entities (yuml.me/b8681268):  In the course of a transaction, the Agreement entity is loaded into memory (not necessarily modified), and then new AgreementRoles are associated to it.  All these entities implement Comparable using ObjectContracts, and the implementation of AgreementRole's (simplified) is:  while Agreement's is implemented as:  and Party's is similarly implemented as:  DataNucleus’s persistence-by-reachability algorithm adds the AgreementRole instances into a SortedSet, which causes AgreementRole#compareTo() to fire:  In other words, in figuring out whether AgreementRole requires the persistence-by-reachability algorithm to run, it causes the adjacent associated entity Party to also be retrieved. ","description":" Consider these entities (yuml.me
 /b8681268): ","id":91902412},"92467660":{"title":"API and Usage","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage","body":"API and Usage  There are two main parts to using fixture scripts: the FixtureScripts domain service class, and the FixtureScript view model class:  Let’s look at FixtureScripts domain service in more detail first. ","description":" There are two main parts to using fixture scripts: the FixtureScripts domain service class, and the FixtureScript view model class: ","id":92467660},"96583162":{"title":"Configure toolchains plugin","url":"guides/cgcom/cgcom.html#_configure_toolchains_plugin","body":"Configure toolchains plugin  Apache Isis releases are built using Java 7, enforced using the maven toolchains plugin. Ensure that Java 7 is installed and the toolchains plugin is configured, as described in the contributors' guide. ","description":" Apache Isis releases are built using Java 7, enforced using the maven toolchains plugin. Ensure that Ja
 va 7 is installed and the toolchains plugin is configured, as described in the contributors' guide. ","id":96583162},"99090360":{"title":"Running the App","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_simpleapp-archetype_running-the-app","body":"Running the App  The simpleapp archetype generates a single WAR file, configured to run both the Wicket viewer and the Restful Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection.  Once you’ve built the app, you can run the WAR in a variety of ways. ","description":" The simpleapp archetype generates a single WAR file, configured to run both the Wicket viewer and the Restful Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection. ","id":99090360},"100682258":{"title":"Update dependencies","url":"guides/cgcom/cgcom.html#_update_dependencies","body":"Update dependencies  With the release complete, now is a goo
 d time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues).  You will probably want to create a new JIRA ticket for these updates (or if minor then use the \"catch-all\" JIRA ticket raised earlier for the next release). ","description":" With the release complete, now is a good time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues). ","id":100682258},"102347041":{"title":"Bug","url":"release-notes/release-notes.html#_bug_10","body":"Bug ","description":"","id":102347041},"104167755":{"title":"How to implement a spellchecker?","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How to implement a spellchecker?  From this thread on the Apache Isis users mailing list:  One way to implement is to use the event bus:  if if the change is made through an edit, you can use @Property#domainEvent().  You’ll need some way to know which fields s
 hould be spell checked. Two ways spring to mind:  And you’ll (obviously) also need some sort of spell checker implementation to call. ","description":" From this thread on the Apache Isis users mailing list: ","id":104167755},"104756776":{"title":"BookmarkHolder","url":"guides/rgsvc/rgsvc.html#_code_bookmarkholder_code","body":"BookmarkHolder  The BookmarkHolder interface is intended to be implemented by domain objects that use a Bookmark to reference a (single) domain object; an example might be a class such as the audit entry, mentioned above. The interface is simply:  There are two services that will contribute to this interface:  Either of these can be suppressed, if required, using a vetoing subscriber. For example, to suppress the object property (so that only the lookup(…​) action is ever shown for implementations of BookmarkHolder, define:  A more sophisticated implementation could look inside the passed ev argument and selectively hide or not based on the contributee.
  ","description":" The BookmarkHolder interface is intended to be implemented by domain objects that use a Bookmark to reference a (single) domain object; an example might be a class such as the audit entry, mentioned above. The interface is simply: ","id":104756776},"106558909":{"title":"contributedAs()","url":"guides/rgant/rgant.html#_rgant-ActionLayout_contributedAs","body":"contributedAs()  For a domain service action that can be contributed, the contributedAs() attribute determines how it is contributed: as an action or as an association (ie a property or collection).  The distinction between property or collection is automatic: if the action returns a java.util.Collection (or subtype) then the action is contributed as a collection; otherwise it is contributed as a property.  For a domain service action to be contributed, the domain services must have a nature nature of either VIEW or VIEW_CONTRIBUTIONS_ONLY, and the action must have safe action semantics, and takes a single ar
 gument, namely the contributee domain object.  For example:  It’s also possible to use the attribute to suppress the action completely:  In such cases, though, it would probably make more sense to annotate the action as either hidden or indeed @Programmatic. ","description":" For a domain service action that can be contributed, the contributedAs() attribute determines how it is contributed: as an action or as an association (ie a property or collection). ","id":106558909},"106606865":{"title":"Using the Wicket Viewer","url":"guides/rgcfg/rgcfg.html#_using_the_wicket_viewer","body":"Using the Wicket Viewer  Most of the you’re likely to run Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to Wicket’s \"configuration\" concept:  Wicket’s mechanism for specifying the \"configuration\" is to use a context parameter in web.xml; Apache Isis automatically infers its own deployment type from this. In other words: ","description":" Most o
 f the you’re likely to run Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to Wicket’s \"configuration\" concept: ","id":106606865},"108815435":{"title":"unchanging()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_unchanging","body":"unchanging()  The unchanging() attribute is used to indicate that the value held by the property never changes over time, even when other properties of the object do change.  Setting this attribute to true is used as a hint to the viewer to not redraw the property after an AJAX update of some other property/ies of the object have changed. This is primarily for performance, eg can improve the user experience when rendering PDFs/blobs.  Note that for this to work, the viewer will also ensure that none of the property’s parent component (such as a tab group panel) are re-rendered.  For example: ","description":" The unchanging() attribute is used to indicate that the value held by the property ne
 ver changes over time, even when other properties of the object do change. ","id":108815435},"109833874":{"title":"Persistable","url":"guides/rgcms/rgcms.html#_rgcms_classes_mixins_Persistable","body":"Persistable  All domain entities automatically implement the DataNucleus Persistable role interface as a result of the enhancer process (the fully qualified class name is org.datanucleus.enhancement.Persistable). So as a developer you do not need to write any code to obtain the mixins that contribute to this interface.  These mixin properties/actions are all associated with the \"Metadata\" fieldset. A number of other mixins also contribute properties or actions to the \"Metadata\" fieldset. ","description":" All domain entities automatically implement the DataNucleus Persistable role interface as a result of the enhancer process (the fully qualified class name is org.datanucleus.enhancement.Persistable). So as a developer you do not need to write any code to obtain the mixins that co
 ntribute to this interface. ","id":109833874},"112375674":{"title":"Auditing","url":"migration-notes/migration-notes.html#_auditing","body":"Auditing  The AuditingService SPI service has been deprecated, instead replaced by the AuditerService.  There can be more than one implementation of this new SPI, and a framework-provided implementation (AuditerServiceLogging) will log to a file. The (non-ASF) Incode Platform's audit module also implements the new SPI. ","description":" The AuditingService SPI service has been deprecated, instead replaced by the AuditerService. ","id":112375674},"113098816":{"title":"DataNucleus Object Store","url":"guides/htg.html#_datanucleus_object_store","body":"DataNucleus Object Store ","description":"","id":113098816},"114685873":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_19","body":"Usage  To indicate that an action invocation should be published, annotate it with the @Action#publishing() annotation.  To indicate that an property edit should
  be published, annotate it with the @Property#publishing() annotation.  To indicate that a changed object should be published is to annotate it with the @DomainObject#publishing() annotation. ","description":" To indicate that an action invocation should be published, annotate it with the @Action#publishing() annotation. ","id":114685873},"115229271":{"title":"Domain Entities","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-entities","body":"Domain Entities  Entities are persistent domain objects, with their persistence handled by JDO/DataNucleus. As such, they are mapped to a persistent object store, typically an RDBMS, with DataNucleus taking care of both lazy loading and also the persisting of modified (\"dirty\") objects.  Domain entities are generally decorated with both DataNucleus and Apache Isis annotations. Let’s look at some of the most commonly-used annotations.  To start with, entities are flagged as being \"persistence capable\", indicating how JDO/Data
 Nucleus should manage their identity:  All domain entities will have some sort of mandatory key properties. The example below is a very simple case, where the entity is identified by a name property:  It’s also common for domain entities to have queries annotated on them. These are used by repository domain services to query for instances of the entity:  DataNucleus provides several APIs for defining queries, including entirely programmatic and type-safe APIs; but JDOQL is very similar to SQL and so easily learnt.  The corresponding repository method for the above query is: ","description":" Entities are persistent domain objects, with their persistence handled by JDO/DataNucleus. As such, they are mapped to a persistent object store, typically an RDBMS, with DataNucleus taking care of both lazy loading and also the persisting of modified (\"dirty\") objects. ","id":115229271},"115955772":{"title":"domainClassDto","url":"guides/rgcms/rgcms.html#__rgcms_schema-mml_domainClassDto","
 body":"domainClassDto  The domainClassDto element describes the behaviour and structure of a single domain class within the metamodel. ","description":" The domainClassDto element describes the behaviour and structure of a single domain class within the metamodel. ","id":115955772},"117553409":{"title":"Object Icon","url":"guides/ugfun/ugfun.html#_object_icon","body":"Object Icon  The icon is often the same for all instances of a particular class, and is picked up by convention.  It’s is also possible for an individual instance to return a custom icon, typically so that some significant state of that domain object is represented. For example, a custom icon could be used to represent a shipped order, say, or an overdue library loan. ","description":" The icon is often the same for all instances of a particular class, and is picked up by convention. ","id":117553409},"121574190":{"title":"Related Services","url":"guides/rgsvc/rgsvc.html#_related_services_18","body":"Related Services
   The ActionInteractionContext service allows bulk actions to co-ordinate with each other.  The QueryResultsCache is useful for caching the results of expensive method calls. ","description":" The ActionInteractionContext service allows bulk actions to co-ordinate with each other. ","id":121574190},"121879267":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wicket_viewer_2","body":"Wicket Viewer ","description":"","id":121879267},"122762699":{"title":"Contributee","url":"guides/rgcms/rgcms.html#_rgcms_classes_contributee","body":"Contributee  The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces. ","description":" The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces. ","id":122762699},"125299345":{"title":"
 Example","url":"guides/rgant/rgant.html#_example_2","body":"Example  This example is taken from the (non-ASF) Isis addons' todoapp: ","description":" This example is taken from the (non-ASF) Isis addons' todoapp: ","id":125299345},"125961908":{"title":"Do it!","url":"pages/tg/tg.html#_do_it","body":"Do it! ","description":"","id":125961908},"134804772":{"title":"How to handle void/null results","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-handle-void-and-null-results","body":"How to handle void/null results  From this thread on the Apache Isis users mailing list:  One way to implement this idea is to provide a custom implementation of the RoutingService SPI domain service. The default implementation will either return the current object (if not null), else the home page (as defined by @HomePage) if one exists.  The following custom implementation refines this to use the breadcrumbs (available in the Wicket viewer) to return the first non-deleted domain object found in
  the list of breadcrumbs:  Note that the above implementation uses Java 8, so if you are using Java 7 then you’ll need to backport accordingly. ","description":" From this thread on the Apache Isis users mailing list: ","id":134804772},"144529895":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_44","body":"Improvement ","description":"","id":144529895},"148135206":{"title":"Layout Metadata Reader (deprecated)","url":"guides/ugbtb/ugbtb.html#_ugbtb_programming-model_layout-metadata-reader","body":"Layout Metadata Reader (deprecated)  The metadata for domain objects is obtained both annotations and files. There is also deprecated support for reading layouts from .layout.json files. This service provides an SPI (and default implementation) for reading layouts defined in this fashion. ","description":" The metadata for domain objects is obtained both annotations and files. There is also deprecated support for reading layouts from .layout.json files. This se
 rvice provides an SPI (and default implementation) for reading layouts defined in this fashion. ","id":148135206},"153666205":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_17","body":"Implementation  The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.title.TitleServiceDefault). ","description":" The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.title.TitleServiceDefault). ","id":153666205},"155655500":{"title":"@PrimaryKey (javax.jdo)","url":"guides/rgant/rgant.html#_rgant-PrimaryKey","body":"@PrimaryKey (javax.jdo) ","description":"","id":155655500},"158033412":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_27","body":"SPI  The SPI defined by the service is: ","description":" The SPI defined by the service is: ","id":158033412},"158069558":{"title":"Usability: Defaults","url":"pages/tg/tg.html#_usability_defaults","body":"Usability: Defaults ","descripti
 on":"","id":158069558},"158897592":{"title":"Refactoring","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_refactoring","body":"Refactoring  Loads of good stuff on the Refactor menu; most used are:  If you can’t remember all those shortcuts, just use ctrl-shift-alt-T (might want to rebind that to something else!) and get a context-sensitive list of refactorings available for the currently selected object ","description":" Loads of good stuff on the Refactor menu; most used are: ","id":158897592},"159072030":{"title":"(non-ASF) Incode Platform","url":"migration-notes/migration-notes.html#_migration-notes_1.14.0-to-1.15.0_incode-platform","body":"(non-ASF) Incode Platform  The various (non-ASF) Isis Addons and Incode Catalog have also been combined into a single \"Incode Platform\".  While each module can still be consumed individually, the new platform versions consistently (a change in any one module will result in a re-release of all). This should make these modules easi
 er to consume, and easier to maintain/develop.  All the modules remain open source, still licensed under the ASF v2.0 license.  As of this release, none of the groupIds or artifactIds have changed. They will be rationalized/made consistent in a future release; most probably to coincide with v2.0.0 of the framework. ","description":" The various (non-ASF) Isis Addons and Incode Catalog have also been combined into a single \"Incode Platform\". ","id":159072030},"160872749":{"title":"Related Services","url":"guides/rgfis/rgfis.html#_related_services","body":"Related Services  The default implementation of ContentNegotiationService delegates to ContentMappingService (if present) to convert domain entities into a stable form (eg DTO).  The ContentNegotiationService is itself called by the (default implementation of) RepresentationService. ","description":" The default implementation of ContentNegotiationService delegates to ContentMappingService (if present) to convert domain entities i
 nto a stable form (eg DTO). ","id":160872749},"163456888":{"title":"Dependency upgrade","url":"release-notes/release-notes.html#_dependency_upgrade_9","body":"Dependency upgrade ","description":"","id":163456888},"163915714":{"title":"web.xml","url":"migration-notes/migration-notes.html#_web_xml","body":"web.xml  In the web.xml, the \"isis.viewers\" context-param is now ignored. Instead the viewer_wicket.properties and viewer_restfulobjects.properties will both be loaded if present (but neither need be present). ","description":" In the web.xml, the \"isis.viewers\" context-param is now ignored. Instead the viewer_wicket.properties and viewer_restfulobjects.properties will both be loaded if present (but neither need be present). ","id":163915714},"165602306":{"title":"GridLoaderService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridLoaderService","body":"GridLoaderService  The GridLoaderService provides the ability to load the XML layout (grid) for a domain class.
  ","description":" The GridLoaderService provides the ability to load the XML layout (grid) for a domain class. ","id":165602306},"165750333":{"title":"loaded()","url":"guides/rgcms/rgcms.html#_rgcms_methods_lifecycle_loaded","body":"loaded()  The loaded() lifecycle callback method is called when a (persistent) object has just been loaded from the object store. ","description":" The loaded() lifecycle callback method is called when a (persistent) object has just been loaded from the object store. ","id":165750333},"166045728":{"title":"Sanity Check","url":"guides/cgcom/cgcom.html#_sanity_check_2","body":"Sanity Check  Ensure that the framework builds ok using the same command that your CI server is set up to execute (see section above). ","description":" Ensure that the framework builds ok using the same command that your CI server is set up to execute (see section above). ","id":166045728},"166899251":{"title":"Installing and Setting up","url":"guides/dg/dg.html#__dg_ide_intellij_i
 nstalling","body":"Installing and Setting up  This section covers installation and setup. These notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but are believed to be compatible with more recent versions/other editions of the IDE. ","description":" This section covers installation and setup. These notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but are believed to be compatible with more recent versions/other editions of the IDE. ","id":166899251},"167039338":{"title":"Task","url":"release-notes/release-notes.html#_task_14","body":"Task ","description":"","id":167039338},"174738887":{"title":"Related functionality","url":"guides/ugvw/ugvw.html#_related_functionality_2","body":"Related functionality  The Recent Pages also lists recently visited pages, selected from a drop-down. ","description":" The Recent Pages also lists recently visited pages, selected from a drop-down. ","id":174738887},"175028546":{"title":"Implementation","url":
 "guides/rgsvc/rgsvc.html#_implementation_5","body":"Implementation  The framework provides a default implementation of this service, namely GridServiceDefault. ","description":" The framework provides a default implementation of this service, namely GridServiceDefault. ","id":175028546},"175197970":{"title":"Performance tuning","url":"pages/tg/tg.html#_performance_tuning","body":"Performance tuning ","description":"","id":175197970},"175636232":{"title":"RepositoryService","url":"guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_RepositoryService","body":"RepositoryService  The RepositoryService collects together methods for creating, persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the JDO/DataNucleus objectstore.  You can use it during prototyping to write naive queries (find all rows, then filter using the Guava Predicate API, or you can use it to call JDO named queries using JDOQL.  As an alternative, you could also u
 se JDO typesafe queries through the IsisJdoSupport service. ","description":" The RepositoryService collects together methods for creating, persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the JDO/DataNucleus objectstore. ","id":175636232},"176767338":{"title":"Command and Events","url":"guides/rgsvc/rgsvc.html#__rgsvc_intro_commands-and-events","body":"Command and Events  A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these. These services capture information which can then be used for various purposes, most notably for auditing or for publishing events, or for deferring execution such that the execution be performed in the background at some later date.  The diagram below shows how these services fit together. The outline boxes are services while the coloured boxes represent data structures - defined in 
 the applib and therefore accessible to domain applications - which hold various information about the executions.  To explain:  Implementations of CommandService can use the Command#getMemento() method to obtain a XML equivalent of that Command, reified using the cmd.xsd schema. This can be converted back into a CommandDto using the CommandDtoUtils utility class (part of the applib).  Similarly, implementations of PublisherService can use the InteractionDtoUtils utility class to obtain a InteractionDto representing the interaction, either just for a single execution or for the entire call-graph. This can be converted into XML in a similar fashion.  Likewise, the PublishedObjects class passed to the PublisherService at the end of the interaction provides the PublishedObjects#getDto() method which returns a ChangesDto instance. This can be converted into XML using the ChangesDtoUtils utility class.  One final point: multiple PublisherService implementations are supported because diffe
 rent implementations may have different responsibilities. For example, the (non-ASF) Incode Platform's publishmq module is responsible for publishing messages onto an ActiveMQ event bus, for inter-system communication. However, the SPI can also be used for profiling; each execution within the call-graph contains metrics of the number of objects loaded or modified as a result of that execution, and thus could be used for application profiling. The framework provides a default PublisherServiceLogging implementation that logs this using SLF4J. ","description":" A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these. These services capture information which can then be used for various purposes, most notably for auditing or for publishing events","id":176767338},"177970240":{"title":"InteractionContext","url":"guides/rgsvc/rgsvc.html#_code_interactioncontext_code","body
 ":"InteractionContext  The public API of the InteractionContext domain service itself consists of simply:  This class is concrete (that is, it is also the implementation). ","description":" The public API of the InteractionContext domain service itself consists of simply: ","id":177970240},"178125062":{"title":"domainEvent()","url":"guides/rgant/rgant.html#_rgant-Action_domainEvent","body":"domainEvent()  Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s actions, the events that are fired are:  Subscribers subscribe through the EventBusService using either Guava or Axon Framework annotations and can influence each of these phases.  By default the event raised is ActionDomainEvent.Default. For example:  The domainEvent() attribute allows a custom subclass to be emitted allowing more precise subscriptions (to those s
 ubclasses) to be defined instead. This attribute is also supported for collections and properties.  For example:  The benefit is that subscribers can be more targeted as to the events that they subscribe to. ","description":" Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s actions, the events that are fired are: ","id":178125062},"183226640":{"title":"updatedLifecycleEvent()","url":"guides/rgant/rgant.html#_rgant-DomainObject_updatedLifecycleEvent","body":"updatedLifecycleEvent()  Whenever a (persistent) domain object has been modified and has been updated in the database, an \"updated\" lifecycle event is fired.  Subscribers subscribe through the EventBusService and can use the event to obtain a reference to the domain object.  By default the event raised is ObjectUpdatedEvent.Default. For example:  The purpose 
 of the updatedLifecycleEvent() attribute is to allows a custom subclass to be emitted instead. A similar attribute is available for other lifecycle events.  For example:  The benefit is that subscribers can be more targeted as to the events that they subscribe to. ","description":" Whenever a (persistent) domain object has been modified and has been updated in the database, an \"updated\" lifecycle event is fired. ","id":183226640},"188123644":{"title":"2013","url":"pages/articles-and-presentations/articles-and-presentations.html#_2013","body":"2013 ","description":"","id":188123644},"189180810":{"title":"HoldsUpdatedAt","url":"guides/rgcms/rgcms.html#_rgcms_classes_roles_HoldsUpdatedAt","body":"HoldsUpdatedAt  The HoldsUpdatedAt role interface allows the (framework-provided) TimestampService to update each object with the current timestamp whenever it is modified in a transaction.  The interface is defined as:  The current time is obtained from the ClockService.  Entities that impl
 ement this interface often also implement HoldsUpdatedBy role interface; as a convenience the Timestampable interface combines the two roles. ","description":" The HoldsUpdatedAt role interface allows the (framework-provided) TimestampService to update each object with the current timestamp whenever it is modified in a transaction. ","id":189180810},"191180113":{"title":"persistence.xml","url":"guides/ugodn/ugodn.html#_ugodn_configuring_persistence-xml","body":"persistence.xml  DataNucleus will for itself also and read the META-INF/persistence.xml. In theory it can hold mappings and even connection strings. However, with Apache Isis we tend to use annotations instead and externalize connection strings. so its definition is extremely simply, specifying just the name of the \"persistence unit\".  Here’s the one provided by the SimpleApp archetype:  Normally all one needs to do is to change the persistence-unit name.  See DataNucleus' documentation on persistence.xml to learn more. "
 ,"description":" DataNucleus will for itself also and read the META-INF/persistence.xml. In theory it can hold mappings and even connection strings. However, with Apache Isis we tend to use annotations instead and externalize connection strings. so its definition is extremely simply, specifying just the name of the \"persistence unit","id":191180113},"193219460":{"title":"API","url":"guides/rgsvc/rgsvc.html#_rgsvc_metadata-api_MetamodelService_api","body":"API  The API defined by the service is: ","description":" The API defined by the service is: ","id":193219460},"193237835":{"title":"Core","url":"release-notes/release-notes.html#_core_8","body":"Core ","description":"","id":193237835},"193497711":{"title":"UI Hints","url":"guides/ugfun/ugfun.html#_ugfun_ui-hints","body":"UI Hints ","description":"","id":193497711},"194608562":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_19","body":"SPI  It is also possible to define use some other underlying event bus implementation, by imp
 lementing the EventBusImplementation SPI:  As is probably obvious, the EventBusService just delegates down to these method calls when its own similarly named methods are called.  If you do provide your own implementation of this SPI, be aware that your subscribers will need to use whatever convention is required (eg different annotations) such that the events are correctly routed through to your subscribers.  If you have written your own implementation of the EventBusServiceImplementation SPI, then specify instead its fully-qualified class name: ","description":" It is also possible to define use some other underlying event bus implementation, by implementing the EventBusImplementation SPI: ","id":194608562},"195374240":{"title":"Update the LDAP committee (if a PMC member)","url":"guides/cgcom/cgcom.html#_update_the_ldap_committee_if_a_pmc_member","body":"Update the LDAP committee (if a PMC member)  (Assuming that the new committer is a PMC member), also add them as to the PMC commi
 ttee. This takes two steps:  The new committer does not officially become a member of the PMC until the ASF records have been updated. ","description":" (Assuming that the new committer is a PMC member), also add them as to the PMC committee. This takes two steps: ","id":195374240},"195848147":{"title":"ICLA, obtain new account","url":"guides/cgcom/cgcom.html#_icla_obtain_new_account","body":"ICLA, obtain new account  If required (that is, if the committer is not already a committer for a different ASF project), then ask them to complete an ICLA. As a result of this, they should also get an @apache.org user name.  More info can be found in the ASF new committers guide. ","description":" If required (that is, if the committer is not already a committer for a different ASF project), then ask them to complete an ICLA. As a result of this, they should also get an @apache.org user name. ","id":195848147},"196560907":{"title":"XJC profile","url":"guides/rgmvn/rgmvn.html#__rgmvn_xsd_xsd-su
 bmodule_xjc-profile","body":"XJC profile  The xjc profile reads the XSD generated by the xsd goal, and from it generates Java DTOs. Note that this isn’t round-tripping: the original view model is only for use within the Isis app, whereas the DTO generated from the XSDs is for use in a standalone context, eg in a Java subscriber on an event bus.  The xjc profile is defined as:  The referenced catalog.xml file instructs the xjc plugin how to resolve referenced schema locations. Only a reference for the Apache Isis common schema is likely to be needed: ","description":" The xjc profile reads the XSD generated by the xsd goal, and from it generates Java DTOs. Note that this isn’t round-tripping: the original view model is only for use within the Isis app, whereas the DTO generated from the XSDs is for use in a standalone context","id":196560907},"198329644":{"title":"Strings (Length)","url":"guides/ugfun/ugfun.html#__ugfun_programming-model_properties_datatypes_strings","body":"Stri
 ngs (Length)  By default JDO/DataNucleus will map string properties to a VARCHAR(255). To limit the length, use the @Column(length=…​) annotation.  For example:  This is a good example of a case where Apache Isis infers domain semantics from the JDO annotation. ","description":" By default JDO/DataNucleus will map string properties to a VARCHAR(255). To limit the length, use the @Column(length=…​) annotation. ","id":198329644},"198382465":{"title":"Actions","url":"pages/tg/tg.html#_actions","body":"Actions ","description":"","id":198382465},"201216196":{"title":"GitLab","url":"guides/ugfun/ugfun.html#_gitlab","body":"GitLab  Create a git repository \"myapp\" in GitLab.  Using Settings > CI/CD, specify the following Secret Variables:  Finally, push a copy of the generated application to this repository using the instructions provided by GitLab.  This will kick off a pipeline that will build the image and push to DockerHub.  The tag name is based on a combination of the date, 
 the branch and the git shaId. ","description":" Create a git repository \"myapp\" in GitLab. ","id":201216196},"203208629":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_18","body":"New Feature ","description":"","id":203208629},"203740710":{"title":"RoutingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_RoutingService","body":"RoutingService  The RoutingService provides the ability to return (and therefore render) an alternative object from an action invocation.  There are two primary use cases:  Currently the routing service is used only by the Wicket viewer; it is ignored by the Restful Objects viewer. ","description":" The RoutingService provides the ability to return (and therefore render) an alternative object from an action invocation. ","id":203740710},"204452611":{"title":"Related services","url":"guides/rgsvc/rgsvc.html#_related_services_15","body":"Related services  The ConfigurationServiceMenu exposes the allConfiguratio
 nProperties action in the user interface. ","description":" The ConfigurationServiceMenu exposes the allConfigurationProperties action in the user interface. ","id":204452611},"207811701":{"title":"API","url":"guides/rgsvc/rgsvc.html#_api_2","body":"API  The API of TitleService is: ","description":" The API of TitleService is: ","id":207811701},"209853740":{"title":"To run","url":"guides/rgmvn/rgmvn.html#_to_run","body":"To run  The plugin is activated by default, so is run simply using:  This will run any tests, and then also - because the plugin is activated by the isis-validate property and bound to the test phase, will run the plugin’s validate goal.  If for any reason you want to disable the validation, use: ","description":" The plugin is activated by default, so is run simply using: ","id":209853740},"213642269":{"title":"Moving on","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_helloworld-archetype_moving-on","body":"Moving on  When you are ready to start working o
 n your own app, we don’t recommend building on top of the helloworld app.  Instead, we suggest that you start with the simpleapp archetype instead. Although a little more complex, it provides more structure and tests, all of which will help you as your application grows. ","description":" When you are ready to start working on your own app, we don’t recommend building on top of the helloworld app. ","id":213642269},"216231183":{"title":"Raising a pull request","url":"guides/dg/dg.html#_raising_a_pull_request","body":"Raising a pull request  If you have your own fork, you can now simply push the changes you’ve made locally to your fork:  This will create a corresponding branch in the remote github repo. If you use gitk --all, you’ll also see a remotes/origin/ISIS-123-blobs branch.  Then, use github to raise a pull request. Pull requests sent to the Apache GitHub repositories will forward a pull request e-mail to the dev mailing list. You’ll probably want to sign up to the d
 ev mailing list first before issuing your first pull request (though that isn’t mandatory).  The process to raise the pull request, broadly speaking: ","description":" If you have your own fork, you can now simply push the changes you’ve made locally to your fork: ","id":216231183},"220685197":{"title":"AbstractSubscriber","url":"guides/rgcms/rgcms.html#_rgcms_classes_super_AbstractSubscriber","body":"AbstractSubscriber  This is a convenience superclass for creating subscriber domain services on the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to automatically register/unregister itself with the EventBusService.  It’s important that subscribers register before any domain services that might emit events on the EventBusService. For example, the (non-ASF) Incode Platform security module provides a domain service that automatically seeds certain domain entities; these will generate lifecycle events and so any subscribers must be registered before such seed ser
 vices. The easiest way to do this is to use the @DomainServiceLayout#menuOrder() attribute.  As a convenience, the AbstractSubscriber specifies this attribute. ","description":" This is a convenience superclass for creating subscriber domain services on the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to automatically register/unregister itself with the EventBusService. ","id":220685197},"222371586":{"title":"Nullability","url":"guides/rgant/rgant.html#_rgant-Column_allowsNull","body":"Nullability  The allowsNull() attribute is used to specify if a property is mandatory or is optional.  For example:  Isis also provides @Property#optionality() attribute. If both are specified, Apache Isis will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.  You should also be aware that in the lack of either the @Column#allowsNull() or the @Property#optionality() attributes, that the JDO and Apache I
 sis defaults differ. Apache Isis rule is straight-forward: properties are assumed to be required. JDO on the other hand specifies that only primitive types are mandatory; everything else is assumed to be optional. Therefore a lack of either annotation can also trigger the fail-fast validation check.  In the vast majority of cases you should be fine just to add the @Column#allowsNull() attribute to the getter. But see the documentation for @Property#optionality() attribute for discussion on one or two minor edge cases. ","description":" The allowsNull() attribute is used to specify if a property is mandatory or is optional. ","id":222371586},"227377078":{"title":"Initialization","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-services_initialization","body":"Initialization  Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed).  An Apache Isis session is available when initia
 lization occurs (so services can interact with the object store, for example).  The framework will call any public method annotated with @PostConstruct with either no arguments of an argument of type Map<String,String>. In the latter case, the framework passes in the configuration (isis.properties and any other component-specific configuration files).  Shutdown is similar; the framework will call any method annotated with @PreDestroy. ","description":" Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed). ","id":227377078},"228550183":{"title":"Policies","url":"guides/cgcom/cgcom.html#_cgcom_policies","body":"Policies ","description":"","id":228550183},"229025509":{"title":"Remove references to isis-viewer-wicket parent pom.","url":"migration-notes/migration-notes.html#_remove_references_to_code_isis_viewer_wicket_code_parent_pom","body":"Remove references to isis-viewer-wicket parent pom
 .  In earlier releases the Wicket viewer defined its own parent pom.xml for dependency management and its dependencies and to declare the various submodules that make up the viewer. This pom.xml has now been incorporated into the parent pom.xml for the Core framework.  Therefore, in the parent pom.xml of your own domain applications, remove: ","description":" In earlier releases the Wicket viewer defined its own parent pom.xml for dependency management and its dependencies and to declare the various submodules that make up the viewer. This pom.xml has now been incorporated into the parent pom.xml for the Core framework. ","id":229025509},"230599582":{"title":"AuditingServiceInternal","url":"guides/rgfis/rgfis.html#_rgfis_persistence-layer_AuditingServiceInternal","body":"AuditingServiceInternal  The (internal) AuditingServiceInternal domain service acts as an internal facade to any configured AuditingService and AuditerService services. It is responsible for obtaining the details of
  all changes to domain objects within an interaction, and then to call the configured AuditingService to actually create audit entries of those changes. ","description":" The (internal) AuditingServiceInternal domain service acts as an internal facade to any configured AuditingService and AuditerService services. It is responsible for obtaining the details of all changes to domain objects within an interaction, and then to call the configured AuditingService to actually create audit entries of those changes. ","id":230599582},"232471644":{"title":"Registering Subscribers","url":"guides/rgsvc/rgsvc.html#_registering_subscribers","body":"Registering Subscribers  The register() method should be called in the @PostConstruct lifecycle method. It is valid and probably the least confusing to readers to also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, unregistering is actually a no-op).  For example:  This works for both singleton (application-scoped) and also
  @RequestScoped domain services. ","description":" The register() method should be called in the @PostConstruct lifecycle method. It is valid and probably the least confusing to readers to also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, unregistering is actually a no-op). ","id":232471644},"238546442":{"title":"rebuildMetamodel()","url":"guides/rgcms/rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel","body":"rebuildMetamodel()  The Object_rebuildMetamodel mixin provides the ability to discard the current internal metamodel data (an instance of ObjectSpecification) for the domain class of the rendered object, and recreate from code and other sources (most notably, layout XML data). It has the following signature: ","description":" The Object_rebuildMetamodel mixin provides the ability to discard the current internal metamodel data (an instance of ObjectSpecification) for the domain class of the rendered object, and recreate from code and other 
 sources (most notably, layout XML data). It has the following signature: ","id":238546442},"238801420":{"title":"REST API Mapping","url":"guides/rgsvc/rgsvc.html#_rest_api_mapping","body":"REST API Mapping  The /restful/health path must be specified as a \"passThru\" so that no authentication challenge is issued.  This is a comma separated list, so there may be other values also (for example /restful/swagger, as shown above). ","description":" The /restful/health path must be specified as a \"passThru\" so that no authentication challenge is issued. ","id":238801420},"238979657":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_22","body":"New Feature ","description":"","id":238979657},"240026998":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_14","body":"Improvement ","description":"","id":240026998},"242030985":{"title":"1.4.0","url":"release-notes/release-notes.html#_release-notes_1.4.0","body":"1.4.0 ","description":"","id":
 242030985},"243439147":{"title":"hidden()","url":"guides/rgant/rgant.html#_rgant-Property_hidden","body":"hidden()  Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to actions and collections.  For example:  The acceptable values for the where parameter are:  For example, if a property is annotated with @Title, then normally this should be hidden from all tables. Annotating with @Property(where=Where.NOWHERE) overrides this. ","description":" Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to actions and collections. ","id":243439147},"243876171":{"title":"Task","url":"release-notes/release-notes.html#_task_28","body":"Task ","description":"","id":243876171},"244520152":{"title":"SessionLoggingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_SessionLoggingService","body":"SessionLoggingServic
 e  The SessionLoggingService defines an SPI to keep track of (typically: to log) the current sessions that are using the application. ","description":" The SessionLoggingService defines an SPI to keep track of (typically: to log) the current sessions that are using the application. ","id":244520152},"246409050":{"title":"Using system properties","url":"guides/ugbtb/ugbtb.html#_using_system_properties","body":"Using system properties  The servlet context initializer will search for any system properties called isis.xxx and if present will use them as overrides.  Thus, an alternative option for a Docker image is to bootstrap the servlet container (Tomcat, Jetty) with appropriate system properties set up. For example, with Tomcat this can be done by writing into the conf/catalina.properties file (see for example this stackoverflow post).  The Docker’s ENTRYPOINT therefore just needs to parse the Docker container’s own command line arguments and use to create this file. ","descripti
 on":" The servlet context initializer will search for any system properties called isis.xxx and if present will use them as overrides. ","id":246409050},"255768608":{"title":"Multi-tenancy support","url":"pages/isis-in-pictures/isis-in-pictures.html#_multi_tenancy_support","body":"Multi-tenancy support  One significant feature of the (non-ASF) Incode Platform's security module is the ability to associate users and objects with a \"tenancy\". The todoapp uses this feature so that different users' list of todo items are kept separate from one another. A user with administrator is able to switch their own \"tenancy\" to the tenancy of some other user, in order to access the objects in that tenancy:  For more details, see the (non-ASF) Incode Platform's security module README. ","description":" One significant feature of the (non-ASF) Incode Platform's security module is the ability to associate users and objects with a \"tenancy\". The todoapp uses this feature so that different users'
  list of todo items are kept separate from one another. A user with administrator is able to switch","id":255768608},"257661017":{"title":"AppManifest (bootstrapping)","url":"guides/rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping","body":"AppManifest (bootstrapping)  This section describes how to implement the AppManifest interface to bootstrap both an Apache Isis web application, and also its integration tests. ","description":" This section describes how to implement the AppManifest interface to bootstrap both an Apache Isis web application, and also its integration tests. ","id":257661017},"259202548":{"title":"Run-as","url":"guides/htg.html#_ugsec_hints-and-tips_run-as","body":"Run-as  This hint shows how to temporarily change the current user as reported by Shiro. This can be useful to support \"Run As\", for example.  The heavy lifting is done in ShiroService:  This could be exposed in the UI using a simple RunAsService, for example:  Credits: adapted from this gist.
  ","description":" This hint shows how to temporarily change the current user as reported by Shiro. This can be useful to support \"Run As\", for example. ","id":259202548},"259358868":{"title":"Hints and Tips","url":"guides/ugodn/ugodn.html#_ugodn_hints-and-tips","body":"Hints and Tips ","description":"","id":259358868},"262898169":{"title":"ResourceCachingFilter","url":"guides/ugbtb/ugbtb.html#_code_resourcecachingfilter_code","body":"ResourceCachingFilter  The ResourceCachingFilter adds HTTP cache headers to specified resources, based on their pattern.  Its definition is:  Its mapping is: ","description":" The ResourceCachingFilter adds HTTP cache headers to specified resources, based on their pattern. ","id":262898169},"266250802":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_2","body":"Implementation  There is no default implementation of this service.  The (non-ASF) Isis addons' kitchensink app provides an example implementation:  which is rendered a
 s: ","description":" There is no default implementation of this service. ","id":266250802},"267695496":{"title":"Building Apache Isis","url":"guides/dg/dg.html#_dg_building-isis","body":"Building Apache Isis ","description":"","id":267695496},"273843820":{"title":"Simulated UI (WrapperFactory)","url":"guides/ugtst/ugtst.html#_simulated_ui_code_wrapperfactory_code","body":"Simulated UI (WrapperFactory)  When we talk about integration tests/specs here, we mean tests that exercise the domain object logic, through to the actual database. But we also want the tests to exercise the app from the users’s perspective, which means including the user interface.  For most other frameworks that would require having to test the application in a very heavy weight/fragile fashion using a tool such as Selenium, driving a web browser to navigate . In this regard though, Apache Isis has a significant trick up its sleeve. Because Apache Isis implements the naked objects pattern, it means that the UI 
 is generated automatically from declared domain-objects, -views and -services. This therefore allows for other implementations of the UI.  The WrapperFactory domain service allows a test to wrap domain objects and thus to interact with said objects \"as if\" through the UI:  If the test invokes an action that is disabled, then the wrapper will throw an appropriate exception. If the action is ok to invoke, it delegates through.  What this means is that an Apache Isis application can be tested end-to-end without having to deploy it onto a webserver; the whole app can be tested while running in-memory. Although integration tests re (necessarily) slower than unit tests, they are not any harder to write (in fact, in some respects they are easier). ","description":" When we talk about integration tests/specs here, we mean tests that exercise the domain object logic, through to the actual database. But we also want the tests to exercise the app from the users’s perspective, which means i
 ncluding the user interface. ","id":273843820},"273985863":{"title":"addTo…​() (deprecated)","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_addTo","body":"addTo…​() (deprecated)  The addTo…​() supporting method is called whenever an object is added to a collection. Its purpose is to allow additional business logic to be performed.  For example:  See also removeFrom…​()` ","description":" The addTo…​() supporting method is called whenever an object is added to a collection. Its purpose is to allow additional business logic to be performed. ","id":273985863},"278859977":{"title":"promptStyle()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_promptStyle","body":"promptStyle()  The promptStyle() attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page).  If the attribute is not set, then the valu
 e of the configuration property isis.viewer.wicket.promptStyle is used. If this is itself not set, then an inline prompt is used.  For example:  Alternatively, the promptStyle() can be specified using file-based layouts. ","description":" The promptStyle() attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page). ","id":278859977},"278890330":{"title":"Build a domain app","url":"pages/tg/tg.html#_build_a_domain_app","body":"Build a domain app ","description":"","id":278890330},"278999912":{"title":"Integration API","url":"guides/rgsvc/rgsvc.html#_rgsvc_integration-api","body":"Integration API ","description":"","id":278999912},"280598039":{"title":"_repos.txt","url":"guides/dg/dg.html#_code_repos_txt_code","body":"_repos.txt  Create a file _repos.txt that catalogues the repositories, eg: ","description":" Create a file _repo
 s.txt that catalogues the repositories, eg: ","id":280598039},"282766365":{"title":"Object CSS Styling","url":"guides/ugfun/ugfun.html#_object_css_styling","body":"Object CSS Styling  It is also possible for an object to return a CSS class. In conjunction with customized CSS this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour. ","description":" It is also possible for an object to return a CSS class. In conjunction with customized CSS this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour. ","id":282766365},"285898371":{"title":"ObjectUpdatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectUpdatedEvent","body":"ObjectUpdatedEvent  Subclass of AbstractLifecycleEvent, broadcast when an object has just been updated in the database. This is done either explicitly when the current transaction is flushed using
  the RepositoryService's #flush(…​) method, else is done implicitly when the transaction commits at the end of the user request.  ObjectUpdatedEvent.Default is the implementation that is used by default, but this can be overridden using @DomainObject#updatedLifecycleEvent(). ","description":" Subclass of AbstractLifecycleEvent, broadcast when an object has just been updated in the database. This is done either explicitly when the current transaction is flushed using the RepositoryService's #flush(…​) method, else is done implicitly when the transaction commits at the end of the user request. ","id":285898371},"286850218":{"title":"Dependent choices for action parameters","url":"guides/ugfun/ugfun.html#_dependent_choices_for_action_parameters","body":"Dependent choices for action parameters  For action it is also possible (in a limited form) to define dependencies between parameters. Specifically, if one parameter is a drop-down choice, then other drop-down choices can be der
 ived from it.  A good example is a category/sub-category:  Note how the choices method for the 2nd parameter also accepts the first parameter. ","description":" For action it is also possible (in a limited form) to define dependencies between parameters. Specifically, if one parameter is a drop-down choice, then other drop-down choices can be derived from it. ","id":286850218},"286919998":{"title":"Install Project Lombok","url":"guides/dg/dg.html#__dg_ide_eclipse_configure-lombok","body":"Install Project Lombok  The SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this requires an installation step:  Then restart Eclipse. ","description":" The SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this requires an installation step: ","id":286919998},"287120012":{"title":"Actions","url":"guides/ugfun/ugfun.html#_actions_2","body":"Acti
 ons  Of course, the precondition business rules described above are only one type of business rule.  More generally, business rules are implemented in the form of the implementation of actions. Rather than have the end-user have to edit individual properties of numerous objects, an action can encode these rules and allow only safe transformations of the application from one consistent state to the next. ","description":" Of course, the precondition business rules described above are only one type of business rule. ","id":287120012},"288377989":{"title":"Philosophy and Architecture","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_philosophy","body":"Philosophy and Architecture  This section describes some of the core ideas and architectural patterns upon which Apache Isis builds. ","description":" This section describes some of the core ideas and architectural patterns upon which Apache Isis builds. ","id":288377989},"288392697":{"title":"User Experience","url":"guides/ugvw/ugvw.
 html#_user_experience_3","body":"User Experience  The copy URL dialog is typically obtained by clicking on the icon.  Alternatively, alt+] will also open the dialog. It can be closed with either OK or the Esc key. ","description":" The copy URL dialog is typically obtained by clicking on the icon. ","id":288392697},"291813215":{"title":"Raising events programmatically","url":"guides/rgant/rgant.html#_raising_events_programmatically","body":"Raising events programmatically  Normally events are only raised for interactions through the UI. However, events can be raised programmatically either by calling the EventBusService API directly, or by emulating the UI by wrapping the target object using the WrapperFactory domain service. ","description":" Normally events are only raised for interactions through the UI. However, events can be raised programmatically either by calling the EventBusService API directly, or by emulating the UI by wrapping the target object using the WrapperFactory d
 omain service. ","id":291813215},"292881794":{"title":"FixtureScript","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage_FixtureScript","body":"FixtureScript  A fixture script is ultimately just a block of code that can be executed, so it’s up to you how you implement it to set up the system. However, we strongly recommend that you use it to invoke actions on business objects, in essence to replay what a real-life user would have done. That way, the fixture script will remain valid even if the underlying implementation of the system changes in the future.  For example, here’s a fixture script called RecreateSimpleObjects. (This used to be part of the SimpleApp archetype, though the archetype now ships with a more sophisticated design, discussed below):  Because this script has exposed a \"number\" property, it’s possible to set this from within the UI. For example:  When this is executed, the framework will parse the text and attempt to reflectively set the co
 rresponding properties on the fixture result. So, in this case, when the fixture script is executed we actually get 6 objects created. ","description":" A fixture script is ultimately just a block of code that can be executed, so it’s up to you how you implement it to set up the system. However, we strongly recommend that you use it to invoke actions on business objects, in essence to replay what a real","id":292881794},"293860175":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_10","body":"Usage  For exa

<TRUNCATED>

[5/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/1.17.0/guides/cgcom/cgcom.html
----------------------------------------------------------------------
diff --git a/content/versions/1.17.0/guides/cgcom/cgcom.html b/content/versions/1.17.0/guides/cgcom/cgcom.html
index 5860091..ecb1f55 100644
--- a/content/versions/1.17.0/guides/cgcom/cgcom.html
+++ b/content/versions/1.17.0/guides/cgcom/cgcom.html
@@ -2384,7 +2384,7 @@ mv content/versions/SNAPSHOT content/versions/current</code></pre>
              </div> 
             </div> </li> 
            <li> <p>publish the website once more (from the <code>isis</code> main repo).</p> </li> 
-           <li> <p>Finally, preview the changes (using <code>sh preview-html.sh</code> in the <code>isis-site</code>).</p> </li> 
+           <li> <p>Finally, preview the changes (using <code>sh preview.sh</code> in the <code>isis-site</code>).</p> </li> 
           </ul> 
          </div> 
          <div class="paragraph"> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/1.17.0/guides/cgcom/cgcom.pdf
----------------------------------------------------------------------
diff --git a/content/versions/1.17.0/guides/cgcom/cgcom.pdf b/content/versions/1.17.0/guides/cgcom/cgcom.pdf
index 13b4ec1..fac0b4c 100644
--- a/content/versions/1.17.0/guides/cgcom/cgcom.pdf
+++ b/content/versions/1.17.0/guides/cgcom/cgcom.pdf
@@ -4,8 +4,8 @@
 << /Title (Committers' Guide)
 /Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
 /Producer (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2)
-/ModDate (D:20190106163330+00'00')
-/CreationDate (D:20190106163330+00'00')
+/ModDate (D:20190106173125+00'00')
+/CreationDate (D:20190106173125+00'00')
 >>
 endobj
 2 0 obj
@@ -30216,7 +30216,7 @@ endobj
 >>
 endobj
 267 0 obj
-<< /Length 18236
+<< /Length 18226
 >>
 stream
 q
@@ -31461,7 +31461,7 @@ ET
 BT
 244.5106 312.206 Td
 /F4.0 10.5 Tf
-<736820707265766965772d68746d6c2e7368> Tj
+<736820707265766965772e7368> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -31470,7 +31470,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-339.0106 312.206 Td
+312.7606 312.206 Td
 /F1.0 10.5 Tf
 <20696e2074686520> Tj
 ET
@@ -31481,7 +31481,7 @@ ET
 0.6941 0.1294 0.2745 SCN
 
 BT
-373.2616 312.206 Td
+347.0116 312.206 Td
 /F4.0 10.5 Tf
 <697369732d73697465> Tj
 ET
@@ -31492,7 +31492,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-420.5116 312.206 Td
+394.2616 312.206 Td
 /F1.0 10.5 Tf
 <292e> Tj
 ET
@@ -58462,520 +58462,520 @@ xref
 0001155587 00000 n 
 0001155768 00000 n 
 0001156003 00000 n 
-0001174294 00000 n 
-0001174683 00000 n 
-0001174729 00000 n 
-0001174901 00000 n 
-0001184440 00000 n 
-0001184823 00000 n 
-0001184869 00000 n 
-0001185054 00000 n 
-0001185229 00000 n 
-0001185275 00000 n 
-0001185321 00000 n 
-0001197194 00000 n 
-0001197569 00000 n 
-0001197615 00000 n 
-0001197843 00000 n 
-0001197889 00000 n 
-0001197935 00000 n 
-0001205719 00000 n 
-0001206126 00000 n 
-0001206295 00000 n 
-0001206341 00000 n 
-0001206543 00000 n 
-0001206729 00000 n 
-0001206775 00000 n 
-0001206821 00000 n 
-0001206992 00000 n 
-0001207234 00000 n 
-0001216198 00000 n 
-0001216589 00000 n 
-0001216635 00000 n 
-0001216822 00000 n 
-0001217011 00000 n 
-0001217203 00000 n 
-0001217249 00000 n 
-0001217665 00000 n 
-0001217711 00000 n 
-0001222029 00000 n 
-0001222404 00000 n 
-0001222450 00000 n 
-0001222623 00000 n 
-0001222669 00000 n 
-0001235321 00000 n 
-0001235717 00000 n 
-0001235763 00000 n 
-0001235809 00000 n 
-0001236017 00000 n 
-0001236203 00000 n 
-0001236249 00000 n 
-0001239773 00000 n 
-0001240161 00000 n 
-0001240207 00000 n 
-0001240382 00000 n 
-0001253051 00000 n 
-0001253517 00000 n 
-0001253563 00000 n 
-0001253757 00000 n 
-0001253964 00000 n 
-0001254153 00000 n 
-0001254341 00000 n 
-0001254541 00000 n 
-0001254718 00000 n 
-0001254889 00000 n 
-0001254935 00000 n 
-0001255098 00000 n 
-0001255264 00000 n 
-0001255310 00000 n 
-0001255356 00000 n 
-0001261907 00000 n 
-0001262278 00000 n 
-0001262324 00000 n 
-0001274455 00000 n 
-0001274899 00000 n 
-0001274945 00000 n 
-0001275123 00000 n 
-0001275290 00000 n 
-0001275459 00000 n 
-0001275639 00000 n 
-0001275840 00000 n 
-0001276007 00000 n 
-0001276053 00000 n 
-0001276251 00000 n 
-0001276426 00000 n 
-0001287717 00000 n 
-0001288087 00000 n 
-0001288133 00000 n 
-0001288179 00000 n 
-0001302086 00000 n 
-0001302456 00000 n 
-0001302502 00000 n 
-0001311872 00000 n 
-0001312263 00000 n 
-0001312309 00000 n 
-0001312501 00000 n 
-0001312695 00000 n 
-0001312886 00000 n 
-0001312932 00000 n 
-0001312978 00000 n 
-0001321890 00000 n 
-0001322234 00000 n 
-0001333056 00000 n 
-0001333400 00000 n 
-0001341350 00000 n 
-0001341720 00000 n 
-0001341766 00000 n 
-0001348520 00000 n 
-0001348877 00000 n 
-0001357089 00000 n 
-0001357464 00000 n 
-0001357510 00000 n 
-0001357710 00000 n 
-0001366073 00000 n 
-0001366417 00000 n 
-0001378547 00000 n 
-0001379018 00000 n 
-0001379064 00000 n 
-0001379110 00000 n 
-0001379634 00000 n 
-0001379796 00000 n 
-0001380003 00000 n 
-0001380208 00000 n 
-0001380373 00000 n 
-0001380578 00000 n 
-0001380784 00000 n 
-0001380990 00000 n 
-0001381196 00000 n 
-0001381402 00000 n 
-0001381608 00000 n 
-0001381814 00000 n 
-0001382020 00000 n 
-0001382226 00000 n 
-0001390318 00000 n 
-0001390733 00000 n 
-0001390779 00000 n 
-0001390825 00000 n 
-0001391013 00000 n 
-0001391202 00000 n 
-0001391391 00000 n 
-0001391580 00000 n 
-0001391769 00000 n 
-0001391815 00000 n 
-0001392360 00000 n 
-0001392550 00000 n 
-0001411587 00000 n 
-0001411931 00000 n 
-0001422847 00000 n 
-0001423238 00000 n 
-0001423284 00000 n 
-0001423463 00000 n 
-0001423509 00000 n 
-0001423555 00000 n 
-0001423764 00000 n 
-0001423955 00000 n 
-0001434853 00000 n 
-0001435210 00000 n 
-0001435256 00000 n 
-0001450650 00000 n 
-0001451078 00000 n 
-0001451124 00000 n 
-0001451311 00000 n 
-0001451357 00000 n 
-0001451567 00000 n 
-0001451613 00000 n 
-0001451798 00000 n 
-0001451961 00000 n 
-0001452128 00000 n 
-0001452174 00000 n 
-0001452347 00000 n 
-0001461102 00000 n 
-0001461485 00000 n 
-0001461694 00000 n 
-0001461880 00000 n 
-0001472338 00000 n 
-0001472745 00000 n 
-0001472791 00000 n 
-0001472837 00000 n 
-0001472883 00000 n 
-0001473045 00000 n 
-0001473091 00000 n 
-0001473685 00000 n 
-0001473903 00000 n 
-0001473949 00000 n 
-0001474115 00000 n 
-0001474301 00000 n 
-0001474481 00000 n 
-0001484536 00000 n 
-0001484911 00000 n 
-0001485101 00000 n 
-0001485147 00000 n 
-0001488544 00000 n 
-0001488927 00000 n 
-0001488973 00000 n 
-0001489160 00000 n 
-0001489334 00000 n 
-0001497929 00000 n 
-0001498354 00000 n 
-0001498400 00000 n 
-0001498578 00000 n 
-0001498624 00000 n 
-0001498829 00000 n 
-0001499034 00000 n 
-0001499080 00000 n 
-0001499266 00000 n 
-0001499312 00000 n 
-0001505837 00000 n 
-0001506207 00000 n 
-0001506253 00000 n 
-0001515528 00000 n 
-0001515916 00000 n 
-0001515962 00000 n 
-0001516196 00000 n 
-0001516242 00000 n 
-0001516288 00000 n 
-0001526480 00000 n 
-0001526881 00000 n 
-0001527062 00000 n 
-0001527109 00000 n 
-0001536803 00000 n 
-0001537204 00000 n 
-0001537250 00000 n 
-0001537296 00000 n 
-0001537470 00000 n 
-0001537516 00000 n 
-0001539539 00000 n 
-0001539883 00000 n 
-0001540003 00000 n 
-0001540124 00000 n 
-0001540249 00000 n 
-0001540375 00000 n 
-0001540510 00000 n 
-0001540647 00000 n 
-0001540769 00000 n 
-0001540893 00000 n 
-0001541016 00000 n 
-0001541141 00000 n 
-0001541283 00000 n 
-0001541426 00000 n 
-0001541555 00000 n 
-0001541686 00000 n 
-0001541812 00000 n 
-0001541939 00000 n 
-0001542058 00000 n 
-0001542178 00000 n 
-0001542309 00000 n 
-0001542441 00000 n 
-0001542577 00000 n 
-0001542715 00000 n 
-0001542870 00000 n 
-0001543026 00000 n 
-0001543189 00000 n 
-0001543354 00000 n 
-0001543517 00000 n 
-0001543682 00000 n 
-0001543843 00000 n 
-0001544007 00000 n 
-0001544170 00000 n 
-0001544336 00000 n 
-0001544500 00000 n 
-0001544652 00000 n 
-0001544806 00000 n 
-0001544977 00000 n 
-0001545152 00000 n 
-0001545326 00000 n 
-0001545498 00000 n 
-0001545670 00000 n 
-0001545846 00000 n 
-0001546021 00000 n 
-0001546194 00000 n 
-0001546356 00000 n 
-0001546519 00000 n 
-0001546671 00000 n 
-0001546827 00000 n 
-0001546982 00000 n 
-0001547135 00000 n 
-0001547287 00000 n 
-0001547439 00000 n 
-0001547584 00000 n 
-0001547729 00000 n 
-0001547867 00000 n 
-0001548005 00000 n 
-0001548155 00000 n 
-0001548305 00000 n 
-0001548458 00000 n 
-0001548611 00000 n 
-0001548777 00000 n 
-0001548943 00000 n 
-0001549099 00000 n 
-0001549255 00000 n 
-0001549402 00000 n 
-0001549549 00000 n 
-0001549703 00000 n 
-0001549857 00000 n 
-0001549999 00000 n 
-0001550142 00000 n 
-0001550268 00000 n 
-0001550394 00000 n 
-0001550517 00000 n 
-0001550641 00000 n 
-0001550778 00000 n 
-0001550915 00000 n 
-0001551046 00000 n 
-0001551177 00000 n 
-0001551300 00000 n 
-0001551424 00000 n 
-0001551564 00000 n 
-0001551704 00000 n 
-0001551829 00000 n 
-0001551954 00000 n 
-0001552085 00000 n 
-0001552216 00000 n 
-0001552338 00000 n 
-0001552460 00000 n 
-0001552596 00000 n 
-0001552732 00000 n 
-0001552864 00000 n 
-0001552996 00000 n 
-0001553123 00000 n 
-0001553251 00000 n 
-0001553376 00000 n 
-0001553501 00000 n 
-0001553667 00000 n 
-0001553835 00000 n 
-0001553980 00000 n 
-0001554125 00000 n 
-0001554253 00000 n 
-0001554381 00000 n 
-0001554510 00000 n 
-0001554639 00000 n 
-0001554773 00000 n 
-0001554908 00000 n 
-0001555026 00000 n 
-0001555144 00000 n 
-0001555292 00000 n 
-0001555441 00000 n 
-0001555569 00000 n 
-0001555697 00000 n 
-0001555822 00000 n 
-0001555947 00000 n 
-0001556066 00000 n 
-0001556185 00000 n 
-0001556340 00000 n 
-0001556496 00000 n 
-0001556624 00000 n 
-0001556752 00000 n 
-0001556879 00000 n 
-0001557006 00000 n 
-0001557124 00000 n 
-0001557244 00000 n 
-0001557388 00000 n 
-0001557534 00000 n 
-0001557660 00000 n 
-0001557787 00000 n 
-0001557905 00000 n 
-0001558025 00000 n 
-0001558159 00000 n 
-0001558293 00000 n 
-0001558427 00000 n 
-0001558561 00000 n 
-0001558697 00000 n 
-0001558835 00000 n 
-0001558962 00000 n 
-0001559089 00000 n 
-0001559219 00000 n 
-0001559349 00000 n 
-0001559495 00000 n 
-0001559641 00000 n 
-0001559765 00000 n 
-0001559889 00000 n 
-0001560046 00000 n 
-0001560203 00000 n 
-0001560368 00000 n 
-0001560538 00000 n 
-0001560706 00000 n 
-0001560871 00000 n 
-0001561014 00000 n 
-0001561157 00000 n 
-0001561297 00000 n 
-0001561437 00000 n 
-0001561568 00000 n 
-0001561699 00000 n 
-0001561840 00000 n 
-0001561986 00000 n 
-0001562127 00000 n 
-0001562254 00000 n 
-0001562382 00000 n 
-0001562528 00000 n 
-0001562674 00000 n 
-0001562813 00000 n 
-0001562952 00000 n 
-0001563080 00000 n 
-0001563208 00000 n 
-0001563325 00000 n 
-0001563443 00000 n 
-0001563577 00000 n 
-0001563712 00000 n 
-0001563844 00000 n 
-0001563977 00000 n 
-0001564248 00000 n 
-0001564519 00000 n 
-0001564597 00000 n 
-0001564774 00000 n 
-0001564966 00000 n 
-0001565231 00000 n 
-0001565395 00000 n 
-0001565656 00000 n 
-0001565826 00000 n 
-0001566000 00000 n 
-0001566285 00000 n 
-0001566483 00000 n 
-0001566679 00000 n 
-0001566847 00000 n 
-0001567049 00000 n 
-0001567315 00000 n 
-0001567509 00000 n 
-0001567753 00000 n 
-0001567997 00000 n 
-0001568277 00000 n 
-0001568477 00000 n 
-0001568738 00000 n 
-0001569003 00000 n 
-0001569244 00000 n 
-0001569483 00000 n 
-0001569686 00000 n 
-0001569845 00000 n 
-0001570119 00000 n 
-0001570290 00000 n 
-0001570487 00000 n 
-0001570736 00000 n 
-0001571029 00000 n 
-0001571270 00000 n 
-0001571457 00000 n 
-0001571756 00000 n 
-0001571939 00000 n 
-0001572128 00000 n 
-0001572369 00000 n 
-0001572588 00000 n 
-0001572777 00000 n 
-0001573030 00000 n 
-0001573232 00000 n 
-0001573457 00000 n 
-0001573638 00000 n 
-0001573879 00000 n 
-0001574104 00000 n 
-0001574313 00000 n 
-0001574510 00000 n 
-0001574745 00000 n 
-0001575051 00000 n 
-0001575234 00000 n 
-0001575443 00000 n 
-0001575676 00000 n 
-0001575827 00000 n 
-0001576093 00000 n 
-0001576276 00000 n 
-0001576469 00000 n 
-0001576624 00000 n 
-0001576886 00000 n 
-0001577069 00000 n 
-0001577262 00000 n 
-0001577421 00000 n 
-0001577699 00000 n 
-0001577890 00000 n 
-0001578067 00000 n 
-0001578294 00000 n 
-0001578552 00000 n 
-0001578787 00000 n 
-0001578992 00000 n 
-0001579209 00000 n 
-0001579490 00000 n 
-0001579683 00000 n 
-0001580016 00000 n 
-0001580339 00000 n 
-0001580641 00000 n 
-0001580884 00000 n 
-0001581105 00000 n 
-0001581312 00000 n 
-0001581546 00000 n 
-0001581749 00000 n 
-0001581924 00000 n 
-0001582164 00000 n 
-0001582327 00000 n 
-0001582572 00000 n 
-0001582787 00000 n 
-0001584142 00000 n 
-0001594204 00000 n 
-0001594420 00000 n 
-0001595783 00000 n 
-0001596829 00000 n 
-0001605153 00000 n 
-0001605374 00000 n 
-0001606737 00000 n 
-0001607809 00000 n 
-0001609262 00000 n 
-0001609471 00000 n 
-0001609791 00000 n 
-0001610707 00000 n 
-0001616803 00000 n 
-0001617017 00000 n 
-0001618380 00000 n 
-0001619425 00000 n 
-0001621407 00000 n 
-0001621621 00000 n 
-0001621952 00000 n 
-0001623090 00000 n 
-0001624352 00000 n 
-0001624568 00000 n 
-0001624872 00000 n 
-0001626009 00000 n 
-0001628798 00000 n 
-0001629024 00000 n 
-0001630387 00000 n 
+0001174284 00000 n 
+0001174673 00000 n 
+0001174719 00000 n 
+0001174891 00000 n 
+0001184430 00000 n 
+0001184813 00000 n 
+0001184859 00000 n 
+0001185044 00000 n 
+0001185219 00000 n 
+0001185265 00000 n 
+0001185311 00000 n 
+0001197184 00000 n 
+0001197559 00000 n 
+0001197605 00000 n 
+0001197833 00000 n 
+0001197879 00000 n 
+0001197925 00000 n 
+0001205709 00000 n 
+0001206116 00000 n 
+0001206285 00000 n 
+0001206331 00000 n 
+0001206533 00000 n 
+0001206719 00000 n 
+0001206765 00000 n 
+0001206811 00000 n 
+0001206982 00000 n 
+0001207224 00000 n 
+0001216188 00000 n 
+0001216579 00000 n 
+0001216625 00000 n 
+0001216812 00000 n 
+0001217001 00000 n 
+0001217193 00000 n 
+0001217239 00000 n 
+0001217655 00000 n 
+0001217701 00000 n 
+0001222019 00000 n 
+0001222394 00000 n 
+0001222440 00000 n 
+0001222613 00000 n 
+0001222659 00000 n 
+0001235311 00000 n 
+0001235707 00000 n 
+0001235753 00000 n 
+0001235799 00000 n 
+0001236007 00000 n 
+0001236193 00000 n 
+0001236239 00000 n 
+0001239763 00000 n 
+0001240151 00000 n 
+0001240197 00000 n 
+0001240372 00000 n 
+0001253041 00000 n 
+0001253507 00000 n 
+0001253553 00000 n 
+0001253747 00000 n 
+0001253954 00000 n 
+0001254143 00000 n 
+0001254331 00000 n 
+0001254531 00000 n 
+0001254708 00000 n 
+0001254879 00000 n 
+0001254925 00000 n 
+0001255088 00000 n 
+0001255254 00000 n 
+0001255300 00000 n 
+0001255346 00000 n 
+0001261897 00000 n 
+0001262268 00000 n 
+0001262314 00000 n 
+0001274445 00000 n 
+0001274889 00000 n 
+0001274935 00000 n 
+0001275113 00000 n 
+0001275280 00000 n 
+0001275449 00000 n 
+0001275629 00000 n 
+0001275830 00000 n 
+0001275997 00000 n 
+0001276043 00000 n 
+0001276241 00000 n 
+0001276416 00000 n 
+0001287707 00000 n 
+0001288077 00000 n 
+0001288123 00000 n 
+0001288169 00000 n 
+0001302076 00000 n 
+0001302446 00000 n 
+0001302492 00000 n 
+0001311862 00000 n 
+0001312253 00000 n 
+0001312299 00000 n 
+0001312491 00000 n 
+0001312685 00000 n 
+0001312876 00000 n 
+0001312922 00000 n 
+0001312968 00000 n 
+0001321880 00000 n 
+0001322224 00000 n 
+0001333046 00000 n 
+0001333390 00000 n 
+0001341340 00000 n 
+0001341710 00000 n 
+0001341756 00000 n 
+0001348510 00000 n 
+0001348867 00000 n 
+0001357079 00000 n 
+0001357454 00000 n 
+0001357500 00000 n 
+0001357700 00000 n 
+0001366063 00000 n 
+0001366407 00000 n 
+0001378537 00000 n 
+0001379008 00000 n 
+0001379054 00000 n 
+0001379100 00000 n 
+0001379624 00000 n 
+0001379786 00000 n 
+0001379993 00000 n 
+0001380198 00000 n 
+0001380363 00000 n 
+0001380568 00000 n 
+0001380774 00000 n 
+0001380980 00000 n 
+0001381186 00000 n 
+0001381392 00000 n 
+0001381598 00000 n 
+0001381804 00000 n 
+0001382010 00000 n 
+0001382216 00000 n 
+0001390308 00000 n 
+0001390723 00000 n 
+0001390769 00000 n 
+0001390815 00000 n 
+0001391003 00000 n 
+0001391192 00000 n 
+0001391381 00000 n 
+0001391570 00000 n 
+0001391759 00000 n 
+0001391805 00000 n 
+0001392350 00000 n 
+0001392540 00000 n 
+0001411577 00000 n 
+0001411921 00000 n 
+0001422837 00000 n 
+0001423228 00000 n 
+0001423274 00000 n 
+0001423453 00000 n 
+0001423499 00000 n 
+0001423545 00000 n 
+0001423754 00000 n 
+0001423945 00000 n 
+0001434843 00000 n 
+0001435200 00000 n 
+0001435246 00000 n 
+0001450640 00000 n 
+0001451068 00000 n 
+0001451114 00000 n 
+0001451301 00000 n 
+0001451347 00000 n 
+0001451557 00000 n 
+0001451603 00000 n 
+0001451788 00000 n 
+0001451951 00000 n 
+0001452118 00000 n 
+0001452164 00000 n 
+0001452337 00000 n 
+0001461092 00000 n 
+0001461475 00000 n 
+0001461684 00000 n 
+0001461870 00000 n 
+0001472328 00000 n 
+0001472735 00000 n 
+0001472781 00000 n 
+0001472827 00000 n 
+0001472873 00000 n 
+0001473035 00000 n 
+0001473081 00000 n 
+0001473675 00000 n 
+0001473893 00000 n 
+0001473939 00000 n 
+0001474105 00000 n 
+0001474291 00000 n 
+0001474471 00000 n 
+0001484526 00000 n 
+0001484901 00000 n 
+0001485091 00000 n 
+0001485137 00000 n 
+0001488534 00000 n 
+0001488917 00000 n 
+0001488963 00000 n 
+0001489150 00000 n 
+0001489324 00000 n 
+0001497919 00000 n 
+0001498344 00000 n 
+0001498390 00000 n 
+0001498568 00000 n 
+0001498614 00000 n 
+0001498819 00000 n 
+0001499024 00000 n 
+0001499070 00000 n 
+0001499256 00000 n 
+0001499302 00000 n 
+0001505827 00000 n 
+0001506197 00000 n 
+0001506243 00000 n 
+0001515518 00000 n 
+0001515906 00000 n 
+0001515952 00000 n 
+0001516186 00000 n 
+0001516232 00000 n 
+0001516278 00000 n 
+0001526470 00000 n 
+0001526871 00000 n 
+0001527052 00000 n 
+0001527099 00000 n 
+0001536793 00000 n 
+0001537194 00000 n 
+0001537240 00000 n 
+0001537286 00000 n 
+0001537460 00000 n 
+0001537506 00000 n 
+0001539529 00000 n 
+0001539873 00000 n 
+0001539993 00000 n 
+0001540114 00000 n 
+0001540239 00000 n 
+0001540365 00000 n 
+0001540500 00000 n 
+0001540637 00000 n 
+0001540759 00000 n 
+0001540883 00000 n 
+0001541006 00000 n 
+0001541131 00000 n 
+0001541273 00000 n 
+0001541416 00000 n 
+0001541545 00000 n 
+0001541676 00000 n 
+0001541802 00000 n 
+0001541929 00000 n 
+0001542048 00000 n 
+0001542168 00000 n 
+0001542299 00000 n 
+0001542431 00000 n 
+0001542567 00000 n 
+0001542705 00000 n 
+0001542860 00000 n 
+0001543016 00000 n 
+0001543179 00000 n 
+0001543344 00000 n 
+0001543507 00000 n 
+0001543672 00000 n 
+0001543833 00000 n 
+0001543997 00000 n 
+0001544160 00000 n 
+0001544326 00000 n 
+0001544490 00000 n 
+0001544642 00000 n 
+0001544796 00000 n 
+0001544967 00000 n 
+0001545142 00000 n 
+0001545316 00000 n 
+0001545488 00000 n 
+0001545660 00000 n 
+0001545836 00000 n 
+0001546011 00000 n 
+0001546184 00000 n 
+0001546346 00000 n 
+0001546509 00000 n 
+0001546661 00000 n 
+0001546817 00000 n 
+0001546972 00000 n 
+0001547125 00000 n 
+0001547277 00000 n 
+0001547429 00000 n 
+0001547574 00000 n 
+0001547719 00000 n 
+0001547857 00000 n 
+0001547995 00000 n 
+0001548145 00000 n 
+0001548295 00000 n 
+0001548448 00000 n 
+0001548601 00000 n 
+0001548767 00000 n 
+0001548933 00000 n 
+0001549089 00000 n 
+0001549245 00000 n 
+0001549392 00000 n 
+0001549539 00000 n 
+0001549693 00000 n 
+0001549847 00000 n 
+0001549989 00000 n 
+0001550132 00000 n 
+0001550258 00000 n 
+0001550384 00000 n 
+0001550507 00000 n 
+0001550631 00000 n 
+0001550768 00000 n 
+0001550905 00000 n 
+0001551036 00000 n 
+0001551167 00000 n 
+0001551290 00000 n 
+0001551414 00000 n 
+0001551554 00000 n 
+0001551694 00000 n 
+0001551819 00000 n 
+0001551944 00000 n 
+0001552075 00000 n 
+0001552206 00000 n 
+0001552328 00000 n 
+0001552450 00000 n 
+0001552586 00000 n 
+0001552722 00000 n 
+0001552854 00000 n 
+0001552986 00000 n 
+0001553113 00000 n 
+0001553241 00000 n 
+0001553366 00000 n 
+0001553491 00000 n 
+0001553657 00000 n 
+0001553825 00000 n 
+0001553970 00000 n 
+0001554115 00000 n 
+0001554243 00000 n 
+0001554371 00000 n 
+0001554500 00000 n 
+0001554629 00000 n 
+0001554763 00000 n 
+0001554898 00000 n 
+0001555016 00000 n 
+0001555134 00000 n 
+0001555282 00000 n 
+0001555431 00000 n 
+0001555559 00000 n 
+0001555687 00000 n 
+0001555812 00000 n 
+0001555937 00000 n 
+0001556056 00000 n 
+0001556175 00000 n 
+0001556330 00000 n 
+0001556486 00000 n 
+0001556614 00000 n 
+0001556742 00000 n 
+0001556869 00000 n 
+0001556996 00000 n 
+0001557114 00000 n 
+0001557234 00000 n 
+0001557378 00000 n 
+0001557524 00000 n 
+0001557650 00000 n 
+0001557777 00000 n 
+0001557895 00000 n 
+0001558015 00000 n 
+0001558149 00000 n 
+0001558283 00000 n 
+0001558417 00000 n 
+0001558551 00000 n 
+0001558687 00000 n 
+0001558825 00000 n 
+0001558952 00000 n 
+0001559079 00000 n 
+0001559209 00000 n 
+0001559339 00000 n 
+0001559485 00000 n 
+0001559631 00000 n 
+0001559755 00000 n 
+0001559879 00000 n 
+0001560036 00000 n 
+0001560193 00000 n 
+0001560358 00000 n 
+0001560528 00000 n 
+0001560696 00000 n 
+0001560861 00000 n 
+0001561004 00000 n 
+0001561147 00000 n 
+0001561287 00000 n 
+0001561427 00000 n 
+0001561558 00000 n 
+0001561689 00000 n 
+0001561830 00000 n 
+0001561976 00000 n 
+0001562117 00000 n 
+0001562244 00000 n 
+0001562372 00000 n 
+0001562518 00000 n 
+0001562664 00000 n 
+0001562803 00000 n 
+0001562942 00000 n 
+0001563070 00000 n 
+0001563198 00000 n 
+0001563315 00000 n 
+0001563433 00000 n 
+0001563567 00000 n 
+0001563702 00000 n 
+0001563834 00000 n 
+0001563967 00000 n 
+0001564238 00000 n 
+0001564509 00000 n 
+0001564587 00000 n 
+0001564764 00000 n 
+0001564956 00000 n 
+0001565221 00000 n 
+0001565385 00000 n 
+0001565646 00000 n 
+0001565816 00000 n 
+0001565990 00000 n 
+0001566275 00000 n 
+0001566473 00000 n 
+0001566669 00000 n 
+0001566837 00000 n 
+0001567039 00000 n 
+0001567305 00000 n 
+0001567499 00000 n 
+0001567743 00000 n 
+0001567987 00000 n 
+0001568267 00000 n 
+0001568467 00000 n 
+0001568728 00000 n 
+0001568993 00000 n 
+0001569234 00000 n 
+0001569473 00000 n 
+0001569676 00000 n 
+0001569835 00000 n 
+0001570109 00000 n 
+0001570280 00000 n 
+0001570477 00000 n 
+0001570726 00000 n 
+0001571019 00000 n 
+0001571260 00000 n 
+0001571447 00000 n 
+0001571746 00000 n 
+0001571929 00000 n 
+0001572118 00000 n 
+0001572359 00000 n 
+0001572578 00000 n 
+0001572767 00000 n 
+0001573020 00000 n 
+0001573222 00000 n 
+0001573447 00000 n 
+0001573628 00000 n 
+0001573869 00000 n 
+0001574094 00000 n 
+0001574303 00000 n 
+0001574500 00000 n 
+0001574735 00000 n 
+0001575041 00000 n 
+0001575224 00000 n 
+0001575433 00000 n 
+0001575666 00000 n 
+0001575817 00000 n 
+0001576083 00000 n 
+0001576266 00000 n 
+0001576459 00000 n 
+0001576614 00000 n 
+0001576876 00000 n 
+0001577059 00000 n 
+0001577252 00000 n 
+0001577411 00000 n 
+0001577689 00000 n 
+0001577880 00000 n 
+0001578057 00000 n 
+0001578284 00000 n 
+0001578542 00000 n 
+0001578777 00000 n 
+0001578982 00000 n 
+0001579199 00000 n 
+0001579480 00000 n 
+0001579673 00000 n 
+0001580006 00000 n 
+0001580329 00000 n 
+0001580631 00000 n 
+0001580874 00000 n 
+0001581095 00000 n 
+0001581302 00000 n 
+0001581536 00000 n 
+0001581739 00000 n 
+0001581914 00000 n 
+0001582154 00000 n 
+0001582317 00000 n 
+0001582562 00000 n 
+0001582777 00000 n 
+0001584132 00000 n 
+0001594194 00000 n 
+0001594410 00000 n 
+0001595773 00000 n 
+0001596819 00000 n 
+0001605143 00000 n 
+0001605364 00000 n 
+0001606727 00000 n 
+0001607799 00000 n 
+0001609252 00000 n 
+0001609461 00000 n 
+0001609781 00000 n 
+0001610697 00000 n 
+0001616793 00000 n 
+0001617007 00000 n 
+0001618370 00000 n 
+0001619415 00000 n 
+0001621397 00000 n 
+0001621611 00000 n 
+0001621942 00000 n 
+0001623080 00000 n 
+0001624342 00000 n 
+0001624558 00000 n 
+0001624862 00000 n 
+0001625999 00000 n 
+0001628788 00000 n 
+0001629014 00000 n 
+0001630377 00000 n 
 trailer
 << /Size 777
 /Root 2 0 R
 /Info 1 0 R
 >>
 startxref
-1631507
+1631497
 %%EOF

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/1.17.0/migration-notes/migration-notes.html
----------------------------------------------------------------------
diff --git a/content/versions/1.17.0/migration-notes/migration-notes.html b/content/versions/1.17.0/migration-notes/migration-notes.html
index c8277c9..6bff5ee 100644
--- a/content/versions/1.17.0/migration-notes/migration-notes.html
+++ b/content/versions/1.17.0/migration-notes/migration-notes.html
@@ -292,33 +292,55 @@ table.CodeRay td.code>pre{padding:0}
         </ul>
        </div> 
        <div class="sectionbody"> 
-        <div class="paragraph"> 
-         <p>TODO</p> 
-        </div> 
-        <div class="ulist"> 
-         <ul> 
-          <li> <p>parallelized introspection</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>specify <code>isis.reflector.introspector.parallelize</code></p> </li> 
-             <li> <p>is enabled by default</p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>lazy introspection</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>specify <code>isis.reflector.introspector.mode</code></p> </li> 
-             <li> <p>is set to <code>lazy_unless_production</code> by default, can switch to <code>lazy</code> or <code>full</code></p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>sidebar dialogs</p> 
-           <div class="ulist"> 
-            <ul> 
-             <li> <p>set <code>isis.viewer.wicket.dialogMode</code> to <code>modal</code> to retain previous behaviour</p> </li> 
-            </ul> 
-           </div> </li> 
-          <li> <p>new <code>MetaModelService#exportMetaModel(Config)</code></p> </li> 
-         </ul> 
+        <div class="sect2"> 
+         <h3 id="_sidebar_dialogs">Sidebar Dialogs</h3> 
+         <div class="paragraph"> 
+          <p>In this release sidebar dialogs vs modal dialogs is configured globally, and they are enabled by default.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>To revert to previous behaviour, set the configuration property:</p> 
+         </div> 
+         <div class="listingblock"> 
+          <div class="title">
+           isis.properties
+          </div> 
+          <div class="content"> 
+           <pre class="CodeRay highlight"><code data-lang="ini">isis.viewer.wicket.dialogMode=modal</code></pre> 
+          </div> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_metamodelservice">MetaModelService</h3> 
+         <div class="paragraph"> 
+          <p>To export the metamodel as XML, use <code>MetaModelService6#exportMetaModel(Config)</code>.</p> 
+         </div> 
+         <div class="paragraph"> 
+          <p>Why would you want to do this? The main reason is as a regression test when moving up to new versions of the framework; you can check that the metamodel built up by the next version is the same as the previous.</p> 
+         </div> 
+        </div> 
+        <div class="sect2"> 
+         <h3 id="_introspection">Introspection</h3> 
+         <div class="paragraph"> 
+          <p>A number of new configuration properties are available to control how introspection (the building of the framework’s internal metamodel) is performed:</p> 
+         </div> 
+         <div class="ulist"> 
+          <ul> 
+           <li> <p>parallelized introspection</p> 
+            <div class="ulist"> 
+             <ul> 
+              <li> <p>specify <code>isis.reflector.introspector.parallelize</code></p> </li> 
+              <li> <p>is enabled by default</p> </li> 
+             </ul> 
+            </div> </li> 
+           <li> <p>lazy introspection</p> 
+            <div class="ulist"> 
+             <ul> 
+              <li> <p>specify <code>isis.reflector.introspector.mode</code></p> </li> 
+              <li> <p>is set to <code>lazy_unless_production</code> by default, can switch to <code>lazy</code> or <code>full</code></p> </li> 
+             </ul> 
+            </div> </li> 
+          </ul> 
+         </div> 
         </div> 
        </div> 
       </div> 

http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/versions/1.17.0/release-notes/release-notes.html
----------------------------------------------------------------------
diff --git a/content/versions/1.17.0/release-notes/release-notes.html b/content/versions/1.17.0/release-notes/release-notes.html
index 220a887..7bf931f 100644
--- a/content/versions/1.17.0/release-notes/release-notes.html
+++ b/content/versions/1.17.0/release-notes/release-notes.html
@@ -310,20 +310,20 @@ table.CodeRay td.code>pre{padding:0}
           </tr> 
           <tr> 
            <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_release-notes_1.17.0">1.17.0</a></p></td> 
-           <td class="tableblock halign-left valign-top"><p class="tableblock">dd-mm-yyyy</p></td> 
+           <td class="tableblock halign-left valign-top"><p class="tableblock">06-01-2019</p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>TODO</p> 
+              <p>Sidebar dialogs, metamodel export</p> 
              </div>
             </div></td> 
-           <td class="tableblock halign-right valign-top"></td> 
-           <td class="tableblock halign-right valign-top"></td> 
-           <td class="tableblock halign-right valign-top"></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">4</p></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">17</p></td> 
+           <td class="tableblock halign-right valign-top"><p class="tableblock">9</p></td> 
            <td class="tableblock halign-left valign-top">
             <div>
              <div class="paragraph"> 
-              <p>TODO</p> 
+              <p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311171&amp;version=12342854">Release notes for 1.17.0</a></p> 
              </div>
             </div></td> 
           </tr> 


[8/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis-site/blob/3ebae155/content/elasticlunr/index.json
----------------------------------------------------------------------
diff --git a/content/elasticlunr/index.json b/content/elasticlunr/index.json
index 13c9860..ec7cdd9 100644
--- a/content/elasticlunr/index.json
+++ b/content/elasticlunr/index.json
@@ -1 +1 @@
-{"version":"0.9.5","fields":["title","body","description","url"],"ref":"id","documentStore":{"docs":{"372886":{"title":"Rows, full-width cols, and tabs","url":"guides/ugvw/ugvw.html#_rows_full_width_cols_and_tabs","body":"Rows, full-width cols, and tabs  The example layout consists of three rows: a row for the object/icon, a row containing a properties, and a row containing collections. In all three cases the row contains a single column spanning the full width of the page. For the property and collection rows, the column contains a tab group.  This corresponds to the following XML:  You will notice that one of the columns has an unreferencedActions attribute, while one of the tabGroups has a similar unreferencedCollections attribute. This topic is discussed in more detail below. ","description":" The example layout consists of three rows: a row for the object/icon, a row containing a properties, and a row containing collections. In all three cases the row contains a single column s
 panning the full width of the page. For the property and collection rows, the column contains a","id":372886},"2646929":{"title":"Apache Isis vs …​","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_apache-isis-vs","body":"Apache Isis vs …​  Many other frameworks promise rapid application development and provide automatically generated user interfaces, so how do they compare to Apache Isis? ","description":" Many other frameworks promise rapid application development and provide automatically generated user interfaces, so how do they compare to Apache Isis? ","id":2646929},"3836440":{"title":"Running","url":"guides/dg/dg.html#__dg_ide_intellij_running","body":"Running  Let’s see how to run both the app and the tests. ","description":" Let’s see how to run both the app and the tests. ","id":3836440},"11600575":{"title":"Using Contributions","url":"pages/tg/tg.html#_using_contributions","body":"Using Contributions ","description":"","id":11600575},"12196042":{"title":"Te
 rtiary Menu","url":"guides/ugvw/ugvw.html#_tertiary_menu","body":"Tertiary Menu  Domain services' actions can be associated with the tertiary menu using the same @DomainServiceLayout annotation, but be aware that the @DomainServiceLayout#name() attribute will be ignored (there is only one effective menu).  For example, the updateEpochDate(…​) and listAllSettings(…​) actions come from the following service:  Because the number of items on the tertiary menu is expected to be small and most will pertain to the current user, the viewer does not place dividers between actions from different services on the tertiary menu. ","description":" Domain services' actions can be associated with the tertiary menu using the same @DomainServiceLayout annotation, but be aware that the @DomainServiceLayout#name() attribute will be ignored (there is only one effective menu). ","id":12196042},"12649581":{"title":"Mark the version as released","url":"guides/cgcom/cgcom.html#_mark_the_version_as_r
 eleased","body":"Mark the version as released  In JIRA, go to the administration section for the Apache Isis project and update the version as being released.  In the Kanban view this will have the effect of marking all tickets as released (clearing the \"done\" column). ","description":" In JIRA, go to the administration section for the Apache Isis project and update the version as being released. ","id":12649581},"13573617":{"title":"hide…​()","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_hide","body":"hide…​()  The hide…​() supporting method is called for properties, collections and actions. It allows the property/collection to be completely hidden from view.  It’s comparatively rare for properties or collections to be imperatively hidden from view, but actions are sometimes hidden or shown visible (as opposed to being just disabled, ie greyed out).  The signature of the supporting method is simply:  Returning true will hide the property, collection or acti
 on, returning false leaves it visible.  For example, to hide an action:  Or, to hide a property: ","description":" The hide…​() supporting method is called for properties, collections and actions. It allows the property/collection to be completely hidden from view. ","id":13573617},"14290952":{"title":"Vetoing Visibility","url":"guides/htg.html#_ugbtb_hints-and-tips_vetoing-visibility","body":"Vetoing Visibility  eg if included an addon such as auditing or security.  solution is to write a domain event subscriber that vetoes the visibility  All the addons actions inherit from common base classes so this can be as broad-brush or fine-grained as required ","description":" eg if included an addon such as auditing or security. ","id":14290952},"17000573":{"title":"ObjectCreatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectCreatedEvent","body":"ObjectCreatedEvent  Subclass of AbstractLifecycleEvent, broadcast when an object is first instantiated using the 
 FactoryServuce's #instantiate(…​) method.  ObjectCreatedEvent.Default is the implementation that is used by default, but this can be overridden using @DomainObject#createdLifecycleEvent(). ","description":" Subclass of AbstractLifecycleEvent, broadcast when an object is first instantiated using the FactoryServuce's #instantiate(…​) method. ","id":17000573},"17618894":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_20","body":"New Feature ","description":"","id":17618894},"17724516":{"title":"Multi-select action parameters","url":"guides/ugfun/ugfun.html#_multi_select_action_parameters","body":"Multi-select action parameters  As well as scalar values, action parameters can also be collections. For this to be valid, a choices or autoComplete supporting method must be provided.  For example, suppose we want to \"tag\" or \"label\" an object: ","description":" As well as scalar values, action parameters can also be collections. For this to be valid, a
  choices or autoComplete supporting method must be provided. ","id":17724516},"18445041":{"title":"Verifying Releases","url":"downloads.html#_verifying_releases","body":"Verifying Releases ","description":"","id":18445041},"19254915":{"title":"API & Implementation","url":"guides/rgsvc/rgsvc.html#_api_implementation_7","body":"API & Implementation  The CommandContext request-scoped service defines the following very simple API:  This class (o.a.i.applib.services.CommandContext) is also the default implementation.  Under normal circumstances there shouldn’t be any need to replace this implementation with another. But if you do need to for some reason, then subclass and use @DomainServiceLayout#menuOrder() (as explained in the introduction to this guide).  The Command type referenced above is in fact an interface, defined as: ","description":" The CommandContext request-scoped service defines the following very simple API: ","id":19254915},"21190750":{"title":"Run the archetype","url
 ":"pages/tg/tg.html#_run_the_archetype","body":"Run the archetype ","description":"","id":21190750},"21212015":{"title":"Key features","url":"pages/powered-by/powered-by.html#_key_features","body":"Key features ","description":"","id":21212015},"21857601":{"title":"Other Guides","url":"guides/cgcom/cgcom.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are:  This guide provides guidance for Apache Isis' own committers. ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides. ","id":21857601},"22342496":{"title":"Deploy","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_deploy","body":"Deploy  Previously the release procedures used mvn release:prepare and mvn release:perform. These are however not compatible w
 ith ${revision} that we now use for CI/CD.  We therefore just use mvn deploy directly, activating the (inherited) apache-release profile that, amongst other things, brings in the gpg plugin for code signing.  To build and deploy and tag, we use:  using your own GPG passphrase, of course. ","description":" Previously the release procedures used mvn release:prepare and mvn release:perform. These are however not compatible with ${revision} that we now use for CI/CD. ","id":22342496},"23125949":{"title":"Editing","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_editing","body":"Editing ","description":"","id":23125949},"23524101":{"title":"Collections","url":"guides/ugvw/ugvw.html#_collections","body":"Collections  In the final row the collections are placed in tabs, simply one collection per tab. This corresponds to the following XML:  As with properties, actions can be associated with collections; this indicates that they should be rendered in the collection’s header. ","de
 scription":" In the final row the collections are placed in tabs, simply one collection per tab. This corresponds to the following XML: ","id":23524101},"26509816":{"title":"Commit changes","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_commit-changes","body":"Commit changes  Commit any changes from the preceding steps: ","description":" Commit any changes from the preceding steps: ","id":26509816},"27806498":{"title":"renderedAsDayBefore()","url":"guides/rgant/rgant.html#_rgant-ParameterLayout_renderedAsDayBefore","body":"renderedAsDayBefore()  The renderedAsDayBefore() attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for properties.  This behaviour might at first glance appear odd, but the rationale is to support the use case of a sequence of instances that represent adjacent intervals of t
 ime. In such cases there would typically be startDate and endDate properties, eg for all of Q2. Storing this as a half-closed interval — eg [1-Apr-2015, 1-July-2015) — can substantially simplify internal algorithms; the endDate of one interval will correspond to the startDate of the next.  However, from an end-user perspective the requirement may be to render the interval as a fully closed interval; eg the end date should be shown as 30-Jun-2015.  This attribute therefore bridges the gap; it presents the information in a way that makes sense to an end-user, but also stores the domain object in a way that is easy work with internally.  For example: ","description":" The renderedAsDayBefore() attribute applies only to date parameters whereby the date will be rendered as the day before the value actually held in the domain object. It is ignored for parameters of other types. This attribute is also supported for properties. ","id":27806498},"31312523":{"title":"Declarative style","u
 rl":"guides/htg.html#_declarative_style_3","body":"Declarative style  To render an object with a particular CSS, use @DomainObjectLayout#cssClass().  When the domain object is rendered on its own page, this CSS class will appear on a top-level <div>. Or, when the domain object is rendered as a row in a collection, then the CSS class will appear in a <div> wrapped by the <tr> of the row.  One possible use case would be to render the most important object types with a subtle background colour: Customers shown in light green, or Orders shown in a light pink, for example. ","description":" To render an object with a particular CSS, use @DomainObjectLayout#cssClass(). ","id":31312523},"31857620":{"title":"Interacting with the services","url":"guides/rgsvc/rgsvc.html#_interacting_with_the_services","body":"Interacting with the services  Typically domain objects will have little need to interact with the CommandContext and Command directly; what is more useful is that these are persisted i
 n support of the various use cases identified above.  One case however where a domain object might want to obtain the Command is to determine whether it has been invoked in the foreground, or in the background. It can do this using the getExecutedIn() method:  Although not often needed, this then allows the domain object to access the Command object through the CommandContext service. To expand the above example:  If run in the background, it might then notify the user (eg by email) if all work is done.  This leads us onto a related point, distinguishing the current effective user vs the originating \"real\" user. When running in the foreground, the current user can be obtained from the UserService, using:  If running in the background, however, then the current user will be the credentials of the background process, for example as run by a Quartz scheduler job.  The domain object can still obtain the original (\"effective\") user that caused the job to be created, using: ","descrip
 tion":" Typically domain objects will have little need to interact with the CommandContext and Command directly; what is more useful is that these are persisted in support of the various use cases identified above. ","id":31857620},"31966407":{"title":"Icons","url":"guides/htg.html#_icons","body":"Icons  Action icons can be specified in several ways.  One option is to use the @ActionLayout#cssClassFa(). For example:  Alternatively, you can specify these hints dynamically in the Xxx.layout.xml for the entity:  Rather than annotating every action with @ActionLayout#cssClassFa() and @ActionLayout#cssClass() you can instead specify the UI hint globally using regular expressions. Not only does this save a lot of boilerplate/editing, it helps ensure consistency across all actions.  To declare fa classes globally, use the configuration property isis.reflector.facet.cssClassFa.patterns (a comma separated list of key:value pairs).  For example:  Here:  For example, \"fa-plus\" is applied to 
 all action members called \"newXxx\" ","description":" Action icons can be specified in several ways. ","id":31966407},"32950878":{"title":"@MemberOrder","url":"guides/ugvw/ugvw.html#_code_memberorder_code","body":"@MemberOrder  The @MemberOrder annotation is used to specify the relative order of domain class properties, collections and actions.  The annotation defines two attributes, name() and sequence(). Their usage depends on the member type:  Within any of these, the sequence() then determines the relative ordering of the action with respect to other actions that have been similarly associated with properties/collections or left as \"free-standing\".  For example:  This defines three property (or member) groups, \"General\", \"Detail\" and \"Misc\"; \"General\" is the default if no name attribute is specified. Properties in the same member group are rendered together, as a fieldset.  In addition, actions can optionally be associated (rendered close to) either properties or acti
 ons. This is done by overloading the @MemberOrder's name() attribute, holding the value of the property or collection.  For example:  will associate the completed() and notYetCompleted() actions with the complete property, and will associate the add() and remove() actions with the dependencies collection.  The value of sequence() is a string. The simplest convention (as shown in the example above) is to use numbers — 1, 2, 3 — though it is a better idea to leave gaps in the numbers — 10, 20, 30 perhaps — such that a new member may be added without having to edit existing numbers.  Even better is to adopt the 'dewey-decimal' notation — 1, 1.1, 1.2, 2, 3, 5.1.1, 5.2.2, 5.2, 5.3 — which allows for an indefinite amount of future insertion. It also allows subclasses to insert their class members as required. ","description":" The @MemberOrder annotation is used to specify the relative order of domain class properties, collections and actions. ","id":32950878},"36734123":{"tit
 le":"Bug","url":"release-notes/release-notes.html#_bug_8","body":"Bug ","description":"","id":36734123},"39248326":{"title":"Runtime vs Noop implementation","url":"guides/rgfis/rgfis.html#_runtime_vs_noop_implementation","body":"Runtime vs Noop implementation  The framework provides two implementations:  The …​Default implementation takes priority over the …​Noop implementation. ","description":" The framework provides two implementations: ","id":39248326},"39290887":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_22","body":"Implementation  The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). ","description":" The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.container.DomainObjectContainerDefault). ","id":39290887},"44483327":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_17","body":"
 New Feature ","description":"","id":44483327},"45128293":{"title":"getConfigurationProperties()","url":"guides/rgcms/rgcms.html#__rgcms_classes_AppManifest-bootstrapping_api_getConfigurationProperties","body":"getConfigurationProperties()  This method allow arbitrary other configuration properties to be overridden. One common use case is in conjunction with the getFixtures() method, discussed above: ","description":" This method allow arbitrary other configuration properties to be overridden. One common use case is in conjunction with the getFixtures() method, discussed above: ","id":45128293},"45847666":{"title":"Recreate the archetype","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-the-helloworld-archetype_create-the-archetype","body":"Recreate the archetype  Make sure you are in the correct directory and environment variables are correct.  To recreate the helloworld archetype:  Then, run the script (which also builds the archetype once generated) and then swit
 ch to the archetype’s directory:  The script automatically commits its changes. If you wish use git log and git diff (or a tool such as SourceTree) to review changes made. ","description":" Make sure you are in the correct directory and environment variables are correct. ","id":45847666},"57327287":{"title":"cssClassFa()","url":"guides/rgant/rgant.html#_rgant-ViewModelLayout_cssClassFa","body":"cssClassFa()  The cssClassFa() attribute is used to specify the name of a Font Awesome icon name, to be rendered as the domain object’s icon.  These attribute can also be applied to domain objects to specify the object’s icon, and to actions to specify an icon for the action’s representation as a button or menu item.  If necessary the icon specified can be overridden by a particular object instance using the iconName() method.  For example:  There can be multiple \"fa-\" classes, eg to mirror or rotate the icon. There is no need to include the mandatory fa \"marker\" CSS class; it wil
 l be automatically added to the list. The fa- prefix can also be omitted from the class names; it will be prepended to each if required.  The related cssClassFaPosition() attribute is currently unused for domain objects; the icon is always rendered to the left. ","description":" The cssClassFa() attribute is used to specify the name of a Font Awesome icon name, to be rendered as the domain object’s icon. ","id":57327287},"62314289":{"title":"Menu Bars Layout","url":"guides/ugvw/ugvw.html#_ugvw_menubars-layout","body":"Menu Bars Layout ","description":"","id":62314289},"64932464":{"title":"Other Guides","url":"guides/ugtst/ugtst.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are: ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\"
  guides. ","id":64932464},"66604001":{"title":"@Programmatic","url":"guides/rgant/rgant.html#_rgant-Programmatic","body":"@Programmatic ","description":"","id":66604001},"68327083":{"title":"(Optional) Verifying binary artifacts","url":"guides/cgcom/cgcom.html#__cgcom_verifying-releases_binary-artifacts","body":"(Optional) Verifying binary artifacts  You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the HelloWorld archetype or the SimpleApp archetype and running the resultant app.  Configuring your local Maven install amounts to updating the ~/.m2/settings.xml file:  where the repository URL is as provided in the VOTE email. If there is more than one repository (as is sometimes the case if multiple components have been released), then repeat the <repository> section for each.  Once the vote has completed, the staging repositories will be removed and so you should deacti
 ve the profile (comment out the <activeProfile> element). If you forget to deactive the profile, there should be no adverse effects; Maven will just spend unnecessary cycles attempting to hit a non-existent repo. ","description":" You can verify the binary releases by configuring your local Maven install to point to the Maven staging repository (or repositories) and then using them, eg to run the HelloWorld archetype or the SimpleApp archetype and running the resultant app. ","id":68327083},"68441589":{"title":"License headers","url":"guides/cgcom/cgcom.html#__cgcom_cutting-a-release_releasing-core_license-headers","body":"License headers  The Apache Release Audit Tool RAT (from the Apache Creadur project) checks for missing license header files. The parent pom.xml of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions.  To run the RAT tool, use:  where rat.numUnapprovedLicenses property is set to a high figure, temporarily overriding the defaul
 t value of 0. This will allow the command to run over all submodules, rather than failing after the first one. The command writes out a target\\rat.txt for each submodule. missing license notes are indicated using the key !???. The for command collates all the errors.  Investigate and fix any reported violations, typically by either:  Once you’ve fixed all issues, confirm once more that apache-rat-plugin no longer reports any license violations, this time leaving the rat.numUnapprovedLicenses property to its default, 0: ","description":" The Apache Release Audit Tool RAT (from the Apache Creadur project) checks for missing license header files. The parent pom.xml of each releasable module specifies the RAT Maven plugin, with a number of custom exclusions. ","id":68441589},"73703450":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_29","body":"New Feature ","description":"","id":73703450},"74705826":{"title":"How to implement a spellchecker?","url":"guide
 s/htg.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How to implement a spellchecker?  From this thread on the Apache Isis users mailing list:  One way to implement is to use the event bus:  if if the change is made through an edit, you can use @Property#domainEvent().  You’ll need some way to know which fields should be spell checked. Two ways spring to mind:  And you’ll (obviously) also need some sort of spell checker implementation to call. ","description":" From this thread on the Apache Isis users mailing list: ","id":74705826},"75054401":{"title":"Supporting Method Prefixes","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes","body":"Supporting Method Prefixes  Supporting methods are those that are associated with properties, collections and actions, providing additional imperative business rule checking and behaviour to be performed when the user interacts with those object members.  This association is performed by name matching. Thus, a property
  called \"firstName\", derived from a method getFirstName() may have supporting methods hideFirstName(), disableFirstName() and validateFirstName(). Supporting methods are, therefore, each characterized by their own particular prefix.  The table below lists the method prefixes that are recognized as part of Apache Isis' default programming model. ","description":" Supporting methods are those that are associated with properties, collections and actions, providing additional imperative business rule checking and behaviour to be performed when the user interacts with those object members. ","id":75054401},"77231561":{"title":"Interaction Execution","url":"guides/rgcms/rgcms.html#_rgcms_schema-ixn","body":"Interaction Execution  The interaction (\"ixn\") schema defines the serialized form of an action invocation or a property edit. In fact, it actually defines a call-graph of such executions for those cases where the WrapperFactory is used to execute sub-actions/property edits.  Each e
 xecution identifies the target object, the member to invoke, and the arguments. It also captures metrics about the execution, and the result of the execution (eg return value of an action invocation). ","description":" The interaction (\"ixn\") schema defines the serialized form of an action invocation or a property edit. In fact, it actually defines a call-graph of such executions for those cases where the WrapperFactory is used to execute sub-actions/property edits. ","id":77231561},"78112488":{"title":"Screencast","url":"guides/ugvw/ugvw.html#_screencast","body":"Screencast  This screencast describes the feature. ","description":" This screencast describes the feature. ","id":78112488},"78624086":{"title":"Other Guides","url":"guides/ugsec/ugsec.html#_other_guides","body":"Other Guides  Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides.  The user guides available are:  The reference guides are:  The remaining guides are:
  ","description":" Apache Isis documentation is broken out into a number of user, reference and \"supporting procedures\" guides. ","id":78624086},"80534397":{"title":"ContentMappingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ContentMappingService","body":"ContentMappingService  The ContentMappingService supports the (default implementation of the) ContentNegotiationService enabling the RestfulObjects viewer to represent domain objects in some other format as specified by the HTTP Accept header.  See ContentNegotiationService for further discussion. ","description":" The ContentMappingService supports the (default implementation of the) ContentNegotiationService enabling the RestfulObjects viewer to represent domain objects in some other format as specified by the HTTP Accept header. ","id":80534397},"83803344":{"title":"MessageService","url":"guides/rgsvc/rgsvc.html#_rgsvc_application-layer-api_MessageService","body":"MessageService  The MessageService all
 ows domain objects to raise information, warning or error messages. These messages can either be simple strings, or can be translated. ","description":" The MessageService allows domain objects to raise information, warning or error messages. These messages can either be simple strings, or can be translated. ","id":83803344},"83933647":{"title":"Persistence Concerns","url":"guides/ugbtb/ugbtb.html#_persistence_concerns","body":"Persistence Concerns ","description":"","id":83933647},"85931482":{"title":"Task","url":"release-notes/release-notes.html#_task_24","body":"Task ","description":"","id":85931482},"87271564":{"title":"2004:","url":"pages/articles-and-presentations/articles-and-presentations.html#_2004","body":"2004: ","description":"","id":87271564},"90561824":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wicket_viewer_8","body":"Wicket Viewer ","description":"","id":90561824},"90935214":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wick
 et_viewer_10","body":"Wicket Viewer ","description":"","id":90935214},"91902412":{"title":"The issue in more detail","url":"guides/ugodn/ugodn.html#_the_issue_in_more_detail","body":"The issue in more detail  Consider these entities (yuml.me/b8681268):  In the course of a transaction, the Agreement entity is loaded into memory (not necessarily modified), and then new AgreementRoles are associated to it.  All these entities implement Comparable using ObjectContracts, and the implementation of AgreementRole's (simplified) is:  while Agreement's is implemented as:  and Party's is similarly implemented as:  DataNucleus’s persistence-by-reachability algorithm adds the AgreementRole instances into a SortedSet, which causes AgreementRole#compareTo() to fire:  In other words, in figuring out whether AgreementRole requires the persistence-by-reachability algorithm to run, it causes the adjacent associated entity Party to also be retrieved. ","description":" Consider these entities (yuml.me
 /b8681268): ","id":91902412},"92467660":{"title":"API and Usage","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage","body":"API and Usage  There are two main parts to using fixture scripts: the FixtureScripts domain service class, and the FixtureScript view model class:  Let’s look at FixtureScripts domain service in more detail first. ","description":" There are two main parts to using fixture scripts: the FixtureScripts domain service class, and the FixtureScript view model class: ","id":92467660},"96583162":{"title":"Configure toolchains plugin","url":"guides/cgcom/cgcom.html#_configure_toolchains_plugin","body":"Configure toolchains plugin  Apache Isis releases are built using Java 7, enforced using the maven toolchains plugin. Ensure that Java 7 is installed and the toolchains plugin is configured, as described in the contributors' guide. ","description":" Apache Isis releases are built using Java 7, enforced using the maven toolchains plugin. Ensure that Ja
 va 7 is installed and the toolchains plugin is configured, as described in the contributors' guide. ","id":96583162},"99090360":{"title":"Running the App","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_simpleapp-archetype_running-the-app","body":"Running the App  The simpleapp archetype generates a single WAR file, configured to run both the Wicket viewer and the Restful Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection.  Once you’ve built the app, you can run the WAR in a variety of ways. ","description":" The simpleapp archetype generates a single WAR file, configured to run both the Wicket viewer and the Restful Objects viewer. The archetype also configures the DataNucleus/JDO Objectstore to use an in-memory HSQLDB connection. ","id":99090360},"100682258":{"title":"Update dependencies","url":"guides/cgcom/cgcom.html#_update_dependencies","body":"Update dependencies  With the release complete, now is a goo
 d time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues).  You will probably want to create a new JIRA ticket for these updates (or if minor then use the \"catch-all\" JIRA ticket raised earlier for the next release). ","description":" With the release complete, now is a good time to bump versions of dependencies (so that there is a full release cycle to identify any possible issues). ","id":100682258},"102347041":{"title":"Bug","url":"release-notes/release-notes.html#_bug_10","body":"Bug ","description":"","id":102347041},"104167755":{"title":"How to implement a spellchecker?","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-implement-a-spellchecker","body":"How to implement a spellchecker?  From this thread on the Apache Isis users mailing list:  One way to implement is to use the event bus:  if if the change is made through an edit, you can use @Property#domainEvent().  You’ll need some way to know which fields s
 hould be spell checked. Two ways spring to mind:  And you’ll (obviously) also need some sort of spell checker implementation to call. ","description":" From this thread on the Apache Isis users mailing list: ","id":104167755},"104756776":{"title":"BookmarkHolder","url":"guides/rgsvc/rgsvc.html#_code_bookmarkholder_code","body":"BookmarkHolder  The BookmarkHolder interface is intended to be implemented by domain objects that use a Bookmark to reference a (single) domain object; an example might be a class such as the audit entry, mentioned above. The interface is simply:  There are two services that will contribute to this interface:  Either of these can be suppressed, if required, using a vetoing subscriber. For example, to suppress the object property (so that only the lookup(…​) action is ever shown for implementations of BookmarkHolder, define:  A more sophisticated implementation could look inside the passed ev argument and selectively hide or not based on the contributee.
  ","description":" The BookmarkHolder interface is intended to be implemented by domain objects that use a Bookmark to reference a (single) domain object; an example might be a class such as the audit entry, mentioned above. The interface is simply: ","id":104756776},"106558909":{"title":"contributedAs()","url":"guides/rgant/rgant.html#_rgant-ActionLayout_contributedAs","body":"contributedAs()  For a domain service action that can be contributed, the contributedAs() attribute determines how it is contributed: as an action or as an association (ie a property or collection).  The distinction between property or collection is automatic: if the action returns a java.util.Collection (or subtype) then the action is contributed as a collection; otherwise it is contributed as a property.  For a domain service action to be contributed, the domain services must have a nature nature of either VIEW or VIEW_CONTRIBUTIONS_ONLY, and the action must have safe action semantics, and takes a single ar
 gument, namely the contributee domain object.  For example:  It’s also possible to use the attribute to suppress the action completely:  In such cases, though, it would probably make more sense to annotate the action as either hidden or indeed @Programmatic. ","description":" For a domain service action that can be contributed, the contributedAs() attribute determines how it is contributed: as an action or as an association (ie a property or collection). ","id":106558909},"106606865":{"title":"Using the Wicket Viewer","url":"guides/rgcfg/rgcfg.html#_using_the_wicket_viewer","body":"Using the Wicket Viewer  Most of the you’re likely to run Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to Wicket’s \"configuration\" concept:  Wicket’s mechanism for specifying the \"configuration\" is to use a context parameter in web.xml; Apache Isis automatically infers its own deployment type from this. In other words: ","description":" Most o
 f the you’re likely to run Apache Isis using the Wicket viewer. In this case Apache Isis' \"deployment type\" concept maps to Wicket’s \"configuration\" concept: ","id":106606865},"108815435":{"title":"unchanging()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_unchanging","body":"unchanging()  The unchanging() attribute is used to indicate that the value held by the property never changes over time, even when other properties of the object do change.  Setting this attribute to true is used as a hint to the viewer to not redraw the property after an AJAX update of some other property/ies of the object have changed. This is primarily for performance, eg can improve the user experience when rendering PDFs/blobs.  Note that for this to work, the viewer will also ensure that none of the property’s parent component (such as a tab group panel) are re-rendered.  For example: ","description":" The unchanging() attribute is used to indicate that the value held by the property ne
 ver changes over time, even when other properties of the object do change. ","id":108815435},"109833874":{"title":"Persistable","url":"guides/rgcms/rgcms.html#_rgcms_classes_mixins_Persistable","body":"Persistable  All domain entities automatically implement the DataNucleus Persistable role interface as a result of the enhancer process (the fully qualified class name is org.datanucleus.enhancement.Persistable). So as a developer you do not need to write any code to obtain the mixins that contribute to this interface.  These mixin properties/actions are all associated with the \"Metadata\" fieldset. A number of other mixins also contribute properties or actions to the \"Metadata\" fieldset. ","description":" All domain entities automatically implement the DataNucleus Persistable role interface as a result of the enhancer process (the fully qualified class name is org.datanucleus.enhancement.Persistable). So as a developer you do not need to write any code to obtain the mixins that co
 ntribute to this interface. ","id":109833874},"112375674":{"title":"Auditing","url":"migration-notes/migration-notes.html#_auditing","body":"Auditing  The AuditingService SPI service has been deprecated, instead replaced by the AuditerService.  There can be more than one implementation of this new SPI, and a framework-provided implementation (AuditerServiceLogging) will log to a file. The (non-ASF) Incode Platform's audit module also implements the new SPI. ","description":" The AuditingService SPI service has been deprecated, instead replaced by the AuditerService. ","id":112375674},"113098816":{"title":"DataNucleus Object Store","url":"guides/htg.html#_datanucleus_object_store","body":"DataNucleus Object Store ","description":"","id":113098816},"114685873":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_19","body":"Usage  To indicate that an action invocation should be published, annotate it with the @Action#publishing() annotation.  To indicate that an property edit should
  be published, annotate it with the @Property#publishing() annotation.  To indicate that a changed object should be published is to annotate it with the @DomainObject#publishing() annotation. ","description":" To indicate that an action invocation should be published, annotate it with the @Action#publishing() annotation. ","id":114685873},"115229271":{"title":"Domain Entities","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-entities","body":"Domain Entities  Entities are persistent domain objects, with their persistence handled by JDO/DataNucleus. As such, they are mapped to a persistent object store, typically an RDBMS, with DataNucleus taking care of both lazy loading and also the persisting of modified (\"dirty\") objects.  Domain entities are generally decorated with both DataNucleus and Apache Isis annotations. Let’s look at some of the most commonly-used annotations.  To start with, entities are flagged as being \"persistence capable\", indicating how JDO/Data
 Nucleus should manage their identity:  All domain entities will have some sort of mandatory key properties. The example below is a very simple case, where the entity is identified by a name property:  It’s also common for domain entities to have queries annotated on them. These are used by repository domain services to query for instances of the entity:  DataNucleus provides several APIs for defining queries, including entirely programmatic and type-safe APIs; but JDOQL is very similar to SQL and so easily learnt.  The corresponding repository method for the above query is: ","description":" Entities are persistent domain objects, with their persistence handled by JDO/DataNucleus. As such, they are mapped to a persistent object store, typically an RDBMS, with DataNucleus taking care of both lazy loading and also the persisting of modified (\"dirty\") objects. ","id":115229271},"115955772":{"title":"domainClassDto","url":"guides/rgcms/rgcms.html#__rgcms_schema-mml_domainClassDto","
 body":"domainClassDto  The domainClassDto element describes the behaviour and structure of a single domain class within the metamodel. ","description":" The domainClassDto element describes the behaviour and structure of a single domain class within the metamodel. ","id":115955772},"117553409":{"title":"Object Icon","url":"guides/ugfun/ugfun.html#_object_icon","body":"Object Icon  The icon is often the same for all instances of a particular class, and is picked up by convention.  It’s is also possible for an individual instance to return a custom icon, typically so that some significant state of that domain object is represented. For example, a custom icon could be used to represent a shipped order, say, or an overdue library loan. ","description":" The icon is often the same for all instances of a particular class, and is picked up by convention. ","id":117553409},"121574190":{"title":"Related Services","url":"guides/rgsvc/rgsvc.html#_related_services_18","body":"Related Services
   The ActionInteractionContext service allows bulk actions to co-ordinate with each other.  The QueryResultsCache is useful for caching the results of expensive method calls. ","description":" The ActionInteractionContext service allows bulk actions to co-ordinate with each other. ","id":121574190},"121879267":{"title":"Wicket Viewer","url":"release-notes/release-notes.html#_wicket_viewer_2","body":"Wicket Viewer ","description":"","id":121879267},"122762699":{"title":"Contributee","url":"guides/rgcms/rgcms.html#_rgcms_classes_contributee","body":"Contributee  The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces. ","description":" The interfaces listed in this chapter act as contributees; they allow domain services to contribute actions/properties/collections to any domain objects that implement these interfaces. ","id":122762699},"125299345":{"title":"
 Example","url":"guides/rgant/rgant.html#_example_2","body":"Example  This example is taken from the (non-ASF) Isis addons' todoapp: ","description":" This example is taken from the (non-ASF) Isis addons' todoapp: ","id":125299345},"125961908":{"title":"Do it!","url":"pages/tg/tg.html#_do_it","body":"Do it! ","description":"","id":125961908},"134804772":{"title":"How to handle void/null results","url":"guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_how-to-handle-void-and-null-results","body":"How to handle void/null results  From this thread on the Apache Isis users mailing list:  One way to implement this idea is to provide a custom implementation of the RoutingService SPI domain service. The default implementation will either return the current object (if not null), else the home page (as defined by @HomePage) if one exists.  The following custom implementation refines this to use the breadcrumbs (available in the Wicket viewer) to return the first non-deleted domain object found in
  the list of breadcrumbs:  Note that the above implementation uses Java 8, so if you are using Java 7 then you’ll need to backport accordingly. ","description":" From this thread on the Apache Isis users mailing list: ","id":134804772},"144529895":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_44","body":"Improvement ","description":"","id":144529895},"148135206":{"title":"Layout Metadata Reader (deprecated)","url":"guides/ugbtb/ugbtb.html#_ugbtb_programming-model_layout-metadata-reader","body":"Layout Metadata Reader (deprecated)  The metadata for domain objects is obtained both annotations and files. There is also deprecated support for reading layouts from .layout.json files. This service provides an SPI (and default implementation) for reading layouts defined in this fashion. ","description":" The metadata for domain objects is obtained both annotations and files. There is also deprecated support for reading layouts from .layout.json files. This se
 rvice provides an SPI (and default implementation) for reading layouts defined in this fashion. ","id":148135206},"153666205":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_17","body":"Implementation  The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.title.TitleServiceDefault). ","description":" The core framework provides a default implementation of this service (o.a.i.core.metamodel.services.title.TitleServiceDefault). ","id":153666205},"155655500":{"title":"@PrimaryKey (javax.jdo)","url":"guides/rgant/rgant.html#_rgant-PrimaryKey","body":"@PrimaryKey (javax.jdo) ","description":"","id":155655500},"158033412":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_27","body":"SPI  The SPI defined by the service is: ","description":" The SPI defined by the service is: ","id":158033412},"158069558":{"title":"Usability: Defaults","url":"pages/tg/tg.html#_usability_defaults","body":"Usability: Defaults ","descripti
 on":"","id":158069558},"158897592":{"title":"Refactoring","url":"guides/dg/dg.html#__dg_ide_intellij_hints-and-tips_refactoring","body":"Refactoring  Loads of good stuff on the Refactor menu; most used are:  If you can’t remember all those shortcuts, just use ctrl-shift-alt-T (might want to rebind that to something else!) and get a context-sensitive list of refactorings available for the currently selected object ","description":" Loads of good stuff on the Refactor menu; most used are: ","id":158897592},"159072030":{"title":"(non-ASF) Incode Platform","url":"migration-notes/migration-notes.html#_migration-notes_1.14.0-to-1.15.0_incode-platform","body":"(non-ASF) Incode Platform  The various (non-ASF) Isis Addons and Incode Catalog have also been combined into a single \"Incode Platform\".  While each module can still be consumed individually, the new platform versions consistently (a change in any one module will result in a re-release of all). This should make these modules easi
 er to consume, and easier to maintain/develop.  All the modules remain open source, still licensed under the ASF v2.0 license.  As of this release, none of the groupIds or artifactIds have changed. They will be rationalized/made consistent in a future release; most probably to coincide with v2.0.0 of the framework. ","description":" The various (non-ASF) Isis Addons and Incode Catalog have also been combined into a single \"Incode Platform\". ","id":159072030},"160872749":{"title":"Related Services","url":"guides/rgfis/rgfis.html#_related_services","body":"Related Services  The default implementation of ContentNegotiationService delegates to ContentMappingService (if present) to convert domain entities into a stable form (eg DTO).  The ContentNegotiationService is itself called by the (default implementation of) RepresentationService. ","description":" The default implementation of ContentNegotiationService delegates to ContentMappingService (if present) to convert domain entities i
 nto a stable form (eg DTO). ","id":160872749},"163456888":{"title":"Dependency upgrade","url":"release-notes/release-notes.html#_dependency_upgrade_9","body":"Dependency upgrade ","description":"","id":163456888},"163915714":{"title":"web.xml","url":"migration-notes/migration-notes.html#_web_xml","body":"web.xml  In the web.xml, the \"isis.viewers\" context-param is now ignored. Instead the viewer_wicket.properties and viewer_restfulobjects.properties will both be loaded if present (but neither need be present). ","description":" In the web.xml, the \"isis.viewers\" context-param is now ignored. Instead the viewer_wicket.properties and viewer_restfulobjects.properties will both be loaded if present (but neither need be present). ","id":163915714},"165602306":{"title":"GridLoaderService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_GridLoaderService","body":"GridLoaderService  The GridLoaderService provides the ability to load the XML layout (grid) for a domain class.
  ","description":" The GridLoaderService provides the ability to load the XML layout (grid) for a domain class. ","id":165602306},"165750333":{"title":"loaded()","url":"guides/rgcms/rgcms.html#_rgcms_methods_lifecycle_loaded","body":"loaded()  The loaded() lifecycle callback method is called when a (persistent) object has just been loaded from the object store. ","description":" The loaded() lifecycle callback method is called when a (persistent) object has just been loaded from the object store. ","id":165750333},"166045728":{"title":"Sanity Check","url":"guides/cgcom/cgcom.html#_sanity_check_2","body":"Sanity Check  Ensure that the framework builds ok using the same command that your CI server is set up to execute (see section above). ","description":" Ensure that the framework builds ok using the same command that your CI server is set up to execute (see section above). ","id":166045728},"166899251":{"title":"Installing and Setting up","url":"guides/dg/dg.html#__dg_ide_intellij_i
 nstalling","body":"Installing and Setting up  This section covers installation and setup. These notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but are believed to be compatible with more recent versions/other editions of the IDE. ","description":" This section covers installation and setup. These notes/screenshots were prepared using IntelliJ Community Edition 14.1.x, but are believed to be compatible with more recent versions/other editions of the IDE. ","id":166899251},"167039338":{"title":"Task","url":"release-notes/release-notes.html#_task_14","body":"Task ","description":"","id":167039338},"174738887":{"title":"Related functionality","url":"guides/ugvw/ugvw.html#_related_functionality_2","body":"Related functionality  The Recent Pages also lists recently visited pages, selected from a drop-down. ","description":" The Recent Pages also lists recently visited pages, selected from a drop-down. ","id":174738887},"175028546":{"title":"Implementation","url":
 "guides/rgsvc/rgsvc.html#_implementation_5","body":"Implementation  The framework provides a default implementation of this service, namely GridServiceDefault. ","description":" The framework provides a default implementation of this service, namely GridServiceDefault. ","id":175028546},"175197970":{"title":"Performance tuning","url":"pages/tg/tg.html#_performance_tuning","body":"Performance tuning ","description":"","id":175197970},"175636232":{"title":"RepositoryService","url":"guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_RepositoryService","body":"RepositoryService  The RepositoryService collects together methods for creating, persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the JDO/DataNucleus objectstore.  You can use it during prototyping to write naive queries (find all rows, then filter using the Guava Predicate API, or you can use it to call JDO named queries using JDOQL.  As an alternative, you could also u
 se JDO typesafe queries through the IsisJdoSupport service. ","description":" The RepositoryService collects together methods for creating, persisting and searching for entities from the underlying persistence store. It acts as an abstraction over the JDO/DataNucleus objectstore. ","id":175636232},"176767338":{"title":"Command and Events","url":"guides/rgsvc/rgsvc.html#__rgsvc_intro_commands-and-events","body":"Command and Events  A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these. These services capture information which can then be used for various purposes, most notably for auditing or for publishing events, or for deferring execution such that the execution be performed in the background at some later date.  The diagram below shows how these services fit together. The outline boxes are services while the coloured boxes represent data structures - defined in 
 the applib and therefore accessible to domain applications - which hold various information about the executions.  To explain:  Implementations of CommandService can use the Command#getMemento() method to obtain a XML equivalent of that Command, reified using the cmd.xsd schema. This can be converted back into a CommandDto using the CommandDtoUtils utility class (part of the applib).  Similarly, implementations of PublisherService can use the InteractionDtoUtils utility class to obtain a InteractionDto representing the interaction, either just for a single execution or for the entire call-graph. This can be converted into XML in a similar fashion.  Likewise, the PublishedObjects class passed to the PublisherService at the end of the interaction provides the PublishedObjects#getDto() method which returns a ChangesDto instance. This can be converted into XML using the ChangesDtoUtils utility class.  One final point: multiple PublisherService implementations are supported because diffe
 rent implementations may have different responsibilities. For example, the (non-ASF) Incode Platform's publishmq module is responsible for publishing messages onto an ActiveMQ event bus, for inter-system communication. However, the SPI can also be used for profiling; each execution within the call-graph contains metrics of the number of objects loaded or modified as a result of that execution, and thus could be used for application profiling. The framework provides a default PublisherServiceLogging implementation that logs this using SLF4J. ","description":" A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these. These services capture information which can then be used for various purposes, most notably for auditing or for publishing events","id":176767338},"177970240":{"title":"InteractionContext","url":"guides/rgsvc/rgsvc.html#_code_interactioncontext_code","body
 ":"InteractionContext  The public API of the InteractionContext domain service itself consists of simply:  This class is concrete (that is, it is also the implementation). ","description":" The public API of the InteractionContext domain service itself consists of simply: ","id":177970240},"178125062":{"title":"domainEvent()","url":"guides/rgant/rgant.html#_rgant-Action_domainEvent","body":"domainEvent()  Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s actions, the events that are fired are:  Subscribers subscribe through the EventBusService using either Guava or Axon Framework annotations and can influence each of these phases.  By default the event raised is ActionDomainEvent.Default. For example:  The domainEvent() attribute allows a custom subclass to be emitted allowing more precise subscriptions (to those s
 ubclasses) to be defined instead. This attribute is also supported for collections and properties.  For example:  The benefit is that subscribers can be more targeted as to the events that they subscribe to. ","description":" Whenever a domain object (or list of domain objects) is to be rendered, the framework fires off multiple domain events for every property, collection and action of the domain object. In the cases of the domain object’s actions, the events that are fired are: ","id":178125062},"183226640":{"title":"updatedLifecycleEvent()","url":"guides/rgant/rgant.html#_rgant-DomainObject_updatedLifecycleEvent","body":"updatedLifecycleEvent()  Whenever a (persistent) domain object has been modified and has been updated in the database, an \"updated\" lifecycle event is fired.  Subscribers subscribe through the EventBusService and can use the event to obtain a reference to the domain object.  By default the event raised is ObjectUpdatedEvent.Default. For example:  The purpose 
 of the updatedLifecycleEvent() attribute is to allows a custom subclass to be emitted instead. A similar attribute is available for other lifecycle events.  For example:  The benefit is that subscribers can be more targeted as to the events that they subscribe to. ","description":" Whenever a (persistent) domain object has been modified and has been updated in the database, an \"updated\" lifecycle event is fired. ","id":183226640},"188123644":{"title":"2013","url":"pages/articles-and-presentations/articles-and-presentations.html#_2013","body":"2013 ","description":"","id":188123644},"189180810":{"title":"HoldsUpdatedAt","url":"guides/rgcms/rgcms.html#_rgcms_classes_roles_HoldsUpdatedAt","body":"HoldsUpdatedAt  The HoldsUpdatedAt role interface allows the (framework-provided) TimestampService to update each object with the current timestamp whenever it is modified in a transaction.  The interface is defined as:  The current time is obtained from the ClockService.  Entities that impl
 ement this interface often also implement HoldsUpdatedBy role interface; as a convenience the Timestampable interface combines the two roles. ","description":" The HoldsUpdatedAt role interface allows the (framework-provided) TimestampService to update each object with the current timestamp whenever it is modified in a transaction. ","id":189180810},"191180113":{"title":"persistence.xml","url":"guides/ugodn/ugodn.html#_ugodn_configuring_persistence-xml","body":"persistence.xml  DataNucleus will for itself also and read the META-INF/persistence.xml. In theory it can hold mappings and even connection strings. However, with Apache Isis we tend to use annotations instead and externalize connection strings. so its definition is extremely simply, specifying just the name of the \"persistence unit\".  Here’s the one provided by the SimpleApp archetype:  Normally all one needs to do is to change the persistence-unit name.  See DataNucleus' documentation on persistence.xml to learn more. "
 ,"description":" DataNucleus will for itself also and read the META-INF/persistence.xml. In theory it can hold mappings and even connection strings. However, with Apache Isis we tend to use annotations instead and externalize connection strings. so its definition is extremely simply, specifying just the name of the \"persistence unit","id":191180113},"193219460":{"title":"API","url":"guides/rgsvc/rgsvc.html#_rgsvc_metadata-api_MetamodelService_api","body":"API  The API defined by the service is: ","description":" The API defined by the service is: ","id":193219460},"193237835":{"title":"Core","url":"release-notes/release-notes.html#_core_8","body":"Core ","description":"","id":193237835},"193497711":{"title":"UI Hints","url":"guides/ugfun/ugfun.html#_ugfun_ui-hints","body":"UI Hints ","description":"","id":193497711},"194608562":{"title":"SPI","url":"guides/rgsvc/rgsvc.html#_spi_19","body":"SPI  It is also possible to define use some other underlying event bus implementation, by imp
 lementing the EventBusImplementation SPI:  As is probably obvious, the EventBusService just delegates down to these method calls when its own similarly named methods are called.  If you do provide your own implementation of this SPI, be aware that your subscribers will need to use whatever convention is required (eg different annotations) such that the events are correctly routed through to your subscribers.  If you have written your own implementation of the EventBusServiceImplementation SPI, then specify instead its fully-qualified class name: ","description":" It is also possible to define use some other underlying event bus implementation, by implementing the EventBusImplementation SPI: ","id":194608562},"195374240":{"title":"Update the LDAP committee (if a PMC member)","url":"guides/cgcom/cgcom.html#_update_the_ldap_committee_if_a_pmc_member","body":"Update the LDAP committee (if a PMC member)  (Assuming that the new committer is a PMC member), also add them as to the PMC commi
 ttee. This takes two steps:  The new committer does not officially become a member of the PMC until the ASF records have been updated. ","description":" (Assuming that the new committer is a PMC member), also add them as to the PMC committee. This takes two steps: ","id":195374240},"195848147":{"title":"ICLA, obtain new account","url":"guides/cgcom/cgcom.html#_icla_obtain_new_account","body":"ICLA, obtain new account  If required (that is, if the committer is not already a committer for a different ASF project), then ask them to complete an ICLA. As a result of this, they should also get an @apache.org user name.  More info can be found in the ASF new committers guide. ","description":" If required (that is, if the committer is not already a committer for a different ASF project), then ask them to complete an ICLA. As a result of this, they should also get an @apache.org user name. ","id":195848147},"196560907":{"title":"XJC profile","url":"guides/rgmvn/rgmvn.html#__rgmvn_xsd_xsd-su
 bmodule_xjc-profile","body":"XJC profile  The xjc profile reads the XSD generated by the xsd goal, and from it generates Java DTOs. Note that this isn’t round-tripping: the original view model is only for use within the Isis app, whereas the DTO generated from the XSDs is for use in a standalone context, eg in a Java subscriber on an event bus.  The xjc profile is defined as:  The referenced catalog.xml file instructs the xjc plugin how to resolve referenced schema locations. Only a reference for the Apache Isis common schema is likely to be needed: ","description":" The xjc profile reads the XSD generated by the xsd goal, and from it generates Java DTOs. Note that this isn’t round-tripping: the original view model is only for use within the Isis app, whereas the DTO generated from the XSDs is for use in a standalone context","id":196560907},"198329644":{"title":"Strings (Length)","url":"guides/ugfun/ugfun.html#__ugfun_programming-model_properties_datatypes_strings","body":"Stri
 ngs (Length)  By default JDO/DataNucleus will map string properties to a VARCHAR(255). To limit the length, use the @Column(length=…​) annotation.  For example:  This is a good example of a case where Apache Isis infers domain semantics from the JDO annotation. ","description":" By default JDO/DataNucleus will map string properties to a VARCHAR(255). To limit the length, use the @Column(length=…​) annotation. ","id":198329644},"198382465":{"title":"Actions","url":"pages/tg/tg.html#_actions","body":"Actions ","description":"","id":198382465},"201216196":{"title":"GitLab","url":"guides/ugfun/ugfun.html#_gitlab","body":"GitLab  Create a git repository \"myapp\" in GitLab.  Using Settings > CI/CD, specify the following Secret Variables:  Finally, push a copy of the generated application to this repository using the instructions provided by GitLab.  This will kick off a pipeline that will build the image and push to DockerHub.  The tag name is based on a combination of the date, 
 the branch and the git shaId. ","description":" Create a git repository \"myapp\" in GitLab. ","id":201216196},"203208629":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_18","body":"New Feature ","description":"","id":203208629},"203740710":{"title":"RoutingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_RoutingService","body":"RoutingService  The RoutingService provides the ability to return (and therefore render) an alternative object from an action invocation.  There are two primary use cases:  Currently the routing service is used only by the Wicket viewer; it is ignored by the Restful Objects viewer. ","description":" The RoutingService provides the ability to return (and therefore render) an alternative object from an action invocation. ","id":203740710},"204452611":{"title":"Related services","url":"guides/rgsvc/rgsvc.html#_related_services_15","body":"Related services  The ConfigurationServiceMenu exposes the allConfiguratio
 nProperties action in the user interface. ","description":" The ConfigurationServiceMenu exposes the allConfigurationProperties action in the user interface. ","id":204452611},"207811701":{"title":"API","url":"guides/rgsvc/rgsvc.html#_api_2","body":"API  The API of TitleService is: ","description":" The API of TitleService is: ","id":207811701},"209853740":{"title":"To run","url":"guides/rgmvn/rgmvn.html#_to_run","body":"To run  The plugin is activated by default, so is run simply using:  This will run any tests, and then also - because the plugin is activated by the isis-validate property and bound to the test phase, will run the plugin’s validate goal.  If for any reason you want to disable the validation, use: ","description":" The plugin is activated by default, so is run simply using: ","id":209853740},"213642269":{"title":"Moving on","url":"guides/ugfun/ugfun.html#__ugfun_getting-started_helloworld-archetype_moving-on","body":"Moving on  When you are ready to start working o
 n your own app, we don’t recommend building on top of the helloworld app.  Instead, we suggest that you start with the simpleapp archetype instead. Although a little more complex, it provides more structure and tests, all of which will help you as your application grows. ","description":" When you are ready to start working on your own app, we don’t recommend building on top of the helloworld app. ","id":213642269},"216231183":{"title":"Raising a pull request","url":"guides/dg/dg.html#_raising_a_pull_request","body":"Raising a pull request  If you have your own fork, you can now simply push the changes you’ve made locally to your fork:  This will create a corresponding branch in the remote github repo. If you use gitk --all, you’ll also see a remotes/origin/ISIS-123-blobs branch.  Then, use github to raise a pull request. Pull requests sent to the Apache GitHub repositories will forward a pull request e-mail to the dev mailing list. You’ll probably want to sign up to the d
 ev mailing list first before issuing your first pull request (though that isn’t mandatory).  The process to raise the pull request, broadly speaking: ","description":" If you have your own fork, you can now simply push the changes you’ve made locally to your fork: ","id":216231183},"220685197":{"title":"AbstractSubscriber","url":"guides/rgcms/rgcms.html#_rgcms_classes_super_AbstractSubscriber","body":"AbstractSubscriber  This is a convenience superclass for creating subscriber domain services on the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to automatically register/unregister itself with the EventBusService.  It’s important that subscribers register before any domain services that might emit events on the EventBusService. For example, the (non-ASF) Incode Platform security module provides a domain service that automatically seeds certain domain entities; these will generate lifecycle events and so any subscribers must be registered before such seed ser
 vices. The easiest way to do this is to use the @DomainServiceLayout#menuOrder() attribute.  As a convenience, the AbstractSubscriber specifies this attribute. ","description":" This is a convenience superclass for creating subscriber domain services on the EventBusService. It uses @PostConstruct and @PreDestroy callbacks to automatically register/unregister itself with the EventBusService. ","id":220685197},"222371586":{"title":"Nullability","url":"guides/rgant/rgant.html#_rgant-Column_allowsNull","body":"Nullability  The allowsNull() attribute is used to specify if a property is mandatory or is optional.  For example:  Isis also provides @Property#optionality() attribute. If both are specified, Apache Isis will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.  You should also be aware that in the lack of either the @Column#allowsNull() or the @Property#optionality() attributes, that the JDO and Apache I
 sis defaults differ. Apache Isis rule is straight-forward: properties are assumed to be required. JDO on the other hand specifies that only primitive types are mandatory; everything else is assumed to be optional. Therefore a lack of either annotation can also trigger the fail-fast validation check.  In the vast majority of cases you should be fine just to add the @Column#allowsNull() attribute to the getter. But see the documentation for @Property#optionality() attribute for discussion on one or two minor edge cases. ","description":" The allowsNull() attribute is used to specify if a property is mandatory or is optional. ","id":222371586},"227377078":{"title":"Initialization","url":"guides/ugfun/ugfun.html#_ugfun_programming-model_domain-services_initialization","body":"Initialization  Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed).  An Apache Isis session is available when initia
 lization occurs (so services can interact with the object store, for example).  The framework will call any public method annotated with @PostConstruct with either no arguments of an argument of type Map<String,String>. In the latter case, the framework passes in the configuration (isis.properties and any other component-specific configuration files).  Shutdown is similar; the framework will call any method annotated with @PreDestroy. ","description":" Services can optionally declare lifecycle callbacks to initialize them (when the app is deployed) and to shut them down (when the app is undeployed). ","id":227377078},"228550183":{"title":"Policies","url":"guides/cgcom/cgcom.html#_cgcom_policies","body":"Policies ","description":"","id":228550183},"229025509":{"title":"Remove references to isis-viewer-wicket parent pom.","url":"migration-notes/migration-notes.html#_remove_references_to_code_isis_viewer_wicket_code_parent_pom","body":"Remove references to isis-viewer-wicket parent pom
 .  In earlier releases the Wicket viewer defined its own parent pom.xml for dependency management and its dependencies and to declare the various submodules that make up the viewer. This pom.xml has now been incorporated into the parent pom.xml for the Core framework.  Therefore, in the parent pom.xml of your own domain applications, remove: ","description":" In earlier releases the Wicket viewer defined its own parent pom.xml for dependency management and its dependencies and to declare the various submodules that make up the viewer. This pom.xml has now been incorporated into the parent pom.xml for the Core framework. ","id":229025509},"230599582":{"title":"AuditingServiceInternal","url":"guides/rgfis/rgfis.html#_rgfis_persistence-layer_AuditingServiceInternal","body":"AuditingServiceInternal  The (internal) AuditingServiceInternal domain service acts as an internal facade to any configured AuditingService and AuditerService services. It is responsible for obtaining the details of
  all changes to domain objects within an interaction, and then to call the configured AuditingService to actually create audit entries of those changes. ","description":" The (internal) AuditingServiceInternal domain service acts as an internal facade to any configured AuditingService and AuditerService services. It is responsible for obtaining the details of all changes to domain objects within an interaction, and then to call the configured AuditingService to actually create audit entries of those changes. ","id":230599582},"232471644":{"title":"Registering Subscribers","url":"guides/rgsvc/rgsvc.html#_registering_subscribers","body":"Registering Subscribers  The register() method should be called in the @PostConstruct lifecycle method. It is valid and probably the least confusing to readers to also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, unregistering is actually a no-op).  For example:  This works for both singleton (application-scoped) and also
  @RequestScoped domain services. ","description":" The register() method should be called in the @PostConstruct lifecycle method. It is valid and probably the least confusing to readers to also \"unregister\" in the @PreDestroy lifecycle method (though as noted above, unregistering is actually a no-op). ","id":232471644},"238546442":{"title":"rebuildMetamodel()","url":"guides/rgcms/rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel","body":"rebuildMetamodel()  The Object_rebuildMetamodel mixin provides the ability to discard the current internal metamodel data (an instance of ObjectSpecification) for the domain class of the rendered object, and recreate from code and other sources (most notably, layout XML data). It has the following signature: ","description":" The Object_rebuildMetamodel mixin provides the ability to discard the current internal metamodel data (an instance of ObjectSpecification) for the domain class of the rendered object, and recreate from code and other 
 sources (most notably, layout XML data). It has the following signature: ","id":238546442},"238801420":{"title":"REST API Mapping","url":"guides/rgsvc/rgsvc.html#_rest_api_mapping","body":"REST API Mapping  The /restful/health path must be specified as a \"passThru\" so that no authentication challenge is issued.  This is a comma separated list, so there may be other values also (for example /restful/swagger, as shown above). ","description":" The /restful/health path must be specified as a \"passThru\" so that no authentication challenge is issued. ","id":238801420},"238979657":{"title":"New Feature","url":"release-notes/release-notes.html#_new_feature_22","body":"New Feature ","description":"","id":238979657},"240026998":{"title":"Improvement","url":"release-notes/release-notes.html#_improvement_14","body":"Improvement ","description":"","id":240026998},"242030985":{"title":"1.4.0","url":"release-notes/release-notes.html#_release-notes_1.4.0","body":"1.4.0 ","description":"","id":
 242030985},"243439147":{"title":"hidden()","url":"guides/rgant/rgant.html#_rgant-Property_hidden","body":"hidden()  Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to actions and collections.  For example:  The acceptable values for the where parameter are:  For example, if a property is annotated with @Title, then normally this should be hidden from all tables. Annotating with @Property(where=Where.NOWHERE) overrides this. ","description":" Properties can be hidden at the domain-level, indicating that they are not visible to the end-user. This attribute can also be applied to actions and collections. ","id":243439147},"243876171":{"title":"Task","url":"release-notes/release-notes.html#_task_28","body":"Task ","description":"","id":243876171},"244520152":{"title":"SessionLoggingService","url":"guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_SessionLoggingService","body":"SessionLoggingServic
 e  The SessionLoggingService defines an SPI to keep track of (typically: to log) the current sessions that are using the application. ","description":" The SessionLoggingService defines an SPI to keep track of (typically: to log) the current sessions that are using the application. ","id":244520152},"246409050":{"title":"Using system properties","url":"guides/ugbtb/ugbtb.html#_using_system_properties","body":"Using system properties  The servlet context initializer will search for any system properties called isis.xxx and if present will use them as overrides.  Thus, an alternative option for a Docker image is to bootstrap the servlet container (Tomcat, Jetty) with appropriate system properties set up. For example, with Tomcat this can be done by writing into the conf/catalina.properties file (see for example this stackoverflow post).  The Docker’s ENTRYPOINT therefore just needs to parse the Docker container’s own command line arguments and use to create this file. ","descripti
 on":" The servlet context initializer will search for any system properties called isis.xxx and if present will use them as overrides. ","id":246409050},"255768608":{"title":"Multi-tenancy support","url":"pages/isis-in-pictures/isis-in-pictures.html#_multi_tenancy_support","body":"Multi-tenancy support  One significant feature of the (non-ASF) Incode Platform's security module is the ability to associate users and objects with a \"tenancy\". The todoapp uses this feature so that different users' list of todo items are kept separate from one another. A user with administrator is able to switch their own \"tenancy\" to the tenancy of some other user, in order to access the objects in that tenancy:  For more details, see the (non-ASF) Incode Platform's security module README. ","description":" One significant feature of the (non-ASF) Incode Platform's security module is the ability to associate users and objects with a \"tenancy\". The todoapp uses this feature so that different users'
  list of todo items are kept separate from one another. A user with administrator is able to switch","id":255768608},"257661017":{"title":"AppManifest (bootstrapping)","url":"guides/rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping","body":"AppManifest (bootstrapping)  This section describes how to implement the AppManifest interface to bootstrap both an Apache Isis web application, and also its integration tests. ","description":" This section describes how to implement the AppManifest interface to bootstrap both an Apache Isis web application, and also its integration tests. ","id":257661017},"259202548":{"title":"Run-as","url":"guides/htg.html#_ugsec_hints-and-tips_run-as","body":"Run-as  This hint shows how to temporarily change the current user as reported by Shiro. This can be useful to support \"Run As\", for example.  The heavy lifting is done in ShiroService:  This could be exposed in the UI using a simple RunAsService, for example:  Credits: adapted from this gist.
  ","description":" This hint shows how to temporarily change the current user as reported by Shiro. This can be useful to support \"Run As\", for example. ","id":259202548},"259358868":{"title":"Hints and Tips","url":"guides/ugodn/ugodn.html#_ugodn_hints-and-tips","body":"Hints and Tips ","description":"","id":259358868},"262898169":{"title":"ResourceCachingFilter","url":"guides/ugbtb/ugbtb.html#_code_resourcecachingfilter_code","body":"ResourceCachingFilter  The ResourceCachingFilter adds HTTP cache headers to specified resources, based on their pattern.  Its definition is:  Its mapping is: ","description":" The ResourceCachingFilter adds HTTP cache headers to specified resources, based on their pattern. ","id":262898169},"266250802":{"title":"Implementation","url":"guides/rgsvc/rgsvc.html#_implementation_2","body":"Implementation  There is no default implementation of this service.  The (non-ASF) Isis addons' kitchensink app provides an example implementation:  which is rendered a
 s: ","description":" There is no default implementation of this service. ","id":266250802},"267695496":{"title":"Building Apache Isis","url":"guides/dg/dg.html#_dg_building-isis","body":"Building Apache Isis ","description":"","id":267695496},"273843820":{"title":"Simulated UI (WrapperFactory)","url":"guides/ugtst/ugtst.html#_simulated_ui_code_wrapperfactory_code","body":"Simulated UI (WrapperFactory)  When we talk about integration tests/specs here, we mean tests that exercise the domain object logic, through to the actual database. But we also want the tests to exercise the app from the users’s perspective, which means including the user interface.  For most other frameworks that would require having to test the application in a very heavy weight/fragile fashion using a tool such as Selenium, driving a web browser to navigate . In this regard though, Apache Isis has a significant trick up its sleeve. Because Apache Isis implements the naked objects pattern, it means that the UI 
 is generated automatically from declared domain-objects, -views and -services. This therefore allows for other implementations of the UI.  The WrapperFactory domain service allows a test to wrap domain objects and thus to interact with said objects \"as if\" through the UI:  If the test invokes an action that is disabled, then the wrapper will throw an appropriate exception. If the action is ok to invoke, it delegates through.  What this means is that an Apache Isis application can be tested end-to-end without having to deploy it onto a webserver; the whole app can be tested while running in-memory. Although integration tests re (necessarily) slower than unit tests, they are not any harder to write (in fact, in some respects they are easier). ","description":" When we talk about integration tests/specs here, we mean tests that exercise the domain object logic, through to the actual database. But we also want the tests to exercise the app from the users’s perspective, which means i
 ncluding the user interface. ","id":273843820},"273985863":{"title":"addTo…​() (deprecated)","url":"guides/rgcms/rgcms.html#_rgcms_methods_prefixes_addTo","body":"addTo…​() (deprecated)  The addTo…​() supporting method is called whenever an object is added to a collection. Its purpose is to allow additional business logic to be performed.  For example:  See also removeFrom…​()` ","description":" The addTo…​() supporting method is called whenever an object is added to a collection. Its purpose is to allow additional business logic to be performed. ","id":273985863},"278859977":{"title":"promptStyle()","url":"guides/rgant/rgant.html#_rgant-PropertyLayout_promptStyle","body":"promptStyle()  The promptStyle() attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page).  If the attribute is not set, then the valu
 e of the configuration property isis.viewer.wicket.promptStyle is used. If this is itself not set, then an inline prompt is used.  For example:  Alternatively, the promptStyle() can be specified using file-based layouts. ","description":" The promptStyle() attribute is used to specify whether, when editing a domain object property, the new value for the property is prompted by way of a dialog box, or is prompted using an inline panel (replacing the property on the page). ","id":278859977},"278890330":{"title":"Build a domain app","url":"pages/tg/tg.html#_build_a_domain_app","body":"Build a domain app ","description":"","id":278890330},"278999912":{"title":"Integration API","url":"guides/rgsvc/rgsvc.html#_rgsvc_integration-api","body":"Integration API ","description":"","id":278999912},"280598039":{"title":"_repos.txt","url":"guides/dg/dg.html#_code_repos_txt_code","body":"_repos.txt  Create a file _repos.txt that catalogues the repositories, eg: ","description":" Create a file _repo
 s.txt that catalogues the repositories, eg: ","id":280598039},"282766365":{"title":"Object CSS Styling","url":"guides/ugfun/ugfun.html#_object_css_styling","body":"Object CSS Styling  It is also possible for an object to return a CSS class. In conjunction with customized CSS this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour. ","description":" It is also possible for an object to return a CSS class. In conjunction with customized CSS this can be used to apply arbitrary styling; for example each object could be rendered in a page with a different background colour. ","id":282766365},"285898371":{"title":"ObjectUpdatedEvent","url":"guides/rgcms/rgcms.html#_rgcms_classes_lifecycleevent_ObjectUpdatedEvent","body":"ObjectUpdatedEvent  Subclass of AbstractLifecycleEvent, broadcast when an object has just been updated in the database. This is done either explicitly when the current transaction is flushed using
  the RepositoryService's #flush(…​) method, else is done implicitly when the transaction commits at the end of the user request.  ObjectUpdatedEvent.Default is the implementation that is used by default, but this can be overridden using @DomainObject#updatedLifecycleEvent(). ","description":" Subclass of AbstractLifecycleEvent, broadcast when an object has just been updated in the database. This is done either explicitly when the current transaction is flushed using the RepositoryService's #flush(…​) method, else is done implicitly when the transaction commits at the end of the user request. ","id":285898371},"286850218":{"title":"Dependent choices for action parameters","url":"guides/ugfun/ugfun.html#_dependent_choices_for_action_parameters","body":"Dependent choices for action parameters  For action it is also possible (in a limited form) to define dependencies between parameters. Specifically, if one parameter is a drop-down choice, then other drop-down choices can be der
 ived from it.  A good example is a category/sub-category:  Note how the choices method for the 2nd parameter also accepts the first parameter. ","description":" For action it is also possible (in a limited form) to define dependencies between parameters. Specifically, if one parameter is a drop-down choice, then other drop-down choices can be derived from it. ","id":286850218},"286919998":{"title":"Install Project Lombok","url":"guides/dg/dg.html#__dg_ide_eclipse_configure-lombok","body":"Install Project Lombok  The SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this requires an installation step:  Then restart Eclipse. ","description":" The SimpleApp archetype uses Project Lombok annotations (@Getter and @Setter and so on) to reduce the boilerplate. For Eclipse IDE this requires an installation step: ","id":286919998},"287120012":{"title":"Actions","url":"guides/ugfun/ugfun.html#_actions_2","body":"Acti
 ons  Of course, the precondition business rules described above are only one type of business rule.  More generally, business rules are implemented in the form of the implementation of actions. Rather than have the end-user have to edit individual properties of numerous objects, an action can encode these rules and allow only safe transformations of the application from one consistent state to the next. ","description":" Of course, the precondition business rules described above are only one type of business rule. ","id":287120012},"288377989":{"title":"Philosophy and Architecture","url":"guides/ugfun/ugfun.html#_ugfun_core-concepts_philosophy","body":"Philosophy and Architecture  This section describes some of the core ideas and architectural patterns upon which Apache Isis builds. ","description":" This section describes some of the core ideas and architectural patterns upon which Apache Isis builds. ","id":288377989},"288392697":{"title":"User Experience","url":"guides/ugvw/ugvw.
 html#_user_experience_3","body":"User Experience  The copy URL dialog is typically obtained by clicking on the icon.  Alternatively, alt+] will also open the dialog. It can be closed with either OK or the Esc key. ","description":" The copy URL dialog is typically obtained by clicking on the icon. ","id":288392697},"291813215":{"title":"Raising events programmatically","url":"guides/rgant/rgant.html#_raising_events_programmatically","body":"Raising events programmatically  Normally events are only raised for interactions through the UI. However, events can be raised programmatically either by calling the EventBusService API directly, or by emulating the UI by wrapping the target object using the WrapperFactory domain service. ","description":" Normally events are only raised for interactions through the UI. However, events can be raised programmatically either by calling the EventBusService API directly, or by emulating the UI by wrapping the target object using the WrapperFactory d
 omain service. ","id":291813215},"292881794":{"title":"FixtureScript","url":"guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage_FixtureScript","body":"FixtureScript  A fixture script is ultimately just a block of code that can be executed, so it’s up to you how you implement it to set up the system. However, we strongly recommend that you use it to invoke actions on business objects, in essence to replay what a real-life user would have done. That way, the fixture script will remain valid even if the underlying implementation of the system changes in the future.  For example, here’s a fixture script called RecreateSimpleObjects. (This used to be part of the SimpleApp archetype, though the archetype now ships with a more sophisticated design, discussed below):  Because this script has exposed a \"number\" property, it’s possible to set this from within the UI. For example:  When this is executed, the framework will parse the text and attempt to reflectively set the co
 rresponding properties on the fixture result. So, in this case, when the fixture script is executed we actually get 6 objects created. ","description":" A fixture script is ultimately just a block of code that can be executed, so it’s up to you how you implement it to set up the system. However, we strongly recommend that you use it to invoke actions on business objects, in essence to replay what a real","id":292881794},"293860175":{"title":"Usage","url":"guides/rgsvc/rgsvc.html#_usage_10","body":"Usage  For example: ","description":" For example: ","id":293860175},"295225295":{"title":"updating

<TRUNCATED>

[9/9] isis-site git commit: ISIS-1899: fixes for migration and release notes for 1.17.0

Posted by da...@apache.org.
ISIS-1899: fixes for migration and release notes for 1.17.0


Project: http://git-wip-us.apache.org/repos/asf/isis-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis-site/commit/3ebae155
Tree: http://git-wip-us.apache.org/repos/asf/isis-site/tree/3ebae155
Diff: http://git-wip-us.apache.org/repos/asf/isis-site/diff/3ebae155

Branch: refs/heads/asf-site
Commit: 3ebae15528f2bfb27f8d7385dfb3f8948811cbe5
Parents: 1685fcc
Author: danhaywood <da...@haywood-associates.co.uk>
Authored: Sun Jan 6 17:52:05 2019 +0000
Committer: danhaywood <da...@haywood-associates.co.uk>
Committed: Sun Jan 6 17:52:05 2019 +0000

----------------------------------------------------------------------
 content/elasticlunr/index.json                  |    2 +-
 content/guides/cgcom/cgcom.html                 |    2 +-
 content/guides/cgcom/cgcom.pdf                  | 1034 +++++++++---------
 content/migration-notes/migration-notes.html    |   76 +-
 content/release-notes/release-notes.html        |   12 +-
 content/versions/1.17.0/elasticlunr/index.json  |    2 +-
 content/versions/1.17.0/guides/cgcom/cgcom.html |    2 +-
 content/versions/1.17.0/guides/cgcom/cgcom.pdf  | 1034 +++++++++---------
 .../1.17.0/migration-notes/migration-notes.html |   76 +-
 .../1.17.0/release-notes/release-notes.html     |   12 +-
 .../versions/SNAPSHOT/elasticlunr/index.json    |    2 +-
 content/versions/SNAPSHOT/guides/ad/ad.pdf      |    4 +-
 .../versions/SNAPSHOT/guides/cgcom/cgcom.html   |    2 +-
 .../versions/SNAPSHOT/guides/cgcom/cgcom.pdf    | 1034 +++++++++---------
 content/versions/SNAPSHOT/guides/dg/dg.pdf      |    4 +-
 content/versions/SNAPSHOT/guides/htg.pdf        |    4 +-
 .../versions/SNAPSHOT/guides/rgant/rgant.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/rgcfg/rgcfg.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/rgcms/rgcms.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/rgfis/rgfis.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/rgmvn/rgmvn.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/rgsvc/rgsvc.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/ugbtb/ugbtb.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/ugfun/ugfun.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/ugodn/ugodn.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/ugsec/ugsec.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/ugtst/ugtst.pdf    |    4 +-
 .../versions/SNAPSHOT/guides/ugvro/ugvro.pdf    |    4 +-
 content/versions/SNAPSHOT/guides/ugvw/ugvw.pdf  |    4 +-
 .../migration-notes/migration-notes.html        |   76 +-
 .../SNAPSHOT/release-notes/release-notes.html   |   12 +-
 content/versions/current/elasticlunr/index.json |    2 +-
 .../versions/current/guides/cgcom/cgcom.html    |    2 +-
 content/versions/current/guides/cgcom/cgcom.pdf | 1034 +++++++++---------
 .../migration-notes/migration-notes.html        |   76 +-
 .../current/release-notes/release-notes.html    |   12 +-
 36 files changed, 2328 insertions(+), 2240 deletions(-)
----------------------------------------------------------------------