diff --git a/ccm-cms/src/com/arsdigita/cms/ContentSection.java b/ccm-cms/src/com/arsdigita/cms/ContentSection.java index aab1bf649..0fda49a85 100755 --- a/ccm-cms/src/com/arsdigita/cms/ContentSection.java +++ b/ccm-cms/src/com/arsdigita/cms/ContentSection.java @@ -55,7 +55,7 @@ import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.StringTokenizer; -import org.apache.log4j.Level; +// import org.apache.log4j.Level; import org.apache.log4j.Logger; /** @@ -126,15 +126,7 @@ public class ContentSection extends Application { private final static String SECTION_ID = "sectionId"; private static final CMSConfig s_config = CMSConfig.getInstanceOf(); -/* DO NOT use CMSConfig constructor to instantiate ! - private static final CMSConfig s_config = new CMSConfig(); - static { - s_log.debug("Static initializer starting..."); - s_config.load(); - s_log.debug("Static initializer finished..."); - } -*/ // Cached properties PageResolver m_pageResolver = null; ItemResolver m_itemResolver = null; @@ -159,7 +151,7 @@ public class ContentSection extends Application { /** * Constructor re-creating a content section object from its data object. * - * @param oid + * @param obj * @throws DataObjectNotFoundException */ public ContentSection(DataObject obj) { @@ -170,7 +162,7 @@ public class ContentSection extends Application { * Constructor re-creating a content section object by retrieving its data * Object by ID * - * @param oid + * @param id * @throws DataObjectNotFoundException */ public ContentSection(BigDecimal id) throws DataObjectNotFoundException { @@ -264,8 +256,8 @@ public class ContentSection extends Application { * This URL includes the webapp context path. */ public String getURL() { - String sURL = null; + String sURL; //see if there is a request final HttpServletRequest sreq = Web.getRequest(); if (sreq != null) { @@ -1092,9 +1084,11 @@ public class ContentSection extends Application { * returns it. * * @param name Name of the content section + * @param rootCategory * @return ContentSection */ - public static ContentSection create(final String name, final Category rootCategory) { + public static ContentSection create(final String name, + final Category rootCategory) { Folder folder = createRootFolder(name); //Category category = createRootCategory(name); diff --git a/ccm-cms/src/com/arsdigita/cms/ContentSectionServlet.java b/ccm-cms/src/com/arsdigita/cms/ContentSectionServlet.java index b2f16c1d8..9f9cb346a 100755 --- a/ccm-cms/src/com/arsdigita/cms/ContentSectionServlet.java +++ b/ccm-cms/src/com/arsdigita/cms/ContentSectionServlet.java @@ -88,6 +88,7 @@ import org.apache.log4j.Logger; * - Refactor content item UI bebop ApplicationPage or PageFactory instead of * legacy infected sitenode / package dispatchers. */ + /** * Content Section's Application Servlet according CCM core web application * structure {@see com.arsdigita.web.Application} implements the content @@ -106,9 +107,9 @@ public class ContentSectionServlet extends BaseApplicationServlet { private static final Logger s_log = Logger.getLogger(ContentSectionServlet.class); /** Stringarray of file name patterns for index files. */ - private static final String[] WELCOME_FILES = new String[]{ - "index.jsp", "index.html" - }; +// private static final String[] WELCOME_FILES = new String[]{ +// "index.jsp", "index.html" +// }; /** The context (in url) for previewing items */ public static final String PREVIEW = "/preview"; /** Template files */ @@ -122,34 +123,40 @@ public class ContentSectionServlet extends BaseApplicationServlet { public static final String XML_MODE = "xmlMode"; public static final String MEDIA_TYPE = "templateContext"; private static final String CACHE_KEY_DELIMITER = "%"; - private ContentItemDispatcher m_disp = new ContentItemDispatcher(); + + private final ContentItemDispatcher m_disp = new ContentItemDispatcher(); public static Map s_itemResolverCache = Collections - .synchronizedMap(new HashMap()); - /** cache the content items */ + .synchronizedMap(new HashMap()); private static Map s_itemURLCacheMap = null; - private static boolean s_cacheItems = true; + /** Whether to cache the content items */ + private static final boolean s_cacheItems = true; // NEW STUFF here used to process the pages in this servlet /** URL (pathinfo) -> Page object mapping. Based on it (and the http - * request url) the doService method selects a page to display */ + * request url) the doService method selects a page to display */ private final Map m_pages = new HashMap(); - /** Path to directory containg ccm-cms template (jsp) files */ + /** Path to directory containg ccm-cms template (jsp) files */ private String m_templatePath; - // Probably compatibility stuff, based on dispatcher - /** Resolvers to find templages (JSP) and other stuff stored in file system.*/ + + /** Resolver to actually use to find templates (JSP). JSP may be stored in + * file system or otherwise, depends on resolver. Resolver is retrieved + * from configuration. + * (probably used for other stuff as JSP's as well) */ private ApplicationFileResolver m_resolver; /** * Init method overwrites parents init to pass in optional parameters * {@link com.arsdigita.web.BaseServlet}. * If not specified system wide defaults are used. + * @param config + * @throws javax.servlet.ServletException */ @Override public void init(ServletConfig config) throws ServletException { super.init(config); - // optional init-param named template-path from ~/WEB-INF/web.xml + // may overwrite configuration parameters String templatePath = config.getInitParameter("template-path"); if (templatePath == null) { m_templatePath = ContentSection.getConfig().getTemplateRoot(); @@ -172,11 +179,13 @@ public class ContentSectionServlet extends BaseApplicationServlet { m_resolver = (ApplicationFileResolver) Classes.newInstance(resolverName); } if (s_log.isDebugEnabled()) { - s_log.debug("Template path is " + m_templatePath + " with resolver " + m_resolver. + s_log.debug("Template path is " + m_templatePath + + " with resolver " + m_resolver. getClass().getName()); } - // NEW STUFF here used to process the pages in this servlet + // NEW STUFF here will be used to process the pages in this servlet + // Currently NOT working // addPage("/admin", new MainPage()); // index page at address ~/cs // addPage("/admin/index.jsp", new MainPage()); // addPage("/admin/item.jsp", new MainPage()); @@ -187,14 +196,20 @@ public class ContentSectionServlet extends BaseApplicationServlet { * Implementation of parent's (abstract) doService method checks HTTP request * to determine whether to handle a content item or other stuff which is * delegated to jsp templates. - * * {@see com.arsdigita.web.BaseApplicationServlet#doService * (HttpServletRequest, HttpServletResponse, Application)} + * + * @param sreq + * @param sresp + * @param app + * @throws javax.servlet.ServletException + * @throws java.io.IOException */ + @Override protected void doService(HttpServletRequest sreq, HttpServletResponse sresp, Application app) - throws ServletException, IOException { + throws ServletException, IOException { ContentSection section = (ContentSection) app; @@ -203,20 +218,20 @@ public class ContentSectionServlet extends BaseApplicationServlet { // //////////////////////////////////////////////////////////////////// /* * NOTE: - * Resolves currently to SiteNodeRequestContext which will be removed. - * NOTE 2: - * SiteNodeRequestContext removed, resolves currently to + * Used to resolve to SiteNodeRequestContext (old style applications) + * which has been removed. + * Resolves currently to * KernelRequestContext which will be removed as well. */ RequestContext ctx = DispatcherHelper.getRequestContext(); String url = ctx.getRemainingURLPart(); // here KernelRequestContext now if (s_log.isInfoEnabled()) { - s_log.info("Resolving item URL " + url); + s_log.info("Resolving URL " + url + " and trying as item first."); } final ItemResolver itemResolver = getItemResolver(section); // //////////////////////////////////////////////////////////////////// - // Prepare NEW style servlet based bebpo page service + // Prepare NEW style servlet based bebob page service // //////////////////////////////////////////////////////////////////// String pathInfo = sreq.getPathInfo(); @@ -259,7 +274,7 @@ public class ContentSectionServlet extends BaseApplicationServlet { pm.servePage(doc, sreq, sresp); } - /* SECONDLY try if we have to serve an item (old style dispatcher based */ + /* SECONDLY try if we have to serve an item (old style dispatcher based */ } else if (item != null) { /* We have to serve an item here */ @@ -284,16 +299,16 @@ public class ContentSectionServlet extends BaseApplicationServlet { serveItem(sreq, sresp, section, item); - /* OTHERWISE delegate to a JSP in file system */ + /* OTHERWISE delegate to a JSP in file system */ } else { - /* We have to deal with a content-section, folder or an other bit*/ + /* We have to deal with a content-section, folder or another bit */ if (s_log.isInfoEnabled()) { s_log.info("NOT serving content item"); } /* Store content section in http request to make it available - * for admin index,jsp */ + * for admin/index.jsp */ sreq.setAttribute(CONTENT_SECTION, section); RequestDispatcher rd = m_resolver.resolve(m_templatePath, @@ -447,6 +462,10 @@ public class ContentSectionServlet extends BaseApplicationServlet { /** * + * @param section + * @param url + * @param itemResolver + * @return */ public ContentItem getItem(ContentSection section, String url, ItemResolver itemResolver) { @@ -510,6 +529,7 @@ public class ContentSectionServlet extends BaseApplicationServlet { // Get the negotiated locale String lang = GlobalizationHelper.getNegotiatedLocale().getLanguage(); + // XXX why assign a value and afterwards null?? item = itemURLCacheGet(section, url, lang); item = null; @@ -598,6 +618,7 @@ public class ContentSectionServlet extends BaseApplicationServlet { * Maps the content item to the URL in a cache * @param section the content section in which the content item is published * @param sURL the URL at which the content item s published + * @param lang * @param item the content item at the URL */ public static synchronized void itemURLCachePut(ContentSection section, @@ -608,7 +629,8 @@ public class ContentSectionServlet extends BaseApplicationServlet { return; } if (s_log.isDebugEnabled()) { - s_log.debug("adding cached entry for url " + sURL + " and language " + lang); + s_log.debug("adding cached entry for url " + sURL + + " and language " + lang); } itemURLCachePut(section, sURL, lang, item.getID()); @@ -618,20 +640,24 @@ public class ContentSectionServlet extends BaseApplicationServlet { * Removes the cache entry for the URL, sURL * @param section the content section in which to remove the key * @param sURL the cache entry key to remove + * @param lang */ public static synchronized void itemURLCacheRemove(ContentSection section, String sURL, String lang) { if (s_log.isDebugEnabled()) { - s_log.debug("removing cached entry for url " + sURL + "and language " + lang); + s_log.debug("removing cached entry for url " + sURL + + "and language " + lang); } getItemURLCache(section).remove(sURL + CACHE_KEY_DELIMITER + lang); } /** - * Fetches the ContentItem published at that URL from the cache + * Fetches the ContentItem published at that URL from the cache. + * * @param section the content section in which the content item is published * @param sURL the URL for the item to fetch + * @param lang * @return the ContentItem in the cache, or null */ public static ContentItem itemURLCacheGet(ContentSection section, @@ -683,6 +709,9 @@ public class ContentSectionServlet extends BaseApplicationServlet { /** * Checks that the current user has permission to access the admin pages. + * @param request + * @param section + * @return **/ public static boolean checkAdminAccess(HttpServletRequest request, ContentSection section) { diff --git a/ccm-cms/src/com/arsdigita/cms/LoaderConfig.java b/ccm-cms/src/com/arsdigita/cms/LoaderConfig.java index e6131596e..5cd0c1737 100644 --- a/ccm-cms/src/com/arsdigita/cms/LoaderConfig.java +++ b/ccm-cms/src/com/arsdigita/cms/LoaderConfig.java @@ -470,6 +470,7 @@ public final class LoaderConfig extends AbstractConfig { /** * Retrieve whether the content-section is publicly viewable (i.e. without * registration and login) + * @return */ public Boolean isPubliclyViewable() { return ((Boolean) get(m_isPublic)).booleanValue(); @@ -477,6 +478,7 @@ public final class LoaderConfig extends AbstractConfig { /** * Retrieve the item resolver class + * @return */ public String getItemResolverClass() { return (String) get(m_itemResolverClass); @@ -484,6 +486,7 @@ public final class LoaderConfig extends AbstractConfig { /** * Retrieve the template resolver class + * @return */ public String getTemplateResolverClass() { return (String) get(m_templateResolverClass); @@ -506,6 +509,7 @@ public final class LoaderConfig extends AbstractConfig { * Retrieve the list of files containing categories to load. In old * Initialiser: Parameter name: CATEGORIES Deskr. "XML file containing the * category tree" + * @return */ public List getCategoryFileList() { String[] catFiles = (String[]) get(m_categoryFileList); diff --git a/ccm-cms/src/com/arsdigita/cms/contentsection/ContentSectionConfig.java b/ccm-cms/src/com/arsdigita/cms/contentsection/ContentSectionConfig.java index 06444f0ea..fe3db9538 100644 --- a/ccm-cms/src/com/arsdigita/cms/contentsection/ContentSectionConfig.java +++ b/ccm-cms/src/com/arsdigita/cms/contentsection/ContentSectionConfig.java @@ -310,7 +310,9 @@ public final class ContentSectionConfig extends AbstractConfig { // ////////////////////////////////////////////////////////// /** * Retrieve the list of workflow tasks and events for each tasks which should receive overdue - * notification alerts + * notification alerts. + * + * @return */ public final String[] getTaskAlerts() { return (String[]) get(m_taskAlerts); @@ -318,28 +320,38 @@ public final class ContentSectionConfig extends AbstractConfig { /** * Retrieve whether to send overdue information for unfinished tasks. + * + * @return */ public Boolean getSendOverdueAlerts() { return ((Boolean) get(m_sendOverdueAlerts)).booleanValue(); } /** - * Retrieve time between when a task is enabled and when it is considered overdue. + * Retrieve time between when a task is enabled and when it is considered + * overdue. + * + * @return */ public Integer getTaskDuration() { return ((Integer) get(m_taskDuration)).intValue(); } /** - * Retrieve the time to wait between sending successive alerts on the same overdue task (in - * HOURS). + * Retrieve the time to wait between sending successive alerts on the + * same overdue task (in HOURS). + * + * @return */ public Integer getAlertInterval() { return (Integer) get(m_alertInterval); } /** - * Retrieve the maximum number of alerts to send that a single task is overdue + * Retrieve the maximum number of alerts to send that a single task is + * overdue. + * + * @return */ public Integer getMaxAlerts() { return (Integer) get(m_maxAlerts); @@ -381,8 +393,9 @@ public final class ContentSectionConfig extends AbstractConfig { * solution. */ /** - * Changed: The forth field is not used anymore + * Changed: The forth field is not used anymore. * + * @return */ public List getDefaultRoles() { @@ -651,6 +664,7 @@ public final class ContentSectionConfig extends AbstractConfig { /** * Retrieve whether the content-section is publicly viewable (i.e. without registration and * login) + * @return */ public Boolean isPubliclyViewable() { return ((Boolean) get(m_isPublic)).booleanValue(); @@ -658,13 +672,15 @@ public final class ContentSectionConfig extends AbstractConfig { /** * Retrieve the item resolver class + * @return */ public String getItemResolverClass() { return (String) get(m_itemResolverClass); } /** - * Retrieve the template resolver class + * Retrieve the template resolver class. + * @return */ public String getTemplateResolverClass() { return (String) get(m_templateResolverClass); @@ -684,8 +700,10 @@ public final class ContentSectionConfig extends AbstractConfig { } /** - * Retrieve the list of files containing categories to load. In old Initialiser: Parameter name: + * Retrieve the list of files containing categories to load. + * In old Initialiser: Parameter name: * CATEGORIES Deskr. "XML file containing the category tree" + * @return */ public List getCategoryFileList() { String[] catFiles = (String[]) get(m_categoryFileList); @@ -693,7 +711,8 @@ public final class ContentSectionConfig extends AbstractConfig { } /** - * Retrieve the + * Retrieve the. + * @return */ public List getContentSectionsContentTypes() { String[] taskAlerts = (String[]) get(m_contentTypeList); diff --git a/ccm-cms/src/com/arsdigita/cms/dispatcher/AssetURLFinder.java b/ccm-cms/src/com/arsdigita/cms/dispatcher/AssetURLFinder.java index 54e8c09bf..888d285df 100755 --- a/ccm-cms/src/com/arsdigita/cms/dispatcher/AssetURLFinder.java +++ b/ccm-cms/src/com/arsdigita/cms/dispatcher/AssetURLFinder.java @@ -21,7 +21,7 @@ import com.arsdigita.kernel.NoValidURLException; import com.arsdigita.kernel.URLFinder; import com.arsdigita.persistence.OID; import com.arsdigita.web.Web; -import com.arsdigita.web.WebConfig; +//import com.arsdigita.web.WebConfig; /** * Implementation of URLFinder for Assets. @@ -37,6 +37,7 @@ public class AssetURLFinder implements URLFinder { * @param context the context of the lookup (live/draft) * @return */ + @Override public String find(OID oid, String context) throws NoValidURLException { if( !"live".equals( context ) ) throw new NoValidURLException("No draft URL for assets"); @@ -57,6 +58,7 @@ public class AssetURLFinder implements URLFinder { * @param oid the OID of the asset * @return */ + @Override public String find(OID oid) throws NoValidURLException { return find(oid, "live"); } diff --git a/ccm-core/src/com/arsdigita/dispatcher/DispatcherHelper.java b/ccm-core/src/com/arsdigita/dispatcher/DispatcherHelper.java index 43d17f92a..e16c921f8 100755 --- a/ccm-core/src/com/arsdigita/dispatcher/DispatcherHelper.java +++ b/ccm-core/src/com/arsdigita/dispatcher/DispatcherHelper.java @@ -60,6 +60,10 @@ import org.apache.log4j.Logger; */ public final class DispatcherHelper implements DispatcherConstants { + /** Internal logger instance to faciliate debugging. Enable logging output + * by editing /WEB-INF/conf/log4j.properties int hte runtime environment + * and set com.arsdigita.dispatcher.DispatcherHelper=DEBUG + * by uncommenting or adding the line. */ private static final Logger s_log = Logger.getLogger(DispatcherHelper.class); private static String s_webappCtx; private static String s_staticURL; @@ -89,7 +93,7 @@ public final class DispatcherHelper implements DispatcherConstants { /** * The current HttpServletRequest. */ - private static ThreadLocal s_request = new ThreadLocal(); + private static final ThreadLocal s_request = new ThreadLocal(); /** null constructor, private so no one can instantiate! */ private DispatcherHelper() { @@ -128,8 +132,9 @@ public final class DispatcherHelper implements DispatcherConstants { * if servlet A includes servlet B, calling getRequestURI() in B * returns "A" and not "B". * + * @param req * @return the URL path (relative to the webapp root) for the currently - * executing resource. + * executing resource. */ public static String getCurrentResourcePath(HttpServletRequest req) { String attr = (String) req.getAttribute(INCLUDE_URI); @@ -153,6 +158,7 @@ public final class DispatcherHelper implements DispatcherConstants { /** * Gets the application context from the request attributes. + * @param req * @return the application context from the request attributes. */ public static RequestContext getRequestContext(HttpServletRequest req) { @@ -242,11 +248,16 @@ public final class DispatcherHelper implements DispatcherConstants { /** * Equivalent to forwardRequestByPath(path, req, resp, * DispatcherHelper.getRequestContext(req).getServletContext()). + * @param path + * @param req + * @param resp + * @throws java.io.IOException + * @throws javax.servlet.ServletException */ public static void forwardRequestByPath(String path, HttpServletRequest req, HttpServletResponse resp) - throws IOException, ServletException { + throws IOException, ServletException { ServletContext sctx = DispatcherHelper.getRequestContext(req).getServletContext(); forwardRequestByPath(path, req, resp, sctx); @@ -316,6 +327,12 @@ public final class DispatcherHelper implements DispatcherConstants { /** * Equivalent to forwardRequestByName(name, req, resp, * DispatcherHelper.getRequestContext(req).getServletContext()). + * + * @param name + * @param req + * @param resp + * @throws java.io.IOException + * @throws javax.servlet.ServletException */ public static void forwardRequestByName(String name, HttpServletRequest req, @@ -345,6 +362,7 @@ public final class DispatcherHelper implements DispatcherConstants { * not end with a trailing slash. * @exception java.io.FileNotFoundException if no matching * file exists. + * @throws com.arsdigita.dispatcher.DirectoryListingException * @deprecated abstract URLs are no longer supported. Use * extensions when your file on disk has an extension. */ @@ -382,17 +400,13 @@ public final class DispatcherHelper implements DispatcherConstants { final String extensionSearchList[] = {".jsp"}; if (filesInDir != null) { - // look for .jsp files first - for (int j = 0; j < extensionSearchList.length; j++) { - - File possibleFile = - new File(dirToSearch, - filenameStub + extensionSearchList[j]); - + for (String searchExtension : extensionSearchList) { //1.5 enhanced loop + File possibleFile = new File(dirToSearch, + filenameStub + searchExtension); for (int i = 0; i < filesInDir.length; i++) { if (filesInDir[i].equals(possibleFile)) { - return (indexPage ? File.separator + "index" : "") - + extensionSearchList[j]; + return (indexPage ? File.separator + "index" : "") + + searchExtension; } } } @@ -474,6 +488,11 @@ public final class DispatcherHelper implements DispatcherConstants { /** * This method will optionally wrap the request if it is a multipart POST, * or restore the original wrapper if it was already wrapped. + * + * @param sreq + * @return + * @throws java.io.IOException + * @throws javax.servlet.ServletException */ public static HttpServletRequest maybeWrapRequest(HttpServletRequest sreq) throws IOException, ServletException { @@ -533,6 +552,7 @@ public final class DispatcherHelper implements DispatcherConstants { * Redirects the client to the given URL without rewriting it. Delegates * to the sendExternalRedirect method. * + * @throws java.io.IOException * @deprecated This method does not rewrite URLs. Use * sendRedirect(HttpServletRequest, HttpServletResponse, String) for * redirects within this ACS or @@ -544,7 +564,7 @@ public final class DispatcherHelper implements DispatcherConstants { **/ public static void sendRedirect(HttpServletResponse resp, String url) - throws IOException { + throws IOException { sendExternalRedirect(resp, url); } @@ -556,11 +576,12 @@ public final class DispatcherHelper implements DispatcherConstants { * for URL rewriting * @param resp the current response * @param url the destination URL for redirect + * @throws java.io.IOException **/ public static void sendRedirect(HttpServletRequest req, HttpServletResponse resp, String url) - throws IOException { + throws IOException { sendExternalRedirect(resp, url); } @@ -570,10 +591,11 @@ public final class DispatcherHelper implements DispatcherConstants { * * @param resp the current response * @param url the destination URL for redirect + * @throws java.io.IOException **/ public static void sendExternalRedirect(HttpServletResponse resp, String url) - throws IOException { + throws IOException { if (s_log.isDebugEnabled()) { s_log.debug("Redirecting to URL '" + url + "'", new Throwable()); } @@ -782,6 +804,8 @@ public final class DispatcherHelper implements DispatcherConstants { * 3. If there is no request or previous request, use the value * specified by the enterprise.init webappContext parameter. * 4. Lastly, return null. + * + * @return */ public static String getWebappContext() { init(); @@ -832,6 +856,8 @@ public final class DispatcherHelper implements DispatcherConstants { /** * Stores the HttpServletRequest in a ThreadLocal so that it can be * accessed globally. + * + * @param r */ public static void setRequest(HttpServletRequest r) { init(); @@ -1069,7 +1095,8 @@ public final class DispatcherHelper implements DispatcherConstants { } /** - * This returns a reference to the dispatcher configuration file + * This returns a reference to the dispatcher configuration file + * @return */ public static DispatcherConfig getConfig() { if (s_config == null) { @@ -1080,9 +1107,9 @@ public final class DispatcherHelper implements DispatcherConstants { } /** - * This method returns the best matching locate for the request. In contrast to - * the other methods available this one will also respect the supported_languages - * config entry. + * This method returns the best matching locale for the request. In contrast + * to the other methods available this one will also respect the + * supported_languages config entry. * * @return The negotiated locale */ @@ -1113,8 +1140,8 @@ public final class DispatcherHelper implements DispatcherConstants { } } catch (NullPointerException ex) { - // Don't have to do anything because I want to fall back to default language anyway - // This case should only appear during setup + // Don't have to do anything because I want to fall back to default + // language anyway. This case should only appear during setup } finally { return preferedLocale; diff --git a/ccm-core/src/com/arsdigita/web/BaseServlet.java b/ccm-core/src/com/arsdigita/web/BaseServlet.java index 46f1ac9a5..38b535d85 100755 --- a/ccm-core/src/com/arsdigita/web/BaseServlet.java +++ b/ccm-core/src/com/arsdigita/web/BaseServlet.java @@ -149,6 +149,7 @@ public abstract class BaseServlet extends HttpServlet { final IOException[] ioException = { null }; new KernelExcursion() { + @Override protected final void excurse() { setLocale(sreq.getLocale()); setSessionID(sreq.getSession().getId()); @@ -266,6 +267,10 @@ public abstract class BaseServlet extends HttpServlet { /** *

Processes HTTP GET requests.

* + * @param sreq + * @param sresp + * @throws javax.servlet.ServletException + * @throws java.io.IOException * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest,HttpServletResponse) */ @Override @@ -283,6 +288,11 @@ public abstract class BaseServlet extends HttpServlet { /** *

Processes HTTP POST requests.

+ * + * @param sreq + * @param sresp + * @throws javax.servlet.ServletException + * @throws java.io.IOException * * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest,HttpServletResponse) */ diff --git a/ccm-core/src/com/arsdigita/web/CCMDispatcherServlet.java b/ccm-core/src/com/arsdigita/web/CCMDispatcherServlet.java index dbdd8b0c5..b8124a028 100755 --- a/ccm-core/src/com/arsdigita/web/CCMDispatcherServlet.java +++ b/ccm-core/src/com/arsdigita/web/CCMDispatcherServlet.java @@ -318,6 +318,9 @@ public class CCMDispatcherServlet extends BaseServlet { s_log.debug("Checking if this request needs to be forwarded or " + "included " + sreq); + // Just in case sreq is wrapped in one of our own classes (spec. + // MultipartHttpServletRequest), return unwrapped request, otherwise + // do nothing (doesn't modify anything). Mostly does nothing! sreq = DispatcherHelper.restoreOriginalRequest(sreq); if (sreq.getAttribute("javax.servlet.include.request_uri") == null) { @@ -499,7 +502,7 @@ public class CCMDispatcherServlet extends BaseServlet { @Override public String toString() { final String sep = ", "; - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); sb.append("["); sb.append("appID=").append(m_id).append(sep); sb.append("instanceURI=").append(m_instanceURI).append(sep); @@ -516,6 +519,7 @@ public class CCMDispatcherServlet extends BaseServlet { */ private static class Cache extends PathMapCache { + /** */ private static final ThreadLocal s_handleHere = new ThreadLocal() { @Override protected Object initialValue() { @@ -523,6 +527,9 @@ public class CCMDispatcherServlet extends BaseServlet { } }; + /** + * Constructor, just delegates to Super class + */ public Cache() { super("BaseDispatcherCache"); } diff --git a/ccm-core/src/com/arsdigita/web/DefaultApplicationFileResolver.java b/ccm-core/src/com/arsdigita/web/DefaultApplicationFileResolver.java index f65712c7a..dc1655ca5 100755 --- a/ccm-core/src/com/arsdigita/web/DefaultApplicationFileResolver.java +++ b/ccm-core/src/com/arsdigita/web/DefaultApplicationFileResolver.java @@ -31,14 +31,16 @@ public class DefaultApplicationFileResolver implements ApplicationFileResolver { * by editing /WEB-INF/conf/log4j.properties int hte runtime environment * and set com.arsdigita.web.DefaultApplicationFileResolver=DEBUG by * uncommenting or adding the line. */ - private static Logger s_log = - Logger.getLogger(DefaultApplicationFileResolver.class); + private static final Logger s_log = Logger.getLogger + (DefaultApplicationFileResolver.class); private static final String[] WELCOME_FILES = new String[] { "index.jsp", "index.html" }; /** + * Determines from the passsed in information a suitable RequestDispatcher. + * Implementation of the interface' single method. * * @param templatePath * @param sreq @@ -52,7 +54,7 @@ public class DefaultApplicationFileResolver implements ApplicationFileResolver { HttpServletResponse sresp, Application app) { - String contextPath = app.getContextPath(); + String contextPath = app.getContextPath(); // constant from Application! String pathInfo = sreq.getPathInfo(); if (s_log.isDebugEnabled()) { @@ -65,15 +67,13 @@ public class DefaultApplicationFileResolver implements ApplicationFileResolver { if (path.endsWith("/")) { - for (int i = 0 ; i < WELCOME_FILES.length ; i++) { + for (String welcomeFile : WELCOME_FILES) { //1.5 enhanced for-loop if (s_log.isDebugEnabled()) { s_log.debug("Trying welcome resource " + - path + WELCOME_FILES[i]); + path + welcomeFile); } - RequestDispatcher rd = Web.findResourceDispatcher( - contextPath + path - + WELCOME_FILES[i]); + contextPath + path + welcomeFile); if (rd != null) { if (s_log.isDebugEnabled()) { s_log.debug("Got dispatcher " + rd); diff --git a/ccm-core/src/com/arsdigita/web/Web.java b/ccm-core/src/com/arsdigita/web/Web.java index bff9a0e91..0bee86d2b 100755 --- a/ccm-core/src/com/arsdigita/web/Web.java +++ b/ccm-core/src/com/arsdigita/web/Web.java @@ -22,13 +22,14 @@ package com.arsdigita.web; import com.arsdigita.kernel.security.UserContext; import com.arsdigita.util.Assert; import com.arsdigita.util.StringUtils; -import com.arsdigita.util.UncheckedWrapperException; +//import com.arsdigita.util.UncheckedWrapperException; import java.io.IOException; import java.io.InputStream; +import java.net.MalformedURLException; import java.net.URL; -import java.util.HashMap; -import java.util.Map; +//import java.util.HashMap; +//import java.util.Map; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; @@ -51,7 +52,7 @@ public class Web { * by uncommenting or adding the line. */ private static final Logger s_log = Logger.getLogger(Web.class); - private static WebConfig s_config = WebConfig.getInstanceOf(); + private static final WebConfig s_config = WebConfig.getInstanceOf(); private static final ThreadLocal s_request = new InternalRequestLocal(); @@ -237,7 +238,7 @@ public class Web { } return url; // Return adjusted resourcePath url } - } catch (IOException ex) { + } catch (MalformedURLException ex) { if (s_log.isDebugEnabled()) { s_log.debug("Cannot get resource for " + resourcePath); } @@ -272,7 +273,7 @@ public class Web { s_log.debug("No URL present for " + path); } } - } catch(IOException exc) { + } catch(MalformedURLException exc) { if (s_log.isDebugEnabled()) { s_log.debug("cannot get resource for " + path); } @@ -324,7 +325,7 @@ public class Web { s_log.debug("No URL present for " + path); } } - } catch(IOException ex) { + } catch(MalformedURLException ex) { if (s_log.isDebugEnabled()) { s_log.debug("cannot get resource for " + path); } @@ -404,15 +405,36 @@ public class Web { return null; } ServletContext ctx = getServletContext(); + URL url = null; // Check for old style resource format including a comma seoarated list // of webapps if(resourcePath.indexOf(",") <= 0 ) { // no comma separated list found, process as normal - return ctx == null ? null : ctx.getRequestDispatcher(resourcePath); + + try { + url = ctx.getResource(resourcePath); + } catch (MalformedURLException ex) { + if (s_log.isDebugEnabled()) { + s_log.debug("Resource for " + resourcePath + " not found."); + } + // throw new UncheckedWrapperException( + // "No resource at " + resourcePath, ex); + return null; + } + if (url == null) { + return null; + } else { + RequestDispatcher rd = (ctx == null) ? + null : ctx.getRequestDispatcher(resourcePath); + return rd; + } + } else { + // old style format not implemented yet here return null; + } } diff --git a/ccm-core/src/com/arsdigita/web/WebConfig.java b/ccm-core/src/com/arsdigita/web/WebConfig.java index f95e80e77..4c5d8cb0c 100755 --- a/ccm-core/src/com/arsdigita/web/WebConfig.java +++ b/ccm-core/src/com/arsdigita/web/WebConfig.java @@ -248,6 +248,7 @@ public final class WebConfig extends AbstractConfig { * per-user caching, world for globally enabled * caching, disable to prevent HTTP header caching, and * noneto always prevent caching in any case. + * @return */ public final CachePolicy getCachePolicy() { return (CachePolicy) get(m_policy); @@ -259,6 +260,7 @@ public final class WebConfig extends AbstractConfig { super(name); } + @Override protected void doValidate(final Object value, final ErrorList errors) { final String string = (String) value; @@ -322,6 +324,7 @@ public final class WebConfig extends AbstractConfig { // /** + * @return * @deprecated Use getServer().getName() instead. */ public final String getServerName() { @@ -329,6 +332,7 @@ public final class WebConfig extends AbstractConfig { } /** + * @return * @deprecated Use getServer().getPort() instead. */ public final int getServerPort() { @@ -336,6 +340,7 @@ public final class WebConfig extends AbstractConfig { } /** + * @return * @deprecated Use * Host.retrieve(Web.getConfig().getHost()) instead. */ @@ -344,6 +349,7 @@ public final class WebConfig extends AbstractConfig { } /** + * @return * @deprecated Use Host.retrieveAll() instead. */ public final Host[] getHosts() {