You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Tyrone Hed <ty...@earthlink.net> on 2006/06/30 06:57:00 UTC

Tree w/Checkbox on each node--Way to Fix Indent?


   Folks,
         I have developed a Tapestry app (4.0.1) that uses the Tree in four places. It works great in three of those places but not in the one that includes a checkbox on each node of the tree. The problem is that it loses track of the indent and gives all nodes of the tree the same indent as the right-most node. So, as the user opens each node, the tree marches from left to right. In short, it looks like hell. I've looked at the generated source but it just piles on divs and spans to get the indent. The margin indent, in short, is broken when you have to enclose a tree in a FORM. Any suggestions? Here is my code. 
                                                              Thank you,
                                                                          Ty


Files included:

userEnterprises.page
userEnterprises.html
UserEnterprises.java

-------------------------------------------------------------------
userEnterprises.page
-------------------------------------------------------------------

<page-specification class="com.tyco.web.pages.authorization.UserEnterprises">
  
    <description>Tree</description>
      <property name="item" />
        <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
	
        <component id="tree" type="tacos:Tree">
          <binding name="value"               value="item"/>
          <binding name="nodeLinkAjax"   value="ognl:false" />
          <binding name="evenOdd"          value="ognl:page.beans.evenOdd" />
          <binding name="rowStyle"          value="ognl:beans.evenOdd"/>   
          <binding name="state"                value="enterpriseTreeState"/>
        </component>
	
  <component id="submitEditUserUpdateEnterprises" type="ClickSubmit">
    <binding name="selected" value="submitAction"/>
    <binding name="tag" value='"EDIT_USER_UPDATE_ENTERPRISES"'/>
  </component>
  
  <component id="submitCancel" type="ClickSubmit">
    <binding name="selected" value="submitAction"/>
    <binding name="tag" value='"CANCEL"'/>
  </component>

</page-specification>


-------------------------------------------------------------------
userEnterprises.html
-------------------------------------------------------------------

              <table width="90%" class="body" border="1">  
                <TR>
                  <TD>
                    <div 
                      jwcid="tree" 
                      id="tree" 
                      keyProvider="ognl:keyProvider"
                      contentProvider="ognl:contentProvider"                                                          
                      style="overflow: auto; width: auto; height: auto;">
                      <span jwcid="@If" condition="ognl:item.id" conditionValue="true">
                        <input jwcid="enterpriseCheckbox@Checkbox" value="ognl:item.checked" />
                      </span>
                      <span jwcid="@If" condition="ognl:item.active" conditionValue="ognl:true">
                        <span style="color:black"><span jwcid="@Insert" value="ognl:item.name"/></span>
                      </span>
                      <span jwcid="@Else">
                        <span style="color:gray"><span jwcid="@Insert" value="ognl:item.name"/></span>
                      </span>
                    </div>
                  </TD>
                </TR>                            
              </TABLE>


-------------------------------------------------------------------
UserEnterprises.java

     (I doubt this class will we useful in solving this problem
     but just in case I am doing so for completeness.)
-------------------------------------------------------------------

/*
 * Created on Jan 17, 2006
 *
 * Copyright 2005 Ingenix, Inc. All rights reserved.
 * This file contains CONFIDENTIAL and PROPRIETARY information
 * and should not be distributed without prior written permission.
 */
package com.ingenix.freya.web.pages.authorization;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.annotations.InjectState;
import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEvent;

import com.tyco.api.authorization.AuthorizationFactory;
import com.tyco.api.authorization.User;
import com.tyco.api.enterprise.Enterprise;
import com.tyco.web.components.authorization.AuthenticationListComponentBase;
import com.tyco.web.components.enterprise.EnterpriseTreeContentProvider;
import com.tyco.web.components.enterprise.Folder;
import com.tyco.web.components.enterprise.Item;

public abstract class UserEnterprises extends UserControllerPage implements PageBeginRenderListener
{
  private List mPermissions;
  private Enterprise mEnterprise;  

  @InjectState( "contentProvider" )
  public abstract EnterpriseTreeContentProvider getContentProvider();
  public abstract void setContentProvider( EnterpriseTreeContentProvider pEnterpriseTreeContentProvider );    
    
  @InjectState( "enterpriseTreeState" )
  public abstract Set<Long> getEnterpriseTreeState();
  public abstract void setEnterpriseTreeState( Set pEnterpriseTreeState );
  
  @InjectState("newUser")
  public abstract User getNewUser();
  public abstract void setNewUser(User val);
  
  public abstract Long getID();
  
  protected Log mLog = LogFactory.getLog(this.getClass().getName());
  
  public void pageBeginRender(PageEvent pEvent)
  {
    detectCheckedEnterprises( getNewUser() );
  }
  
  public void activate(IRequestCycle pCycle) 
  {	
       Object[] parameters = pCycle.getListenerParameters();
    	    
       if (parameters.length >= 2)
      {      
          Long userID = (Long) parameters[1];
          User user         = getAuthorizationService().getUserByID(userID);
          setNewUser(user);
          List permissionList = getUserPermissions(user);
          setPermissions(permissionList);
      }
      // If Errors found then we need to keep user data with the error for redisplay
      else if ((getErrorMessage() == null)  && (getPasswordError() == null))
     {
        setNewUser(AuthorizationFactory.newUser());
     }  
}
	
  /**
   * Although the superclass has its own save() method, 
   * we need to override it here so that we can get capture
   * the checked enterprises. It is critical that we do not
   * execute the superclass save().
   */
  public void save()
  {
    IRequestCycle pCycle = this.getRequestCycle();
    
    if( ACTION_EDIT_USER_UPDATE_ENTERPRISES.equals( getSubmitAction() ) )
    {
      EnterpriseTreeContentProvider contentProvider = getContentProvider();
      List treeRoots = contentProvider.getTreeRoots();
      List<Long> enterpriseIds = determineCheckedEnterprises( treeRoots );
      
      if( this.getRequestCycle().isRewinding() )
      {
        getAuthorizationService().assignEnterprisesToUser( enterpriseIds, getNewUser().getID() );
        Long idOfUpdatedUser = getNewUser().getID();
        User updatedUser = getAuthorizationService().getUserByID( idOfUpdatedUser );
        setNewUser( updatedUser );
        
        pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER );
      }
    }
    else if( ACTION_CANCEL.equals( getSubmitAction() ) )
    {
      pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER );
    }
 
  }
  
  public List<Long> determineCheckedEnterprises( List pTreeRoots )
  {
    List<Long> checkedEnterprises = new ArrayList<Long>();
    
    addChildNodes( pTreeRoots, checkedEnterprises );
    
    return checkedEnterprises;
  }
  
  
  public void addChildNodes( List pFolderItems, List<Long> pCheckedEnterprises )
  {
    Iterator iterator = pFolderItems.iterator();
    while( iterator.hasNext() )
    {
      Object obj = iterator.next();
      if( obj instanceof Folder )
      {
        Folder folder = (Folder) obj;
        if( folder.isChecked() )
        { 
          String stringID = folder.getId();
          pCheckedEnterprises.add( new Long( stringID ) );
        }
        List folderItems = folder.getItems();
        List folderFolders = folder.getFolders();
        
        if( folderItems.size() > 0 )
        {
          addChildNodes( folderItems, pCheckedEnterprises );
        }
        if( folderFolders.size() > 0 )
        {
          addChildNodes( folderFolders, pCheckedEnterprises );
        }
      }
      else if( obj instanceof Item )
      {
        Item item = (Item) obj;
        if( item.isChecked() )
        {
          String stringID = item.getId();
          pCheckedEnterprises.add(  new Long( stringID ) );
        }
      }
    }
  }
 
  
  public Enterprise getEnterprise()
  {
    return mEnterprise;
  }  
  public void setEnterprise( Enterprise pEnterprise )
  {
    mEnterprise = pEnterprise;
  }  
      
  public List getPermissions()
  {
    if (mPermissions == null)
    {
      mPermissions = new ArrayList();
    }
    return mPermissions;
  }
  public void setPermissions(List pPermissions)
  {
    mPermissions = pPermissions;
  }  

  
  
  public void detectCheckedEnterprises( User pUser )
  {
    EnterpriseTreeContentProvider tree = getContentProvider();
    if( tree == null )
    {
      initializeEnterpriseTreeContentProvider( getNewUser() );   
      tree = getContentProvider();
    }    
    
    // First, compile a Set of the user's enterprises
    List userEnts = pUser.getEnterprises();
    if( userEnts == null || userEnts.size() == 0)
    {
      return;
    }
    
    Iterator userIt = userEnts.iterator();
    Set<String> userEntSet = new HashSet<String>();
    while( userIt.hasNext() )
    {
      Enterprise userEnt = (Enterprise) userIt.next();
      userEntSet.add( userEnt.getName() );
    }
    
    // Next, go through the entepriseTree and display the user's checked enteprises
    List treeRoots = tree.getTreeRoots();
    Iterator it = treeRoots.iterator();
    
    while( it.hasNext() )
    {
      Object obj = it.next();
      
      if( obj instanceof Folder )
      {
        Folder aFolder = (Folder) obj;
        String folderName = aFolder.getName();
        
        if( userEntSet.contains( folderName ) )
        {
          aFolder.setChecked( true );
        }
        checkChildNodes( aFolder, userEntSet );
        
      }
      else if( obj instanceof Item )
      {
        Item anItem = (Item) obj;
        String itemName = anItem.getName();
        
        if( userEntSet.contains( itemName ) )
        {
          anItem.setChecked( true );
        }
      }      
    }
  }
  
  public void checkChildNodes( Folder pFolder, Set pUserEntSet )
  {
    List items = pFolder.getItems();
    Iterator it = items.iterator();
    
    while( it.hasNext() )
    {
      Item anItem = (Item) it.next();
      if( pUserEntSet.contains( anItem.getName() ) )
      {
        anItem.setChecked( true );
      }
    }
    
    List folders = pFolder.getFolders();
    Iterator itF = folders.iterator();
    
    while( itF.hasNext() )
    {
      Folder aFolder = (Folder) itF.next();
      if( pUserEntSet.contains( aFolder.getName() ) )
      {
        aFolder.setChecked( true );
      }
      checkChildNodes( aFolder, pUserEntSet );
    }    
  }
  
  /** This method added to assist mock testing. */
  public User getUserByID( Long pUserID )
  {
    return getAuthorizationService().getUserByID( pUserID );
  }
}





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Tree w/Checkbox on each node--Way to Fix Indent?

Posted by Tyrone Hed <ty...@earthlink.net>.
Wow. So this is not just a mis-configured tree? Incidentally, I have found
implementing Steve's proposed solution to be pretty challenging. I'm still
going to work on it but it would be great if I didn't need to use the
volatile. Thank you all for taking care of this.

                        Thank you,
                                  Ty
-- 
View this message in context: http://www.nabble.com/Tree-w-Checkbox-on-each-node--Way-to-Fix-Indent--tf1871290.html#a5127594
Sent from the Tapestry - User forum at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Tree w/Checkbox on each node--Way to Fix Indent?

Posted by tapuser <sr...@yahoo.com>.
Hi Ty,
         I am trying to implement Tree Table with add node, delete node and
edit node functionality using a employee table.  Could you please some
guidelines to implement the treeManager. I am getting null pointer
exceptions. 

Thanks.
Sri.


Tyrone Hed wrote:
> 
> 
> 
>    Folks,
>          I have developed a Tapestry app (4.0.1) that uses the Tree in
> four places. It works great in three of those places but not in the one
> that includes a checkbox on each node of the tree. The problem is that it
> loses track of the indent and gives all nodes of the tree the same indent
> as the right-most node. So, as the user opens each node, the tree marches
> from left to right. In short, it looks like hell. I've looked at the
> generated source but it just piles on divs and spans to get the indent.
> The margin indent, in short, is broken when you have to enclose a tree in
> a FORM. Any suggestions? Here is my code. 
>                                                               Thank you,
>                                                                          
> Ty
> 
> 
> Files included:
> 
> userEnterprises.page
> userEnterprises.html
> UserEnterprises.java
> 
> -------------------------------------------------------------------
> userEnterprises.page
> -------------------------------------------------------------------
> 
> <page-specification
> class="com.tyco.web.pages.authorization.UserEnterprises">
>   
>     <description>Tree</description>
>       <property name="item" />
>         <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
> 	
>         <component id="tree" type="tacos:Tree">
>           <binding name="value"               value="item"/>
>           <binding name="nodeLinkAjax"   value="ognl:false" />
>           <binding name="evenOdd"          value="ognl:page.beans.evenOdd"
> />
>           <binding name="rowStyle"          value="ognl:beans.evenOdd"/>   
>           <binding name="state"               
> value="enterpriseTreeState"/>
>         </component>
> 	
>   <component id="submitEditUserUpdateEnterprises" type="ClickSubmit">
>     <binding name="selected" value="submitAction"/>
>     <binding name="tag" value='"EDIT_USER_UPDATE_ENTERPRISES"'/>
>   </component>
>   
>   <component id="submitCancel" type="ClickSubmit">
>     <binding name="selected" value="submitAction"/>
>     <binding name="tag" value='"CANCEL"'/>
>   </component>
> 
> </page-specification>
> 
> 
> -------------------------------------------------------------------
> userEnterprises.html
> -------------------------------------------------------------------
> 
>               <table width="90%" class="body" border="1">  
>                 <TR>
>                   <TD>
>                     <div 
>                       jwcid="tree" 
>                       id="tree" 
>                       keyProvider="ognl:keyProvider"
>                       contentProvider="ognl:contentProvider"                                                          
>                       style="overflow: auto; width: auto; height: auto;">
>                       
>                         <input jwcid="enterpriseCheckbox@Checkbox"
> value="ognl:item.checked" />
>                       
>                       
>                         
>                       
>                       
>                         
>                       
>                     </div>
>                   </TD>
>                 </TR>                            
>               </TABLE>
> 
> 
> -------------------------------------------------------------------
> UserEnterprises.java
> 
>      (I doubt this class will we useful in solving this problem
>      but just in case I am doing so for completeness.)
> -------------------------------------------------------------------
> 
> /*
>  * Created on Jan 17, 2006
>  *
>  * Copyright 2005 Ingenix, Inc. All rights reserved.
>  * This file contains CONFIDENTIAL and PROPRIETARY information
>  * and should not be distributed without prior written permission.
>  */
> package com.ingenix.freya.web.pages.authorization;
> 
> import java.util.ArrayList;
> import java.util.HashSet;
> import java.util.Iterator;
> import java.util.List;
> import java.util.Set;
> 
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.annotations.InjectState;
> import org.apache.tapestry.event.PageBeginRenderListener;
> import org.apache.tapestry.event.PageEvent;
> 
> import com.tyco.api.authorization.AuthorizationFactory;
> import com.tyco.api.authorization.User;
> import com.tyco.api.enterprise.Enterprise;
> import
> com.tyco.web.components.authorization.AuthenticationListComponentBase;
> import com.tyco.web.components.enterprise.EnterpriseTreeContentProvider;
> import com.tyco.web.components.enterprise.Folder;
> import com.tyco.web.components.enterprise.Item;
> 
> public abstract class UserEnterprises extends UserControllerPage
> implements PageBeginRenderListener
> {
>   private List mPermissions;
>   private Enterprise mEnterprise;  
> 
>   @InjectState( "contentProvider" )
>   public abstract EnterpriseTreeContentProvider getContentProvider();
>   public abstract void setContentProvider( EnterpriseTreeContentProvider
> pEnterpriseTreeContentProvider );    
>     
>   @InjectState( "enterpriseTreeState" )
>   public abstract Set<Long> getEnterpriseTreeState();
>   public abstract void setEnterpriseTreeState( Set pEnterpriseTreeState );
>   
>   @InjectState("newUser")
>   public abstract User getNewUser();
>   public abstract void setNewUser(User val);
>   
>   public abstract Long getID();
>   
>   protected Log mLog = LogFactory.getLog(this.getClass().getName());
>   
>   public void pageBeginRender(PageEvent pEvent)
>   {
>     detectCheckedEnterprises( getNewUser() );
>   }
>   
>   public void activate(IRequestCycle pCycle) 
>   {	
>        Object[] parameters = pCycle.getListenerParameters();
>     	    
>        if (parameters.length >= 2)
>       {      
>           Long userID = (Long) parameters[1];
>           User user         =
> getAuthorizationService().getUserByID(userID);
>           setNewUser(user);
>           List permissionList = getUserPermissions(user);
>           setPermissions(permissionList);
>       }
>       // If Errors found then we need to keep user data with the error for
> redisplay
>       else if ((getErrorMessage() == null)  && (getPasswordError() ==
> null))
>      {
>         setNewUser(AuthorizationFactory.newUser());
>      }  
> }
> 	
>   /**
>    * Although the superclass has its own save() method, 
>    * we need to override it here so that we can get capture
>    * the checked enterprises. It is critical that we do not
>    * execute the superclass save().
>    */
>   public void save()
>   {
>     IRequestCycle pCycle = this.getRequestCycle();
>     
>     if( ACTION_EDIT_USER_UPDATE_ENTERPRISES.equals( getSubmitAction() ) )
>     {
>       EnterpriseTreeContentProvider contentProvider =
> getContentProvider();
>       List treeRoots = contentProvider.getTreeRoots();
>       List<Long> enterpriseIds = determineCheckedEnterprises( treeRoots );
>       
>       if( this.getRequestCycle().isRewinding() )
>       {
>         getAuthorizationService().assignEnterprisesToUser( enterpriseIds,
> getNewUser().getID() );
>         Long idOfUpdatedUser = getNewUser().getID();
>         User updatedUser = getAuthorizationService().getUserByID(
> idOfUpdatedUser );
>         setNewUser( updatedUser );
>         
>         pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER
> );
>       }
>     }
>     else if( ACTION_CANCEL.equals( getSubmitAction() ) )
>     {
>       pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER );
>     }
>  
>   }
>   
>   public List<Long> determineCheckedEnterprises( List pTreeRoots )
>   {
>     List<Long> checkedEnterprises = new ArrayList<Long>();
>     
>     addChildNodes( pTreeRoots, checkedEnterprises );
>     
>     return checkedEnterprises;
>   }
>   
>   
>   public void addChildNodes( List pFolderItems, List<Long>
> pCheckedEnterprises )
>   {
>     Iterator iterator = pFolderItems.iterator();
>     while( iterator.hasNext() )
>     {
>       Object obj = iterator.next();
>       if( obj instanceof Folder )
>       {
>         Folder folder = (Folder) obj;
>         if( folder.isChecked() )
>         { 
>           String stringID = folder.getId();
>           pCheckedEnterprises.add( new Long( stringID ) );
>         }
>         List folderItems = folder.getItems();
>         List folderFolders = folder.getFolders();
>         
>         if( folderItems.size() > 0 )
>         {
>           addChildNodes( folderItems, pCheckedEnterprises );
>         }
>         if( folderFolders.size() > 0 )
>         {
>           addChildNodes( folderFolders, pCheckedEnterprises );
>         }
>       }
>       else if( obj instanceof Item )
>       {
>         Item item = (Item) obj;
>         if( item.isChecked() )
>         {
>           String stringID = item.getId();
>           pCheckedEnterprises.add(  new Long( stringID ) );
>         }
>       }
>     }
>   }
>  
>   
>   public Enterprise getEnterprise()
>   {
>     return mEnterprise;
>   }  
>   public void setEnterprise( Enterprise pEnterprise )
>   {
>     mEnterprise = pEnterprise;
>   }  
>       
>   public List getPermissions()
>   {
>     if (mPermissions == null)
>     {
>       mPermissions = new ArrayList();
>     }
>     return mPermissions;
>   }
>   public void setPermissions(List pPermissions)
>   {
>     mPermissions = pPermissions;
>   }  
> 
>   
>   
>   public void detectCheckedEnterprises( User pUser )
>   {
>     EnterpriseTreeContentProvider tree = getContentProvider();
>     if( tree == null )
>     {
>       initializeEnterpriseTreeContentProvider( getNewUser() );   
>       tree = getContentProvider();
>     }    
>     
>     // First, compile a Set of the user's enterprises
>     List userEnts = pUser.getEnterprises();
>     if( userEnts == null || userEnts.size() == 0)
>     {
>       return;
>     }
>     
>     Iterator userIt = userEnts.iterator();
>     Set<String> userEntSet = new HashSet<String>();
>     while( userIt.hasNext() )
>     {
>       Enterprise userEnt = (Enterprise) userIt.next();
>       userEntSet.add( userEnt.getName() );
>     }
>     
>     // Next, go through the entepriseTree and display the user's checked
> enteprises
>     List treeRoots = tree.getTreeRoots();
>     Iterator it = treeRoots.iterator();
>     
>     while( it.hasNext() )
>     {
>       Object obj = it.next();
>       
>       if( obj instanceof Folder )
>       {
>         Folder aFolder = (Folder) obj;
>         String folderName = aFolder.getName();
>         
>         if( userEntSet.contains( folderName ) )
>         {
>           aFolder.setChecked( true );
>         }
>         checkChildNodes( aFolder, userEntSet );
>         
>       }
>       else if( obj instanceof Item )
>       {
>         Item anItem = (Item) obj;
>         String itemName = anItem.getName();
>         
>         if( userEntSet.contains( itemName ) )
>         {
>           anItem.setChecked( true );
>         }
>       }      
>     }
>   }
>   
>   public void checkChildNodes( Folder pFolder, Set pUserEntSet )
>   {
>     List items = pFolder.getItems();
>     Iterator it = items.iterator();
>     
>     while( it.hasNext() )
>     {
>       Item anItem = (Item) it.next();
>       if( pUserEntSet.contains( anItem.getName() ) )
>       {
>         anItem.setChecked( true );
>       }
>     }
>     
>     List folders = pFolder.getFolders();
>     Iterator itF = folders.iterator();
>     
>     while( itF.hasNext() )
>     {
>       Folder aFolder = (Folder) itF.next();
>       if( pUserEntSet.contains( aFolder.getName() ) )
>       {
>         aFolder.setChecked( true );
>       }
>       checkChildNodes( aFolder, pUserEntSet );
>     }    
>   }
>   
>   /** This method added to assist mock testing. */
>   public User getUserByID( Long pUserID )
>   {
>     return getAuthorizationService().getUserByID( pUserID );
>   }
> }
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Tree-w-Checkbox-on-each-node--Way-to-Fix-Indent--tf1871290.html#a10131646
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Tree w/Checkbox on each node--Way to Fix Indent?

Posted by Jesse Kuhnert <jk...@gmail.com>.
Ah ok, I've re-opened it. Thanks.

On 6/30/06, Steve Shucker <ss...@vmsinfo.com> wrote:
>
> Sorry, I mis-filed it.  I saw this as a variation of bug 32 and added a
> comment on there (dated 5/3/2006).  I just looked at the bug tracker and
> realized that bug had been long-closed.  Do you want to reopen 32 or
> should
> I re-file?
>
> -Steve
>
> -----Original Message-----
> From: Jesse Kuhnert [mailto:jkuhnert@gmail.com]
> Sent: Friday, June 30, 2006 10:48 AM
> To: Tapestry users
> Subject: Re: Tree w/Checkbox on each node--Way to Fix Indent?
>
> Is there an open issue for this in tacos? Seems like a big enough deal
> thing
> that I should fix it. http://tacoscomponents.jot.com/BugReporter
>
> On 6/30/06, Steve Shucker <ss...@vmsinfo.com> wrote:
> >
> > I had this problem a while ago and traced it to a PartialFor component
> > within the tree that was persisting the contents incorrectly in the
> form.
> > It's using an iterator that doesn't track depth.  As a workaround, you
> can
> > create your own html/jwc files for the Tree control (use taco's backing
> > class) and add a volatile=true property to the PartialFor
> component.  It's
> > not ideal, but it's working great for me.
> >
> > -Steve
> >
> > -----Original Message-----
> > From: Tyrone Hed [mailto:tyronehed@earthlink.net]
> > Sent: Thursday, June 29, 2006 9:57 PM
> > To: users@tapestry.apache.org
> > Subject: Tree w/Checkbox on each node--Way to Fix Indent?
> >
> >
> >
> >    Folks,
> >          I have developed a Tapestry app (4.0.1) that uses the Tree in
> > four
> > places. It works great in three of those places but not in the one that
> > includes a checkbox on each node of the tree. The problem is that it
> loses
> > track of the indent and gives all nodes of the tree the same indent as
> the
> > right-most node. So, as the user opens each node, the tree marches from
> > left
> > to right. In short, it looks like hell. I've looked at the generated
> > source
> > but it just piles on divs and spans to get the indent. The margin
> indent,
> > in
> > short, is broken when you have to enclose a tree in a FORM. Any
> > suggestions?
> > Here is my code.
> >                                                               Thank you,
> >
> >
> Ty
> >
> >
> > Files included:
> >
> > userEnterprises.page
> > userEnterprises.html
> > UserEnterprises.java
> >
> > -------------------------------------------------------------------
> > userEnterprises.page
> > -------------------------------------------------------------------
> >
> > <page-specification
> > class="com.tyco.web.pages.authorization.UserEnterprises">
> >
> >     <description>Tree</description>
> >       <property name="item" />
> >         <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
> >
> >         <component id="tree" type="tacos:Tree">
> >           <binding name="value"               value="item"/>
> >           <binding name="nodeLinkAjax"   value="ognl:false" />
> >           <binding name="evenOdd"          value="ognl:
> page.beans.evenOdd"
> > />
> >           <binding name="rowStyle"          value="ognl:beans.evenOdd"/>
> >           <binding
> > name="state"                value="enterpriseTreeState"/>
> >         </component>
> >
> >   <component id="submitEditUserUpdateEnterprises" type="ClickSubmit">
> >     <binding name="selected" value="submitAction"/>
> >     <binding name="tag" value='"EDIT_USER_UPDATE_ENTERPRISES"'/>
> >   </component>
> >
> >   <component id="submitCancel" type="ClickSubmit">
> >     <binding name="selected" value="submitAction"/>
> >     <binding name="tag" value='"CANCEL"'/>
> >   </component>
> >
> > </page-specification>
> >
> >
> > -------------------------------------------------------------------
> > userEnterprises.html
> > -------------------------------------------------------------------
> >
> >               <table width="90%" class="body" border="1">
> >                 <TR>
> >                   <TD>
> >                     <div
> >                       jwcid="tree"
> >                       id="tree"
> >                       keyProvider="ognl:keyProvider"
> >                       contentProvider="ognl:contentProvider"
> >
> >                       style="overflow: auto; width: auto; height:
> auto;">
> >                       <span jwcid="@If" condition="ognl:item.id"
> > conditionValue="true">
> >                         <input jwcid="enterpriseCheckbox@Checkbox"
> > value="ognl:item.checked" />
> >                       </span>
> >                       <span jwcid="@If" condition="ognl:item.active"
> > conditionValue="ognl:true">
> >                         <span style="color:black"><span jwcid="@Insert"
> > value="ognl:item.name"/></span>
> >                       </span>
> >                       <span jwcid="@Else">
> >                         <span style="color:gray"><span jwcid="@Insert"
> > value="ognl:item.name"/></span>
> >                       </span>
> >                     </div>
> >                   </TD>
> >                 </TR>
> >               </TABLE>
> >
> >
> > -------------------------------------------------------------------
> > UserEnterprises.java
> >
> >      (I doubt this class will we useful in solving this problem
> >      but just in case I am doing so for completeness.)
> > -------------------------------------------------------------------
> >
> > /*
> > * Created on Jan 17, 2006
> > *
> > * Copyright 2005 Ingenix, Inc. All rights reserved.
> > * This file contains CONFIDENTIAL and PROPRIETARY information
> > * and should not be distributed without prior written permission.
> > */
> > package com.ingenix.freya.web.pages.authorization;
> >
> > import java.util.ArrayList;
> > import java.util.HashSet;
> > import java.util.Iterator;
> > import java.util.List;
> > import java.util.Set;
> >
> > import org.apache.commons.logging.Log;
> > import org.apache.commons.logging.LogFactory;
> > import org.apache.tapestry.IRequestCycle;
> > import org.apache.tapestry.annotations.InjectState;
> > import org.apache.tapestry.event.PageBeginRenderListener;
> > import org.apache.tapestry.event.PageEvent;
> >
> > import com.tyco.api.authorization.AuthorizationFactory;
> > import com.tyco.api.authorization.User;
> > import com.tyco.api.enterprise.Enterprise;
> > import
> > com.tyco.web.components.authorization.AuthenticationListComponentBase;
> > import com.tyco.web.components.enterprise.EnterpriseTreeContentProvider;
> > import com.tyco.web.components.enterprise.Folder;
> > import com.tyco.web.components.enterprise.Item;
> >
> > public abstract class UserEnterprises extends UserControllerPage
> > implements
> > PageBeginRenderListener
> > {
> >   private List mPermissions;
> >   private Enterprise mEnterprise;
> >
> >   @InjectState( "contentProvider" )
> >   public abstract EnterpriseTreeContentProvider getContentProvider();
> >   public abstract void setContentProvider( EnterpriseTreeContentProvider
> > pEnterpriseTreeContentProvider );
> >
> >   @InjectState( "enterpriseTreeState" )
> >   public abstract Set<Long> getEnterpriseTreeState();
> >   public abstract void setEnterpriseTreeState( Set pEnterpriseTreeState
> );
> >
> >   @InjectState("newUser")
> >   public abstract User getNewUser();
> >   public abstract void setNewUser(User val);
> >
> >   public abstract Long getID();
> >
> >   protected Log mLog = LogFactory.getLog(this.getClass().getName());
> >
> >   public void pageBeginRender(PageEvent pEvent)
> >   {
> >     detectCheckedEnterprises( getNewUser() );
> >   }
> >
> >   public void activate(IRequestCycle pCycle)
> >   {
> >        Object[] parameters = pCycle.getListenerParameters();
> >
> >        if (parameters.length >= 2)
> >       {
> >           Long userID = (Long) parameters[1];
> >           User user         =
> > getAuthorizationService().getUserByID(userID);
> >           setNewUser(user);
> >           List permissionList = getUserPermissions(user);
> >           setPermissions(permissionList);
> >       }
> >       // If Errors found then we need to keep user data with the error
> for
> > redisplay
> >       else if ((getErrorMessage() == null)  && (getPasswordError() ==
> > null))
> >      {
> >         setNewUser(AuthorizationFactory.newUser());
> >      }
> > }
> >
> >   /**
> >    * Although the superclass has its own save() method,
> >    * we need to override it here so that we can get capture
> >    * the checked enterprises. It is critical that we do not
> >    * execute the superclass save().
> >    */
> >   public void save()
> >   {
> >     IRequestCycle pCycle = this.getRequestCycle();
> >
> >     if( ACTION_EDIT_USER_UPDATE_ENTERPRISES.equals( getSubmitAction() )
> )
> >     {
> >       EnterpriseTreeContentProvider contentProvider =
> > getContentProvider();
> >       List treeRoots = contentProvider.getTreeRoots();
> >       List<Long> enterpriseIds = determineCheckedEnterprises( treeRoots
> );
> >
> >       if( this.getRequestCycle().isRewinding() )
> >       {
> >         getAuthorizationService().assignEnterprisesToUser(
> enterpriseIds,
> > getNewUser().getID() );
> >         Long idOfUpdatedUser = getNewUser().getID();
> >         User updatedUser = getAuthorizationService().getUserByID(
> > idOfUpdatedUser );
> >         setNewUser( updatedUser );
> >
> >         pCycle.activate(
> AuthenticationListComponentBase.TARGET_EDIT_USER);
> >       }
> >     }
> >     else if( ACTION_CANCEL.equals( getSubmitAction() ) )
> >     {
> >       pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER);
> >     }
> >
> >   }
> >
> >   public List<Long> determineCheckedEnterprises( List pTreeRoots )
> >   {
> >     List<Long> checkedEnterprises = new ArrayList<Long>();
> >
> >     addChildNodes( pTreeRoots, checkedEnterprises );
> >
> >     return checkedEnterprises;
> >   }
> >
> >
> >   public void addChildNodes( List pFolderItems, List<Long>
> > pCheckedEnterprises )
> >   {
> >     Iterator iterator = pFolderItems.iterator();
> >     while( iterator.hasNext() )
> >     {
> >       Object obj = iterator.next();
> >       if( obj instanceof Folder )
> >       {
> >         Folder folder = (Folder) obj;
> >         if( folder.isChecked() )
> >         {
> >           String stringID = folder.getId();
> >           pCheckedEnterprises.add( new Long( stringID ) );
> >         }
> >         List folderItems = folder.getItems();
> >         List folderFolders = folder.getFolders();
> >
> >         if( folderItems.size() > 0 )
> >         {
> >           addChildNodes( folderItems, pCheckedEnterprises );
> >         }
> >         if( folderFolders.size() > 0 )
> >         {
> >           addChildNodes( folderFolders, pCheckedEnterprises );
> >         }
> >       }
> >       else if( obj instanceof Item )
> >       {
> >         Item item = (Item) obj;
> >         if( item.isChecked() )
> >         {
> >           String stringID = item.getId();
> >           pCheckedEnterprises.add(  new Long( stringID ) );
> >         }
> >       }
> >     }
> >   }
> >
> >
> >   public Enterprise getEnterprise()
> >   {
> >     return mEnterprise;
> >   }
> >   public void setEnterprise( Enterprise pEnterprise )
> >   {
> >     mEnterprise = pEnterprise;
> >   }
> >
> >   public List getPermissions()
> >   {
> >     if (mPermissions == null)
> >     {
> >       mPermissions = new ArrayList();
> >     }
> >     return mPermissions;
> >   }
> >   public void setPermissions(List pPermissions)
> >   {
> >     mPermissions = pPermissions;
> >   }
> >
> >
> >
> >   public void detectCheckedEnterprises( User pUser )
> >   {
> >     EnterpriseTreeContentProvider tree = getContentProvider();
> >     if( tree == null )
> >     {
> >       initializeEnterpriseTreeContentProvider( getNewUser() );
> >       tree = getContentProvider();
> >     }
> >
> >     // First, compile a Set of the user's enterprises
> >     List userEnts = pUser.getEnterprises();
> >     if( userEnts == null || userEnts.size() == 0)
> >     {
> >       return;
> >     }
> >
> >     Iterator userIt = userEnts.iterator();
> >     Set<String> userEntSet = new HashSet<String>();
> >     while( userIt.hasNext() )
> >     {
> >       Enterprise userEnt = (Enterprise) userIt.next();
> >       userEntSet.add( userEnt.getName() );
> >     }
> >
> >     // Next, go through the entepriseTree and display the user's checked
> > enteprises
> >     List treeRoots = tree.getTreeRoots();
> >     Iterator it = treeRoots.iterator();
> >
> >     while( it.hasNext() )
> >     {
> >       Object obj = it.next();
> >
> >       if( obj instanceof Folder )
> >       {
> >         Folder aFolder = (Folder) obj;
> >         String folderName = aFolder.getName();
> >
> >         if( userEntSet.contains( folderName ) )
> >         {
> >           aFolder.setChecked( true );
> >         }
> >         checkChildNodes( aFolder, userEntSet );
> >
> >       }
> >       else if( obj instanceof Item )
> >       {
> >         Item anItem = (Item) obj;
> >         String itemName = anItem.getName();
> >
> >         if( userEntSet.contains( itemName ) )
> >         {
> >           anItem.setChecked( true );
> >         }
> >       }
> >     }
> >   }
> >
> >   public void checkChildNodes( Folder pFolder, Set pUserEntSet )
> >   {
> >     List items = pFolder.getItems();
> >     Iterator it = items.iterator();
> >
> >     while( it.hasNext() )
> >     {
> >       Item anItem = (Item) it.next();
> >       if( pUserEntSet.contains( anItem.getName() ) )
> >       {
> >         anItem.setChecked( true );
> >       }
> >     }
> >
> >     List folders = pFolder.getFolders();
> >     Iterator itF = folders.iterator();
> >
> >     while( itF.hasNext() )
> >     {
> >       Folder aFolder = (Folder) itF.next();
> >       if( pUserEntSet.contains( aFolder.getName() ) )
> >       {
> >         aFolder.setChecked( true );
> >       }
> >       checkChildNodes( aFolder, pUserEntSet );
> >     }
> >   }
> >
> >   /** This method added to assist mock testing. */
> >   public User getUserByID( Long pUserID )
> >   {
> >     return getAuthorizationService().getUserByID( pUserID );
> >   }
> > }
> >
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
> >
>
>
> --
> Jesse Kuhnert
> Tacos/Tapestry, team member/developer
>
> Open source based consulting work centered around
> dojo/tapestry/tacos/hivemind.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


-- 
Jesse Kuhnert
Tacos/Tapestry, team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind.

RE: Tree w/Checkbox on each node--Way to Fix Indent?

Posted by Steve Shucker <ss...@vmsinfo.com>.
Sorry, I mis-filed it.  I saw this as a variation of bug 32 and added a
comment on there (dated 5/3/2006).  I just looked at the bug tracker and
realized that bug had been long-closed.  Do you want to reopen 32 or should
I re-file?

-Steve

-----Original Message-----
From: Jesse Kuhnert [mailto:jkuhnert@gmail.com] 
Sent: Friday, June 30, 2006 10:48 AM
To: Tapestry users
Subject: Re: Tree w/Checkbox on each node--Way to Fix Indent?

Is there an open issue for this in tacos? Seems like a big enough deal thing
that I should fix it. http://tacoscomponents.jot.com/BugReporter

On 6/30/06, Steve Shucker <ss...@vmsinfo.com> wrote:
>
> I had this problem a while ago and traced it to a PartialFor component
> within the tree that was persisting the contents incorrectly in the form.
> It's using an iterator that doesn't track depth.  As a workaround, you can
> create your own html/jwc files for the Tree control (use taco's backing
> class) and add a volatile=true property to the PartialFor component.  It's
> not ideal, but it's working great for me.
>
> -Steve
>
> -----Original Message-----
> From: Tyrone Hed [mailto:tyronehed@earthlink.net]
> Sent: Thursday, June 29, 2006 9:57 PM
> To: users@tapestry.apache.org
> Subject: Tree w/Checkbox on each node--Way to Fix Indent?
>
>
>
>    Folks,
>          I have developed a Tapestry app (4.0.1) that uses the Tree in
> four
> places. It works great in three of those places but not in the one that
> includes a checkbox on each node of the tree. The problem is that it loses
> track of the indent and gives all nodes of the tree the same indent as the
> right-most node. So, as the user opens each node, the tree marches from
> left
> to right. In short, it looks like hell. I've looked at the generated
> source
> but it just piles on divs and spans to get the indent. The margin indent,
> in
> short, is broken when you have to enclose a tree in a FORM. Any
> suggestions?
> Here is my code.
>                                                               Thank you,
>
>
Ty
>
>
> Files included:
>
> userEnterprises.page
> userEnterprises.html
> UserEnterprises.java
>
> -------------------------------------------------------------------
> userEnterprises.page
> -------------------------------------------------------------------
>
> <page-specification
> class="com.tyco.web.pages.authorization.UserEnterprises">
>
>     <description>Tree</description>
>       <property name="item" />
>         <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
>
>         <component id="tree" type="tacos:Tree">
>           <binding name="value"               value="item"/>
>           <binding name="nodeLinkAjax"   value="ognl:false" />
>           <binding name="evenOdd"          value="ognl:page.beans.evenOdd"
> />
>           <binding name="rowStyle"          value="ognl:beans.evenOdd"/>
>           <binding
> name="state"                value="enterpriseTreeState"/>
>         </component>
>
>   <component id="submitEditUserUpdateEnterprises" type="ClickSubmit">
>     <binding name="selected" value="submitAction"/>
>     <binding name="tag" value='"EDIT_USER_UPDATE_ENTERPRISES"'/>
>   </component>
>
>   <component id="submitCancel" type="ClickSubmit">
>     <binding name="selected" value="submitAction"/>
>     <binding name="tag" value='"CANCEL"'/>
>   </component>
>
> </page-specification>
>
>
> -------------------------------------------------------------------
> userEnterprises.html
> -------------------------------------------------------------------
>
>               <table width="90%" class="body" border="1">
>                 <TR>
>                   <TD>
>                     <div
>                       jwcid="tree"
>                       id="tree"
>                       keyProvider="ognl:keyProvider"
>                       contentProvider="ognl:contentProvider"
>
>                       style="overflow: auto; width: auto; height: auto;">
>                       <span jwcid="@If" condition="ognl:item.id"
> conditionValue="true">
>                         <input jwcid="enterpriseCheckbox@Checkbox"
> value="ognl:item.checked" />
>                       </span>
>                       <span jwcid="@If" condition="ognl:item.active"
> conditionValue="ognl:true">
>                         <span style="color:black"><span jwcid="@Insert"
> value="ognl:item.name"/></span>
>                       </span>
>                       <span jwcid="@Else">
>                         <span style="color:gray"><span jwcid="@Insert"
> value="ognl:item.name"/></span>
>                       </span>
>                     </div>
>                   </TD>
>                 </TR>
>               </TABLE>
>
>
> -------------------------------------------------------------------
> UserEnterprises.java
>
>      (I doubt this class will we useful in solving this problem
>      but just in case I am doing so for completeness.)
> -------------------------------------------------------------------
>
> /*
> * Created on Jan 17, 2006
> *
> * Copyright 2005 Ingenix, Inc. All rights reserved.
> * This file contains CONFIDENTIAL and PROPRIETARY information
> * and should not be distributed without prior written permission.
> */
> package com.ingenix.freya.web.pages.authorization;
>
> import java.util.ArrayList;
> import java.util.HashSet;
> import java.util.Iterator;
> import java.util.List;
> import java.util.Set;
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.annotations.InjectState;
> import org.apache.tapestry.event.PageBeginRenderListener;
> import org.apache.tapestry.event.PageEvent;
>
> import com.tyco.api.authorization.AuthorizationFactory;
> import com.tyco.api.authorization.User;
> import com.tyco.api.enterprise.Enterprise;
> import
> com.tyco.web.components.authorization.AuthenticationListComponentBase;
> import com.tyco.web.components.enterprise.EnterpriseTreeContentProvider;
> import com.tyco.web.components.enterprise.Folder;
> import com.tyco.web.components.enterprise.Item;
>
> public abstract class UserEnterprises extends UserControllerPage
> implements
> PageBeginRenderListener
> {
>   private List mPermissions;
>   private Enterprise mEnterprise;
>
>   @InjectState( "contentProvider" )
>   public abstract EnterpriseTreeContentProvider getContentProvider();
>   public abstract void setContentProvider( EnterpriseTreeContentProvider
> pEnterpriseTreeContentProvider );
>
>   @InjectState( "enterpriseTreeState" )
>   public abstract Set<Long> getEnterpriseTreeState();
>   public abstract void setEnterpriseTreeState( Set pEnterpriseTreeState );
>
>   @InjectState("newUser")
>   public abstract User getNewUser();
>   public abstract void setNewUser(User val);
>
>   public abstract Long getID();
>
>   protected Log mLog = LogFactory.getLog(this.getClass().getName());
>
>   public void pageBeginRender(PageEvent pEvent)
>   {
>     detectCheckedEnterprises( getNewUser() );
>   }
>
>   public void activate(IRequestCycle pCycle)
>   {
>        Object[] parameters = pCycle.getListenerParameters();
>
>        if (parameters.length >= 2)
>       {
>           Long userID = (Long) parameters[1];
>           User user         =
> getAuthorizationService().getUserByID(userID);
>           setNewUser(user);
>           List permissionList = getUserPermissions(user);
>           setPermissions(permissionList);
>       }
>       // If Errors found then we need to keep user data with the error for
> redisplay
>       else if ((getErrorMessage() == null)  && (getPasswordError() ==
> null))
>      {
>         setNewUser(AuthorizationFactory.newUser());
>      }
> }
>
>   /**
>    * Although the superclass has its own save() method,
>    * we need to override it here so that we can get capture
>    * the checked enterprises. It is critical that we do not
>    * execute the superclass save().
>    */
>   public void save()
>   {
>     IRequestCycle pCycle = this.getRequestCycle();
>
>     if( ACTION_EDIT_USER_UPDATE_ENTERPRISES.equals( getSubmitAction() ) )
>     {
>       EnterpriseTreeContentProvider contentProvider =
> getContentProvider();
>       List treeRoots = contentProvider.getTreeRoots();
>       List<Long> enterpriseIds = determineCheckedEnterprises( treeRoots );
>
>       if( this.getRequestCycle().isRewinding() )
>       {
>         getAuthorizationService().assignEnterprisesToUser( enterpriseIds,
> getNewUser().getID() );
>         Long idOfUpdatedUser = getNewUser().getID();
>         User updatedUser = getAuthorizationService().getUserByID(
> idOfUpdatedUser );
>         setNewUser( updatedUser );
>
>         pCycle.activate(
AuthenticationListComponentBase.TARGET_EDIT_USER);
>       }
>     }
>     else if( ACTION_CANCEL.equals( getSubmitAction() ) )
>     {
>       pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER );
>     }
>
>   }
>
>   public List<Long> determineCheckedEnterprises( List pTreeRoots )
>   {
>     List<Long> checkedEnterprises = new ArrayList<Long>();
>
>     addChildNodes( pTreeRoots, checkedEnterprises );
>
>     return checkedEnterprises;
>   }
>
>
>   public void addChildNodes( List pFolderItems, List<Long>
> pCheckedEnterprises )
>   {
>     Iterator iterator = pFolderItems.iterator();
>     while( iterator.hasNext() )
>     {
>       Object obj = iterator.next();
>       if( obj instanceof Folder )
>       {
>         Folder folder = (Folder) obj;
>         if( folder.isChecked() )
>         {
>           String stringID = folder.getId();
>           pCheckedEnterprises.add( new Long( stringID ) );
>         }
>         List folderItems = folder.getItems();
>         List folderFolders = folder.getFolders();
>
>         if( folderItems.size() > 0 )
>         {
>           addChildNodes( folderItems, pCheckedEnterprises );
>         }
>         if( folderFolders.size() > 0 )
>         {
>           addChildNodes( folderFolders, pCheckedEnterprises );
>         }
>       }
>       else if( obj instanceof Item )
>       {
>         Item item = (Item) obj;
>         if( item.isChecked() )
>         {
>           String stringID = item.getId();
>           pCheckedEnterprises.add(  new Long( stringID ) );
>         }
>       }
>     }
>   }
>
>
>   public Enterprise getEnterprise()
>   {
>     return mEnterprise;
>   }
>   public void setEnterprise( Enterprise pEnterprise )
>   {
>     mEnterprise = pEnterprise;
>   }
>
>   public List getPermissions()
>   {
>     if (mPermissions == null)
>     {
>       mPermissions = new ArrayList();
>     }
>     return mPermissions;
>   }
>   public void setPermissions(List pPermissions)
>   {
>     mPermissions = pPermissions;
>   }
>
>
>
>   public void detectCheckedEnterprises( User pUser )
>   {
>     EnterpriseTreeContentProvider tree = getContentProvider();
>     if( tree == null )
>     {
>       initializeEnterpriseTreeContentProvider( getNewUser() );
>       tree = getContentProvider();
>     }
>
>     // First, compile a Set of the user's enterprises
>     List userEnts = pUser.getEnterprises();
>     if( userEnts == null || userEnts.size() == 0)
>     {
>       return;
>     }
>
>     Iterator userIt = userEnts.iterator();
>     Set<String> userEntSet = new HashSet<String>();
>     while( userIt.hasNext() )
>     {
>       Enterprise userEnt = (Enterprise) userIt.next();
>       userEntSet.add( userEnt.getName() );
>     }
>
>     // Next, go through the entepriseTree and display the user's checked
> enteprises
>     List treeRoots = tree.getTreeRoots();
>     Iterator it = treeRoots.iterator();
>
>     while( it.hasNext() )
>     {
>       Object obj = it.next();
>
>       if( obj instanceof Folder )
>       {
>         Folder aFolder = (Folder) obj;
>         String folderName = aFolder.getName();
>
>         if( userEntSet.contains( folderName ) )
>         {
>           aFolder.setChecked( true );
>         }
>         checkChildNodes( aFolder, userEntSet );
>
>       }
>       else if( obj instanceof Item )
>       {
>         Item anItem = (Item) obj;
>         String itemName = anItem.getName();
>
>         if( userEntSet.contains( itemName ) )
>         {
>           anItem.setChecked( true );
>         }
>       }
>     }
>   }
>
>   public void checkChildNodes( Folder pFolder, Set pUserEntSet )
>   {
>     List items = pFolder.getItems();
>     Iterator it = items.iterator();
>
>     while( it.hasNext() )
>     {
>       Item anItem = (Item) it.next();
>       if( pUserEntSet.contains( anItem.getName() ) )
>       {
>         anItem.setChecked( true );
>       }
>     }
>
>     List folders = pFolder.getFolders();
>     Iterator itF = folders.iterator();
>
>     while( itF.hasNext() )
>     {
>       Folder aFolder = (Folder) itF.next();
>       if( pUserEntSet.contains( aFolder.getName() ) )
>       {
>         aFolder.setChecked( true );
>       }
>       checkChildNodes( aFolder, pUserEntSet );
>     }
>   }
>
>   /** This method added to assist mock testing. */
>   public User getUserByID( Long pUserID )
>   {
>     return getAuthorizationService().getUserByID( pUserID );
>   }
> }
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


-- 
Jesse Kuhnert
Tacos/Tapestry, team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Tree w/Checkbox on each node--Way to Fix Indent?

Posted by Jesse Kuhnert <jk...@gmail.com>.
Is there an open issue for this in tacos? Seems like a big enough deal thing
that I should fix it. http://tacoscomponents.jot.com/BugReporter

On 6/30/06, Steve Shucker <ss...@vmsinfo.com> wrote:
>
> I had this problem a while ago and traced it to a PartialFor component
> within the tree that was persisting the contents incorrectly in the form.
> It's using an iterator that doesn't track depth.  As a workaround, you can
> create your own html/jwc files for the Tree control (use taco's backing
> class) and add a volatile=true property to the PartialFor component.  It's
> not ideal, but it's working great for me.
>
> -Steve
>
> -----Original Message-----
> From: Tyrone Hed [mailto:tyronehed@earthlink.net]
> Sent: Thursday, June 29, 2006 9:57 PM
> To: users@tapestry.apache.org
> Subject: Tree w/Checkbox on each node--Way to Fix Indent?
>
>
>
>    Folks,
>          I have developed a Tapestry app (4.0.1) that uses the Tree in
> four
> places. It works great in three of those places but not in the one that
> includes a checkbox on each node of the tree. The problem is that it loses
> track of the indent and gives all nodes of the tree the same indent as the
> right-most node. So, as the user opens each node, the tree marches from
> left
> to right. In short, it looks like hell. I've looked at the generated
> source
> but it just piles on divs and spans to get the indent. The margin indent,
> in
> short, is broken when you have to enclose a tree in a FORM. Any
> suggestions?
> Here is my code.
>                                                               Thank you,
>
>                                                                           Ty
>
>
> Files included:
>
> userEnterprises.page
> userEnterprises.html
> UserEnterprises.java
>
> -------------------------------------------------------------------
> userEnterprises.page
> -------------------------------------------------------------------
>
> <page-specification
> class="com.tyco.web.pages.authorization.UserEnterprises">
>
>     <description>Tree</description>
>       <property name="item" />
>         <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
>
>         <component id="tree" type="tacos:Tree">
>           <binding name="value"               value="item"/>
>           <binding name="nodeLinkAjax"   value="ognl:false" />
>           <binding name="evenOdd"          value="ognl:page.beans.evenOdd"
> />
>           <binding name="rowStyle"          value="ognl:beans.evenOdd"/>
>           <binding
> name="state"                value="enterpriseTreeState"/>
>         </component>
>
>   <component id="submitEditUserUpdateEnterprises" type="ClickSubmit">
>     <binding name="selected" value="submitAction"/>
>     <binding name="tag" value='"EDIT_USER_UPDATE_ENTERPRISES"'/>
>   </component>
>
>   <component id="submitCancel" type="ClickSubmit">
>     <binding name="selected" value="submitAction"/>
>     <binding name="tag" value='"CANCEL"'/>
>   </component>
>
> </page-specification>
>
>
> -------------------------------------------------------------------
> userEnterprises.html
> -------------------------------------------------------------------
>
>               <table width="90%" class="body" border="1">
>                 <TR>
>                   <TD>
>                     <div
>                       jwcid="tree"
>                       id="tree"
>                       keyProvider="ognl:keyProvider"
>                       contentProvider="ognl:contentProvider"
>
>                       style="overflow: auto; width: auto; height: auto;">
>                       <span jwcid="@If" condition="ognl:item.id"
> conditionValue="true">
>                         <input jwcid="enterpriseCheckbox@Checkbox"
> value="ognl:item.checked" />
>                       </span>
>                       <span jwcid="@If" condition="ognl:item.active"
> conditionValue="ognl:true">
>                         <span style="color:black"><span jwcid="@Insert"
> value="ognl:item.name"/></span>
>                       </span>
>                       <span jwcid="@Else">
>                         <span style="color:gray"><span jwcid="@Insert"
> value="ognl:item.name"/></span>
>                       </span>
>                     </div>
>                   </TD>
>                 </TR>
>               </TABLE>
>
>
> -------------------------------------------------------------------
> UserEnterprises.java
>
>      (I doubt this class will we useful in solving this problem
>      but just in case I am doing so for completeness.)
> -------------------------------------------------------------------
>
> /*
> * Created on Jan 17, 2006
> *
> * Copyright 2005 Ingenix, Inc. All rights reserved.
> * This file contains CONFIDENTIAL and PROPRIETARY information
> * and should not be distributed without prior written permission.
> */
> package com.ingenix.freya.web.pages.authorization;
>
> import java.util.ArrayList;
> import java.util.HashSet;
> import java.util.Iterator;
> import java.util.List;
> import java.util.Set;
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.annotations.InjectState;
> import org.apache.tapestry.event.PageBeginRenderListener;
> import org.apache.tapestry.event.PageEvent;
>
> import com.tyco.api.authorization.AuthorizationFactory;
> import com.tyco.api.authorization.User;
> import com.tyco.api.enterprise.Enterprise;
> import
> com.tyco.web.components.authorization.AuthenticationListComponentBase;
> import com.tyco.web.components.enterprise.EnterpriseTreeContentProvider;
> import com.tyco.web.components.enterprise.Folder;
> import com.tyco.web.components.enterprise.Item;
>
> public abstract class UserEnterprises extends UserControllerPage
> implements
> PageBeginRenderListener
> {
>   private List mPermissions;
>   private Enterprise mEnterprise;
>
>   @InjectState( "contentProvider" )
>   public abstract EnterpriseTreeContentProvider getContentProvider();
>   public abstract void setContentProvider( EnterpriseTreeContentProvider
> pEnterpriseTreeContentProvider );
>
>   @InjectState( "enterpriseTreeState" )
>   public abstract Set<Long> getEnterpriseTreeState();
>   public abstract void setEnterpriseTreeState( Set pEnterpriseTreeState );
>
>   @InjectState("newUser")
>   public abstract User getNewUser();
>   public abstract void setNewUser(User val);
>
>   public abstract Long getID();
>
>   protected Log mLog = LogFactory.getLog(this.getClass().getName());
>
>   public void pageBeginRender(PageEvent pEvent)
>   {
>     detectCheckedEnterprises( getNewUser() );
>   }
>
>   public void activate(IRequestCycle pCycle)
>   {
>        Object[] parameters = pCycle.getListenerParameters();
>
>        if (parameters.length >= 2)
>       {
>           Long userID = (Long) parameters[1];
>           User user         =
> getAuthorizationService().getUserByID(userID);
>           setNewUser(user);
>           List permissionList = getUserPermissions(user);
>           setPermissions(permissionList);
>       }
>       // If Errors found then we need to keep user data with the error for
> redisplay
>       else if ((getErrorMessage() == null)  && (getPasswordError() ==
> null))
>      {
>         setNewUser(AuthorizationFactory.newUser());
>      }
> }
>
>   /**
>    * Although the superclass has its own save() method,
>    * we need to override it here so that we can get capture
>    * the checked enterprises. It is critical that we do not
>    * execute the superclass save().
>    */
>   public void save()
>   {
>     IRequestCycle pCycle = this.getRequestCycle();
>
>     if( ACTION_EDIT_USER_UPDATE_ENTERPRISES.equals( getSubmitAction() ) )
>     {
>       EnterpriseTreeContentProvider contentProvider =
> getContentProvider();
>       List treeRoots = contentProvider.getTreeRoots();
>       List<Long> enterpriseIds = determineCheckedEnterprises( treeRoots );
>
>       if( this.getRequestCycle().isRewinding() )
>       {
>         getAuthorizationService().assignEnterprisesToUser( enterpriseIds,
> getNewUser().getID() );
>         Long idOfUpdatedUser = getNewUser().getID();
>         User updatedUser = getAuthorizationService().getUserByID(
> idOfUpdatedUser );
>         setNewUser( updatedUser );
>
>         pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER);
>       }
>     }
>     else if( ACTION_CANCEL.equals( getSubmitAction() ) )
>     {
>       pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER );
>     }
>
>   }
>
>   public List<Long> determineCheckedEnterprises( List pTreeRoots )
>   {
>     List<Long> checkedEnterprises = new ArrayList<Long>();
>
>     addChildNodes( pTreeRoots, checkedEnterprises );
>
>     return checkedEnterprises;
>   }
>
>
>   public void addChildNodes( List pFolderItems, List<Long>
> pCheckedEnterprises )
>   {
>     Iterator iterator = pFolderItems.iterator();
>     while( iterator.hasNext() )
>     {
>       Object obj = iterator.next();
>       if( obj instanceof Folder )
>       {
>         Folder folder = (Folder) obj;
>         if( folder.isChecked() )
>         {
>           String stringID = folder.getId();
>           pCheckedEnterprises.add( new Long( stringID ) );
>         }
>         List folderItems = folder.getItems();
>         List folderFolders = folder.getFolders();
>
>         if( folderItems.size() > 0 )
>         {
>           addChildNodes( folderItems, pCheckedEnterprises );
>         }
>         if( folderFolders.size() > 0 )
>         {
>           addChildNodes( folderFolders, pCheckedEnterprises );
>         }
>       }
>       else if( obj instanceof Item )
>       {
>         Item item = (Item) obj;
>         if( item.isChecked() )
>         {
>           String stringID = item.getId();
>           pCheckedEnterprises.add(  new Long( stringID ) );
>         }
>       }
>     }
>   }
>
>
>   public Enterprise getEnterprise()
>   {
>     return mEnterprise;
>   }
>   public void setEnterprise( Enterprise pEnterprise )
>   {
>     mEnterprise = pEnterprise;
>   }
>
>   public List getPermissions()
>   {
>     if (mPermissions == null)
>     {
>       mPermissions = new ArrayList();
>     }
>     return mPermissions;
>   }
>   public void setPermissions(List pPermissions)
>   {
>     mPermissions = pPermissions;
>   }
>
>
>
>   public void detectCheckedEnterprises( User pUser )
>   {
>     EnterpriseTreeContentProvider tree = getContentProvider();
>     if( tree == null )
>     {
>       initializeEnterpriseTreeContentProvider( getNewUser() );
>       tree = getContentProvider();
>     }
>
>     // First, compile a Set of the user's enterprises
>     List userEnts = pUser.getEnterprises();
>     if( userEnts == null || userEnts.size() == 0)
>     {
>       return;
>     }
>
>     Iterator userIt = userEnts.iterator();
>     Set<String> userEntSet = new HashSet<String>();
>     while( userIt.hasNext() )
>     {
>       Enterprise userEnt = (Enterprise) userIt.next();
>       userEntSet.add( userEnt.getName() );
>     }
>
>     // Next, go through the entepriseTree and display the user's checked
> enteprises
>     List treeRoots = tree.getTreeRoots();
>     Iterator it = treeRoots.iterator();
>
>     while( it.hasNext() )
>     {
>       Object obj = it.next();
>
>       if( obj instanceof Folder )
>       {
>         Folder aFolder = (Folder) obj;
>         String folderName = aFolder.getName();
>
>         if( userEntSet.contains( folderName ) )
>         {
>           aFolder.setChecked( true );
>         }
>         checkChildNodes( aFolder, userEntSet );
>
>       }
>       else if( obj instanceof Item )
>       {
>         Item anItem = (Item) obj;
>         String itemName = anItem.getName();
>
>         if( userEntSet.contains( itemName ) )
>         {
>           anItem.setChecked( true );
>         }
>       }
>     }
>   }
>
>   public void checkChildNodes( Folder pFolder, Set pUserEntSet )
>   {
>     List items = pFolder.getItems();
>     Iterator it = items.iterator();
>
>     while( it.hasNext() )
>     {
>       Item anItem = (Item) it.next();
>       if( pUserEntSet.contains( anItem.getName() ) )
>       {
>         anItem.setChecked( true );
>       }
>     }
>
>     List folders = pFolder.getFolders();
>     Iterator itF = folders.iterator();
>
>     while( itF.hasNext() )
>     {
>       Folder aFolder = (Folder) itF.next();
>       if( pUserEntSet.contains( aFolder.getName() ) )
>       {
>         aFolder.setChecked( true );
>       }
>       checkChildNodes( aFolder, pUserEntSet );
>     }
>   }
>
>   /** This method added to assist mock testing. */
>   public User getUserByID( Long pUserID )
>   {
>     return getAuthorizationService().getUserByID( pUserID );
>   }
> }
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


-- 
Jesse Kuhnert
Tacos/Tapestry, team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind.

RE: Tree w/Checkbox on each node--Way to Fix Indent?

Posted by Steve Shucker <ss...@vmsinfo.com>.
I had this problem a while ago and traced it to a PartialFor component
within the tree that was persisting the contents incorrectly in the form.
It's using an iterator that doesn't track depth.  As a workaround, you can
create your own html/jwc files for the Tree control (use taco's backing
class) and add a volatile=true property to the PartialFor component.  It's
not ideal, but it's working great for me.

-Steve

-----Original Message-----
From: Tyrone Hed [mailto:tyronehed@earthlink.net] 
Sent: Thursday, June 29, 2006 9:57 PM
To: users@tapestry.apache.org
Subject: Tree w/Checkbox on each node--Way to Fix Indent?



   Folks,
         I have developed a Tapestry app (4.0.1) that uses the Tree in four
places. It works great in three of those places but not in the one that
includes a checkbox on each node of the tree. The problem is that it loses
track of the indent and gives all nodes of the tree the same indent as the
right-most node. So, as the user opens each node, the tree marches from left
to right. In short, it looks like hell. I've looked at the generated source
but it just piles on divs and spans to get the indent. The margin indent, in
short, is broken when you have to enclose a tree in a FORM. Any suggestions?
Here is my code. 
                                                              Thank you,
                                                                          Ty


Files included:

userEnterprises.page
userEnterprises.html
UserEnterprises.java

-------------------------------------------------------------------
userEnterprises.page
-------------------------------------------------------------------

<page-specification
class="com.tyco.web.pages.authorization.UserEnterprises">
  
    <description>Tree</description>
      <property name="item" />
        <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd"/>
	
        <component id="tree" type="tacos:Tree">
          <binding name="value"               value="item"/>
          <binding name="nodeLinkAjax"   value="ognl:false" />
          <binding name="evenOdd"          value="ognl:page.beans.evenOdd"
/>
          <binding name="rowStyle"          value="ognl:beans.evenOdd"/>   
          <binding name="state"                value="enterpriseTreeState"/>
        </component>
	
  <component id="submitEditUserUpdateEnterprises" type="ClickSubmit">
    <binding name="selected" value="submitAction"/>
    <binding name="tag" value='"EDIT_USER_UPDATE_ENTERPRISES"'/>
  </component>
  
  <component id="submitCancel" type="ClickSubmit">
    <binding name="selected" value="submitAction"/>
    <binding name="tag" value='"CANCEL"'/>
  </component>

</page-specification>


-------------------------------------------------------------------
userEnterprises.html
-------------------------------------------------------------------

              <table width="90%" class="body" border="1">  
                <TR>
                  <TD>
                    <div 
                      jwcid="tree" 
                      id="tree" 
                      keyProvider="ognl:keyProvider"
                      contentProvider="ognl:contentProvider"

                      style="overflow: auto; width: auto; height: auto;">
                      <span jwcid="@If" condition="ognl:item.id"
conditionValue="true">
                        <input jwcid="enterpriseCheckbox@Checkbox"
value="ognl:item.checked" />
                      </span>
                      <span jwcid="@If" condition="ognl:item.active"
conditionValue="ognl:true">
                        <span style="color:black"><span jwcid="@Insert"
value="ognl:item.name"/></span>
                      </span>
                      <span jwcid="@Else">
                        <span style="color:gray"><span jwcid="@Insert"
value="ognl:item.name"/></span>
                      </span>
                    </div>
                  </TD>
                </TR>                            
              </TABLE>


-------------------------------------------------------------------
UserEnterprises.java

     (I doubt this class will we useful in solving this problem
     but just in case I am doing so for completeness.)
-------------------------------------------------------------------

/*
 * Created on Jan 17, 2006
 *
 * Copyright 2005 Ingenix, Inc. All rights reserved.
 * This file contains CONFIDENTIAL and PROPRIETARY information
 * and should not be distributed without prior written permission.
 */
package com.ingenix.freya.web.pages.authorization;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.annotations.InjectState;
import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEvent;

import com.tyco.api.authorization.AuthorizationFactory;
import com.tyco.api.authorization.User;
import com.tyco.api.enterprise.Enterprise;
import
com.tyco.web.components.authorization.AuthenticationListComponentBase;
import com.tyco.web.components.enterprise.EnterpriseTreeContentProvider;
import com.tyco.web.components.enterprise.Folder;
import com.tyco.web.components.enterprise.Item;

public abstract class UserEnterprises extends UserControllerPage implements
PageBeginRenderListener
{
  private List mPermissions;
  private Enterprise mEnterprise;  

  @InjectState( "contentProvider" )
  public abstract EnterpriseTreeContentProvider getContentProvider();
  public abstract void setContentProvider( EnterpriseTreeContentProvider
pEnterpriseTreeContentProvider );    
    
  @InjectState( "enterpriseTreeState" )
  public abstract Set<Long> getEnterpriseTreeState();
  public abstract void setEnterpriseTreeState( Set pEnterpriseTreeState );
  
  @InjectState("newUser")
  public abstract User getNewUser();
  public abstract void setNewUser(User val);
  
  public abstract Long getID();
  
  protected Log mLog = LogFactory.getLog(this.getClass().getName());
  
  public void pageBeginRender(PageEvent pEvent)
  {
    detectCheckedEnterprises( getNewUser() );
  }
  
  public void activate(IRequestCycle pCycle) 
  {	
       Object[] parameters = pCycle.getListenerParameters();
    	    
       if (parameters.length >= 2)
      {      
          Long userID = (Long) parameters[1];
          User user         = getAuthorizationService().getUserByID(userID);
          setNewUser(user);
          List permissionList = getUserPermissions(user);
          setPermissions(permissionList);
      }
      // If Errors found then we need to keep user data with the error for
redisplay
      else if ((getErrorMessage() == null)  && (getPasswordError() == null))
     {
        setNewUser(AuthorizationFactory.newUser());
     }  
}
	
  /**
   * Although the superclass has its own save() method, 
   * we need to override it here so that we can get capture
   * the checked enterprises. It is critical that we do not
   * execute the superclass save().
   */
  public void save()
  {
    IRequestCycle pCycle = this.getRequestCycle();
    
    if( ACTION_EDIT_USER_UPDATE_ENTERPRISES.equals( getSubmitAction() ) )
    {
      EnterpriseTreeContentProvider contentProvider = getContentProvider();
      List treeRoots = contentProvider.getTreeRoots();
      List<Long> enterpriseIds = determineCheckedEnterprises( treeRoots );
      
      if( this.getRequestCycle().isRewinding() )
      {
        getAuthorizationService().assignEnterprisesToUser( enterpriseIds,
getNewUser().getID() );
        Long idOfUpdatedUser = getNewUser().getID();
        User updatedUser = getAuthorizationService().getUserByID(
idOfUpdatedUser );
        setNewUser( updatedUser );
        
        pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER );
      }
    }
    else if( ACTION_CANCEL.equals( getSubmitAction() ) )
    {
      pCycle.activate( AuthenticationListComponentBase.TARGET_EDIT_USER );
    }
 
  }
  
  public List<Long> determineCheckedEnterprises( List pTreeRoots )
  {
    List<Long> checkedEnterprises = new ArrayList<Long>();
    
    addChildNodes( pTreeRoots, checkedEnterprises );
    
    return checkedEnterprises;
  }
  
  
  public void addChildNodes( List pFolderItems, List<Long>
pCheckedEnterprises )
  {
    Iterator iterator = pFolderItems.iterator();
    while( iterator.hasNext() )
    {
      Object obj = iterator.next();
      if( obj instanceof Folder )
      {
        Folder folder = (Folder) obj;
        if( folder.isChecked() )
        { 
          String stringID = folder.getId();
          pCheckedEnterprises.add( new Long( stringID ) );
        }
        List folderItems = folder.getItems();
        List folderFolders = folder.getFolders();
        
        if( folderItems.size() > 0 )
        {
          addChildNodes( folderItems, pCheckedEnterprises );
        }
        if( folderFolders.size() > 0 )
        {
          addChildNodes( folderFolders, pCheckedEnterprises );
        }
      }
      else if( obj instanceof Item )
      {
        Item item = (Item) obj;
        if( item.isChecked() )
        {
          String stringID = item.getId();
          pCheckedEnterprises.add(  new Long( stringID ) );
        }
      }
    }
  }
 
  
  public Enterprise getEnterprise()
  {
    return mEnterprise;
  }  
  public void setEnterprise( Enterprise pEnterprise )
  {
    mEnterprise = pEnterprise;
  }  
      
  public List getPermissions()
  {
    if (mPermissions == null)
    {
      mPermissions = new ArrayList();
    }
    return mPermissions;
  }
  public void setPermissions(List pPermissions)
  {
    mPermissions = pPermissions;
  }  

  
  
  public void detectCheckedEnterprises( User pUser )
  {
    EnterpriseTreeContentProvider tree = getContentProvider();
    if( tree == null )
    {
      initializeEnterpriseTreeContentProvider( getNewUser() );   
      tree = getContentProvider();
    }    
    
    // First, compile a Set of the user's enterprises
    List userEnts = pUser.getEnterprises();
    if( userEnts == null || userEnts.size() == 0)
    {
      return;
    }
    
    Iterator userIt = userEnts.iterator();
    Set<String> userEntSet = new HashSet<String>();
    while( userIt.hasNext() )
    {
      Enterprise userEnt = (Enterprise) userIt.next();
      userEntSet.add( userEnt.getName() );
    }
    
    // Next, go through the entepriseTree and display the user's checked
enteprises
    List treeRoots = tree.getTreeRoots();
    Iterator it = treeRoots.iterator();
    
    while( it.hasNext() )
    {
      Object obj = it.next();
      
      if( obj instanceof Folder )
      {
        Folder aFolder = (Folder) obj;
        String folderName = aFolder.getName();
        
        if( userEntSet.contains( folderName ) )
        {
          aFolder.setChecked( true );
        }
        checkChildNodes( aFolder, userEntSet );
        
      }
      else if( obj instanceof Item )
      {
        Item anItem = (Item) obj;
        String itemName = anItem.getName();
        
        if( userEntSet.contains( itemName ) )
        {
          anItem.setChecked( true );
        }
      }      
    }
  }
  
  public void checkChildNodes( Folder pFolder, Set pUserEntSet )
  {
    List items = pFolder.getItems();
    Iterator it = items.iterator();
    
    while( it.hasNext() )
    {
      Item anItem = (Item) it.next();
      if( pUserEntSet.contains( anItem.getName() ) )
      {
        anItem.setChecked( true );
      }
    }
    
    List folders = pFolder.getFolders();
    Iterator itF = folders.iterator();
    
    while( itF.hasNext() )
    {
      Folder aFolder = (Folder) itF.next();
      if( pUserEntSet.contains( aFolder.getName() ) )
      {
        aFolder.setChecked( true );
      }
      checkChildNodes( aFolder, pUserEntSet );
    }    
  }
  
  /** This method added to assist mock testing. */
  public User getUserByID( Long pUserID )
  {
    return getAuthorizationService().getUserByID( pUserID );
  }
}





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org