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 <wicket:message
+ * attr="myKey">Default Text</wicket:message>. 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"