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]