Author: mgrigorov
Date: Wed Oct 26 13:20:06 2011
New Revision: 1189195
URL: http://svn.apache.org/viewvc?rev=1189195&view=rev
Log:
WICKET-4161 AbstractResourceAggregatingHeaderResponse does not order javascript
properly
Make it possible to group js/css url or content, not just resource references.
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractDependencyRespectingResourceAggregatingHeaderResponse.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractResourceAggregatingHeaderResponse.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/ResourceReferenceAndStringData.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/DecoratingHeaderResponseTest.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java?rev=1189195&r1=1189194&r2=1189195&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/ResourceUtil.java
Wed Oct 26 13:20:06 2011
@@ -22,7 +22,9 @@ import java.nio.charset.Charset;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.resource.aggregation.ResourceReferenceAndStringData;
import org.apache.wicket.util.io.IOUtils;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
@@ -53,7 +55,9 @@ public class ResourceUtil
* @param string
* the string argument to pass to those methods that accept
it (js = id / css =
* media)
+ * @deprecated Will be removed in the next major release
*/
+ @Deprecated
public static void renderTo(IHeaderResponse resp, ResourceReference
ref, boolean css,
String string)
{
@@ -82,6 +86,60 @@ public class ResourceUtil
}
/**
+ * Helper that calls the proper IHeaderResponse.render*Reference method
based on the input.
+ *
+ * @param resp
+ * the response to call render*Reference methods on
+ * @param data
+ */
+ // TODO Wicket.next - make this method work with an improved version of
+// ResourceReferenceAndStringData
+ public static void renderTo(IHeaderResponse resp,
ResourceReferenceAndStringData data)
+ {
+ boolean css = data.isCss();
+ ResourceReference reference = data.getReference();
+ PageParameters parameters = data.getParameters();
+ String idOrMedia = data.getIdOrMedia();
+ CharSequence content = data.getContent();
+
+ if (css)
+ {
+ String condition = data.getCssCondition();
+
+ if (Strings.isEmpty(content) == false)
+ {
+ resp.renderCSS(content, idOrMedia);
+ }
+ else if (reference == null)
+ {
+ resp.renderCSSReference(data.getUrl(),
idOrMedia, condition);
+ }
+ else
+ {
+ resp.renderCSSReference(reference, parameters,
idOrMedia, condition);
+ }
+ }
+ else
+ {
+ boolean defer = data.isJsDefer();
+ String charset = data.getCharset();
+
+ if (Strings.isEmpty(content) == false)
+ {
+ resp.renderJavaScript(content, idOrMedia);
+ }
+ else if (reference == null)
+ {
+ resp.renderJavaScriptReference(data.getUrl(),
idOrMedia, defer, charset);
+ }
+ else
+ {
+ resp.renderJavaScriptReference(reference,
parameters, idOrMedia, defer, charset);
+ }
+ }
+ }
+
+ /**
* read string with platform default encoding from resource stream
*
* @param resourceStream
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractDependencyRespectingResourceAggregatingHeaderResponse.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractDependencyRespectingResourceAggregatingHeaderResponse.java?rev=1189195&r1=1189194&r2=1189195&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractDependencyRespectingResourceAggregatingHeaderResponse.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractDependencyRespectingResourceAggregatingHeaderResponse.java
Wed Oct 26 13:20:06 2011
@@ -80,10 +80,11 @@ public abstract class AbstractDependency
}
private static ResourceReferenceAndStringData toData(
- AbstractResourceDependentResourceReference child)
+ AbstractResourceDependentResourceReference reference)
{
- boolean css = ResourceType.CSS.equals(child.getResourceType());
- String string = css ? child.getMedia() : child.getUniqueId();
- return new ResourceReferenceAndStringData(child, string, css);
+ boolean css =
ResourceType.CSS.equals(reference.getResourceType());
+ String string = css ? reference.getMedia() :
reference.getUniqueId();
+ return new ResourceReferenceAndStringData(reference, null,
null, string, css, false, null,
+ null);
}
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractResourceAggregatingHeaderResponse.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractResourceAggregatingHeaderResponse.java?rev=1189195&r1=1189194&r2=1189195&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractResourceAggregatingHeaderResponse.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/AbstractResourceAggregatingHeaderResponse.java
Wed Oct 26 13:20:06 2011
@@ -27,6 +27,8 @@ import java.util.TreeMap;
import org.apache.wicket.markup.html.DecoratingHeaderResponse;
import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.IResource;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.wicket.resource.ResourceUtil;
@@ -74,25 +76,29 @@ public abstract class AbstractResourceAg
@Override
public void renderJavaScriptReference(ResourceReference reference)
{
- topLevelReferences.add(new
ResourceReferenceAndStringData(reference, null, false));
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, null, null, null,
+ false, false, null, null));
}
@Override
public void renderJavaScriptReference(ResourceReference reference,
String id)
{
- topLevelReferences.add(new
ResourceReferenceAndStringData(reference, id, false));
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, null, null, id, false,
+ false, null, null));
}
@Override
public void renderCSSReference(ResourceReference reference)
{
- topLevelReferences.add(new
ResourceReferenceAndStringData(reference, null, true));
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, null, null, null,
+ true, false, null, null));
}
@Override
public void renderCSSReference(ResourceReference reference, String
media)
{
- topLevelReferences.add(new
ResourceReferenceAndStringData(reference, media, true));
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, null, null, media,
+ true, false, null, null));
}
@Override
@@ -188,7 +194,7 @@ public abstract class AbstractResourceAg
* to render your collection how you want to render them.
*
* For instance, if you want to aggregate your groups into a single
HTTP request, you can
- * override this method, create the URL to your aggregation servlet (or
{@link Resource}), and
+ * override this method, create the URL to your aggregation servlet (or
{@link IResource}), and
* then call
<tt>getRealResponse().renderJavaScriptReference(yourUrl)</tt>, or the
appropriate
* method to render the URL for a group of CSS references.
*
@@ -239,8 +245,7 @@ public abstract class AbstractResourceAg
*/
protected void render(ResourceReferenceAndStringData data)
{
- ResourceUtil.renderTo(getRealResponse(), data.getReference(),
data.isCss(),
- data.getString());
+ ResourceUtil.renderTo(getRealResponse(), data);
}
/**
@@ -265,29 +270,102 @@ public abstract class AbstractResourceAg
@Override
public void renderJavaScriptReference(String url)
{
- // TODO: can we aggregate this? probably shouldn't...
- getRealResponse().renderJavaScriptReference(url);
+ topLevelReferences.add(new ResourceReferenceAndStringData(null,
null, url, null, false,
+ false, null, null));
}
@Override
public void renderJavaScriptReference(String url, String id)
{
- // TODO: can we aggregate this? probably shouldn't...
- getRealResponse().renderJavaScriptReference(url, id);
+ topLevelReferences.add(new ResourceReferenceAndStringData(null,
null, url, id, false,
+ false, null, null));
}
@Override
public void renderCSSReference(String url)
{
- // TODO: can we aggregate this? probably shouldn't...
- getRealResponse().renderCSSReference(url);
+ topLevelReferences.add(new ResourceReferenceAndStringData(null,
null, url, null, true,
+ false, null, null));
}
@Override
public void renderCSSReference(String url, String media)
{
- // TODO: can we aggregate this? probably shouldn't...
- getRealResponse().renderCSSReference(url, media);
+ topLevelReferences.add(new ResourceReferenceAndStringData(null,
null, url, media, true,
+ false, null, null));
+ }
+
+ @Override
+ public void renderJavaScriptReference(ResourceReference reference,
PageParameters parameters,
+ String id)
+ {
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, parameters, null, id,
+ false, false, null, null));
+ }
+
+ @Override
+ public void renderJavaScriptReference(ResourceReference reference,
PageParameters parameters,
+ String id, boolean defer)
+ {
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, parameters, null, id,
+ false, defer, null, null));
+ }
+
+ @Override
+ public void renderJavaScriptReference(ResourceReference reference,
PageParameters parameters,
+ String id, boolean defer, String charset)
+ {
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, parameters, null, id,
+ false, defer, charset, null));
+ }
+
+ @Override
+ public void renderJavaScriptReference(String url, String id, boolean
defer)
+ {
+ topLevelReferences.add(new ResourceReferenceAndStringData(null,
null, url, null, false,
+ defer, null, null));
+ }
+
+ @Override
+ public void renderJavaScriptReference(String url, String id, boolean
defer, String charset)
+ {
+ topLevelReferences.add(new ResourceReferenceAndStringData(null,
null, url, id, false,
+ defer, charset, null));
+ }
+
+ @Override
+ public void renderJavaScript(CharSequence javascript, String id)
+ {
+ topLevelReferences.add(new
ResourceReferenceAndStringData(javascript, false, id));
+ }
+
+ @Override
+ public void renderCSS(CharSequence css, String media)
+ {
+ topLevelReferences.add(new ResourceReferenceAndStringData(css,
true, media));
+ }
+
+ @Override
+ public void renderCSSReference(ResourceReference reference,
PageParameters pageParameters,
+ String media)
+ {
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, pageParameters, null,
+ media, true, false, null, null));
+ }
+
+ @Override
+ public void renderCSSReference(ResourceReference reference,
PageParameters pageParameters,
+ String media, String condition)
+ {
+ topLevelReferences.add(new
ResourceReferenceAndStringData(reference, null, null, media,
+ true, false, null, condition));
+ }
+
+ @Override
+ public void renderCSSReference(String url, String media, String
condition)
+ {
+ topLevelReferences.add(new ResourceReferenceAndStringData(null,
null, url, media, true,
+ false, null, condition));
}
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/ResourceReferenceAndStringData.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/ResourceReferenceAndStringData.java?rev=1189195&r1=1189194&r2=1189195&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/ResourceReferenceAndStringData.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/resource/aggregation/ResourceReferenceAndStringData.java
Wed Oct 26 13:20:06 2011
@@ -16,6 +16,7 @@
*/
package org.apache.wicket.resource.aggregation;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.ResourceReference;
/**
@@ -30,25 +31,88 @@ import org.apache.wicket.request.resourc
*
* @author Jeremy Thomerson
*/
+// TODO Wicket.next - Improve this class by splitting it in more specialized
ones (one for JS,
+// another for CSS, ...)
public class ResourceReferenceAndStringData
{
private final ResourceReference reference;
- private final String string;
- private final boolean css;
+ private final PageParameters parameters;
+ private final String url;
+ private final String idOrMedia;
+ private final boolean isCss;
+ private final boolean jsDefer;
+ private final String charset;
+ private final String cssCondition;
+ private final CharSequence content;
/**
- * Construct with fields.
+ * Construct.
*
* @param reference
- * @param string
- * @param css
+ * @param parameters
+ * @param url
+ * @param idOrMedia
+ * @param isCss
+ * @param jsDefer
+ * @param charset
+ * @param cssCondition
*/
- public ResourceReferenceAndStringData(ResourceReference reference,
String string, boolean css)
+ public ResourceReferenceAndStringData(ResourceReference reference,
PageParameters parameters,
+ String url, String idOrMedia, boolean isCss, boolean jsDefer,
String charset,
+ String cssCondition)
{
- super();
this.reference = reference;
- this.string = string;
- this.css = css;
+ this.parameters = parameters;
+ this.url = url;
+ this.idOrMedia = idOrMedia;
+ this.isCss = isCss;
+ this.jsDefer = jsDefer;
+ this.charset = charset;
+ this.cssCondition = cssCondition;
+ content = null;
+ }
+
+ /**
+ * Construct.
+ *
+ * @param reference
+ * @param idOrMedia
+ * @param isCss
+ * @deprecated use the other constructors instead
+ */
+ @Deprecated
+ public ResourceReferenceAndStringData(ResourceReference reference,
String idOrMedia,
+ boolean isCss)
+ {
+ this.reference = reference;
+ parameters = null;
+ url = null;
+ this.idOrMedia = idOrMedia;
+ this.isCss = isCss;
+ jsDefer = false;
+ charset = null;
+ cssCondition = null;
+ content = null;
+ }
+
+ /**
+ * Construct.
+ *
+ * @param content
+ * @param isCss
+ * @param idOrMedia
+ */
+ public ResourceReferenceAndStringData(CharSequence content, boolean
isCss, String idOrMedia)
+ {
+ this.content = content;
+ this.isCss = isCss;
+ reference = null;
+ parameters = null;
+ url = null;
+ this.idOrMedia = idOrMedia;
+ jsDefer = false;
+ charset = null;
+ cssCondition = null;
}
/**
@@ -60,11 +124,37 @@ public class ResourceReferenceAndStringD
}
/**
+ * @return the parameters for the resource reference
+ */
+ public PageParameters getParameters()
+ {
+ return parameters;
+ }
+
+ /**
+ * @return the resource reference that the user rendered
+ */
+ public String getUrl()
+ {
+ return url;
+ }
+
+ /**
+ * @return the string representing media (if this isCss()), or id (if
not, meaning it's js)
+ */
+ public String getIdOrMedia()
+ {
+ return idOrMedia;
+ }
+
+ /**
* @return the string representing media (if this isCss()), or id (if
not, meaning it's js)
+ * @deprecated use {@link #getIdOrMedia()} instead
*/
+ @Deprecated
public String getString()
{
- return string;
+ return getIdOrMedia();
}
/**
@@ -72,7 +162,39 @@ public class ResourceReferenceAndStringD
*/
public boolean isCss()
{
- return css;
+ return isCss;
+ }
+
+ /**
+ * @return whether the script should be deferred
+ */
+ public boolean isJsDefer()
+ {
+ return jsDefer;
+ }
+
+ /**
+ * @return the charset to use when loading the script
+ */
+ public String getCharset()
+ {
+ return charset;
+ }
+
+ /**
+ * @return the IE CSS condition
+ */
+ public String getCssCondition()
+ {
+ return cssCondition;
+ }
+
+ /**
+ * @return inline content of CSS or JS contribution
+ */
+ public CharSequence getContent()
+ {
+ return content;
}
@Override
@@ -80,9 +202,15 @@ public class ResourceReferenceAndStringD
{
final int prime = 31;
int result = 1;
- result = prime * result + (css ? 1231 : 1237);
+ result = prime * result + ((charset == null) ? 0 :
charset.hashCode());
+ result = prime * result + ((content == null) ? 0 :
content.hashCode());
+ result = prime * result + ((cssCondition == null) ? 0 :
cssCondition.hashCode());
+ result = prime * result + ((idOrMedia == null) ? 0 :
idOrMedia.hashCode());
+ result = prime * result + (isCss ? 1231 : 1237);
+ result = prime * result + (jsDefer ? 1231 : 1237);
+ result = prime * result + ((parameters == null) ? 0 :
parameters.hashCode());
result = prime * result + ((reference == null) ? 0 :
reference.hashCode());
- result = prime * result + ((string == null) ? 0 :
string.hashCode());
+ result = prime * result + ((url == null) ? 0 : url.hashCode());
return result;
}
@@ -96,7 +224,44 @@ public class ResourceReferenceAndStringD
if (getClass() != obj.getClass())
return false;
ResourceReferenceAndStringData other =
(ResourceReferenceAndStringData)obj;
- if (css != other.css)
+ if (charset == null)
+ {
+ if (other.charset != null)
+ return false;
+ }
+ else if (!charset.equals(other.charset))
+ return false;
+ if (content == null)
+ {
+ if (other.content != null)
+ return false;
+ }
+ else if (!content.equals(other.content))
+ return false;
+ if (cssCondition == null)
+ {
+ if (other.cssCondition != null)
+ return false;
+ }
+ else if (!cssCondition.equals(other.cssCondition))
+ return false;
+ if (idOrMedia == null)
+ {
+ if (other.idOrMedia != null)
+ return false;
+ }
+ else if (!idOrMedia.equals(other.idOrMedia))
+ return false;
+ if (isCss != other.isCss)
+ return false;
+ if (jsDefer != other.jsDefer)
+ return false;
+ if (parameters == null)
+ {
+ if (other.parameters != null)
+ return false;
+ }
+ else if (!parameters.equals(other.parameters))
return false;
if (reference == null)
{
@@ -105,12 +270,12 @@ public class ResourceReferenceAndStringD
}
else if (!reference.equals(other.reference))
return false;
- if (string == null)
+ if (url == null)
{
- if (other.string != null)
+ if (other.url != null)
return false;
}
- else if (!string.equals(other.string))
+ else if (!url.equals(other.url))
return false;
return true;
}
@@ -118,7 +283,9 @@ public class ResourceReferenceAndStringD
@Override
public String toString()
{
- return "ResourceReferenceAndStringData [reference=" + reference
+ ", string=" + string +
- ", css=" + css + "]";
+ return "ResourceReferenceAndStringData [reference=" + reference
+ ", parameters=" +
+ parameters + ", url=" + url + ", idOrMedia=" +
idOrMedia + ", isCss=" + isCss +
+ ", jsDefer=" + jsDefer + ", charset=" + charset + ",
cssCondition=" + cssCondition +
+ ", content=" + content + "]";
}
}
\ No newline at end of file
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/DecoratingHeaderResponseTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/DecoratingHeaderResponseTest.java?rev=1189195&r1=1189194&r2=1189195&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/DecoratingHeaderResponseTest.java
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/DecoratingHeaderResponseTest.java
Wed Oct 26 13:20:06 2011
@@ -112,7 +112,7 @@ public class DecoratingHeaderResponseTes
@Override
protected Integer
newGroupingKey(ResourceReferenceAndStringData ref)
{
- return
Integer.parseInt(ref.getString()) % 2;
+ return
Integer.parseInt(ref.getIdOrMedia()) % 2;
}
};
}