fragments versus templates

dlm fragments versus user templates

from what i can tell, you basically want to set up two users, one for guests and the other for everyone else. the instructions below can serve as a minimalistic reference implementation.

  1. update portal.properties to specify meaningful user ids for the authenticated users (defaultTemplateUserName) and unauthenticated users (guest_user_name):
    org.jasig.portal.services.Authentication.defaultTemplateUserName=empty-usr
    org.jasig.portal.security.PersonFactory.guest_user_name=guest-usr
  2. update data.xml creating entries in up_user table. you will need to create an entry for each template user and each fragment owner:
    • dlm requires the fragmentTemplate user. this user template will serve as th starting point for all new layout owners.
    • next, create the two users that you referenced in the portal.properties file
    • finally, create any fragments that you plan to reference in dlm.xml. for simplicity, i created two fragments here:
      • one (frg-guest) that i will use for guests (since my guest-usr template will be empty), and it simply has the login screen on it.
      • one (frg-welcome) that i will use for for non-guests (since my empty-usr template will be empty), and it contains the bookmarks portlet.
        <table sinceMajor="2" sinceMinor="1">
         <name>UP_USER</name>
         <rows>
          <!-- dlm fragment template -->
          <row>
           <column><name>USER_ID</name><value>0</value></column>
           <column><name>USER_NAME</name><value>fragmentTemplate</value></column>
           <column><name>USER_DFLT_USR_ID</name><value>2</value></column>
           <column><name>USER_DFLT_LAY_ID</name><value>1</value></column>
           <column><name>NEXT_STRUCT_ID</name><value>9999</value></column>
          </row>
          <!-- guest-usr -->
          <row>
           <column><name>USER_ID</name><value>1</value></column>
           <column><name>USER_NAME</name><value>guest-usr</value></column>
           <column><name>USER_DFLT_USR_ID</name><value>NULL</value></column>
           <column><name>USER_DFLT_LAY_ID</name><value>1</value></column>
           <column><name>NEXT_STRUCT_ID</name><value>9999</value></column>
          </row>
          <!-- empty-usr -->
          <row>
           <column><name>USER_ID</name><value>2</value></column>
           <column><name>USER_NAME</name><value>empty-usr</value></column>
           <column><name>USER_DFLT_USR_ID</name><value>NULL</value></column>
           <column><name>USER_DFLT_LAY_ID</name><value>1</value></column>
           <column><name>NEXT_STRUCT_ID</name><value>9999</value></column>
          </row>
          <!-- guest-lo -->
          <row>
           <column><name>USER_ID</name><value>101</value></column>
           <column><name>USER_NAME</name><value>guest-lo</value></column>
           <column><name>USER_DFLT_USR_ID</name><value>2</value></column>
           <column><name>USER_DFLT_LAY_ID</name><value>1</value></column>
           <column><name>NEXT_STRUCT_ID</name><value>9999</value></column>
          </row>
          <!-- welcome-lo -->
          <row>
           <column><name>USER_ID</name><value>102</value></column>
           <column><name>USER_NAME</name><value>welcome-lo</value></column>
           <column><name>USER_DFLT_USR_ID</name><value>2</value></column>
           <column><name>USER_DFLT_LAY_ID</name><value>1</value></column>
           <column><name>NEXT_STRUCT_ID</name><value>9999</value></column>
          </row>
         </rows>
        </table>
        
  3. update data.xml creating entries in up_layout table. you will need to create one entry for each user that you created in the previous step. this table (up_user_layout) associates a layout with the user.
    <table sinceMajor="2" sinceMinor="1">
     <name>UP_USER_LAYOUT</name>
     <rows>
      <!-- dlm fragment template -->
      <row>
       <column><name>USER_ID</name><value>0</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>LAYOUT_TITLE</name><value>frg-template</value></column>
       <column><name>INIT_STRUCT_ID</name><value>1</value></column>
      </row>
      <!-- guest-usr template user layout -->
      <row>
       <column><name>USER_ID</name><value>1</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>LAYOUT_TITLE</name><value>tmp-guest</value></column>
       <column><name>INIT_STRUCT_ID</name><value>1</value></column>
      </row>
      <!-- empty-usr template user layout -->
      <row>
       <column><name>USER_ID</name><value>2</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>LAYOUT_TITLE</name><value>tmp-empty</value></column>
       <column><name>INIT_STRUCT_ID</name><value>1</value></column>
      </row>
      <!-- dlm guest-lo fragment owner layout -->
      <row>
       <column><name>USER_ID</name><value>101</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>LAYOUT_TITLE</name><value>frg-guest</value></column>
       <column><name>INIT_STRUCT_ID</name><value>1</value></column>
      </row>
      <!-- dlm welcome-lo fragment owner layout -->
      <row>
       <column><name>USER_ID</name><value>102</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>LAYOUT_TITLE</name><value>frg-welcome</value></column>
       <column><name>INIT_STRUCT_ID</name><value>1</value></column>
      </row>
     </rows>
    </table>
    
  4. update data.xml creating entries in up_layout_struct table. you will need to create a set of entries for each user/layout association that you created in the previous step. this table (up_layout_struct) defines the nodes that appear in each user layout. here i create empty layouts (root node only) for each template user:
    • one required by dlm fragmentTemplate
    • two defined by me tmp-guest (for guests) and tmp-empty (for everyone else)

      also, please note that dlm currently ignores header, footer, and hidden nodes that are specified in fragments; therefore, when your layout requires content in these areas, you must specify it in the template user definitions... not in the fragments.

      <table sinceMajor="2" sinceMinor="1">
       <name>UP_LAYOUT_STRUCT</name>
       <rows>
        <!-- frg-template -->
        <!--
           This user's layout is copied for the initial layout for all fragment owner
           accounts when logged in for the first time. This is akin to
           defaultTemplateUserName being demo for regular, non-fragment accounts.
            -->
        <row>
         <column><name>USER_ID</name><value>0</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>1</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>NAME</name><value>Root folder</value></column>
         <column><name>TYPE</name><value>root</value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- tmp-guest -->
        <!-- layout root node -->
        <row>
         <column><name>USER_ID</name><value>1</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>1</value></column>
         <column><name>NAME</name><value>Root folder</value></column>
         <column><name>TYPE</name><value>root</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- tmp-empty -->
        <!-- layout root node -->
        <row>
         <column><name>USER_ID</name><value>2</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>1</value></column>
         <column><name>NAME</name><value>Root folder</value></column>
         <column><name>TYPE</name><value>root</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- frg-guest -->
        <!-- layout root node -->
        <row>
         <column><name>USER_ID</name><value>101</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>1</value></column>
         <column><name>NAME</name><value>Root folder</value></column>
         <column><name>TYPE</name><value>root</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>21</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- header -->
        <row>
         <column><name>USER_ID</name><value>101</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>21</value></column>
         <column><name>NAME</name><value>Header folder</value></column>
         <column><name>TYPE</name><value>header</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>22</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>Y</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- tab -->
        <row>
         <column><name>USER_ID</name><value>101</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>22</value></column>
         <column><name>NAME</name><value>Login</value></column>
         <column><name>TYPE</name><value></value></column>
         <column><name>NEXT_STRUCT_ID</name><value>23</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>221</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>N</value></column>
        </row>
        <!-- tab::column1 -->
        <row>
         <column><name>USER_ID</name><value>101</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>221</value></column>
         <column><name>NAME</name><value>Column 1</value></column>
         <column><name>TYPE</name><value></value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>2211</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>N</value></column>
        </row>
        <!-- tab::column1::login -->
        <row>
         <column><name>USER_ID</name><value>101</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>2211</value></column>
         <column><name>NAME</name><value></value></column>
         <column><name>TYPE</name><value></value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value>99</value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- footer -->
        <row>
         <column><name>USER_ID</name><value>101</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>23</value></column>
         <column><name>NAME</name><value>Footer folder</value></column>
         <column><name>TYPE</name><value>footer</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>Y</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- frg-welcome -->
        <!-- layout root node -->
        <row>
         <column><name>USER_ID</name><value>102</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>1</value></column>
         <column><name>NAME</name><value>Root folder</value></column>
         <column><name>TYPE</name><value>root</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>21</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- header -->
        <row>
         <column><name>USER_ID</name><value>102</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>21</value></column>
         <column><name>NAME</name><value>Header folder</value></column>
         <column><name>TYPE</name><value>header</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>22</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>Y</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- tab -->
        <row>
         <column><name>USER_ID</name><value>102</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>22</value></column>
         <column><name>NAME</name><value>Welcome</value></column>
         <column><name>TYPE</name><value></value></column>
         <column><name>NEXT_STRUCT_ID</name><value>23</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>221</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>N</value></column>
        </row>
        <!-- tab::column1 -->
        <row>
         <column><name>USER_ID</name><value>102</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>221</value></column>
         <column><name>NAME</name><value>Column 1</value></column>
         <column><name>TYPE</name><value></value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>2211</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>N</value></column>
        </row>
        <!-- tab::column1::login -->
        <row>
         <column><name>USER_ID</name><value>102</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>2211</value></column>
         <column><name>NAME</name><value></value></column>
         <column><name>TYPE</name><value></value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value>102</value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>N</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
        <!-- footer -->
        <row>
         <column><name>USER_ID</name><value>102</value></column>
         <column><name>LAYOUT_ID</name><value>1</value></column>
         <column><name>STRUCT_ID</name><value>23</value></column>
         <column><name>NAME</name><value>Footer folder</value></column>
         <column><name>TYPE</name><value>footer</value></column>
         <column><name>NEXT_STRUCT_ID</name><value>NULL</value></column>
         <column><name>CHLD_STRUCT_ID</name><value>NULL</value></column>
         <column><name>EXTERNAL_ID</name><value></value></column>
         <column><name>CHAN_ID</name><value></value></column>
         <column><name>HIDDEN</name><value>N</value></column>
         <column><name>IMMUTABLE</name><value>Y</value></column>
         <column><name>UNREMOVABLE</name><value>Y</value></column>
        </row>
       </rows>
      </table>
      
  5. update data.xml creating entries in up_user_profile table. you will need to create a set of entries for each user template and fragment owner. this table (up_user_profiles) defines the association between the user, the layout, and the structure and theme stylesheets.
    <table sinceMajor="2" sinceMinor="1">
     <name>UP_USER_PROFILE</name>
     <rows>
      <!-- dlm fragmenttemplate layout profiles -->
      <row>
       <column><name>USER_ID</name><value>0</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>PROFILE_NAME</name><value>HTML browser profile</value></column>
       <column><name>DESCRIPTION</name><value>A sample profile for common web browsers</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>STRUCTURE_SS_ID</name><value>101</value></column>
       <column><name>THEME_SS_ID</name><value>101</value></column>
      </row>
      <!-- guest-usr layout profiles -->
      <row>
       <column><name>USER_ID</name><value>1</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>PROFILE_NAME</name><value>workstation</value></column>
       <column><name>DESCRIPTION</name><value>a profile for web browsers on workstations</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>STRUCTURE_SS_ID</name><value>101</value></column>
       <column><name>THEME_SS_ID</name><value>101</value></column>
      </row>
      <!-- empty-usr layout profiles -->
      <row>
       <column><name>USER_ID</name><value>2</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>PROFILE_NAME</name><value>workstation</value></column>
       <column><name>DESCRIPTION</name><value>a profile for web browsers on workstations</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>STRUCTURE_SS_ID</name><value>101</value></column>
       <column><name>THEME_SS_ID</name><value>101</value></column>
      </row>
      <!-- guest-lo layout profiles -->
      <row>
       <column><name>USER_ID</name><value>101</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>PROFILE_NAME</name><value>workstation</value></column>
       <column><name>DESCRIPTION</name><value>a profile for web browsers on workstations</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>STRUCTURE_SS_ID</name><value>101</value></column>
       <column><name>THEME_SS_ID</name><value>101</value></column>
      </row>
      <!-- welcome-lo layout profiles -->
      <row>
       <column><name>USER_ID</name><value>102</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>PROFILE_NAME</name><value>workstation</value></column>
       <column><name>DESCRIPTION</name><value>a profile for web browsers on workstations</value></column>
       <column><name>LAYOUT_ID</name><value>1</value></column>
       <column><name>STRUCTURE_SS_ID</name><value>101</value></column>
       <column><name>THEME_SS_ID</name><value>101</value></column>
      </row>
     </rows>
    </table>
    
  6. as required, update data.xml creating entries in up_ss_user_parm table. you will only need to create entries for the three template users (dlm fragment owner template, and the two users that you referenced in the portal.properties file earlier). all other users will inherit these settings.
    <table sinceMajor="2" sinceMinor="1">
     <name>UP_SS_USER_PARM</name>
     <rows>
      <!-- dlm fragmenttemplate layout profiles -->
      <row>
       <column><name>USER_ID</name><value>0</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>SS_ID</name><value>101</value></column>
       <column><name>SS_TYPE</name><value>1</value></column>
       <column><name>PARAM_NAME</name><value>activeTab</value></column>
       <column><name>PARAM_VAL</name><value>1</value></column>
      </row>
      <row>
       <column><name>USER_ID</name><value>0</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>SS_ID</name><value>101</value></column>
       <column><name>SS_TYPE</name><value>2</value></column>
       <column><name>PARAM_NAME</name><value>skin</value></column>
       <column><name>PARAM_VAL</name><value>spring</value></column>
      </row>
      <!-- guest-usr layout profiles -->
      <row>
       <column><name>USER_ID</name><value>1</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>SS_ID</name><value>101</value></column>
       <column><name>SS_TYPE</name><value>1</value></column>
       <column><name>PARAM_NAME</name><value>activeTab</value></column>
       <column><name>PARAM_VAL</name><value>1</value></column>
      </row>
      <row>
       <column><name>USER_ID</name><value>1</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>SS_ID</name><value>101</value></column>
       <column><name>SS_TYPE</name><value>2</value></column>
       <column><name>PARAM_NAME</name><value>skin</value></column>
       <column><name>PARAM_VAL</name><value>spring</value></column>
      </row>
      <!-- empty-usr layout profiles -->
      <row>
       <column><name>USER_ID</name><value>2</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>SS_ID</name><value>101</value></column>
       <column><name>SS_TYPE</name><value>1</value></column>
       <column><name>PARAM_NAME</name><value>activeTab</value></column>
       <column><name>PARAM_VAL</name><value>1</value></column>
      </row>
      <row>
       <column><name>USER_ID</name><value>2</value></column>
       <column><name>PROFILE_ID</name><value>1</value></column>
       <column><name>SS_ID</name><value>101</value></column>
       <column><name>SS_TYPE</name><value>2</value></column>
       <column><name>PARAM_NAME</name><value>skin</value></column>
       <column><name>PARAM_VAL</name><value>spring</value></column>
      </row>
     </rows>
    </table>
    
  7. as required, update dlm.xml creating entries that will resolve audience details for each fragment that you defined in the previous steps. the entries below tell dlm to render the frg-guest fragment for all guests, and the frg-welcome fragment for everyone else (all users were there username is not equal to guest).
    <dlm:fragment name='frg-guest' ownerID='guest-lo' precedence='10'>
     <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GuestUserEvaluatorFactory'/>
    </dlm:fragment>
    
    <dlm:fragment name='frg-welcome' ownerID='i-start-lo' precedence='10'>
      <dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.PersonEvaluatorFactory'>
        <paren mode="NOT">
          <attribute name="username" mode='equals' value='guest-usr'/>
        </paren>
      </dlm:audience>
    </dlm:fragment>