/*
* 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.commons;
import org.opencms.jsp.CmsJspActionElement;
import org.opencms.main.CmsRuntimeException;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUUID;
import org.opencms.workplace.CmsDialog;
import org.opencms.workplace.CmsWorkplace;
import org.opencms.workplace.CmsWorkplaceSettings;
import org.opencms.workplace.list.A_CmsListDialog;
import org.opencms.workplace.list.CmsHtmlList;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
/**
* Creates the dialogs for showing and restoring deleted resources.<p>
*
* The following files use this class:
* <ul>
* <li>/commons/show-deleted.jsp
* </ul>
* <p>
*
* @since 6.9.1
*/
public class CmsDeletedResources extends CmsDialog {
/** Request parameter name for the relatedresources parameter. */
public static final String PARAM_READTREE = "readtree";
/** The list action. */
private String m_paramListAction;
/** Parameter value, if the deleted resources should be displayed for the subtree. */
private String m_paramReadtree;
/** The selected items, comma separated list. */
private String m_paramSelItems;
/**
* Public constructor with JSP action element.<p>
*
* @param jsp an initialized JSP action element
*/
public CmsDeletedResources(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 CmsDeletedResources(PageContext context, HttpServletRequest req, HttpServletResponse res) {
this(new CmsJspActionElement(context, req, res));
}
/**
* Returns the html code to include the needed js code.<p>
*
* @return html code
*/
public String buildIncludeJs() {
StringBuffer html = new StringBuffer(512);
html.append("<script type='text/javascript' src='");
html.append(CmsWorkplace.getSkinUri());
html.append("commons/ajax.js'></script>\n");
html.append("<script type='text/javascript' src='");
html.append(CmsWorkplace.getSkinUri());
html.append("editors/xmlcontent/help.js'></script>\n");
html.append("<script type='text/javascript' src='");
html.append(CmsWorkplace.getSkinUri());
html.append("admin/javascript/general.js'></script>\n");
html.append("<script type='text/javascript' src='");
html.append(CmsWorkplace.getSkinUri());
html.append("admin/javascript/list.js'></script>\n");
html.append("<script type='text/javascript'><!--\n");
html.append("\tvar ");
html.append(CmsHtmlList.NO_SELECTION_HELP_VAR);
html.append(" = '");
html.append(CmsStringUtil.escapeJavaScript(key(org.opencms.workplace.list.Messages.GUI_LIST_ACTION_NO_SELECTION_0)));
html.append("';\n");
html.append("function doReportUpdate(msg, state) {\n");
html.append("\tvar img = state + '.png';\n");
html.append("\tvar txt = '';\n");
html.append("\tvar elem = document.getElementById('ajaxreport');\n");
html.append("\tif (state != 'ok') {\n");
html.append("\t\tif (state == 'fatal') {\n");
html.append("\t\t\timg = 'error.png';\n");
html.append("\t\t\ttxt = '");
html.append(key(org.opencms.workplace.Messages.GUI_AJAX_REPORT_GIVEUP_0));
html.append("';\n");
html.append("\t\t} else if (state == 'wait') {\n");
html.append("\t\t\timg = 'wait.gif';\n");
html.append("\t\t\ttxt = '");
html.append(key(org.opencms.workplace.Messages.GUI_AJAX_REPORT_WAIT_0));
html.append("'\n");
html.append("\t\t} else if (state == 'error') {\n");
html.append("\t\t\ttxt = '");
html.append(key(org.opencms.workplace.Messages.GUI_AJAX_REPORT_ERROR_0));
html.append("' + msg;\n");
html.append("\t\t}\n");
html.append("\t} else {");
html.append("\t\telem.innerHTML = msg;\n");
html.append("\t}\n");
html.append("\tif (txt != '') {\n");
html.append("\t\tvar html = \"<table border='0' style='vertical-align:middle; height: 200px;'>\";");
html.append("\t\thtml += \"<tr><td width='40' align='center' valign='middle'><img src='");
html.append(getSkinUri());
html.append("commons/\";");
html.append("\t\thtml += img;");
html.append("\t\thtml += \"' width='32' height='32' alt=''></td>\";");
html.append("\t\thtml += \"<td valign='middle'><span style='color: #000099; font-weight: bold;'>\";");
html.append("\t\thtml += txt;");
html.append("\t\thtml += \"</span><br></td></tr></table>\";");
html.append("\t\telem.innerHTML = html;");
html.append("\t}\n");
html.append("}\n");
html.append("function reloadReport() {\n");
html.append("\tvar readtree = document.forms[\"");
html.append(CmsDeletedResourcesList.LIST_ID);
html.append("-form\"].");
html.append(PARAM_READTREE);
html.append(".checked;\n");
html.append("\tmakeRequest('");
html.append(getJsp().link("/system/workplace/commons/report-deleted.jsp"));
html.append("', '");
html.append(CmsDialog.PARAM_RESOURCE);
html.append("=");
html.append(getParamResource());
html.append("&");
html.append(PARAM_READTREE);
html.append("=");
html.append("' + readtree");
html.append(", 'doReportUpdate');\n");
html.append("}\n");
html.append("// -->\n");
html.append("</script>\n");
return html.toString();
}
/**
* Override to display additional options in the dialog.<p>
*
* @return html code to display additional options
*/
public String buildOptions() {
StringBuffer result = new StringBuffer(128);
result.append("<input type='checkbox' name='");
result.append(PARAM_READTREE);
result.append("' value='true' onclick=\"reloadReport();\"");
if (Boolean.valueOf(getParamReadtree()).booleanValue()) {
result.append(" checked='checked'");
}
result.append("> ");
result.append(key(Messages.GUI_DELETED_RESOURCES_READ_TREE_0));
return result.toString();
}
/**
* Builds the html code for the report with the list of deleted resources.<p>
*
* @return html code for the report with the list of deleted resources
*
* @throws JspException if dialog actions fail
* @throws IOException in case of errros forwarding to the required result page
* @throws ServletException in case of errros forwarding to the required result page
*/
public String buildReport() throws JspException, ServletException, IOException {
CmsDeletedResourcesList list = new CmsDeletedResourcesList(getJsp(), getParamResource(), Boolean.valueOf(
getParamReadtree()).booleanValue());
list.actionDialog();
list.getList().setBoxed(false);
StringBuffer result = new StringBuffer(512);
result.append("<div style='height:200px; overflow: auto;'>\n");
result.append(list.getList().listHtml());
result.append("</div>\n");
return result.toString();
}
/**
* Builds the java script code to build the report.<p>
*
* @return html code with the java script to use ajax to create the report
*/
public String buildReportRequest() {
StringBuffer html = new StringBuffer(512);
html.append("<script type='text/javascript'><!--\n");
html.append("makeRequest('");
html.append(getJsp().link("/system/workplace/commons/report-deleted.jsp"));
html.append("', '");
html.append(CmsDialog.PARAM_RESOURCE);
html.append("=");
html.append(getParamResource());
html.append("', 'doReportUpdate');\n");
html.append("// -->\n");
html.append("</script>\n");
return html.toString();
}
/**
* Builds the necessary button row.<p>
*
* @return the button row
*/
public String dialogButtons() {
return dialogButtonsOkCancel(" onclick=\"listMAction('"
+ CmsDeletedResourcesList.LIST_ID
+ "','"
+ CmsDeletedResourcesList.LIST_MACTION_RESTORE
+ "', '', noSelHelp);\"", null);
}
/**
* Executes the actions from the deleted resources list.<p>
*
* @see org.opencms.workplace.list.A_CmsListDialog#executeListMultiActions()
*
* @throws JspException if problems including sub-elements occur
*/
public void executeListMultiActions() throws JspException {
if (getParamListAction().equals(CmsDeletedResourcesList.LIST_MACTION_RESTORE)) {
StringBuffer errors = new StringBuffer();
Iterator iter = getSelectedItems().iterator();
while (iter.hasNext()) {
CmsUUID id = new CmsUUID((String)iter.next());
try {
getCms().restoreDeletedResource(id);
} catch (Exception e) {
errors.append(e.getLocalizedMessage());
}
}
if (errors.length() > 0) {
throw new CmsRuntimeException(Messages.get().container(
Messages.ERR_RESTORE_SELECTED_RESOURCES_1,
errors));
} else {
actionCloseDialog();
}
}
}
/**
* Returns the paramListAction.<p>
*
* @return the paramListAction
*/
public String getParamListAction() {
return m_paramListAction;
}
/**
* Returns the paramReadtree.<p>
*
* @return the paramReadtree
*/
public String getParamReadtree() {
if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_paramReadtree)) {
return "false";
}
return m_paramReadtree;
}
/**
* Returns the paramSelItems.<p>
*
* @return the paramSelItems
*/
public String getParamSelItems() {
return m_paramSelItems;
}
/**
* Returns a list of resource ids of the current selected items.<p>
*
* @return a list of resource ids of the current selected items
*/
public List getSelectedItems() {
Iterator it = CmsStringUtil.splitAsList(getParamSelItems(), CmsHtmlList.ITEM_SEPARATOR, true).iterator();
List items = new ArrayList();
while (it.hasNext()) {
String id = (String)it.next();
items.add(id);
}
return items;
}
/**
* @see org.opencms.workplace.CmsWorkplace#paramsAsHidden()
*/
public String paramsAsHidden() {
List excludes = new ArrayList();
excludes.add(PARAM_READTREE);
return paramsAsHidden(excludes);
}
/**
* Sets the paramListAction.<p>
*
* @param paramListAction the paramListAction to set
*/
public void setParamListAction(String paramListAction) {
m_paramListAction = paramListAction;
}
/**
* Sets the paramReadtree.<p>
*
* @param paramReadtree the paramReadtree to set
*/
public void setParamReadtree(String paramReadtree) {
m_paramReadtree = paramReadtree;
}
/**
* Sets the paramSelItems.<p>
*
* @param paramSelItems the paramSelItems to set
*/
public void setParamSelItems(String paramSelItems) {
m_paramSelItems = paramSelItems;
}
/**
* @see org.opencms.workplace.CmsDialog#initWorkplaceRequestValues(org.opencms.workplace.CmsWorkplaceSettings, javax.servlet.http.HttpServletRequest)
*/
protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) {
super.initWorkplaceRequestValues(settings, request);
// set title
setParamTitle(key(Messages.GUI_DELETED_RESOURCES_TITLE_1, new Object[] {getParamResource()}));
// init params to appear as hidden field
if (getParamListAction() == null) {
setParamListAction("");
}
if (getParamSelItems() == null) {
setParamSelItems("");
}
if (A_CmsListDialog.LIST_MULTI_ACTION.equals(getParamAction())) {
setAction(A_CmsListDialog.ACTION_LIST_MULTI_ACTION);
}
}
}