WebObjects/Web Applications/Development/Examples/Path Inspector

First of, it's handy to add a convenience method to your "page" component to define this "list" of objects:

 protected void addObjectToPathComponents(Object anObject, String aPageName, Object aTitle)
 {
   if ( anObject != null )
   {
     Map  aMap = new HashMap();
     
     aMap.put( Path.ObjectKey, anObject );
     aMap.put( Path.PageNameKey, aPageName );
     aMap.put( Path.TitleKey, aTitle );
     
     this.pathComponents().add( aMap );
     
     return;
   }
   
   throw new IllegalArgumentException ( "Page.addObjectWithPageNameAndTitleToPath: null object.");
 }

Now, in each concrete page you could initialize the path components:

 protected void initPathComponents()
 {
   Envelope  anEnvelope = this.value();
   Date    aDate = anEnvelope.creationDate();
   List    aList = anEnvelope.list();
   
   this.addObjectToPathComponents( aDate, "Timeline", "TIMELINE" );
   this.addObjectToPathComponents( aDate );
   
   if ( aList != null )
   {
     this.addObjectToPathComponents( aList );
   }
   
   this.addObjectToPathComponents( anEnvelope );
 }

Finally, the path component itself could look like this:

  <webobject name = "IsMain">
    <webobject name = "MainLink"><webobject name = "MainLabel"></webobject></webobject>
  </webobject>
  
  <webobject name = "IsNotMain">
    <webobject name = "Components">
      <webobject name = "HasPrefix"> <webobject name = "Prefix"></webobject> </webobject><webobject name = "Component"></webobject>
    </webobject>
  
    <webobject name = "HasPrefix"> <webobject name = "Prefix"></webobject> </webobject><webobject name = "LastComponent"></webobject>
  </webobject>
 Components: WORepetition
 {
   count = count;
   index = index;
 };
 IsMain: WOConditional{
   condition = isMain;
 };
 IsNotMain: WOConditional{
   condition = isMain;
   negate = true;
 };
 ainLink: WOHyperlink{
   action = getMail;
   title = "get new mail";
 };
 MainLabel: SpanString{
   value = "get mail";
   isSmall = true;
   isUpperCase = true;
   //isBold = true;
   class = "Label";
   length = 30;
 };
 
 HasPrefix: WOConditional{
   condition = hasPrefix;
 };
 Prefix: WOImage{
   src = prefixUrl;
   border = 0;
   align = "middle";
 };
 Component: Link{
   value = component.object;
   description = component.title;
   altDescription = component.title;
   value = component.object;
   pageName = component.pageName;
   isUpperCase = true;
   isSmall = true;
   //isBold = true;
   class = "Label";
 };
 LastComponent: SpanString{
   value = lastComponentTitle;
   isSmall = true;
   isUpperCase = true;
   //isBold = true;
   class = "Label";
   length = 30;
 };

That's all folks.