Hello all,

I've got two @For loops inside a @Form tag. Each @For loop is printing
the part of the contents of the MeterCB class, two text fields and one
checkbox. During the rewind process tapestry is not recognizing the
fact that checkboxes in the second @For loop are being selected.

I've already spent too much time trying to fix this problem :( has any
body fixed this problem or has a work around?

I've enclosed the source code ...

---------------------------------------------------------------------------------------
permissions.java
package com.technolog.page;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.annotations.InjectObject;
import org.apache.tapestry.annotations.InjectPage;
import org.apache.tapestry.annotations.InjectState;
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.components.Block;
import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEvent;

import com.technolog.UserASO;
import com.technolog.component.MeterCB;
import com.technolog.dao.SiteListDAO;
import com.technolog.dao.UserDAO;
import com.technolog.db.AUser;
import com.technolog.db.Meter;

public abstract class Permissions extends SecuredBasePage implements
PageBeginRenderListener{

        @InjectPage("Users")
        public abstract Users getUsersPage();

        @InjectObject("spring:siteListDAO")
        public abstract SiteListDAO getSiteListDAO();

        @InjectObject("spring:userDAO")
        public abstract UserDAO getUserDAO();

        @InjectState("user")
        public abstract UserASO getUserASO();

        @Persist
        public abstract List<MeterCB> getMetersOwnedByUser();
        public abstract void setMetersOwnedByUser(List<MeterCB> list);

        public abstract MeterCB getMeterOwnedByUser();

        public abstract MeterCB getMeterNotOwnedByUser();

        @Persist
        public abstract List<MeterCB> getMetersNotOwnedByUser();
        public abstract void setMetersNotOwnedByUser(List<MeterCB> list);

        @Persist
        public abstract AUser getUser();
        public abstract void setUser(AUser user);

        public List<MeterCB> metersToAssign = new ArrayList<MeterCB>(0);
        public List<MeterCB> metersToUnAssign = new ArrayList<MeterCB>(0);

        public void doRemovePermissions(IRequestCycle cycle){
                if (getMetersOwnedByUser()!=null)
                return;
                for (MeterCB meter : getMetersOwnedByUser()){
                        if (meter.getSelected()){
                                
getUserDAO().deleteMeterFromUser(getUser().getUserId(), meter.getMeterId());
                        }
                }
        }

        public void doAddPermissions(IRequestCycle cycle){
                if (getMetersNotOwnedByUser()!=null)
                return;
                for (MeterCB meter : getMetersNotOwnedByUser()){
                        if (meter.getSelected()){
                                
getUserDAO().addMeterToUser(getUser().getUserId(), meter.getMeterId());
                        }
                }
        }

        public void doPrevPage(IRequestCycle cycle){
                cycle.activate(getUsersPage() );
        }

        public boolean containsMeter(List<Meter> meters, long meterId){
                for (Meter meter : meters){
                        if (meter.getMeterId()==meterId){
                                return true;
                        }
                }
                return false;
        }

        public List<Meter> getDifference(List<Meter> meters, List<Meter> 
meters2){
                List<Meter> differenceList = new Vector<Meter>(0);
                for (Meter meter : meters){
                        if (containsMeter(meters2, meter.getMeterId())){

                        } else {
                                differenceList.add(meter);
                        }
                }
                return differenceList;
        }

        public void pageBeginRender(PageEvent event){

                if (!event.getRequestCycle().isRewinding()){

                        List<Meter> notOwnedMetersList = 
getSiteListDAO().GetCompleteUserSiteList();
                        List<Meter> ownedMetersList =
getSiteListDAO().GetUserSiteList(getUser().getUserName());

                        //notOwnedMetersList.removeAll(ownedMetersList);
                        notOwnedMetersList = getDifference(notOwnedMetersList, 
ownedMetersList);
                        List<MeterCB> metersNotOwnedByUser = new 
Vector<MeterCB>(0);
                        for (Meter meter: notOwnedMetersList){
                                metersNotOwnedByUser.add(new MeterCB(meter, 
false));
                        }

                        setMetersNotOwnedByUser(metersNotOwnedByUser);


                        List<MeterCB> metersOwnedByUser = new 
Vector<MeterCB>(0);
                        for (Meter meter: ownedMetersList){
                                metersOwnedByUser.add(new MeterCB(meter, 
false));
                        }

                        setMetersOwnedByUser(metersOwnedByUser);
                } else {
                        System.out.println("rewinding...");

                        metersToAssign.clear();
                        metersToUnAssign.clear();
                }

                System.out.println("fire");
        }

        public Block getMetersOwned(){
                return (Block)getComponent("metersOwnedBlock");
        }

        public Block getMetersNotOwned(){
                return (Block)getComponent("metersNotOwnedBlock");
        }

        public void unAssignedSiteListener(IRequestCycle cycle){
                if (cycle.isRewinding()){
                        MeterCB meter = getMeterNotOwnedByUser();
                        if (!meter.getSelected()) return;
                        metersToAssign.add(meter);
                        System.out.println("assigned "+meter.getMeterId());
                }

        }

        public void assignedSiteListener(IRequestCycle cycle){
                if (cycle.isRewinding()){

                        MeterCB meter = getMeterOwnedByUser();
                        if (!meter.getSelected()) return;
                        metersToUnAssign.add(meter);
                        System.out.println("uassigned "+meter.getMeterId());
                }

        }

}

permissions.page
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE page-specification
     PUBLIC "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
     "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd";>
     <page-specification class="com.technolog.page.Permissions">
                <component id="form" type="Form"/>

                <component id="border" type="Border"/>

                <component id="showMetersOwned" type="RenderBlock">
                        <binding name="block" value="metersOwned"/>
                </component>

                <component id="showMetersNotOwned" type="RenderBlock">
                    <binding name="block" value="metersNotOwned"/>
                </component>

                <component id="metersOwned" type="For">
                    <binding name="source" value="metersOwnedByUser"/>
                    <binding name="value"  value="meterOwnedByUser"/>
                        <binding name="element" value="literal:tr"/>
                </component>

                <component id="metersNotOwned" type="For">
                    <binding name="source" value="metersNotOwnedByUser"/>
                    <binding name="value" value="meterNotOwnedByUser"/>
                    <binding name="element" value="literal:tr"/>
                </component>

                <component id="metersOwnedBlock" type="Block"/>

                <component id="metersNotOwnedBlock" type="Block"/>

                <component id="prev" type="DirectLink">
                        <binding name="listener" value="listener:doPrevPage"/>
                </component>

                <component id="removeMeters" type="Submit">
                        <binding name="listener" 
value="listener:doRemovePermissions"/>
                </component>

                <component id="addMeters" type="Submit">
                        <binding name="listener" 
value="listener:doAddPermissions"/>
                </component>

                <component id="mpanMetersNotOwned" type="Insert">
                        <binding name="value" value="meterNotOwnedByUser.mpan"/>
                </component>

                <component id="meterIdMetersNotOwned" type="Insert">
                        <binding name="value" 
value="meterNotOwnedByUser.meterId"/>
                </component>

                <component id="mpanMetersOwned" type="Insert">
                        <binding name="value" value="meterOwnedByUser.mpan"/>
                </component>

                <component id="meterIdMetersOwned" type="Insert">
                        <binding name="value" value="meterOwnedByUser.meterId"/>
                </component>

                <component id="selectedMetersNotOwned" type="Checkbox">
                        <binding name="value" 
value="meterNotOwnedByUser.selected"/>
                </component>

                <component id="selectedMetersOwned" type="Checkbox">
                        <binding name="value" 
value="meterOwnedByUser.selected"/>
                </component>

                <component id ="unAssignedSitesListener" type="InvokeListener">
                        <binding name="listener" 
value="listener:unAssignedSiteListener"/>
                </component>

                <component id="assignedSitesListener" type="InvokeListener">
                        <binding name="listener" 
value="listener:assignedSiteListener"/>
                </component>

     </page-specification>


---------------------------------------------------------------------------------------------------------------------
permissions.html
<html>
<head >
<title>title</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<body>

 <span jwcid="$content$">
 <span jwcid="border">
 <form jwcid="form">
 <table>
        <tr valign="top"><td><span jwcid="showMetersNotOwned"/></td><td
align="center"><input jwcid="addMeters" type="submit" value="Add
Meter"/><br/><br/><input jwcid="removeMeters" type="submit"
value="Remove Meter"/></td><td><span
jwcid="showMetersOwned"/></td></tr>
 </table>
 </form>

 <a jwcid="prev" href="">Prev</a>

 <span jwcid="metersNotOwnedBlock">
 <b>Meters not assigned</b><br/>
 <table>
        <tr jwcid="metersNotOwned" >
                <td><span jwcid="mpanMetersNotOwned"/></td>
                <td><span jwcid="meterIdMetersNotOwned"/></td>
                <td><input jwcid="selectedMetersNotOwned" type="checkbox"/></td>
                <span jwcid="unAssignedSitesListener"/>
        </tr>
 </table>
 </span>

 <span jwcid="metersOwnedBlock">
 <b>Meters already assigned</b><br/>
        <table>
          <tr jwcid="metersOwned">
                <td><span jwcid="mpanMetersOwned"/></td>
                <td><span jwcid="meterIdMetersOwned"/></td>
                <td><input jwcid="selectedMetersOwned" type="checkbox"/></td>
                <span jwcid="assignedSitesListener"/>
          </tr>
        </table>
 </span>

 </span>
 </span>
</body>
</html>

----------------------------------------------------------------------------------------------------------------------
meterCB.java
package com.technolog.component;

import java.io.Serializable;

import com.technolog.db.Meter;

public class MeterCB extends Meter implements Serializable{

        /**
         *
         */
        private static final long serialVersionUID = -3502445516008868262L;
        private Boolean selected = false;
        
        /**
         *
         * @param meterId
         * @param mpan
         * @param meterName
         * @param demoMeter
         * @param readerType
         * @param industry
         * @param tamper
         * @param selected
         */
        public MeterCB(long meterId, long mpan, String meterName, byte
demoMeter, short readerType, short industry, Boolean tamper, Boolean
selected) {
                super(meterId, mpan, meterName, demoMeter, readerType, 
industry, tamper);
                this.selected = selected;
        }
        /**
         *
         * @param meter
         */
        public MeterCB(Meter meter){
                super(meter.getMeterId(), meter.getMpan(), meter.getMeterName(),
meter.getDemoMeter(), meter.getReaderType(), meter.getIndustry(),
meter.getTamper());
                selected = false;
        }
        /**
         *
         * @param meter
         * @param selected
         */
        public MeterCB(Meter meter, Boolean selected){
                super(meter.getMeterId(), meter.getMpan(), meter.getMeterName(),
meter.getDemoMeter(), meter.getReaderType(), meter.getIndustry(),
meter.getTamper());
                this.selected = selected;
        }
        
        public Boolean getSelected() {
                return selected;
        }

        public void setSelected(Boolean selected) {
                this.selected = selected;
        }
        
        

}

--
Thanks

A Jabbar Azam

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to