001: /**
002: * Copyright 2005 Sun Microsystems, Inc. All
003: * rights reserved. Use of this product is subject
004: * to license terms. Federal Acquisitions:
005: * Commercial Software -- Government Users
006: * Subject to Standard License Terms and
007: * Conditions.
008: *
009: * Sun, Sun Microsystems, the Sun logo, and Sun ONE
010: * are trademarks or registered trademarks of Sun Microsystems,
011: * Inc. in the United States and other countries.
012: */package com.sun.portal.admin.console.ubt.bean;
013:
014: import com.sun.data.provider.impl.ObjectListDataProvider;
015: import com.sun.web.ui.component.RadioButton;
016: import com.sun.portal.admin.console.ubt.data.UBTViewUtility;
017: import com.sun.portal.admin.console.ubt.data.UBTResourceBundle;
018: import com.sun.portal.ubt.report.client.UBTReportSaver;
019: import com.sun.portal.log.common.PortalLogger;
020:
021: import java.util.List;
022: import java.util.LinkedList;
023: import java.util.HashMap;
024: import java.util.Map;
025: import java.util.logging.Logger;
026: import java.util.logging.Level;
027: import java.util.logging.LogRecord;
028: import java.io.IOException;
029: import java.io.Writer;
030: import java.io.PrintWriter;
031: import java.io.OutputStream;
032:
033: import net.sf.jasperreports.engine.JasperPrint;
034: import net.sf.jasperreports.engine.JRExporterParameter;
035: import net.sf.jasperreports.engine.JRException;
036: import net.sf.jasperreports.engine.export.JRHtmlExporter;
037: import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
038: import net.sf.jasperreports.engine.export.JRPdfExporter;
039: import net.sf.jasperreports.engine.export.JRXmlExporter;
040:
041: import javax.faces.context.FacesContext;
042: import javax.faces.event.ValueChangeEvent;
043: import javax.servlet.ServletResponse;
044: import javax.servlet.ServletRequest;
045: import javax.servlet.http.HttpServletRequest;
046:
047: /**
048: *
049: */
050: public class UBTReportsBean {
051: private static Logger logger = PortalLogger
052: .getLogger(UBTReportsBean.class);
053: public static String PORTAL_USER_IDENTITY = "PortalUserIdentity";
054: public static String PORTAL_USER_LOGIN = "PortalUserLogin";
055: public static String PORTAL_CHANNEL_RENDER = "PortalChannelRender";
056: public static String PORTAL_CONTAINER_CUSTOMIZATION = "PortalContainerCustomization";
057: public static String PORTAL_CONTAINER_RENDER = "PortalContainerRender";
058: public static String PORTAL_USER_CUSTOMIZATION = "PortalUserCustomization";
059: public static String PORTLET_ACTIONS = "PortletActions";
060: public static String PORTLET_RENDER = "PortletRender";
061: public static String UBT_REPORTS_ERROR_MSG_KEY = "ubtreports.errormessage";
062: public static String UBT_REPORTS_NO_PAGE_MSG_KEY = "ubtreports.nopagemessage";
063:
064: private static List reportsList = new LinkedList();
065: static {
066: initReportsList();
067: }
068:
069: private ObjectListDataProvider reports = new ObjectListDataProvider(
070: reportsList);
071: private String reportFormat = UBTReportSaver.DEFAULT_FORMAT;
072:
073: private static void initReportsList() {
074: reportsList = new LinkedList();
075: reportsList.add(Report.getInstance(PORTAL_USER_IDENTITY));
076: reportsList.add(Report.getInstance(PORTAL_USER_LOGIN));
077: reportsList.add(Report.getInstance(PORTAL_CHANNEL_RENDER));
078: reportsList.add(Report
079: .getInstance(PORTAL_CONTAINER_CUSTOMIZATION));
080: reportsList.add(Report.getInstance(PORTAL_CONTAINER_RENDER));
081: reportsList.add(Report.getInstance(PORTAL_USER_CUSTOMIZATION));
082: reportsList.add(Report.getInstance(PORTLET_ACTIONS));
083: reportsList.add(Report.getInstance(PORTLET_RENDER));
084: }
085:
086: public ObjectListDataProvider getReports() {
087: initReportsList();
088: reports = new ObjectListDataProvider(reportsList);
089: reports.setObjectType(Report.class);
090: return reports;
091: }
092:
093: public String generate() {
094: String name = (String) RadioButton.getSelected("rb");
095: try {
096: JasperPrint[] jprintReport = new UBTViewUtility()
097: .getGeneratedReport(name);
098: try {
099: if (jprintReport != null && jprintReport.length >= 1
100: && jprintReport[0].getPages().size() == 0) {
101: generateNoPageMessage();
102: return "success";
103: }
104: } catch (Exception e) {
105: //drop-through
106: }
107: generate(reportFormat, jprintReport);
108: } catch (Exception e) {
109: if (logger.isLoggable(Level.SEVERE)) {
110: LogRecord record = new LogRecord(Level.SEVERE,
111: "PSAUI_CSPACUBB0001");
112: record.setParameters(new Object[] { name });
113: record.setThrown(e);
114: record.setLoggerName(logger.getName());
115: logger.log(record);
116: }
117: try {
118: generateErrorMessage();
119: } catch (IOException e1) {
120: //drop-through
121: }
122: return "failure";
123: }
124: return "success";
125: }
126:
127: private void generate(String format, JasperPrint[] jprint)
128: throws IOException, JRException {
129: if (UBTReportSaver.HTML_FORMAT.equals(format)) {
130: generateHTML(jprint);
131: } else if (UBTReportSaver.PDF_FORMAT.equals(format)) {
132: generatePDF(jprint);
133: } else if (UBTReportSaver.XML_FORMAT.equals(format)) {
134: generateXML(jprint);
135: }
136: }
137:
138: private void generateXML(JasperPrint[] jprint) throws IOException,
139: JRException {
140: JRXmlExporter exporter = new JRXmlExporter();
141: OutputStream out = ((ServletResponse) FacesContext
142: .getCurrentInstance().getExternalContext()
143: .getResponse()).getOutputStream();
144: Map imagesMap = new HashMap();
145: ((HttpServletRequest) FacesContext.getCurrentInstance()
146: .getExternalContext().getRequest()).getSession()
147: .setAttribute("IMAGES_MAP", imagesMap);
148: exporter.setParameter(JRExporterParameter.JASPER_PRINT,
149: jprint[0]);
150: exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
151: exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,
152: imagesMap);
153: exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
154: "../image?image=");
155: exporter.exportReport();
156: }
157:
158: private void generateHTML(JasperPrint[] jprint) throws IOException,
159: JRException {
160: JRHtmlExporter exporter = new JRHtmlExporter();
161: ((ServletResponse) FacesContext.getCurrentInstance()
162: .getExternalContext().getResponse())
163: .setContentType("text/html;charset=UTF-8");
164: Writer out = ((ServletResponse) FacesContext
165: .getCurrentInstance().getExternalContext()
166: .getResponse()).getWriter();
167: Map imagesMap = new HashMap();
168: ((HttpServletRequest) FacesContext.getCurrentInstance()
169: .getExternalContext().getRequest()).getSession()
170: .setAttribute("IMAGES_MAP", imagesMap);
171: exporter.setParameter(JRExporterParameter.JASPER_PRINT,
172: jprint[0]);
173: exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
174: exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,
175: imagesMap);
176: exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
177: "../image?image=");
178: exporter.exportReport();
179: }
180:
181: private void generatePDF(JasperPrint[] jprint) throws IOException,
182: JRException {
183: JRPdfExporter exporter = new JRPdfExporter();
184: ((ServletResponse) FacesContext.getCurrentInstance()
185: .getExternalContext().getResponse())
186: .setContentType("application/pdf");
187: OutputStream out = ((ServletResponse) FacesContext
188: .getCurrentInstance().getExternalContext()
189: .getResponse()).getOutputStream();
190: Map imagesMap = new HashMap();
191: ((HttpServletRequest) FacesContext.getCurrentInstance()
192: .getExternalContext().getRequest()).getSession()
193: .setAttribute("IMAGES_MAP", imagesMap);
194: exporter.setParameter(JRExporterParameter.JASPER_PRINT,
195: jprint[0]);
196: exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
197: exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP,
198: imagesMap);
199: exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
200: "image?image=");
201: exporter.exportReport();
202: }
203:
204: private void generateErrorMessage() throws IOException {
205: writeMessage(UBTResourceBundle
206: .getProperty(UBT_REPORTS_ERROR_MSG_KEY));
207: }
208:
209: private void generateNoPageMessage() throws IOException {
210: writeMessage(UBTResourceBundle
211: .getProperty(UBT_REPORTS_NO_PAGE_MSG_KEY));
212: }
213:
214: private void writeMessage(String message) throws IOException {
215: Writer writer = ((ServletResponse) FacesContext
216: .getCurrentInstance().getExternalContext()
217: .getResponse()).getWriter();
218: //header
219: writer.write("<html>\n");
220: writer.write("<head>\n");
221: writer
222: .write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset="
223: + "UTF-8" + "\">\n");
224: writer.write(" <style type=\"text/css\">\n");
225: writer.write(" a {text-decoration: none}\n");
226: writer.write(" </style>\n");
227: writer.write("</head>\n");
228: writer
229: .write("<body text=\"#000000\" link=\"#000000\" alink=\"#000000\" vlink=\"#000000\" style=\"color: #000000; font-weight: bold\">\n");
230: writer
231: .write("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n");
232: writer.write("<tr><td width=\"100%\" align=\"left\">\n");
233: writer.write("<b>");
234: writer.write("\n");
235: //message
236: writer.write(message);
237: //footer
238: writer.write("\n");
239: writer.write("</b>");
240: writer.write("</td></tr>\n");
241: writer.write("</table>\n");
242: writer.write("</body>\n");
243: writer.write("</html>\n");
244: writer.flush();
245: writer.close();
246: }
247:
248: public void processFormat(ValueChangeEvent evt) {
249: this .reportFormat = (String) evt.getNewValue();
250: }
251: }
|