Josh Canfield wrote:
Hey Alec,

Looking at small excerpts from a large file leaves too much to the
imagination. Can you create a minimal but complete page and component
that reproduces the problem?


Yes, I should have done it long time ago, I know. Below is the complete example, removing all old stuff trailing around. Here comes:

- What's rendered (ascii)
- BugPage{.tml|.java}
- Layout{.tml,|java}
- ReportSize{.tml,.java}

As you can see, the ReportSize component works whereas the Layout doesn't. For the moment, I presume that the situation still is such that the problem is about the listSource parameter, while the columns is fine.

Debugger says same thing: the value returned from BugPage.getListsource() is a List<IRow> w 500 items. The value stored as @Parameter listSource in Layout is a SingletonList containing the serialized value of the 500 item list. This is returned by getListSource() in Layout as-is.

Note that I've cut away lot's of stuff from BugPage. Layout.java is as-is (for now).

--------------------------- rendered -------------------------------

Orvar:1   // ${orvar}() in Layout reports size of singleton.
        
YALT LDAP Report
Report for (mail=*), size: 500, [EMAIL PROTECTED]
// ReportSize works just fine.

-------------------------- BugPage ---------------------------

<t:layout connectionUrl="${prop:connection.url}"
                      listSource="${prop:listSource}"
                      columns="${literal:cn,orvar}"
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
    <head>
        <title>Search</title>
    </head>
    <body class="tables">
        <h1>YALT LDAP Report</h1>
        Report for ${pattern}, size:
        <t:reportsize  report="prop:report" rows="prop:report.list" />
    </body>

</t:layout>


package net.kln.yalt.pages;

import java.util.List;

import javax.naming.NameNotFoundException;
import javax.naming.NamingException;

import net.kln.yalt.aso.User;
import net.kln.yalt.data.ConnectionData;
import net.kln.yalt.report.AttributeList;
import net.kln.yalt.report.ILdapReportService;
import net.kln.yalt.report.IRow;
import net.kln.yalt.report.LdapReport;
import net.kln.yalt.report.LdapSchema;
import net.kln.yalt.report.Report;

import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.ioc.annotations.Inject;
import org.slf4j.Logger;

public class BugPage
{
    @Inject
    private Logger                log;

    @Inject
    private ILdapReportService    reportService;

    @Persist
    private AttributeList         attributeList;

    @Persist
    private String                pattern;

    @Persist
    private LdapReport            report;

    @Persist
    private User                  user;

    @Persist
    private ConnectionData        connection;

    /** Initiate report to present a search result. */
    public BugPage init( ConnectionData conn, User user, String pattern)
    {
        try {
            this.connection = conn;
            this.user = user;
            this.pattern = pattern;
            report = reportService.getLdapReport( user);
            attributeList = new AttributeList( user);
            return this;
        }
        catch( Exception e) {
            throw new RuntimeException( "Error creating report", e);
        }
    }

    public Object onActivate() throws NamingException
    {
        if( report.size() > 0 )
            return null;
        boolean searchOK = false;
        try {
            report.setReturnedAttributes( attributeList.getColumns());
            report.patternSearch( pattern);
            if( report.size() == 0)
                throw new NameNotFoundException();

            else
                searchOK = true;
        }
        catch( Exception e ) {}
        finally {
            if( searchOK)
            {
                log.debug( "Search done, matches: " + report.size());
                LdapSchema schema = new LdapSchema( user.getDirContext());
                if( schema.getAttributes() == null)
                {
                     return null;
                }
            }
        }
        return null;
    }

    public Report getReport()
    {
        List<IRow> list = report.getList();
        return report;
    }

    public List<IRow> getListSource()
    {
        List<IRow> list = report.getList();
        int size = list.size();
        return list;
    }

    public int getReportSize() { return report.size(); }

    public String getPattern() { return pattern; }

    public void setPattern(String pattern) { this.pattern = pattern; }

    public void setReport(LdapReport report) { this.report = report; }

    public User getUser() { return user; }

    public void setUser(User user) { this.user = user; }

    public ConnectionData getConnection() { return connection; }

    public void setConnection( ConnectionData connection)
    {
        this.connection = connection;
    }
}
-------------------------- Layout -------------------------------------
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
    <head>
        <title>YALT</title>
    </head>
    <body>
         <div class="connection">
             <t:if test="connected" else="block:notConnected">
<img src="${connectIcon}" title="${prop:connectionTooltip}"/>
             </t:if>
             <t:block id="notConnected">
                 <img src="${disconnectIcon}"
                      title="${message:disconnectedTooltip}"/>
             </t:block>
        </div>
        <t:if test="listsVisible">
            Orvar:${orvar}
        </t:if>

        <t:pagelink page="start">
             <img src="icons/yalt.gif" class="yaltIcon"/>
        </t:pagelink>
        <div class="flags"> <t:selectLocale/></div>

        <t:body/>

    </body>
</html>

---------------------------- Layout.java ----------------------------
package net.kln.yalt.components;

import java.util.List;

import net.kln.yalt.report.IRow;

import org.apache.tapestry.Asset;
import org.apache.tapestry.annotations.IncludeStylesheet;
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.annotations.Path;
import org.apache.tapestry.ioc.Messages;
import org.apache.tapestry.ioc.annotations.Inject;

@IncludeStylesheet("context:css/yalt.css")
public class Layout
{
    @Parameter( "false")
    private String       connectionUrl;

    @Parameter
    private List<IRow>  listSource;

    @Parameter
    private List<String> columns;

    @Inject
    private Messages     messages;

    @Inject
    @Path( "context:icons/connect_no.png")
    private Asset        disconnectIcon;

    @Inject
    @Path( "context:icons/connect_established.png")
    private Asset        connectIcon;

    @Inject
    @Path( "context:icons/yalt.svg")
    private Asset        yaltIcon;

    public Asset getYaltIcon()
    {
        return yaltIcon;
    }

    public boolean isConnected()
    {
        return connectionUrl != null && !connectionUrl.equals( "false");
    }

    public Asset getDisconnectIcon()
    {
        return disconnectIcon;
    }

    public Asset getConnectIcon()
    {
        return connectIcon;
    }

    public boolean isListsVisible()
    {
        return listSource != null;
    }

    public String getConnectionTooltip()
    {
        return messages.format( "connectionTooltip",
                                connectionUrl.replace( "%20", " "));
    }

    public List<String> getColumns()
    {
        return columns;
    }

     public List<IRow> getListSource()
    {
        return listSource;
    }

    public String getOrvar()
    {
        return "" + listSource.size();
    }
}
----------------------------- ReportSize -------------------------


<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
      ${reportSize}, ${firstMail}
</t:container>

package net.kln.yalt.components;

import java.util.List;

import net.kln.yalt.report.IRow;
import net.kln.yalt.report.Report;

import org.apache.tapestry.annotations.Parameter;

public class ReportSize
{
   @Parameter
   private  Report report;

   @Parameter
   private List<IRow> rows;

   public Integer getReportSize() { return report.size(); }
   public String getFirstMail()
   {
        return rows.get( 0).getColumnValue( "mail");
   }
}

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

Reply via email to