/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.workplace.tools.publishqueue;
import org.opencms.i18n.CmsEncoder;
import org.opencms.jsp.CmsJspActionElement;
import org.opencms.main.CmsException;
import org.opencms.main.OpenCms;
import org.opencms.publish.CmsPublishJobFinished;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUUID;
import org.opencms.workplace.CmsWidgetDialog;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
/**
* Provides a dialog to view a publish report selected out of the personal publish list.<p>
*
* @since 6.5.5
*/
public class CmsPublishQueueHistoricalReportDialog extends CmsWidgetDialog {
/** The pages array for possible multi-page dialogs. This is a dummy. */
private static final String[] PAGES = {"page1"};
/** Request parameter name for the publish job id. */
public static final String PARAM_ID = "id";
/** The path to the underlying file. */
protected String m_jobId;
/**
* Public constructor with JSP action element.<p>
*
* @param jsp the CmsJspActionElement
*/
public CmsPublishQueueHistoricalReportDialog(CmsJspActionElement jsp) {
super(jsp);
}
/**
* Public constructor with JSP variables.<p>
*
* @param context the JSP page context
* @param req the JSP request
* @param res the JSP response
*/
public CmsPublishQueueHistoricalReportDialog(PageContext context, HttpServletRequest req, HttpServletResponse res) {
this(new CmsJspActionElement(context, req, res));
setParamId(CmsEncoder.decodeParameter(req.getParameter(PARAM_ID)));
}
/**
* @see org.opencms.workplace.CmsWidgetDialog#actionCommit()
*/
public void actionCommit() {
// noop
}
/**
* Returns the file path.<p>
*
* @return the file path
*/
public String getParamFilename() {
return m_jobId;
}
/**
* Return the file content from the underlying file or an empty String.<p>
*
* @return file content from the underlying file or an empty String
*
* @throws CmsException if something goes wrong
*/
public String readFileContent() throws CmsException {
BufferedReader reader = null;
try {
CmsPublishJobFinished publishJob = (CmsPublishJobFinished)OpenCms.getPublishManager().getJobByPublishHistoryId(
new CmsUUID(m_jobId));
byte[] contents = OpenCms.getPublishManager().getReportContents(publishJob);
StringBuffer result = new StringBuffer();
if (contents != null) {
reader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(contents)));
String read = reader.readLine();
while (read != null) {
result.append(read).append("\n");
read = reader.readLine();
}
}
return result.toString();
} catch (IOException ioex) {
throw new CmsException(Messages.get().container(Messages.ERR_FILE_ARG_ACCESS_1, m_jobId), ioex);
} catch (CmsException ex) {
throw new CmsException(Messages.get().container(Messages.ERR_FILE_ARG_ACCESS_1, m_jobId), ex);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
// ignore
}
}
}
}
/**
* Set the job id value.<p>
*
* @param value the job id value
*/
public void setParamId(String value) {
m_jobId = value;
}
/**
* Returns the dialog HTML for all defined widgets of the named dialog (page).<p>
*
* This overwrites the method from the super class to create a layout variation for the widgets.<p>
*
* @param dialog the dialog (page) to get the HTML for
* @return dialog HTML for all defined widgets of the named dialog (page)
*/
protected String createDialogHtml(String dialog) {
StringBuffer result = new StringBuffer(1024);
// create widget table
result.append(createWidgetTableStart());
// show error header once if there were validation errors
result.append(createWidgetErrorHeader());
String fileContentHeader;
if (m_jobId == null) {
fileContentHeader = key(Messages.GUI_PERSONALQUEUE_LIST_NAME_0);
} else {
Object[] params = new Object[3];
CmsPublishJobFinished publishJob = (CmsPublishJobFinished)OpenCms.getPublishManager().getJobByPublishHistoryId(
new CmsUUID(m_jobId));
// project name
params[0] = publishJob.getProjectName();
// user name
params[1] = publishJob.getUserName(getCms());
// start date
params[2] = Messages.get().getBundle(getLocale()).getDateTime(publishJob.getStartTime());
// compose the title
fileContentHeader = key(Messages.GUI_PUBLISH_REPORT_VIEW_TITLE_3, params);
}
result.append(createWidgetBlockStart(fileContentHeader));
try {
result.append("<iframe style=\"overflow: auto;\" src=\"");
result.append(getJsp().link(
"/system/workplace/admin/publishqueue/publishreportshow.jsp?"
+ CmsEncoder.encodeParameter(PARAM_ID)
+ "="
+ CmsEncoder.encodeParameter(m_jobId)));
result.append("\" width=\"100%\" height=\"500\" border=\"0\" frameborder=\"0\"></iframe>");
} catch (Exception e) {
//noop
}
result.append(createWidgetBlockEnd());
// close widget table
result.append(createWidgetTableEnd());
return result.toString();
}
/**
* @see org.opencms.workplace.CmsWidgetDialog#defineWidgets()
*/
protected void defineWidgets() {
//noop
}
/**
* @see org.opencms.workplace.CmsWidgetDialog#getPageArray()
*/
protected String[] getPageArray() {
return PAGES;
}
/**
* @see org.opencms.workplace.CmsWidgetDialog#validateParamaters()
*/
protected void validateParamaters() throws Exception {
if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_jobId)) {
throw new Exception();
}
}
}