You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2009/07/16 16:51:22 UTC
svn commit: r794701 -
/incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
Author: sabob
Date: Thu Jul 16 14:51:22 2009
New Revision: 794701
URL: http://svn.apache.org/viewvc?rev=794701&view=rev
Log:
promoted method #getPageClass to protected and refactored isJsp to be more generic
Modified:
incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
Modified: incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java?rev=794701&r1=794700&r2=794701&view=diff
==============================================================================
--- incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java (original)
+++ incubator/click/trunk/click/framework/src/org/apache/click/service/XmlConfigService.java Thu Jul 16 14:51:22 2009
@@ -393,8 +393,15 @@
* @return true if JSP exists for the given ".htm" path
*/
public boolean isJspPage(String path) {
- String jspPath = StringUtils.replace(path, ".htm", ".jsp");
- return pageByPathMap.containsKey(jspPath);
+ HtmlStringBuffer buffer = new HtmlStringBuffer();
+ int index = StringUtils.lastIndexOf(path, ".");
+ if (index > 0) {
+ buffer.append(path.substring(0, index));
+ } else {
+ buffer.append(path);
+ }
+ buffer.append(".jsp");
+ return pageByPathMap.containsKey(buffer.toString());
}
/**
@@ -663,7 +670,125 @@
}
}
- // -------------------------------------------------------- Package Private Methods
+ // ------------------------------------------------------ Protected Methods
+
+ /**
+ * Find and return the page class for the specified pagePath and
+ * pagesPackage.
+ * <p/>
+ * For example if the pagePath is <tt>'/edit-customer.htm'</tt> and
+ * package is <tt>'com.mycorp'</tt>, the matching page class will be:
+ * <tt>com.mycorp.EditCustomer</tt> or <tt>com.mycorp.EditCustomerPage</tt>.
+ * <p/>
+ * If the page path is <tt>'/admin/add-customer.htm'</tt> and package is
+ * <tt>'com.mycorp'</tt>, the matching page class will be:
+ * <tt>com.mycorp.admin.AddCustomer</tt> or
+ * <tt>com.mycorp.admin.AddCustomerPage</tt>.
+ *
+ * @param pagePath the path used for matching against a page class name
+ * @param pagesPackage the package of the page class
+ * @return the page class for the specified pagePath and pagesPackage
+ */
+ protected Class getPageClass(String pagePath, String pagesPackage) {
+ // To understand this method lets walk through an example as the
+ // code plays out. Imagine this method is called with the arguments:
+ // pagePath='/pages/edit-customer.htm'
+ // pagesPackage='org.apache.click'
+
+ // Add period at end.
+ // packageName = 'org.apache.click.'
+ String packageName = pagesPackage + ".";
+ String className = "";
+
+ // Strip off extension.
+ // path = '/pages/edit-customer'
+ String path = pagePath.substring(0, pagePath.lastIndexOf("."));
+
+ // If page is excluded return the excluded class
+ Class excludePageClass = getExcludesPageClass(path);
+ if (excludePageClass != null) {
+ return excludePageClass;
+ }
+
+ // Build complete packageName.
+ // packageName = 'org.apache.click.pages.'
+ // className = 'edit-customer'
+ if (path.indexOf("/") != -1) {
+ StringTokenizer tokenizer = new StringTokenizer(path, "/");
+ while (tokenizer.hasMoreTokens()) {
+ String token = tokenizer.nextToken();
+ if (tokenizer.hasMoreTokens()) {
+ packageName = packageName + token + ".";
+ } else {
+ className = token;
+ }
+ }
+ } else {
+ className = path;
+ }
+
+ // CamelCase className.
+ // className = 'EditCustomer'
+ StringTokenizer tokenizer = new StringTokenizer(className, "_-");
+ className = "";
+ while (tokenizer.hasMoreTokens()) {
+ String token = tokenizer.nextToken();
+ token = Character.toUpperCase(token.charAt(0)) + token.substring(1);
+ className += token;
+ }
+
+ // className = 'org.apache.click.pages.EditCustomer'
+ className = packageName + className;
+
+ Class pageClass = null;
+ try {
+ // Attempt to load class.
+ pageClass = ClickUtils.classForName(className);
+
+ if (!Page.class.isAssignableFrom(pageClass)) {
+ String msg = "Automapped page class " + className
+ + " is not a subclass of org.apache.click.Page";
+ throw new RuntimeException(msg);
+ }
+
+ } catch (ClassNotFoundException cnfe) {
+
+ boolean classFound = false;
+
+ // Append "Page" to className and attempt to load class again.
+ // className = 'org.apache.click.pages.EditCustomerPage'
+ if (!className.endsWith("Page")) {
+ String classNameWithPage = className + "Page";
+ try {
+ // Attempt to load class.
+ pageClass = ClickUtils.classForName(classNameWithPage);
+
+ if (!Page.class.isAssignableFrom(pageClass)) {
+ String msg = "Automapped page class " + classNameWithPage
+ + " is not a subclass of org.apache.click.Page";
+ throw new RuntimeException(msg);
+ }
+
+ classFound = true;
+
+ } catch (ClassNotFoundException cnfe2) {
+ }
+ }
+
+ if (!classFound) {
+ if (logService.isDebugEnabled()) {
+ logService.debug(pagePath + " -> CLASS NOT FOUND");
+ }
+ if (logService.isTraceEnabled()) {
+ logService.trace("class not found: " + className);
+ }
+ }
+ }
+
+ return pageClass;
+ }
+
+ // ------------------------------------------------ Package Private Methods
/**
* Loads all Click Pages defined in the <tt>click.xml</tt> file, including
@@ -925,122 +1050,6 @@
return headersMap;
}
- /**
- * Find and return the page class for the specified pagePath and
- * pagesPackage.
- * <p/>
- * For example if the pagePath is <tt>'/edit-customer.htm'</tt> and
- * package is <tt>'com.mycorp'</tt>, the matching page class will be:
- * <tt>com.mycorp.EditCustomer</tt> or <tt>com.mycorp.EditCustomerPage</tt>.
- * <p/>
- * If the page path is <tt>'/admin/add-customer.htm'</tt> and package is
- * <tt>'com.mycorp'</tt>, the matching page class will be:
- * <tt>com.mycorp.admin.AddCustomer</tt> or
- * <tt>com.mycorp.admin.AddCustomerPage</tt>.
- *
- * @param pagePath the path used for matching against a page class name
- * @param pagesPackage the package of the page class
- * @return the page class for the specified pagePath and pagesPackage
- */
- Class getPageClass(String pagePath, String pagesPackage) {
- // To understand this method lets walk through an example as the
- // code plays out. Imagine this method is called with the arguments:
- // pagePath='/pages/edit-customer.htm'
- // pagesPackage='org.apache.click'
-
- // Add period at end.
- // packageName = 'org.apache.click.'
- String packageName = pagesPackage + ".";
- String className = "";
-
- // Strip off extension.
- // path = '/pages/edit-customer'
- String path = pagePath.substring(0, pagePath.lastIndexOf("."));
-
- // If page is excluded return the excluded class
- Class excludePageClass = getExcludesPageClass(path);
- if (excludePageClass != null) {
- return excludePageClass;
- }
-
- // Build complete packageName.
- // packageName = 'org.apache.click.pages.'
- // className = 'edit-customer'
- if (path.indexOf("/") != -1) {
- StringTokenizer tokenizer = new StringTokenizer(path, "/");
- while (tokenizer.hasMoreTokens()) {
- String token = tokenizer.nextToken();
- if (tokenizer.hasMoreTokens()) {
- packageName = packageName + token + ".";
- } else {
- className = token;
- }
- }
- } else {
- className = path;
- }
-
- // CamelCase className.
- // className = 'EditCustomer'
- StringTokenizer tokenizer = new StringTokenizer(className, "_-");
- className = "";
- while (tokenizer.hasMoreTokens()) {
- String token = tokenizer.nextToken();
- token = Character.toUpperCase(token.charAt(0)) + token.substring(1);
- className += token;
- }
-
- // className = 'org.apache.click.pages.EditCustomer'
- className = packageName + className;
-
- Class pageClass = null;
- try {
- // Attempt to load class.
- pageClass = ClickUtils.classForName(className);
-
- if (!Page.class.isAssignableFrom(pageClass)) {
- String msg = "Automapped page class " + className
- + " is not a subclass of org.apache.click.Page";
- throw new RuntimeException(msg);
- }
-
- } catch (ClassNotFoundException cnfe) {
-
- boolean classFound = false;
-
- // Append "Page" to className and attempt to load class again.
- // className = 'org.apache.click.pages.EditCustomerPage'
- if (!className.endsWith("Page")) {
- String classNameWithPage = className + "Page";
- try {
- // Attempt to load class.
- pageClass = ClickUtils.classForName(classNameWithPage);
-
- if (!Page.class.isAssignableFrom(pageClass)) {
- String msg = "Automapped page class " + classNameWithPage
- + " is not a subclass of org.apache.click.Page";
- throw new RuntimeException(msg);
- }
-
- classFound = true;
-
- } catch (ClassNotFoundException cnfe2) {
- }
- }
-
- if (!classFound) {
- if (logService.isDebugEnabled()) {
- logService.debug(pagePath + " -> CLASS NOT FOUND");
- }
- if (logService.isTraceEnabled()) {
- logService.trace("class not found: " + className);
- }
- }
- }
-
- return pageClass;
- }
-
// -------------------------------------------------------- Private Methods
private Element getResourceRootElement(String path) throws IOException {