%@ page session="true"%>
<%@ page import="java.io.*,
java.util.Locale,
com.crystaldecisions.client.helper.ResourceManager,
com.crystaldecisions.report.web.viewer.CrystalReportViewer,
com.crystaldecisions.sdk.occa.report.reportsource.IReportSource,
com.crystaldecisions.xml.serialization.*" %>
<%
String CLOSED_RPT_ID = "closedreportid";
String RPT_ID = "reportid";
String RPT_SOURCE = "reportsource";
String PRODUCT_LOCALE = "language";
String closeRptID = request.getParameter(CLOSED_RPT_ID);
String reportID = request.getParameter(RPT_ID);
String serializedRptSrc = request.getParameter(RPT_SOURCE);
String productLocale = request.getParameter(PRODUCT_LOCALE);
if (closeRptID != null && closeRptID.length() > 0)
{
// Clear the report source in session with the given closedreportid
session.removeAttribute(closeRptID);
}
if (reportID != null && reportID.length() > 0)
{
CrystalReportViewer viewer = new CrystalReportViewer();
viewer.setName("htmlpreview");
viewer.setHasRefreshButton(false);
viewer.setHasExportButton(false);
viewer.setHasPrintButton(false);
viewer.setOwnForm(true);
viewer.setOwnPage(true);
if (productLocale != null && productLocale.length() > 0)
{
String[] localeParts = productLocale.split("[_\\-]");
if (localeParts.length > 0)
{
Locale locale = null;
if (1 == localeParts.length)
{
locale = new Locale(localeParts[0] /*language*/);
}
else if (2 == localeParts.length)
{
locale = new Locale(localeParts[0], // language
localeParts[1]); // country
}
else
{
locale = new Locale(localeParts[0], // language
localeParts[1], // country
localeParts[2]); // variant
}
viewer.setProductLocale(locale);
}
}
IReportSource reportSource = null;
if (serializedRptSrc != null && serializedRptSrc.length() > 0)
{
// Got a seralizedRprtSrc string
// need to deserialize the report source string and pass to viewer
byte[] byteRptSrc = serializedRptSrc.getBytes();
ByteArrayInputStream byteInStream = new ByteArrayInputStream(byteRptSrc);
try
{
XMLObjectSerializer serializer = new XMLObjectSerializer();
SaveOption saveOpt = serializer.getSaveOption();
saveOpt.setExcludeNullObjects(true);
// Enabled since server is ready.
saveOpt.setSkipWritingIdenticalObject(true);
reportSource = (IReportSource)serializer.load(byteInStream);
}
catch (Exception e)
{
out.write("Error deserializing report source.");
return;
}
finally
{
byteInStream.close();
}
viewer.setReportSource(reportSource);
session.setAttribute(reportID, viewer.getReportSource());
}
else
{
// Try to load report source from session
reportSource = (IReportSource) session.getAttribute(reportID);
if (reportSource == null)
{
Locale errLoc = viewer.getProductLocale();
if (errLoc == null)
{
errLoc = request.getLocale();
}
String componentName = "crystalreportviewer";
String sessionExpired = ResourceManager.getString(componentName, "Error_HtmlPreviewSessionTimeout", errLoc);
String needRefresh = ResourceManager.getString(componentName, "Error_HtmlPreviewNeedsRefresh", errLoc);
out.write("");
out.write("");
return;
}
viewer.setReportSource(reportSource);
}
viewer.setURI(request.getRequestURI() + "?" + RPT_ID + "=" + reportID + "&" + PRODUCT_LOCALE + "=" + productLocale);
viewer.processHttpRequest(request, response, application, null);
}
%>