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() {