/*
* 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.link;
import org.opencms.file.CmsPropertyDefinition;
import org.opencms.file.CmsResource;
import org.opencms.jsp.CmsJspActionElement;
import org.opencms.main.CmsException;
import org.opencms.main.OpenCms;
import org.opencms.relations.CmsInternalLinksValidator;
import org.opencms.relations.CmsRelation;
import org.opencms.workplace.list.A_CmsListExplorerDialog;
import org.opencms.workplace.list.CmsListItem;
import org.opencms.workplace.list.CmsListItemDetails;
import org.opencms.workplace.list.CmsListItemDetailsFormatter;
import org.opencms.workplace.list.CmsListMetadata;
import org.opencms.workplace.list.I_CmsListResourceCollector;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
/**
* Internal link validation Dialog.<p>
*
* @since 6.5.3
*/
public class CmsInternalLinkValidationList extends A_CmsListExplorerDialog {
/** List detail error. */
public static final String LIST_DETAIL_LINKS = "dl";
/** list id constant. */
public static final String LIST_ID = "lv";
/** The internal collector instance. */
private I_CmsListResourceCollector m_collector;
/** The validator class. */
private CmsInternalLinksValidator m_validator;
/**
* Public constructor.<p>
*
* @param jsp an initialized JSP action element
*/
public CmsInternalLinkValidationList(CmsJspActionElement jsp) {
super(jsp, LIST_ID, Messages.get().container(Messages.GUI_BROKENLINKS_LIST_NAME_0));
}
/**
* Public constructor with JSP variables.<p>
*
* @param context the JSP page context
* @param req the JSP request
* @param res the JSP response
*/
public CmsInternalLinkValidationList(PageContext context, HttpServletRequest req, HttpServletResponse res) {
this(new CmsJspActionElement(context, req, res));
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#executeListMultiActions()
*/
public void executeListMultiActions() {
throwListUnsupportedActionException();
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#executeListSingleActions()
*/
public void executeListSingleActions() {
throwListUnsupportedActionException();
}
/**
* @see org.opencms.workplace.list.A_CmsListExplorerDialog#getCollector()
*/
public I_CmsListResourceCollector getCollector() {
if (m_collector == null) {
m_collector = new CmsInternalLinkValidationFilesCollector(
this,
getValidator().getResourcesWithBrokenLinks());
}
return m_collector;
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#customHtmlStart()
*/
protected String customHtmlStart() {
StringBuffer result = new StringBuffer(512);
if (getValidator().getNotVisibleResourcesCount() > 0) {
result.append(dialogBlockStart(key(Messages.GUI_BROKENLINKS_NOTICE_0)));
result.append("\n");
result.append(key(Messages.GUI_BROKENLINKS_NOT_VISIBLE_RESOURCES_1, new Object[] {new Integer(
getValidator().getNotVisibleResourcesCount())}));
result.append("\n");
result.append(dialogBlockEnd());
}
return result.toString();
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#fillDetails(java.lang.String)
*/
protected void fillDetails(String detailId) {
// get content
List resourceNames = getList().getAllContent();
Iterator i = resourceNames.iterator();
while (i.hasNext()) {
CmsListItem item = (CmsListItem)i.next();
CmsResource res = getCollector().getResource(getCms(), item);
// check if errors are enabled
StringBuffer html = new StringBuffer();
// broken links detail is enabled
if (detailId.equals(LIST_DETAIL_LINKS)) {
// get all errors for this resource and show them
List brokenLinks = getValidator().getBrokenLinksForResource(res.getRootPath());
if (brokenLinks != null) {
Iterator j = brokenLinks.iterator();
while (j.hasNext()) {
CmsRelation brokenLink = (CmsRelation)j.next();
String link = brokenLink.getTargetPath();
String siteRoot = OpenCms.getSiteManager().getSiteRoot(link);
String siteName = siteRoot;
if (siteRoot != null) {
String storedSiteRoot = getCms().getRequestContext().getSiteRoot();
try {
getCms().getRequestContext().setSiteRoot("/");
siteName = getCms().readPropertyObject(
siteRoot,
CmsPropertyDefinition.PROPERTY_TITLE,
false).getValue(siteRoot);
} catch (CmsException e) {
siteName = siteRoot;
} finally {
getCms().getRequestContext().setSiteRoot(storedSiteRoot);
}
link = link.substring(siteRoot.length());
} else {
siteName = "/";
}
if (!getCms().getRequestContext().getSiteRoot().equals(siteRoot)) {
link = key(org.opencms.workplace.commons.Messages.GUI_DELETE_SITE_RELATION_2, new Object[] {
siteName,
link});
}
html.append(link);
html.append("<br>");
}
item.set(detailId, html.toString());
}
}
}
}
/**
* @see org.opencms.workplace.CmsWorkplace#initMessages()
*/
protected void initMessages() {
// add specific dialog resource bundle
addMessages(Messages.get().getBundleName());
super.initMessages();
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#setIndependentActions(org.opencms.workplace.list.CmsListMetadata)
*/
protected void setIndependentActions(CmsListMetadata metadata) {
// create list item detail for broken links
CmsListItemDetails brokenLinks = new CmsListItemDetails(LIST_DETAIL_LINKS);
brokenLinks.setAtColumn(LIST_COLUMN_NAME);
brokenLinks.setVisible(true);
brokenLinks.setShowActionName(Messages.get().container(Messages.GUI_BROKENLINKS_DETAIL_SHOW_LINKS_NAME_0));
brokenLinks.setShowActionHelpText(Messages.get().container(Messages.GUI_BROKENLINKS_DETAIL_SHOW_LINKS_HELP_0));
brokenLinks.setHideActionName(Messages.get().container(Messages.GUI_BROKENLINKS_DETAIL_HIDE_LINKS_NAME_0));
brokenLinks.setHideActionHelpText(Messages.get().container(Messages.GUI_BROKENLINKS_DETAIL_HIDE_LINKS_HELP_0));
brokenLinks.setFormatter(new CmsListItemDetailsFormatter(Messages.get().container(
Messages.GUI_BROKENLINKS_DETAIL_LINKS_NAME_0)));
metadata.addItemDetails(brokenLinks);
super.setIndependentActions(metadata);
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#setMultiActions(org.opencms.workplace.list.CmsListMetadata)
*/
protected void setMultiActions(CmsListMetadata metadata) {
// no LMA
}
/**
* Returns the link validator class.<p>
*
* @return the link validator class
*/
private CmsInternalLinksValidator getValidator() {
if (m_validator == null) {
// get the content check result object
Map objects = (Map)getSettings().getDialogObject();
Object o = objects.get(CmsInternalLinkValidationDialog.class.getName());
List resources = new ArrayList();
if ((o != null) && (o instanceof List)) {
resources = (List)o;
}
m_validator = new CmsInternalLinksValidator(getCms(), resources);
}
return m_validator;
}
}