Are these Tapestry 3 or 4? They seems to be Tapestry 3.

On 1/25/06, Patrick Casey <[EMAIL PROTECTED]> wrote:
>
>
>         Steve,
>
>         Probably the easiest way to invoke a service is to link directly
> to
> it rather than use a directlink, have the page listener fire, and then
> invoke the service. So what I'd recommend is that you see if you can use
> the
> existing ServiceLink component to invoke your service or, alternately,
> just
> write your own "PDFLink" component.
>
>         Here as a model is a service of mine that prints BIRT reports (I'm
> not including all the dependencies but you an see the code flow). Also
> attached is the ReportLink component that links to it.
>
>         1: The report Link jwc and .html
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE component-specification PUBLIC
>   "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
>   "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd";>
> <!-- generated by Spindle, http://spindle.sourceforge.net -->
>
> <component-specification class="components.ReportLink"
>     allow-body="yes"
>     allow-informal-parameters="yes">
>
>     <description>add a description</description>
>     <parameter name="reportName" required="yes" type="java.lang.String"
> direction="in"/>
>     <parameter name="keys" required="no" type="java.lang.String[]"
> direction="in" />
>     <parameter name="values" required="no" type="java.lang.String[]"
> direction="in" />
>     <parameter name="pdf" required="no" type="boolean" direction="in" />
> </component-specification>
>
> <span jwcid="@Any" element="a" href="ognl:getLink()">
>         <span jwcid="@RenderBody" />
> </span>
>
>         2: The ReportLink .java (which constructs the link to the service)
>
> package components;
>
> import org.apache.tapestry.BaseComponent;
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.engine.IEngineService;
> import org.apache.tapestry.engine.ILink;
>
> import services.ReportServer;
>
> public abstract class ReportLink extends BaseComponent {
>         private String fReportName;
>         private String fText;
>         private boolean fPdf = false;
>         private String[] fKeys;
>         private String[] fValues;
>
>         public boolean isPdf() {
>                 return fPdf;
>         }
>
>         public void setPdf(boolean pdf) {
>                 fPdf = pdf;
>         }
>
>         public String[] getKeys() {
>                 return fKeys;
>         }
>
>         public void setKeys(String[] keys) {
>                 fKeys = keys;
>         }
>
>         public String getReportName() {
>                 return fReportName;
>         }
>
>         public void setReportName(String reportName) {
>                 fReportName = reportName;
>         }
>
>         public String[] getValues() {
>                 return fValues;
>         }
>
>         public void setValues(String[] values) {
>                 fValues = values;
>         }
>
>         public String getLink() {
>                 IRequestCycle cycle = getPage().getRequestCycle();
>                 IEngineService service =
> cycle.getEngine().getService(ReportServer.SERVICE_NAME);
>
>                 Object[] parms = new Object[4];
>                 parms[0] = fReportName;
>                 parms[1] = fKeys;
>                 parms[2] = fValues;
>                 parms[3] = fPdf;
>                 ILink link = service.getLink(cycle, this, parms);
>                 return link.getAbsoluteURL();
>         }
>
>         public String getText() {
>                 return fText;
>         }
>
>         public void setText(String text) {
>                 fText = text;
>         }
>
> }
>
>         3: The Service Itself
>
> package services;
>
> import java.io.IOException;
> import java.util.Date;
> import java.util.HashMap;
>
> import javax.servlet.ServletException;
>
> import message.SystemMessage;
> import navigation.Gallileo;
>
> import org.apache.tapestry.IComponent;
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.engine.AbstractService;
> import org.apache.tapestry.engine.IEngineServiceView;
> import org.apache.tapestry.engine.ILink;
> import org.apache.tapestry.request.ResponseOutputStream;
> import org.eclipse.birt.report.engine.api.HTMLRenderOption;
>
> import presentation.Visit;
>
> import reports.ReportManager;
> import security.GateKeeper;
> import servlet.MyServlet;
> import utils.DateUtils;
>
> public class ReportServer extends AbstractService {
>         public static final String SERVICE_NAME = "ReportServer";
>         private String FIRSTDOM = "$firstDOM";
>         private String FIRSTDONM = "$firstDONM";
>         private String FIRSTDOLM = "$firstDOLM";
>
>         private Object processValue(String test) {
>                 if (test == null || !test.startsWith("$"))
>                         return test;
>                 // maybe
>                 if (FIRSTDOM.equals(test))
>                         return DateUtils.getFirstDayOfMonth(null);
>                 else if (FIRSTDONM.equals(test))
>                         return DateUtils.getFirstDayOfNextMonth(null);
>                 else if (FIRSTDOLM.equals(test))
>                         return DateUtils.getFirstDayOfLastMonth(null);
>                 else
>                         return test;
>
>         }
>         public ILink getLink(IRequestCycle cycle, IComponent component,
>                         Object[] parms) {
>                 String[] context;
>                 String pageName = component.getPage().getPageName();
>                 String idPath = component.getIdPath();
>                 context = new String[1];
>                 context[0] = pageName;
>                 return constructLink(cycle, SERVICE_NAME, context, parms,
> true);
>         }
>
>         public void service(IEngineServiceView acrg0, IRequestCycle cycle,
>                         ResponseOutputStream response) throws
> ServletException, IOException {
>                 Object[] parms = this.getParameters(cycle);
>                 String reportName = (String) parms[0];
>                 String[] keys = (String[]) parms[1];
>                 String[] values = (String[]) parms[2];
>                 boolean pdf = (Boolean) parms[3];
>                 HashMap params = new HashMap();
>                 int max = Math.min(keys.length, values.length);
>                 // check authorization...
>                 if (!GateKeeper.canViewReport(reportName)){
>                         Visit v = MyServlet.getVisit();
>                         String message =
> SystemMessage.bindMessage("generic_not_authorized");
>                         v.getMessageQueue().addError(message);
>                         Gallileo.goHome(cycle);
>                         return;
>                 }
>                 for (int x = 0; x < max; x++) {
>                         String key = keys[x];
>                         String value = values[x];
>                         Object send = processValue(value);
>                         // big time bodge
>                         if (send instanceof Date) {
>                                 send = DateUtils.renderBirtString((Date)
> send);
>                         }
>                         params.put(key, send);
>                 }
>                 // now we render the report
>                 response.setContentType("text/html");
>                 String output;
>                 if (pdf) {
>                         response.setContentType("application/pdf");
>
> cycle.getRequestContext().getResponse().setHeader("Pragma", "public");
>
> cycle.getRequestContext().getResponse().setHeader("Cache-Control",
> "max-age=0");
>                         output = HTMLRenderOption.OUTPUT_FORMAT_PDF;
>                 } else
>                         output = HTMLRenderOption.OUTPUT_FORMAT_HTML;
>                 ReportManager.runReport(reportName, params, response,
> output);
>
>         }
>
>         public String getName() {
>
>                 return SERVICE_NAME;
>         }
>
> }
>
> > -----Original Message-----
> > From: Steve Wells [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, January 25, 2006 1:04 AM
> > To: tapestry-user@jakarta.apache.org
> > Subject: Wiring up an Export service
> >
> > Like many folks I have a requirement to stream out reports (or whatever)
> > in various formats eg pdf, xls
> >
> > Following some threads here I've started writing a Service to handle
> > this but am having trouble wiring it into my pages (some basic Tap
> > knowledge is eluding me here)
> >
> > The basic flow is:
> > ReportCriteria page to collect parameters eg. date range, export format
> > Form submit listener calls ReportResult page to get the report data and
> > spit out to user in selected format...
> >   ...OR should the listener call the service, if so how?
> >
> > Any more detailed code examples or tips would be fantastic.  I'm
> > starting to feel a bit dumb right now as I can't see how a page talks to
> > a service.
> >
> > Thanks...
> > --
> >   Steve Wells
> >   [EMAIL PROTECTED]
> >
> > --
> > http://www.fastmail.fm - Or how I learned to stop worrying and
> >                           love email again
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to