Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

This page is part of the Aggregated Layout Management Convergence 2.x effort that will be added to 3.x.

When users log-in their personal layout fragment or PLF is first loaded. The PLF contains both visual layout elements that they own and non-visual, "ghost" nodes used to record previous changes made to fragments. Then the [RDBMDistributedLayoutStore|Sungard SCT's RDBMDistributedLayoutStore
] passes through all configured fragments asking each if they are applicable to this user as determined by their configured audiences. If DLM debugging is turned on these evaulations can be seen from entries made in the log files as shown below.

The paren and attribute evaluators each log an entry as they enter the isApplicable method and as they exit. When exiting they indicate if the result was true or false. The nesting is part of the logging and serves to help see the nesting of the evaluator hierarchy built up based on configuration found in the Sample dlm.xml file page.

For example, the Student fragment is configured with this element in dlm.xml

Student Fragment Configuration
  <dlm:fragment name='Students' ownerID='student-lo' precedence='100'>
   <dlm:role>student</dlm:role>
   <dlm:audience evaluatorFactory='com.pipeline.uportal.dlm.provider.CPPersonEvaluatorFactory'>
     <paren mode="AND">     
       <attribute name='role' mode='equals' value='student'/>
       <paren mode="NOT">
         <attribute name='role' mode='equals' value='faculty'/>
       </paren>
     </paren>
   </dlm:audience>
 </dlm:fragment>

The fragment being evaluated is identified by an entry formated like ">>>> calling <fragmentName>.isApplicable( <userLoginID> )".
having that fragment name followed by a representation of the syntax of the "isApplicable" method call. So the test of the Student fragment starts on line 3. Now remember that fragments can have zero to many audience evaluators. So the first nested evaluator that is called for any fragmentFrom the log entries below you can see the evaluation of the top level "OR" paren and its nested "AND" paren s it can be seen that the mboyd user is a faculty member and hence is elligible for the Faculty fragment.

Note that the leading timestamp, class, lines, etc., have been removed for brevity.

Note also the logging of user preference attributes including those from preference values set by fragment owners.

Sample Fragment Merging Debug Log Entries
>>>> calling All Users.isApplicable( mboyd )
 ---- All Users.isApplicable( mboyd )=true
 >>>> calling Students.isApplicable( mboyd )
  >>>> calling paren[campuspipeline.uportal.dlm.provider.Paren@4e4a8a, op=OR].isApplicable()
  >>>> calling paren[campuspipeline.uportal.dlm.provider.Paren@7fc8b2, op=AND].isApplicable()
  >>>> calling Evaluator[role','1','student'].isApplicable()
 ----- comparing value 'student' to role 'admin'
 ----- comparing value 'student' to role 'faculty'
 Evaluating person roles to: false
  ---- Evaluator[role','1','student'].isApplicable()=false
  ---- paren[campuspipeline.uportal.dlm.provider.Paren@7fc8b2, op=AND].isApplicable()=false
  ---- paren[campuspipeline.uportal.dlm.provider.Paren@4e4a8a, op=OR].isApplicable()=false
 ---- Students.isApplicable( mboyd )=false
 >>>> calling Faculty.isApplicable( mboyd )
  >>>> calling paren[campuspipeline.uportal.dlm.provider.Paren@487093, op=OR].isApplicable()
  >>>> calling Evaluator['role','1','faculty'].isApplicable()
 ----- comparing value 'faculty' to role 'admin'
 ----- comparing value 'faculty' to role 'faculty'
 Evaluating person roles to: true
  ---- Evaluator[role','1','faculty'].isApplicable()=true
  ---- paren[campuspipeline.uportal.dlm.provider.Paren@487093, op=OR].isApplicable()=true
 ---- Faculty.isApplicable( mboyd )=true
 >>>> calling Employee.isApplicable( mboyd )
  >>>> calling paren[campuspipeline.uportal.dlm.provider.Paren@56c3cf, op=OR].isApplicable()
  >>>> calling Evaluator[role','1','employee'].isApplicable()
 ----- comparing value 'employee' to role 'admin'
 ----- comparing value 'employee' to role 'faculty'
 Evaluating person roles to: false
  ---- Evaluator[role','1','employee'].isApplicable()=false
  ---- paren[campuspipeline.uportal.dlm.provider.Paren@56c3cf, op=OR].isApplicable()=false
 ---- Employee.isApplicable( mboyd )=false

 ***** mboyd's StructureStylesheetUserPrefereneces

*** Folder Attributes
> n13.width = (33%) 33%
> s12.width = (33%) 33%
> u13l1s11.width = (null) 50%
> u11l1s12.width = (null) 50%
> u11l1s16.width = (null) 20%
> u11l1s9.width = (null) 30%
> u13l1s9.width = (null) 50%

*** Channel Attributes

  • No labels