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