You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by tapuser <sr...@yahoo.com> on 2007/04/23 05:39:27 UTC

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

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