Ya, I like that. I'll give all these a shot. Here's what I setup thus far, before reading these posts. But what you have is much simpler. Thanks.

############################################################################
       mount(new URIRequestTargetUrlCodingStrategy("/cvs") {

           @Override
           public IRequestTarget decode(RequestParameters param) {
               return new CVSRequestTarget();
           }
       });
############################################################################
class CVSRequestTarget implements IRequestTarget {

   public CVSRequestTarget() {
   }

   public void respond(RequestCycle requestCycle) {
       WebResponse response = (WebResponse) requestCycle.getResponse();
boolean includeArchived = Boolean.getBoolean(requestCycle.getRequest().getParameter("includeArchived")); Long divisionId = Long.getLong(requestCycle.getRequest().getParameter("divisionId"));
           Logger.getLogger(getClass()).error(includeArchived + "\n\n");
           Logger.getLogger(getClass()).error(divisionId + "\n\n");
Session session = ((RequestCycleImpl) requestCycle).getHibernateSession();
       Transaction tx = session.beginTransaction();
       try {
           StringBuilder out = new StringBuilder();
           SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
           List divisions = session.createCriteria(Division.class).list();
out.append("Address,City,Country,Email,First Name,Key,Identification,Last Name,Middle Name,Phone,Special Needs,State,Zip,Division,Major,Visit Date\n");
           for (Object object : divisions) {
               Division div = (Division) object;
               for (Major major : div.getMajors()) {
                   for (VisitDate visitDate : major.getVisitDates()) {
                       if (visitDate.isArchived() && !includeArchived) {
                           break;
                       }
                       for (Student student : visitDate.getStudents()) {
                           out.append(student.getAddress());
                           out.append(",");
                           out.append(student.getCity());
                           out.append(",");
                           out.append(student.getCountry());
                           out.append(",");
                           out.append(student.getEmail());
                           out.append(",");
                           out.append(student.getFname());
                           out.append(",");
                           out.append(student.getId());
                           out.append(",");
                           out.append(student.getIdentification());
                           out.append(",");
                           out.append(student.getLname());
                           out.append(",");
                           out.append(student.getMname());
                           out.append(",");
                           out.append(student.getPhone());
                           out.append(",");
                           out.append(student.getSpecial());
                           out.append(",");
                           out.append(student.getState());
                           out.append(",");
                           out.append(student.getZip());
                           out.append(",");
                           out.append(div.getName());
                           out.append(",");
                           out.append(major.getName());
                           out.append(",");
                           out.append(format.format(visitDate.getDate()));
                           out.append("\n");
                       }
                   }
               }
           }
           tx.commit();
SimpleDateFormat formatFile = new SimpleDateFormat("MM-dd-yyyy-HH-MM");
           response.setContentType("text/csv");
response.setHeader("Content-Disposition", "attachment;filename=\"export_" + formatFile.format(Calendar.getInstance().getTime()) + ".csv\"");
           OutputStream cout = response.getOutputStream();
           cout.write(out.toString().getBytes());
           cout.flush();
           cout.close();
       } catch (IOException e) {
           Logger.getLogger(getClass()).error(e);
       }
   }

   public void detach(RequestCycle requestCycle) {
   }
############################################################################

Johan Compagner wrote:
or something like this:

new Link()
{
onclick()
{
CharSequence discounts = DataBase.getInstance()
           .exportDiscounts();


ResourceStreamRequestTarget rsrt = new ResourceStreamRequestTarget(new
StringResourceStream(discounts, "text/csv"));
rsrt.setFileName(name);
setRequestTarget(rsrt)
}
}

Maybe we should give ResourceStreanRequestTarget 1 extra constructor with
the file name..

 setRequestTarget(new ResourceStreamRequestTarget(new
StringResourceStream(discounts, "text/csv",name)))


On 10/5/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote:
On 10/5/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote:
What do you use for the export? You probably should use a resource.
For instance:

public class DiscountsExport extends WebResource {

  public static class Initializer implements IInitializer {

    public void init(Application application) {
      SharedResources res = application.getSharedResources();
      res.add("discounts", new DiscountsExport());
    }
  }

  public DiscountsExport() {

    setCacheable(false);
  }

  @Override
  public IResourceStream getResourceStream() {
    CharSequence discounts = DataBase.getInstance().exportDiscounts();
    return new StringResourceStream(discounts, "text/plain");
  }

  @Override
  protected void setHeaders(WebResponse response) {
    super.setHeaders(response);
    response.setAttachmentHeader("discounts.csv");
  }
}
Sorry, this might be easier to understand:

   WebResource export = new WebResource() {

     @Override
     public IResourceStream getResourceStream() {
       CharSequence discounts = DataBase.getInstance()
           .exportDiscounts();
       return new StringResourceStream(discounts, "text/csv");
     }

     @Override
     protected void setHeaders(WebResponse response) {
       super.setHeaders(response);
       response.setAttachmentHeader("discounts.csv");
     }
   };
   export.setCacheable(false);

   add(new ResourceLink("exportLink", export));


Eelco

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




--
Justin Stanczak
Stanczak Group
812-735-3600

"All that is necessary for the triumph of evil is that good men do nothing."
Edmund Burke


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

Reply via email to