You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by gs...@apache.org on 2008/03/28 00:53:27 UTC
svn commit: r642034 - in /wicket/trunk/jdk-1.4/wicket-velocity/src:
main/java/org/apache/wicket/velocity/markup/html/VelocityPanel.java
test/java/org/apache/wicket/contrib/markup/html/velocity/VelocityWithMarkupParsingPage.java
Author: gseitz
Date: Thu Mar 27 16:53:24 2008
New Revision: 642034
URL: http://svn.apache.org/viewvc?rev=642034&view=rev
Log:
WICKET-1268
Modified:
wicket/trunk/jdk-1.4/wicket-velocity/src/main/java/org/apache/wicket/velocity/markup/html/VelocityPanel.java
wicket/trunk/jdk-1.4/wicket-velocity/src/test/java/org/apache/wicket/contrib/markup/html/velocity/VelocityWithMarkupParsingPage.java
Modified: wicket/trunk/jdk-1.4/wicket-velocity/src/main/java/org/apache/wicket/velocity/markup/html/VelocityPanel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket-velocity/src/main/java/org/apache/wicket/velocity/markup/html/VelocityPanel.java?rev=642034&r1=642033&r2=642034&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket-velocity/src/main/java/org/apache/wicket/velocity/markup/html/VelocityPanel.java (original)
+++ wicket/trunk/jdk-1.4/wicket-velocity/src/main/java/org/apache/wicket/velocity/markup/html/VelocityPanel.java Thu Mar 27 16:53:24 2008
@@ -67,7 +67,7 @@
* optional model for variable substituation.
* @param templateResource
* The template resource
- * @return
+ * @return an instance of {@link VelocityPanel}
*/
public static VelocityPanel forTemplateResource(String id, IModel model,
final IStringResourceStream templateResource)
@@ -87,6 +87,23 @@
}
/**
+ * Is used to cache the evaluated template and is nulled in onDetach().
+ */
+ private transient String evaluatedTemplate;
+
+ /**
+ * Is used to store the markupStream parameter in onComponentTagBody and is nulled in
+ * onDetach().
+ */
+ private transient MarkupStream currentMarkupStream;
+
+ /**
+ * Is used to store the markupStream parameter in onComponentTagBody and is nulled in
+ * onDetach().
+ */
+ private transient ComponentTag currentOpenTag;
+
+ /**
* Construct.
*
* @param id
@@ -173,9 +190,44 @@
*/
protected void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag)
{
+ currentMarkupStream = markupStream;
+ currentOpenTag = openTag;
+
final Reader templateReader = getTemplateReader();
if (templateReader != null)
{
+ String result = evaluateVelocityTemplate(templateReader);
+ if (!parseGeneratedMarkup())
+ {
+ // now replace the body of the tag with the velocity merge
+ // result
+ replaceComponentTagBody(markupStream, openTag, result);
+ }
+ else
+ {
+ Markup markup = getMarkup(result);
+ markupStream.skipRawMarkup();
+ renderAll(new MarkupStream(markup));
+ }
+ }
+ else
+ {
+ replaceComponentTagBody(markupStream, openTag, ""); // just empty it
+ }
+ }
+
+
+ /**
+ * Evaluates the template and returns the result.
+ *
+ * @param templateReader
+ * used to read the template
+ * @return the result of evaluating the velocity template
+ */
+ private String evaluateVelocityTemplate(Reader templateReader)
+ {
+ if (evaluatedTemplate == null)
+ {
// Get model as a map
final Map map = (Map)getModelObject();
@@ -202,53 +254,62 @@
// does not break the rest of the page
result = Strings.escapeMarkup(result).toString();
}
-
- if (!parseGeneratedMarkup())
- {
- // now replace the body of the tag with the velocity merge
- // result
- replaceComponentTagBody(markupStream, openTag, result);
- }
- else
- {
- // now parse the velocity merge result
- Markup markup;
- try
- {
- MarkupParser parser = getApplication().getMarkupSettings()
- .getMarkupParserFactory().newMarkupParser(
- new MarkupResourceStream(new StringResourceStream(result)));
- markup = parser.parse();
- }
- catch (ResourceStreamNotFoundException e)
- {
- throw new RuntimeException("Could not parse resulting markup", e);
- }
- markupStream.skipRawMarkup();
- renderAll(new MarkupStream(markup));
- }
+ evaluatedTemplate = result;
+ return evaluatedTemplate;
+ }
+ catch (IOException e)
+ {
+ onException(e, currentMarkupStream, currentOpenTag);
}
catch (ParseErrorException e)
{
- onException(e, markupStream, openTag);
+ onException(e, currentMarkupStream, currentOpenTag);
}
catch (MethodInvocationException e)
{
- onException(e, markupStream, openTag);
+ onException(e, currentMarkupStream, currentOpenTag);
}
catch (ResourceNotFoundException e)
{
- onException(e, markupStream, openTag);
- }
- catch (IOException e)
- {
- onException(e, markupStream, openTag);
+ onException(e, currentMarkupStream, currentOpenTag);
}
+ return "";
}
else
{
- replaceComponentTagBody(markupStream, openTag, ""); // just empty it
+ return evaluatedTemplate;
+ }
+ }
+
+ /**
+ * @param evaluatedTemplate
+ * the evaluated velocity template
+ * @return the {@link Markup} of the param <code>evaluatedTemplate</code>
+ */
+ private Markup getMarkup(String evaluatedTemplate)
+ {
+ if (!parseGeneratedMarkup())
+ {
+ return Markup.NO_MARKUP;
+ }
+ // now parse the velocity merge result
+ Markup markup = null;
+ try
+ {
+ MarkupParser parser = getApplication().getMarkupSettings().getMarkupParserFactory()
+ .newMarkupParser(
+ new MarkupResourceStream(new StringResourceStream(evaluatedTemplate)));
+ markup = parser.parse();
+ }
+ catch (ResourceStreamNotFoundException e)
+ {
+ throw new RuntimeException("Could not parse resulting markup", e);
+ }
+ catch (IOException e)
+ {
+ onException(e, currentMarkupStream, currentOpenTag);
}
+ return markup;
}
/**
@@ -278,5 +339,37 @@
protected boolean throwVelocityExceptions()
{
return false;
+ }
+
+ /**
+ * @see org.apache.wicket.MarkupContainer#getAssociatedMarkupStream(boolean)
+ */
+ public MarkupStream getAssociatedMarkupStream(boolean throwException)
+ {
+ Reader reader = getTemplateReader();
+ if (reader == null)
+ {
+ throw new WicketRuntimeException("could not find velocity template for panel: " + this);
+ }
+
+ // evaluate the template and return a new markupstream
+ String result = evaluateVelocityTemplate(reader);
+ return new MarkupStream(getMarkup(result));
+ }
+
+ /**
+ * @see org.apache.wicket.MarkupContainer#hasAssociatedMarkup()
+ */
+ public boolean hasAssociatedMarkup()
+ {
+ return true;
+ }
+
+ protected void onDetach()
+ {
+ super.onDetach();
+ evaluatedTemplate = null;
+ currentMarkupStream = null;
+ currentOpenTag = null;
}
}
Modified: wicket/trunk/jdk-1.4/wicket-velocity/src/test/java/org/apache/wicket/contrib/markup/html/velocity/VelocityWithMarkupParsingPage.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket-velocity/src/test/java/org/apache/wicket/contrib/markup/html/velocity/VelocityWithMarkupParsingPage.java?rev=642034&r1=642033&r2=642034&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket-velocity/src/test/java/org/apache/wicket/contrib/markup/html/velocity/VelocityWithMarkupParsingPage.java (original)
+++ wicket/trunk/jdk-1.4/wicket-velocity/src/test/java/org/apache/wicket/contrib/markup/html/velocity/VelocityWithMarkupParsingPage.java Thu Mar 27 16:53:24 2008
@@ -18,6 +18,7 @@
import java.util.HashMap;
+import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.Model;
@@ -27,7 +28,7 @@
/**
* Test page for <code>VelocityPanel</code>
- *
+ *
* @see org.apache.wicket.velocity.markup.html.VelocityPanel
*/
public class VelocityWithMarkupParsingPage extends WebPage
@@ -43,7 +44,7 @@
{
protected IStringResourceStream getTemplateResource()
{
- return new UrlResourceStream(this.getClass().getResource("testWithMarkup.html"));
+ return new UrlResourceStream(getClass().getResource("testWithMarkup.html"));
}
public boolean parseGeneratedMarkup()
@@ -51,7 +52,15 @@
return true;
}
};
- velocityPanel.add(new Label("message", VelocityPage.TEST_STRING));
+ velocityPanel.add(new Label("message", VelocityPage.TEST_STRING)
+ {
+ protected void onComponentTag(ComponentTag tag)
+ {
+ super.onComponentTag(tag);
+ // check whether the markupstream can be located
+ getMarkupAttributes();
+ }
+ });
add(velocityPanel);
}
}