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 2006/11/05 12:09:14 UTC

svn commit: r471396 - in /incubator/wicket/trunk/wicket/src/main/java/wicket: ./ markup/loader/ markup/parser/filter/ markup/parser/onLoadListener/ markup/resolver/

Author: jdonnerstag
Date: Sun Nov  5 03:09:12 2006
New Revision: 471396

URL: http://svn.apache.org/viewvc?view=rev&rev=471396
Log:
<wicket:message>: removed the resolver (resolution during render time) and replaced it with a markup load listener performs the same task but when the markup is loaded (in the component constructor)

Added:
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/AbstractMarkupLoadListener.java   (with props)
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderMarkupLoadListener.java
      - copied, changed from r471377, incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderLoader.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketMessageLoadListener.java   (with props)
Removed:
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderLoader.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/resolver/WicketMessageResolver.java
Modified:
    incubator/wicket/trunk/wicket/src/main/java/wicket/Application.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/InheritedMarkupMarkupLoader.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketMessageTagHandler.java
    incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketTagIdentifier.java

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/Application.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/Application.java?view=diff&rev=471396&r1=471395&r2=471396
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/Application.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/Application.java Sun Nov  5 03:09:12 2006
@@ -35,13 +35,13 @@
 import wicket.application.IComponentInstantiationListener;
 import wicket.markup.MarkupCache;
 import wicket.markup.html.image.resource.DefaultButtonImageResourceFactory;
-import wicket.markup.parser.onLoadListener.WicketHeaderLoader;
+import wicket.markup.parser.onLoadListener.WicketHeaderMarkupLoadListener;
+import wicket.markup.parser.onLoadListener.WicketMessageLoadListener;
 import wicket.markup.resolver.AutoComponentResolver;
 import wicket.markup.resolver.FragmentResolver;
 import wicket.markup.resolver.MarkupInheritanceResolver;
 import wicket.markup.resolver.ParentResolver;
 import wicket.markup.resolver.WicketLinkResolver;
-import wicket.markup.resolver.WicketMessageResolver;
 import wicket.protocol.http.IRequestLogger;
 import wicket.protocol.http.RequestLogger;
 import wicket.session.ISessionStore;
@@ -724,11 +724,11 @@
 		pageSettings.addComponentResolver(new ParentResolver());
 		pageSettings.addComponentResolver(new MarkupInheritanceResolver());
 		pageSettings.addComponentResolver(new WicketLinkResolver());
-		pageSettings.addComponentResolver(new WicketMessageResolver());
 		pageSettings.addComponentResolver(new FragmentResolver());
 		pageSettings.addComponentResolver(new AutoComponentResolver());
 
-		getMarkupSettings().addMarkupLoadListener(new WicketHeaderLoader());
+		getMarkupSettings().addMarkupLoadListener(new WicketHeaderMarkupLoadListener());
+		getMarkupSettings().addMarkupLoadListener(new WicketMessageLoadListener());
 
 		// Install button image resource factory
 		getResourceSettings().addResourceFactory("buttonFactory",

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/InheritedMarkupMarkupLoader.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/InheritedMarkupMarkupLoader.java?view=diff&rev=471396&r1=471395&r2=471396
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/InheritedMarkupMarkupLoader.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/loader/InheritedMarkupMarkupLoader.java Sun Nov  5 03:09:12 2006
@@ -37,6 +37,7 @@
 import wicket.markup.MarkupStream;
 import wicket.markup.parser.XmlTag;
 import wicket.markup.parser.filter.HtmlHeaderSectionHandler;
+import wicket.markup.parser.filter.WicketMessageTagHandler;
 import wicket.util.listener.IChangeListener;
 import wicket.util.resource.ResourceStreamNotFoundException;
 import wicket.util.string.Strings;
@@ -450,6 +451,16 @@
 				if ((tag != null) && tag.isWicketHeadTag())
 				{
 					String id = Component.AUTO_COMPONENT_PREFIX + tag.getName() + index++;
+					tag.setId(id);
+				}
+				else if ((tag != null) && tag.isMessageTag())
+				{
+					String id = Component.AUTO_COMPONENT_PREFIX + tag.getName() + index++;
+					tag.setId(id);
+				}
+				else if ((tag != null) && tag.getId().startsWith(WicketMessageTagHandler.WICKET_MESSAGE_CONTAINER_ID))
+				{
+					String id = WicketMessageTagHandler.WICKET_MESSAGE_CONTAINER_ID + index++;
 					tag.setId(id);
 				}
 				return CONTINUE_TRAVERSAL;

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketMessageTagHandler.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketMessageTagHandler.java?view=diff&rev=471396&r1=471395&r2=471396
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketMessageTagHandler.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketMessageTagHandler.java Sun Nov  5 03:09:12 2006
@@ -51,6 +51,9 @@
 	/** singleton instance of {@link AttributeLocalizer} */
 	public static final IBehavior ATTRIBUTE_LOCALIZER = new AttributeLocalizer();
 
+	/** Per markup file, a unique index */
+	private int index;
+	
 	/**
 	 * Construct.
 	 */
@@ -84,7 +87,7 @@
 				// if this is a raw tag we need to set the id to something so
 				// that wicket will not merge this as raw markup and instead
 				// pass it on to a resolver
-				tag.setId(WICKET_MESSAGE_CONTAINER_ID);
+				tag.setId(WICKET_MESSAGE_CONTAINER_ID + index++);
 				
 				// There is no point attaching the attributelocalizer to this
 				// tag because it will be represented by an auto component and

Modified: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketTagIdentifier.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketTagIdentifier.java?view=diff&rev=471396&r1=471395&r2=471396
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketTagIdentifier.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/filter/WicketTagIdentifier.java Sun Nov  5 03:09:12 2006
@@ -51,8 +51,9 @@
 
 	static
 	{
-		// register wicket:head
+		// register wicket:head, wicket:message
 		registerTagWhichRequiresUniqueId("head");
+		registerTagWhichRequiresUniqueId("message");
 	}
 	
 	/** The current markup needed to get the markups namespace */

Added: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/AbstractMarkupLoadListener.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/AbstractMarkupLoadListener.java?view=auto&rev=471396
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/AbstractMarkupLoadListener.java (added)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/AbstractMarkupLoadListener.java Sun Nov  5 03:09:12 2006
@@ -0,0 +1,61 @@
+/*
+ * $Id: org.eclipse.jdt.ui.prefs 5004 2006-03-17 20:47:08 -0800 (Fri, 17 Mar 2006) eelco12 $
+ * $Revision$
+ * $Date: 2006-03-17 20:47:08 -0800 (Fri, 17 Mar 2006) $
+ * 
+ * ==============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package wicket.markup.parser.onLoadListener;
+
+import wicket.MarkupContainer;
+import wicket.markup.MarkupElement;
+import wicket.markup.MarkupFragment;
+
+/**
+ * 
+ * @author Juergen Donnerstag
+ */
+public abstract class AbstractMarkupLoadListener implements IMarkupLoadListener
+{
+	/**
+	 * @see wicket.markup.parser.onLoadListener.IMarkupLoadListener#onAssociatedMarkupLoaded(wicket.MarkupContainer,
+	 *      wicket.markup.MarkupFragment)
+	 */
+	public void onAssociatedMarkupLoaded(final MarkupContainer container,
+			final MarkupFragment fragment)
+	{
+		fragment.visitChildren(MarkupFragment.class, new MarkupFragment.IVisitor()
+		{
+			/**
+			 * @see wicket.markup.MarkupFragment.IVisitor#visit(wicket.markup.MarkupElement,
+			 *      wicket.markup.MarkupFragment)
+			 */
+			public Object visit(final MarkupElement element, final MarkupFragment parent)
+			{
+				final MarkupFragment frag = (MarkupFragment)element;
+				return AbstractMarkupLoadListener.this.visit(container, frag);
+			}
+		});
+	}
+
+	/**
+	 * @see MarkupFragment.IVisitor#visit(MarkupElement, MarkupFragment)
+	 * 
+	 * @param container
+	 *            The container loading the associated markup
+	 * @param fragment
+	 * @return Object
+	 */
+	protected abstract Object visit(final MarkupContainer container, final MarkupFragment fragment);
+}

Propchange: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/AbstractMarkupLoadListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/AbstractMarkupLoadListener.java
------------------------------------------------------------------------------
    svn:keywords = "LastChangedDate LastChangedRevision URL"

Copied: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderMarkupLoadListener.java (from r471377, incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderLoader.java)
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderMarkupLoadListener.java?view=diff&rev=471396&p1=incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderLoader.java&r1=471377&p2=incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderMarkupLoadListener.java&r2=471396
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderLoader.java (original)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketHeaderMarkupLoadListener.java Sun Nov  5 03:09:12 2006
@@ -39,7 +39,7 @@
  * 
  * @author Juergen Donnerstag
  */
-public class WicketHeaderLoader implements IMarkupLoadListener
+public class WicketHeaderMarkupLoadListener implements IMarkupLoadListener
 {
 	/**
 	 * @see wicket.markup.parser.onLoadListener.IMarkupLoadListener#onAssociatedMarkupLoaded(wicket.MarkupContainer,

Added: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketMessageLoadListener.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketMessageLoadListener.java?view=auto&rev=471396
==============================================================================
--- incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketMessageLoadListener.java (added)
+++ incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketMessageLoadListener.java Sun Nov  5 03:09:12 2006
@@ -0,0 +1,148 @@
+/*
+ * $Id: WicketTagComponentResolver.java,v 1.4 2005/01/18 08:04:29 jonathanlocke
+ * Exp $ $Revision$ $Date: 2006-09-25 09:36:44 +0200 (Mo, 25 Sep 2006) $
+ * 
+ * ==============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package wicket.markup.parser.onLoadListener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import wicket.Component;
+import wicket.MarkupContainer;
+import wicket.markup.ComponentTag;
+import wicket.markup.MarkupException;
+import wicket.markup.MarkupFragment;
+import wicket.markup.html.WebMarkupContainer;
+import wicket.markup.html.basic.Label;
+import wicket.markup.parser.XmlTag;
+import wicket.markup.parser.filter.WicketMessageTagHandler;
+import wicket.markup.parser.filter.WicketTagIdentifier;
+
+/**
+ * This is a tag resolver which handles &lt;wicket:message
+ * attr="myKey"&gt;Default Text&lt;/wicket:message&gt;. The resolver will
+ * replace the whole tag with the message found in the properties file
+ * associated with the Page. If no message is found, the default body text will
+ * remain.
+ * 
+ * @author Juergen Donnerstag
+ */
+public class WicketMessageLoadListener extends AbstractMarkupLoadListener
+{
+	private static final Log log = LogFactory.getLog(WicketMessageLoadListener.class);
+
+	private static final long serialVersionUID = 1L;
+
+	static
+	{
+		// register "wicket:message"
+		WicketTagIdentifier.registerWellKnownTagName("message");
+	}
+
+	/**
+	 * 
+	 * @see wicket.markup.parser.onLoadListener.AbstractMarkupLoadListener#visit(wicket.MarkupContainer,
+	 *      wicket.markup.MarkupFragment)
+	 */
+	@Override
+	protected Object visit(final MarkupContainer container, final MarkupFragment fragment)
+	{
+		final ComponentTag tag = fragment.getTag();
+		if (tag.isMessageTag())
+		{
+			// this is a <wicket:message> tag
+			String messageKey = tag.getAttributes().getString("key");
+			if ((messageKey == null) || (messageKey.trim().length() == 0))
+			{
+				throw new MarkupException(
+						"Wrong format of <wicket:message key='xxx'>: attribute 'key' is missing");
+			}
+
+			final String value = container.getApplication().getResourceSettings().getLocalizer()
+					.getString(messageKey, container, "");
+
+			Component component = null;
+			if ((value != null) && (value.trim().length() > 0))
+			{
+				component = new MyLabel(container, tag.getId(), value);
+			}
+			else
+			{
+				log.info("No value found for message key: " + messageKey);
+				component = new WebMarkupContainer(container, tag.getId());
+			}
+
+			component.setRenderBodyOnly(container.getApplication().getMarkupSettings()
+					.getStripWicketTags());
+		}
+		else if (tag.getId().startsWith(WicketMessageTagHandler.WICKET_MESSAGE_CONTAINER_ID))
+		{
+			// this is a raw tag with wicket:message attribute, we need to
+			// create a transparent auto container to stand in.
+			MarkupContainer messageContainer = new WebMarkupContainer(container, tag.getId())
+			{
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public boolean isTransparentResolver()
+				{
+					return true;
+				}
+			};
+
+			// Attach an attribute modifier to localize the attribute
+			messageContainer.add(WicketMessageTagHandler.ATTRIBUTE_LOCALIZER);
+		}
+
+		return MarkupFragment.IVisitor.CONTINUE_TRAVERSAL;
+	}
+
+	/**
+	 * A Label with expands open-close tags to open-body-close if required
+	 */
+	public static class MyLabel extends Label
+	{
+		private static final long serialVersionUID = 1L;
+
+		/**
+		 * Construct.
+		 * 
+		 * @param parent
+		 * @param id
+		 * @param value
+		 */
+		public MyLabel(MarkupContainer parent, final String id, final String value)
+		{
+			super(parent, id, value);
+		}
+
+		/**
+		 * 
+		 * @see wicket.Component#onComponentTag(wicket.markup.ComponentTag)
+		 */
+		@Override
+		protected void onComponentTag(ComponentTag tag)
+		{
+			// Convert <wicket:message /> into
+			// <wicket:message>...</wicket:message>
+			if (tag.isOpenClose())
+			{
+				tag.setType(XmlTag.Type.OPEN);
+			}
+			super.onComponentTag(tag);
+		}
+	}
+}
\ No newline at end of file

Propchange: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketMessageLoadListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/wicket/trunk/wicket/src/main/java/wicket/markup/parser/onLoadListener/WicketMessageLoadListener.java
------------------------------------------------------------------------------
    svn:keywords = "LastChangedDate LastChangedRevision URL"