You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2007/01/01 09:01:32 UTC

svn commit: r491544 - in /incubator/wicket/trunk/wicket/src: main/java/wicket/markup/ main/java/wicket/markup/loader/ main/java/wicket/markup/parser/ main/java/wicket/markup/parser/filter/ main/java/wicket/settings/ test/java/wicket/markup/ test/java/w...

Author: jdonnerstag
Date: Mon Jan  1 00:01:32 2007
New Revision: 491544

URL: http://svn.apache.org/viewvc?view=rev&rev=491544
Log:
cleanups on markup loading

Added:
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/BaseMarkupLoader.java
      - copied, changed from r487274, incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/DefaultMarkupLoader.java
Modified:
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupCache.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParser.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParserFactory.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/HeaderCleanupMarkupLoader.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/AbstractMarkupFilter.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/IMarkupFilter.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/PrependContextPathHandler.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/settings/Settings.java
    incubator/wicket/trunk/wicket/src/test/java/wicket/markup/MarkupParserTest.java
    incubator/wicket/trunk/wicket/src/test/java/wicket/performance/MarkupParserPerformanceTest.java

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupCache.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupCache.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupCache.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupCache.java Mon Jan  1 00:01:32 2007
@@ -27,9 +27,7 @@
 import wicket.MarkupContainer;
 import wicket.WicketRuntimeException;
 import wicket.markup.loader.DefaultMarkupLoader;
-import wicket.markup.loader.HeaderCleanupMarkupLoader;
 import wicket.markup.loader.IMarkupLoader;
-import wicket.markup.loader.InheritedMarkupMarkupLoader;
 import wicket.util.listener.IChangeListener;
 import wicket.util.resource.IResourceStream;
 import wicket.util.resource.ResourceStreamNotFoundException;
@@ -411,11 +409,7 @@
 	 */
 	protected IMarkupLoader newMarkupLoader()
 	{
-		return new InheritedMarkupMarkupLoader(application)
-			.setParent(
-					new HeaderCleanupMarkupLoader(application)
-						.setParent(
-								new DefaultMarkupLoader(application)));
+		return new DefaultMarkupLoader();
 	}
 
 	/**

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParser.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParser.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParser.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParser.java Mon Jan  1 00:01:32 2007
@@ -25,6 +25,7 @@
 import java.util.regex.Pattern;
 
 import wicket.Page;
+import wicket.WicketRuntimeException;
 import wicket.markup.parser.IMarkupFilter;
 import wicket.markup.parser.IXmlPullParser;
 import wicket.markup.parser.XmlPullParser;
@@ -32,6 +33,7 @@
 import wicket.markup.parser.filter.HeadForceTagIdHandler;
 import wicket.markup.parser.filter.HtmlHandler;
 import wicket.markup.parser.filter.HtmlHeaderSectionHandler;
+import wicket.markup.parser.filter.PrependContextPathHandler;
 import wicket.markup.parser.filter.TagTypeHandler;
 import wicket.markup.parser.filter.WicketLinkTagHandler;
 import wicket.markup.parser.filter.WicketMessageTagHandler;
@@ -198,6 +200,7 @@
 	{
 		// Chain together all the different markup filters and configure them
 		this.markupFilterChain = xmlParser;
+		xmlParser.setPriority(0);
 
 		registerMarkupFilter(new WicketTagIdentifier(this.markup));
 		registerMarkupFilter(new TagTypeHandler());
@@ -225,20 +228,8 @@
 				registerMarkupFilter(new HeadForceTagIdHandler(containerInfo.getContainerClass()));
 			}
 		}
-	}
-
-	/**
-	 * Append a new filter to the list of already pre-configured markup filters.
-	 * To be used by subclasses which implement {@link #initFilterChain()}.
-	 * 
-	 * @param filter
-	 *            The filter to be appended
-	 * @deprecated since 2.0 please use registerMarkupFilter() instead
-	 */
-	public final void appendMarkupFilter(final IMarkupFilter filter)
-	{
-		filter.setParent(this.markupFilterChain);
-		this.markupFilterChain = filter;
+		
+		registerMarkupFilter(new PrependContextPathHandler());
 	}
 
 	/**
@@ -250,8 +241,26 @@
 	 */
 	public final void registerMarkupFilter(final IMarkupFilter filter)
 	{
-		filter.setParent(this.markupFilterChain);
-		this.markupFilterChain = filter;
+		IMarkupFilter parent = this.markupFilterChain;
+		IMarkupFilter prevParent = null;
+		while (parent.getPriority() > filter.getPriority())
+		{
+			prevParent = parent;
+			parent = parent.getParent();
+			if (parent == null)
+			{
+				throw new WicketRuntimeException("The filters priority is too low. Must be > 0. Filter: " + filter);
+			}
+		}
+		filter.setParent(parent);
+		if (parent == this.markupFilterChain)
+		{
+			this.markupFilterChain = filter;
+		}
+		else
+		{
+			prevParent.setParent(filter);
+		}
 	}
 
 	/**

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParserFactory.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParserFactory.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParserFactory.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/MarkupParserFactory.java Mon Jan  1 00:01:32 2007
@@ -17,38 +17,21 @@
 package wicket.markup;
 
 import wicket.Application;
-import wicket.markup.parser.filter.PrependContextPathHandler;
 import wicket.settings.IMarkupSettings;
 
 /**
  * Default implementation of IMarkupParserFactory
  * 
- * @TODO This class doesn't serve any purpose anymore and should be removed
  * @author Igor Vaynberg (ivaynberg)
  */
 public class MarkupParserFactory implements IMarkupParserFactory
 {
-	/** Wicket application object */
-	private final Application application;
-
 	/**
 	 * Construct.
 	 * 
 	 */
 	public MarkupParserFactory()
 	{
-		this.application = Application.get();
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param application
-	 *            Application settings necessary to configure the parser
-	 */
-	public MarkupParserFactory(final Application application)
-	{
-		this.application = application;
 	}
 
 	/**
@@ -78,7 +61,7 @@
 	 */
 	protected void initSettings(final MarkupParser parser)
 	{
-		final IMarkupSettings settings = this.application.getMarkupSettings();
+		final IMarkupSettings settings = Application.get().getMarkupSettings();
 		parser.setCompressWhitespace(settings.getCompressWhitespace());
 		parser.setStripComments(settings.getStripComments());
 		parser.setDefaultMarkupEncoding(settings.getDefaultMarkupEncoding());
@@ -95,6 +78,5 @@
 	 */
 	protected void initMarkupFilters(final MarkupParser parser)
 	{
-		parser.registerMarkupFilter(new PrependContextPathHandler(this.application));
 	}
 }

Copied: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/BaseMarkupLoader.java (from r487274, incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/DefaultMarkupLoader.java)
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/BaseMarkupLoader.java?view=diff&rev=491544&p1=incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/DefaultMarkupLoader.java&r1=487274&p2=incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/BaseMarkupLoader.java&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/DefaultMarkupLoader.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/BaseMarkupLoader.java Mon Jan  1 00:01:32 2007
@@ -21,7 +21,9 @@
 import wicket.Application;
 import wicket.MarkupContainer;
 import wicket.markup.MarkupFragment;
+import wicket.markup.MarkupParser;
 import wicket.markup.MarkupResourceStream;
+import wicket.settings.IMarkupSettings;
 import wicket.util.resource.ResourceStreamNotFoundException;
 
 /**
@@ -30,19 +32,13 @@
  * 
  * @author Juergen Donnerstag
  */
-public class DefaultMarkupLoader implements IMarkupLoader
+public class BaseMarkupLoader implements IMarkupLoader
 {
-	/** The Wicket application */
-	private final Application application;
-
 	/**
 	 * Constructor.
-	 * 
-	 * @param application
 	 */
-	public DefaultMarkupLoader(final Application application)
+	public BaseMarkupLoader()
 	{
-		this.application = application;
 	}
 
 	/**
@@ -53,10 +49,16 @@
 			final MarkupResourceStream markupResourceStream) throws IOException,
 			ResourceStreamNotFoundException
 	{
-		// read and parse the markup
-		MarkupFragment markup = application.getMarkupSettings().getMarkupParserFactory()
-				.newMarkupParser(markupResourceStream).readAndParse();
+		// Create a Markup parser
+		final IMarkupSettings settings = Application.get().getMarkupSettings();
+		final MarkupParser parser = settings.getMarkupParserFactory().newMarkupParser(markupResourceStream);
+		
+		parser.setCompressWhitespace(settings.getCompressWhitespace());
+		parser.setStripComments(settings.getStripComments());
+		parser.setDefaultMarkupEncoding(settings.getDefaultMarkupEncoding());
 
+		// read and parse the markup
+		MarkupFragment markup = parser.readAndParse();
 		return markup;
 	}
 }

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/HeaderCleanupMarkupLoader.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/HeaderCleanupMarkupLoader.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/HeaderCleanupMarkupLoader.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/HeaderCleanupMarkupLoader.java Mon Jan  1 00:01:32 2007
@@ -51,6 +51,7 @@
 	 * @see wicket.markup.loader.IMarkupLoader#loadMarkup(wicket.MarkupContainer,
 	 *      wicket.markup.MarkupResourceStream)
 	 */
+	@Override
 	public final MarkupFragment loadMarkup(final MarkupContainer container,
 			final MarkupResourceStream markupResourceStream) throws IOException,
 			ResourceStreamNotFoundException

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/AbstractMarkupFilter.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/AbstractMarkupFilter.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/AbstractMarkupFilter.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/AbstractMarkupFilter.java Mon Jan  1 00:01:32 2007
@@ -26,12 +26,16 @@
  * @see wicket.markup.MarkupParser
  * 
  * @author Jonathan Locke
+ * @author Juergen Donnerstag
  */
 public abstract class AbstractMarkupFilter implements IMarkupFilter
 {
 	/** The next MarkupFilter in the chain */
 	private IMarkupFilter parent;
 
+	/** The filters execution priority */
+	private int priority = DEFAULT_PRIORITY;
+
 	/**
 	 * Construct.
 	 * 
@@ -71,5 +75,22 @@
 	protected final ComponentTag nextComponentTag() throws ParseException
 	{
 		return (ComponentTag)getParent().nextTag();
+	}
+
+	/**
+	 * @see wicket.markup.parser.IMarkupFilter#getPriority()
+	 */
+	public int getPriority()
+	{
+		return this.priority;
+	}
+
+	/**
+	 * @see wicket.markup.parser.IMarkupFilter#setPriority(int)
+	 */
+	public IMarkupFilter setPriority(int priority)
+	{
+		this.priority = priority;
+		return this;
 	}
 }

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/IMarkupFilter.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/IMarkupFilter.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/IMarkupFilter.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/IMarkupFilter.java Mon Jan  1 00:01:32 2007
@@ -33,6 +33,9 @@
  */
 public interface IMarkupFilter
 {
+	/** Default execution priority */
+	final int DEFAULT_PRIORITY = 50;
+
 	/**
 	 * IMarkupFilters are usually chained with the last filter being an XML
 	 * parser. The getParent() method returns the next filter in the chain.
@@ -59,4 +62,24 @@
 	 *            The parent of this component The next element in the chain
 	 */
 	void setParent(final IMarkupFilter parent);
+
+	/**
+	 * Filters with a low priority numbers are executed before filters with
+	 * higher numbers.
+	 * <p>
+	 * Note that the priority is only used while registering the filter with the
+	 * MarkupParser to determine the filters position within the list of
+	 * filters.
+	 * 
+	 * @param priority
+	 * @return this
+	 */
+	IMarkupFilter setPriority(final int priority);
+
+	/**
+	 * Get the filters priority
+	 * 
+	 * @return execution prio
+	 */
+	int getPriority();
 }

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/PrependContextPathHandler.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/PrependContextPathHandler.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/PrependContextPathHandler.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/PrependContextPathHandler.java Mon Jan  1 00:01:32 2007
@@ -79,9 +79,12 @@
 	 *            The application object
 	 * 
 	 */
-	public PrependContextPathHandler(final Application application)
+	public PrependContextPathHandler()
 	{
-		String contextPath = application.getApplicationSettings().getContextPath();
+		// Make sure the filter is placed at the end of the list of filters.
+		setPriority(999);
+		
+		String contextPath = Application.get().getApplicationSettings().getContextPath();
 
 		if (contextPath != null)
 		{

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/settings/Settings.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/settings/Settings.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/settings/Settings.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/settings/Settings.java Mon Jan  1 00:01:32 2007
@@ -313,7 +313,6 @@
 	public Settings(final Application application)
 	{
 		this.application = application;
-		this.markupParserFactory = new MarkupParserFactory(application);
 		stringResourceLoaders.add(new ComponentStringResourceLoader(application));
 		stringResourceLoaders.add(new ClassStringResourceLoader(application, this.application
 				.getClass()));
@@ -595,6 +594,10 @@
 	 */
 	public IMarkupParserFactory getMarkupParserFactory()
 	{
+		if (this.markupParserFactory == null)
+		{
+			this.markupParserFactory = new MarkupParserFactory();
+		}
 		return markupParserFactory;
 	}
 

Modified: incubator/wicket/trunk/wicket/src/test/java/wicket/markup/MarkupParserTest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/test/java/wicket/markup/MarkupParserTest.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/test/java/wicket/markup/MarkupParserTest.java (original)
+++ incubator/wicket/trunk/wicket/src/test/java/wicket/markup/MarkupParserTest.java Mon Jan  1 00:01:32 2007
@@ -71,7 +71,7 @@
 	{
 		MarkupResourceStream stream = new MarkupResourceStream(new StringResourceStream(markup),
 				null, null);
-		final MarkupParser parser = new MarkupParserFactory(this.tester.getApplication())
+		final MarkupParser parser = new MarkupParserFactory()
 				.newMarkupParser(stream);
 		parser.setWicketNamespace(namespace);
 		return parser.readAndParse();
@@ -90,7 +90,7 @@
 	{
 		MarkupResourceStream stream = new MarkupResourceStream(new StringResourceStream(markup),
 				null, null);
-		final MarkupParser parser = new MarkupParserFactory(this.tester.getApplication())
+		final MarkupParser parser = new MarkupParserFactory()
 				.newMarkupParser(stream);
 		return parser.readAndParse();
 	}
@@ -126,7 +126,7 @@
 	private MarkupFragment parse(final MarkupResourceStream resource) throws IOException,
 			ResourceStreamNotFoundException
 	{
-		final MarkupParser parser = new MarkupParserFactory(this.tester.getApplication())
+		final MarkupParser parser = new MarkupParserFactory()
 				.newMarkupParser(resource);
 		return parser.readAndParse();
 	}
@@ -373,7 +373,7 @@
 		// Assert.assertEquals(docText, tokens.get(0).toString());
 
 		resource = newMarkupResourceStream(locator, this.getClass(), "9", null, "html");
-		MarkupParser parser = new MarkupParserFactory(this.tester.getApplication())
+		MarkupParser parser = new MarkupParserFactory()
 				.newMarkupParser(resource);
 		parser.setStripComments(true);
 		parser.readAndParse();

Modified: incubator/wicket/trunk/wicket/src/test/java/wicket/performance/MarkupParserPerformanceTest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/test/java/wicket/performance/MarkupParserPerformanceTest.java?view=diff&rev=491544&r1=491543&r2=491544
==============================================================================
--- incubator/wicket/trunk/wicket/src/test/java/wicket/performance/MarkupParserPerformanceTest.java (original)
+++ incubator/wicket/trunk/wicket/src/test/java/wicket/performance/MarkupParserPerformanceTest.java Mon Jan  1 00:01:32 2007
@@ -32,7 +32,7 @@
 import wicket.markup.MarkupParser;
 import wicket.markup.MarkupParserFactory;
 import wicket.markup.MarkupResourceStream;
-import wicket.markup.loader.DefaultMarkupLoader;
+import wicket.markup.loader.BaseMarkupLoader;
 import wicket.markup.parser.filter.EnclosureHandler;
 import wicket.markup.parser.filter.WicketTagIdentifier;
 import wicket.markup.resolver.EnclosureResolver;
@@ -267,7 +267,7 @@
 		int i = 0;
 		try
 		{
-			DefaultMarkupLoader loader = new DefaultMarkupLoader(this.application);
+			BaseMarkupLoader loader = new BaseMarkupLoader();
 			for (MarkupResourceStream stream : this.resources)
 			{
 				loader.loadMarkup(null, stream);
@@ -392,7 +392,7 @@
 		{
 			Random random = new Random();
 			int size = this.resources.size();
-			DefaultMarkupLoader loader = new DefaultMarkupLoader(this.application);
+			BaseMarkupLoader loader = new BaseMarkupLoader();
 
 			for (int i = 0; i < count; i++)
 			{