1 31 32 package org.opencms.validation; 33 34 import org.opencms.file.CmsFile; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsResource; 37 import org.opencms.file.CmsResourceFilter; 38 import org.opencms.file.types.CmsResourceTypePointer; 39 import org.opencms.main.CmsException; 40 import org.opencms.main.OpenCms; 41 import org.opencms.report.CmsLogReport; 42 import org.opencms.report.I_CmsReport; 43 import org.opencms.scheduler.I_CmsScheduledJob; 44 45 import java.io.IOException ; 46 import java.net.HttpURLConnection ; 47 import java.net.MalformedURLException ; 48 import java.net.URL ; 49 import java.util.HashMap ; 50 import java.util.Iterator ; 51 import java.util.List ; 52 import java.util.Map ; 53 54 63 public class CmsPointerLinkValidator implements I_CmsScheduledJob { 64 65 66 private I_CmsReport m_report; 67 68 76 public static boolean checkUrl(CmsObject cms, String url) { 77 78 try { 79 if (url.toLowerCase().startsWith("/")) { 80 return cms.existsResource(cms.getRequestContext().removeSiteRoot(url)); 81 } else if (url.startsWith("http")) { 82 URL checkedUrl = new URL (url); 83 HttpURLConnection httpcon = (HttpURLConnection )checkedUrl.openConnection(); 84 return (httpcon.getResponseCode() == 200); 85 } else { 86 return true; 87 } 88 } catch (MalformedURLException mue) { 89 return false; 90 } catch (IOException ioe) { 91 return false; 92 } 93 } 94 95 103 public String launch(CmsObject cms, Map parameters) throws CmsException { 104 105 if (Boolean.valueOf((String )parameters.get("writeLog")).booleanValue()) { 106 m_report = new CmsLogReport(cms.getRequestContext().getLocale(), CmsPointerLinkValidator.class); 107 } 108 109 validateLinks(cms); 110 return "CmsExternLinkValidator.launch(): Links checked."; 111 } 112 113 118 public void setReport(I_CmsReport report) { 119 120 m_report = report; 121 } 122 123 130 public void validateLinks(CmsObject cms) throws CmsException { 131 132 if (m_report == null) { 133 m_report = new CmsLogReport(cms.getRequestContext().getLocale(), CmsPointerLinkValidator.class); 134 } 135 136 m_report.println( 137 Messages.get().container(Messages.RPT_VALIDATE_EXTERNAL_LINKS_BEGIN_0), 138 I_CmsReport.FORMAT_HEADLINE); 139 140 List links = cms.readResources( 142 "/", 143 CmsResourceFilter.ONLY_VISIBLE_NO_DELETED.addRequireType(CmsResourceTypePointer.getStaticTypeId())); 144 Iterator iterator = links.iterator(); 145 Map brokenLinks = new HashMap (); 146 147 for (int i = 1; iterator.hasNext(); i++) { 148 CmsFile link = cms.readFile(cms.getSitePath((CmsResource)iterator.next())); 149 String linkUrl = new String (link.getContents()); 150 151 m_report.print(org.opencms.report.Messages.get().container( 153 org.opencms.report.Messages.RPT_SUCCESSION_1, 154 new Integer (i), 155 new Integer (links.size())), I_CmsReport.FORMAT_NOTE); 156 m_report.print(Messages.get().container(Messages.RPT_VALIDATE_LINK_0), I_CmsReport.FORMAT_NOTE); 157 m_report.print(org.opencms.report.Messages.get().container( 158 org.opencms.report.Messages.RPT_ARGUMENT_1, 159 link.getRootPath())); 160 m_report.print(Messages.get().container(Messages.GUI_LINK_POINTING_TO_0), I_CmsReport.FORMAT_NOTE); 161 m_report.print(org.opencms.report.Messages.get().container( 162 org.opencms.report.Messages.RPT_ARGUMENT_1, 163 linkUrl)); 164 m_report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0)); 165 166 if (!checkUrl(cms, linkUrl)) { 168 brokenLinks.put(link.getRootPath(), linkUrl); 169 m_report.println(Messages.get().container(Messages.RPT_BROKEN_0), I_CmsReport.FORMAT_ERROR); 170 } else { 171 m_report.println( 172 org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0), 173 I_CmsReport.FORMAT_OK); 174 } 175 } 176 177 m_report.println(Messages.get().container( 178 Messages.RPT_LINK_VALIDATION_STAT_2, 179 new Integer (links.size()), 180 new Integer (brokenLinks.size())), I_CmsReport.FORMAT_HEADLINE); 181 m_report.println( 182 Messages.get().container(Messages.RPT_VALIDATE_EXTERNAL_LINKS_END_0), 183 I_CmsReport.FORMAT_HEADLINE); 184 185 OpenCms.getLinkManager().setPointerLinkValidationResult(new CmsPointerLinkValidationResult(brokenLinks)); 186 187 } 188 } 189 | Popular Tags |