You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2013/08/19 21:19:04 UTC

git commit: WICKET-5322 "Source code" link doesn't work at wicket-library.com

Updated Branches:
  refs/heads/wicket-6.x 7d8313f7a -> c47a15c47


WICKET-5322 "Source code" link doesn't work at wicket-library.com

Simplify SourcesPage.
Add log4j as compile dependency because the examples failed at start with ClassNotFoundException org/apache/log4j/Level


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c47a15c4
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c47a15c4
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c47a15c4

Branch: refs/heads/wicket-6.x
Commit: c47a15c47ed74d842f6bf0d987346de92fab02d2
Parents: 7d8313f
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Mon Aug 19 22:17:05 2013 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Mon Aug 19 22:17:05 2013 +0300

----------------------------------------------------------------------
 wicket-examples/pom.xml                         |   5 +
 .../wicket/examples/source/SourcesPage.java     | 210 +++++--------------
 2 files changed, 58 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/c47a15c4/wicket-examples/pom.xml
----------------------------------------------------------------------
diff --git a/wicket-examples/pom.xml b/wicket-examples/pom.xml
index c1cb2de..db6da87 100644
--- a/wicket-examples/pom.xml
+++ b/wicket-examples/pom.xml
@@ -117,6 +117,11 @@
 			<artifactId>slf4j-log4j12</artifactId>
 		</dependency>
 		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.17</version>
+		</dependency>
+		<dependency>
 			<groupId>org.jboss.weld</groupId>
 			<artifactId>weld-core</artifactId>
 			<version>1.1.9.Final</version>

http://git-wip-us.apache.org/repos/asf/wicket/blob/c47a15c4/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
index c839c24..6b0d1dc 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
@@ -43,19 +43,19 @@ import org.apache.wicket.ajax.attributes.AjaxCallListener;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.authorization.UnauthorizedInstantiationException;
+import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.request.http.handler.ErrorCodeRequestHandler;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.io.IOUtils;
-import org.apache.wicket.util.io.Streams;
 import org.apache.wicket.util.lang.PackageName;
-import org.apache.wicket.util.string.AppendingStringBuffer;
-import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.string.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,16 +71,9 @@ public class SourcesPage extends WebPage
 	/**
 	 * Model for retrieving the source code from the classpath of a packaged resource.
 	 */
-	public class SourceModel extends AbstractReadOnlyModel<String>
+	private class SourceModel extends AbstractReadOnlyModel<String>
 	{
 		/**
-		 * Constructor.
-		 */
-		public SourceModel()
-		{
-		}
-
-		/**
 		 * Returns the contents of the file loaded from the classpath.
 		 * 
 		 * @return the contents of the file identified by name
@@ -89,23 +82,18 @@ public class SourcesPage extends WebPage
 		public String getObject()
 		{
 			// name contains the name of the selected file
-			if (Strings.isEmpty(name) &&
-				Strings.isEmpty(getPage().getRequest()
-					.getRequestParameters()
-					.getParameterValue(SOURCE)
-					.toOptionalString()))
+			StringValue sourceParam = getPageParameters().get(SOURCE);
+			if (Strings.isEmpty(name) && sourceParam.isEmpty())
 			{
 				return "";
 			}
+
 			BufferedReader br = null;
 			String source = null;
 			try
 			{
-			 StringBuilder sb = new StringBuilder();
-				source = (name != null) ? name : getPage().getRequest()
-					.getRequestParameters()
-					.getParameterValue(SOURCE)
-					.toOptionalString();
+			    StringBuilder sb = new StringBuilder();
+				source = (name != null) ? name : sourceParam.toString();
 				InputStream resourceAsStream = getPageTargetClass().getResourceAsStream(source);
 				if (resourceAsStream == null)
 				{
@@ -116,7 +104,7 @@ public class SourcesPage extends WebPage
 				while (br.ready())
 				{
 					sb.append(br.readLine());
-					sb.append("\n");
+					sb.append('\n');
 				}
 				int lastDot = source.lastIndexOf('.');
 				if (lastDot != -1)
@@ -128,9 +116,8 @@ public class SourcesPage extends WebPage
 						return renderer.highlight(source, sb.toString(), "UTF-8", true);
 					}
 				}
-				return Strings.escapeMarkup(sb.toString(), false, true)
-					.toString()
-					.replaceAll("\n", "<br />");
+				CharSequence escaped = Strings.escapeMarkup(sb.toString(), false, true);
+				return Strings.replaceAll(escaped, "\n", "<br />").toString();
 			}
 			catch (IOException e)
 			{
@@ -149,119 +136,32 @@ public class SourcesPage extends WebPage
 	/**
 	 * Model for retrieving the contents of a package directory from the class path.
 	 */
-	public class PackagedResourcesModel extends AbstractReadOnlyModel<List<String>>
+	public class PackagedResourcesModel extends LoadableDetachableModel<List<String>>
 	{
-		private final List<String> resources = new ArrayList<String>();
-
-		/**
-		 * Constructor.
-		 */
-		public PackagedResourcesModel()
-		{
-		}
-
-		/**
-		 * Clears the list to save space.
-		 */
-		protected void onDetach()
-		{
-			resources.clear();
-		}
-
 		/**
 		 * Returns the list of resources found in the package of the page.
 		 * 
 		 * @return the list of resources found in the package of the page.
 		 */
 		@Override
-		public List<String> getObject()
+		protected List<String> load()
 		{
-			if (resources.isEmpty())
-			{
-				get(getPageTargetClass());
-// PackageName name = PackageName.forClass(page);
-// ClassLoader loader = page.getClassLoader();
-// String path = Strings.replaceAll(name.getName(), ".", "/").toString();
-// try
-// {
-// // gives the urls for each place where the package
-// // path could be found. There could be multiple
-// // jar files containing the same package, so each
-// // jar file has its own url.
-//
-// Enumeration<URL> urls = loader.getResources(path);
-// while (urls.hasMoreElements())
-// {
-// URL url = urls.nextElement();
-//
-// // the url points to the directory structure
-// // embedded in the classpath.
-//
-// getPackageContents(url);
-// }
-// }
-// catch (IOException e)
-// {
-// log.error("Unable to read resource for: " + path, e);
-// }
-			}
-			return resources;
+			return get(getPageTargetClass());
 		}
 
-		/**
-		 * Retrieves the package contents for the given URL.
-		 * 
-		 * @param packageListing
-		 *            the url to list.
-		 */
-		private void getPackageContents(URL packageListing)
-		{
-			BufferedReader br = null;
-			try
-			{
-				InputStream openStream = Streams.readNonCaching(packageListing);
-				if (openStream == null)
-				{
-					return;
-				}
-				br = new BufferedReader(new InputStreamReader(openStream));
-
-				while (br.ready())
-				{
-					String listing = br.readLine();
-					String extension = Strings.afterLast(listing, '.');
-					if (!listing.endsWith("class"))
-					{
-						resources.add(listing);
-					}
-				}
-			}
-			catch (IOException e)
-			{
-				log.error("Unable to get package content: " + packageListing.toString(), e);
-			}
-			finally
-			{
-				IOUtils.closeQuietly(br);
-			}
-		}
-
-		private final void addResources(final Class<?> scope,
-			final AppendingStringBuffer relativePath, final File dir)
+		private final void addResources(final AppendingStringBuffer relativePath, final File dir, List<String> resources)
 		{
 			File[] files = dir.listFiles();
 			for (File file : files)
 			{
 				if (file.isDirectory())
 				{
-					addResources(scope,
-						new AppendingStringBuffer(relativePath).append(file.getName()).append('/'),
-						file);
+					addResources(new AppendingStringBuffer(relativePath).append(file.getName()).append('/'),
+						file, resources);
 				}
 				else
 				{
 					String name = file.getName();
-					String extension = Strings.afterLast(name, '.');
 					if (!name.endsWith("class"))
 					{
 						resources.add(relativePath + name);
@@ -270,8 +170,10 @@ public class SourcesPage extends WebPage
 			}
 		}
 
-		private void get(Class<?> scope)
+		private List<String> get(Class<?> scope)
 		{
+			List<String> resources = new ArrayList<String>();
+
 			String packageRef = Strings.replaceAll(PackageName.forClass(scope).getName(), ".", "/")
 				.toString();
 			ClassLoader loader = scope.getClassLoader();
@@ -286,7 +188,7 @@ public class SourcesPage extends WebPage
 					if (connection instanceof JarURLConnection)
 					{
 						JarFile jf = ((JarURLConnection)connection).getJarFile();
-						scanJarFile(scope, packageRef, jf);
+						scanJarFile(packageRef, jf, resources);
 					}
 					else
 					{
@@ -328,15 +230,15 @@ public class SourcesPage extends WebPage
 							// ".zip"
 							log.debug("trying the filename: " + filename + " to load as a zip/jar.");
 							JarFile jarFile = new JarFile(filename, false);
-							scanJarFile(scope, packageRef, jarFile);
-							return;
+							scanJarFile(packageRef, jarFile, resources);
+							return resources;
 						}
 						if (!basedir.isDirectory())
 						{
 							throw new IllegalStateException(
 								"unable to read resources from directory " + basedir);
 						}
-						addResources(scope, new AppendingStringBuffer(), basedir);
+						addResources(new AppendingStringBuffer(), basedir, resources);
 					}
 				}
 			}
@@ -345,9 +247,11 @@ public class SourcesPage extends WebPage
 				throw new WicketRuntimeException(e);
 			}
 			Collections.sort(resources);
+
+			return resources;
 		}
 
-		private void scanJarFile(Class<?> scope, String packageRef, JarFile jf)
+		private void scanJarFile(String packageRef, JarFile jf, List<String> resources)
 		{
 			Enumeration<JarEntry> enumeration = jf.entries();
 			while (enumeration.hasMoreElements())
@@ -357,7 +261,6 @@ public class SourcesPage extends WebPage
 				if (name.startsWith(packageRef))
 				{
 					name = name.substring(packageRef.length() + 1);
-					String extension = Strings.afterLast(name, '.');
 					if (!name.endsWith("class"))
 					{
 						resources.add(name);
@@ -504,11 +407,12 @@ public class SourcesPage extends WebPage
 	 * 
 	 * Construct.
 	 * 
-	 * @param <C>
 	 * @param params
 	 */
-	public <C extends Page> SourcesPage(final PageParameters params)
+	public SourcesPage(final PageParameters params)
 	{
+		super(params);
+
 		filename = new Label("filename", new AbstractReadOnlyModel<String>()
 		{
 
@@ -532,7 +436,7 @@ public class SourcesPage extends WebPage
 	/**
 	 * 
 	 * @param page
-	 * @return PageParamets for reconstructing the bookmarkable page.
+	 * @return PageParameters for reconstructing the bookmarkable page.
 	 */
 	public static PageParameters generatePageParameters(Page page)
 	{
@@ -550,51 +454,43 @@ public class SourcesPage extends WebPage
 		PageParameters p = new PageParameters();
 		p.set(PAGE_CLASS, clazz.getName());
 		if (fileName != null)
+		{
 			p.set(SOURCE, fileName);
+		}
 		return p;
 	}
 
-	private String getPageParam()
-	{
-		return getPage().getRequest()
-			.getRequestParameters()
-			.getParameterValue(PAGE_CLASS)
-			.toOptionalString();
-	}
-
 	private Class<? extends Page> getPageTargetClass()
 	{
 		if (page == null)
 		{
-			try
+			String pageParam = getPageParameters().get(PAGE_CLASS).toOptionalString();
+			if (pageParam == null)
 			{
-				String pageParam = getPageParam();
-				if (pageParam == null)
+				if (log.isErrorEnabled())
 				{
-					if (log.isErrorEnabled())
-					{
-						log.error("key: " + PAGE_CLASS + " is null.");
-					}
-					getRequestCycle().replaceAllRequestHandlers(
-						new ErrorCodeRequestHandler(404,
-							"Could not find sources for the page you requested"));
+					log.error("key: " + PAGE_CLASS + " is null.");
 				}
-				if (!pageParam.startsWith("org.apache.wicket.examples"))
+				getRequestCycle().replaceAllRequestHandlers(
+					new ErrorCodeRequestHandler(404,
+						"Could not find sources for the page you requested"));
+			}
+			else if (!pageParam.startsWith("org.apache.wicket.examples"))
+			{
+				if (log.isErrorEnabled())
 				{
-					if (log.isErrorEnabled())
-					{
-						log.error("user is trying to access class: " + pageParam +
-							" which is not in the scope of org.apache.wicket.examples");
-					}
-					throw new UnauthorizedInstantiationException(getClass());
+					log.error("user is trying to access class: " + pageParam +
+						" which is not in the scope of org.apache.wicket.examples");
 				}
-				page = (Class<? extends Page>)Class.forName(getPageParam());
+				throw new UnauthorizedInstantiationException(getClass());
 			}
-			catch (ClassNotFoundException e)
+			page = WicketObjects.resolveClass(pageParam);
+
+			if (page == null)
 			{
 				getRequestCycle().replaceAllRequestHandlers(
-					new ErrorCodeRequestHandler(404,
-						"Could not find sources for the page you requested"));
+						new ErrorCodeRequestHandler(404,
+								"Could not find sources for the page you requested"));
 			}
 		}
 		return page;