You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ts...@apache.org on 2015/12/04 18:48:42 UTC

[1/7] wicket git commit: WICKET-6042 - Implementation of ExternalImage component

Repository: wicket
Updated Branches:
  refs/heads/master b00692de0 -> ee572d0ee


WICKET-6042 - Implementation of ExternalImage component

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/78802c9c
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/78802c9c
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/78802c9c

Branch: refs/heads/master
Commit: 78802c9c8a13a71000d5b6225daab80c9e6f8d46
Parents: b00692d
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Mon Nov 30 21:13:39 2015 +0100
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Fri Dec 4 18:47:39 2015 +0100

----------------------------------------------------------------------
 .../wicket/markup/html/image/ExternalImage.java | 274 +++++++++++++++++++
 .../markup/html/image/ExternalSource.java       | 121 ++++++++
 .../markup/html/image/ExternalImageTest.java    |  70 +++++
 .../html/image/ExternalImageTestPage.html       |  13 +
 .../html/image/ExternalImageTestPage.java       |  52 ++++
 5 files changed, 530 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/78802c9c/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
new file mode 100644
index 0000000..f3b6ae0
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
@@ -0,0 +1,274 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.wicket.markup.html.image;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.WebComponent;
+import org.apache.wicket.markup.html.image.Image.Cors;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+/**
+ * A component to display external images. The src / srcset information are hold in models
+ * 
+ * @author Tobias Soloschenko
+ *
+ */
+public class ExternalImage extends WebComponent
+{
+
+	private static final long serialVersionUID = 1L;
+
+	/** The x values to be used within the srcset */
+	private List<String> xValues = null;
+
+	/** The sizes of the responsive images */
+	private List<String> sizes = null;
+
+	/**
+	 * Cross origin settings
+	 */
+	private Cors crossOrigin = null;
+
+	private IModel<?>[] srcSet;
+
+	/**
+	 * Creates an external image
+	 * 
+	 * @param id
+	 *            the component id
+	 * @param src
+	 *            the source URL
+	 * @param srcSet
+	 *            a list of URLs placed in the srcset attribute
+	 */
+	public ExternalImage(String id, String src, String... srcSet)
+	{
+		this(id, src != null ? Model.of(src) : null, convertToModel(srcSet));
+	}
+
+	/**
+	 * Creates an external image
+	 * 
+	 * @param id
+	 *            the component id
+	 * @param src
+	 *            the model source URL
+	 * @param srcSetModels
+	 *            a model list of URLs placed in the srcset attribute
+	 */
+	public ExternalImage(String id, IModel<?> src, IModel<?>... srcSetModels)
+	{
+		super(id, src);
+		this.srcSet = srcSetModels;
+	}
+
+	/**
+	 * Converts a variable argument of Strings to an array of models
+	 * 
+	 * @param srcSet
+	 *            a variable argument of URLs to be converted to an array of models
+	 * @return an array of models
+	 */
+	private static IModel<?>[] convertToModel(String... srcSet)
+	{
+		IModel<?>[] models = null;
+		if (srcSet != null)
+		{
+
+			models = new IModel<?>[srcSet.length];
+			int i = 0;
+			for (String srcSetElement : srcSet)
+			{
+				models[i] = Model.of(srcSetElement);
+				i++;
+			}
+		}
+		else
+		{
+			models = new IModel<?>[0];
+		}
+		return models;
+	}
+
+	@Override
+	protected void onComponentTag(ComponentTag tag)
+	{
+		super.onComponentTag(tag);
+
+		if ("source".equals(tag.getName()))
+		{
+			buildSrcSetAttribute(tag, getSrcSet());
+		}
+		else
+		{
+			List<IModel<?>> srcSet = getSrcSet();
+			checkComponentTag(tag, "img");
+			buildSrcAttribute(tag, getDefaultModel());
+			if (srcSet.size() > 1)
+			{
+				buildSrcSetAttribute(tag, srcSet);
+			}
+		}
+
+		buildSizesAttribute(tag);
+
+		Cors crossOrigin = getCrossOrigin();
+		if (crossOrigin != null && Cors.NO_CORS != crossOrigin)
+		{
+			tag.put("crossOrigin", crossOrigin.getRealName());
+		}
+	}
+
+	/**
+	 * Builds the src attribute
+	 *
+	 * @param tag
+	 *            the component tag
+	 * @param srcModel
+	 *            the model containing the src URL
+	 */
+	protected void buildSrcAttribute(final ComponentTag tag, IModel<?> srcModel)
+	{
+		// The first model is the one put into src attribute
+		tag.put("src", srcModel.getObject().toString());
+	}
+
+	/**
+	 * Builds the srcset attribute if multiple models are found as varargs
+	 *
+	 * @param tag
+	 *            the component tag
+	 * @param srcSetModels
+	 *            the models containing the src set URLs
+	 */
+	protected void buildSrcSetAttribute(final ComponentTag tag, List<IModel<?>> srcSetModels)
+	{
+		int srcSetPosition = 0;
+		for (IModel<?> srcSetModel : srcSetModels)
+		{
+			String srcset = tag.getAttribute("srcset");
+			String xValue = "";
+
+			// If there are xValues set process them in the applied order to the srcset attribute.
+			if (xValues != null)
+			{
+				xValue = xValues.size() > srcSetPosition && xValues.get(srcSetPosition) != null
+					? " " + xValues.get(srcSetPosition) : "";
+			}
+			tag.put("srcset",
+				(srcset != null ? srcset + ", " : "") + srcSetModel.getObject() + xValue);
+			srcSetPosition++;
+		}
+	}
+
+	/**
+	 * builds the sizes attribute of the img tag
+	 *
+	 * @param tag
+	 *            the component tag
+	 */
+	protected void buildSizesAttribute(final ComponentTag tag)
+	{
+		// if no sizes have been set then don't build the attribute
+		if (sizes == null)
+		{
+			return;
+		}
+		String sizes = "";
+		for (String size : this.sizes)
+		{
+			sizes += size + ",";
+		}
+		int lastIndexOf = sizes.lastIndexOf(",");
+		if (lastIndexOf != -1)
+		{
+			sizes = sizes.substring(0, lastIndexOf);
+		}
+		if (!"".equals(sizes))
+		{
+			tag.put("sizes", sizes);
+		}
+	}
+
+	/**
+	 * @param values
+	 *            the x values to be used in the srcset
+	 */
+	public void setXValues(String... values)
+	{
+		if (xValues == null)
+		{
+			xValues = new ArrayList<>();
+		}
+		xValues.clear();
+		xValues.addAll(Arrays.asList(values));
+	}
+
+	/**
+	 * @param sizes
+	 *            the sizes to be used in the size
+	 */
+	public void setSizes(String... sizes)
+	{
+		if (this.sizes == null)
+		{
+			this.sizes = new ArrayList<>();
+		}
+		this.sizes.clear();
+		this.sizes.addAll(Arrays.asList(sizes));
+	}
+
+	/**
+	 * Gets the cross origin settings
+	 * 
+	 * @see {@link org.apache.wicket.markup.html.image.Image#setCrossOrigin(Cors)}
+	 *
+	 * @return the cross origins settings
+	 */
+	public Cors getCrossOrigin()
+	{
+		return crossOrigin;
+	}
+
+	/**
+	 * Sets the cross origin settings
+	 * 
+	 * @see {@link org.apache.wicket.markup.html.image.Image#setCrossOrigin(Cors)}
+	 * @param crossOrigin
+	 *            the cross origins settings to set
+	 */
+	public void setCrossOrigin(Cors crossOrigin)
+	{
+		this.crossOrigin = crossOrigin;
+	}
+
+	/**
+	 * Gets a list of models containing the src set values
+	 * 
+	 * @return a list of models containing the src set values
+	 */
+	public List<IModel<?>> getSrcSet()
+	{
+		return Arrays.asList(srcSet);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/78802c9c/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
new file mode 100644
index 0000000..637d69e
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.wicket.markup.html.image;
+
+import java.util.Arrays;
+
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.image.Image.Cors;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.lang.Args;
+
+/**
+ * A component which displays external images within a picture tag.
+ * 
+ * @see org.apache.wicket.markup.html.image.Source
+ * 
+ * @author Tobias Soloschenko
+ *
+ */
+public class ExternalSource extends ExternalImage
+{
+
+	private static final long serialVersionUID = 1L;
+
+	private String media = null;
+
+	/**
+	 * Creates an external source
+	 * 
+	 * @param id
+	 *            the component id
+	 * @param src
+	 *            the source URL
+	 * @param srcSet
+	 *            a list of URLs placed in the srcset attribute
+	 */
+	public ExternalSource(String id, String... srcSet)
+	{
+		super(id, null, Arrays.copyOfRange(srcSet, 1, srcSet.length));
+	}
+
+	/**
+	 * Creates an external source
+	 * 
+	 * @param id
+	 *            the component id
+	 * @param src
+	 *            the model source URL
+	 * @param srcSet
+	 *            a model list of URLs placed in the srcset attribute
+	 */
+	public ExternalSource(String id, IModel<?>... srcSet)
+	{
+		super(id, null, srcSet);
+	}
+
+	@Override
+	protected void onComponentTag(ComponentTag tag)
+	{
+		checkComponentTag(tag, "source");
+		super.onComponentTag(tag);
+		if (getMedia() != null)
+		{
+			tag.put("media", getMedia());
+		}
+	}
+
+	/**
+	 * Sets the media attribute information
+	 *
+	 * @param media
+	 *            the media attribute information
+	 */
+	public void setMedia(String media)
+	{
+		this.media = media;
+	}
+
+	/**
+	 * Gets the media attribute information
+	 *
+	 * @return the media attribute information
+	 */
+	public String getMedia()
+	{
+		return media;
+	}
+
+	/**
+	 * Unsupported for source tag
+	 */
+	@Override
+	public void setCrossOrigin(Cors crossorigin)
+	{
+		throw new UnsupportedOperationException(
+			"It is not allowed to set the crossorigin attribute for source tag");
+	}
+
+	/**
+	 * Unsupported for source tag
+	 */
+	@Override
+	public final Cors getCrossOrigin()
+	{
+		return null;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/78802c9c/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
new file mode 100644
index 0000000..fb4e072
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.wicket.markup.html.image;
+
+import java.util.List;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.tester.TagTester;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Test cases to test the external image components
+ * 
+ * @author Tobias Soloschenko
+ *
+ */
+public class ExternalImageTest extends WicketTestCase
+{
+
+	@Test
+	public void testExternalImage()
+	{
+		tester.startPage(ExternalImageTestPage.class);
+		String lastResponseAsString = tester.getLastResponse().getDocument();
+		Assert.assertTrue(lastResponseAsString.contains(
+			"<img wicket:id=\"externalImage1\" src=\"http://wicket.apache.org/img/wicket-7-bg.jpg\"/>"));
+		Assert.assertTrue(lastResponseAsString.contains(
+			"<img id=\"externalImage2\" wicket:id=\"externalImage2\" src=\"http://wicket.apache.org/img/wicket-7-bg.jpg\" srcset=\"http://wicket.apache.org/img/wicket-7-bg-1.jpg x1, http://wicket.apache.org/img/wicket-7-bg-2.jpg x2\" sizes=\"s1,s2\"/>"));
+		Assert.assertTrue(lastResponseAsString.contains(
+			"<source wicket:id=\"externalSource\" srcset=\"http://wicket.apache.org/img/wicket-7-bg-1.jpg , http://wicket.apache.org/img/wicket-7-bg-2.jpg x2\" sizes=\"1\" media=\"(min-width: 650px)\"/>"));
+	}
+
+	@Test
+	public void testExternalImageModel()
+	{
+		tester.startPage(ExternalImageTestPage.class);
+		String lastResponseAsString = tester.getLastResponse().getDocument();
+		Component externalImage2Component = tester
+			.getComponentFromLastRenderedPage("externalImage2");
+		ExternalImage externalImage2 = (ExternalImage)externalImage2Component;
+		Object defaultModelObject = externalImage2.getDefaultModelObject();
+
+		TagTester tagById = tester.getTagById("externalImage2");
+		for (IModel<?> model : externalImage2.getSrcSet())
+		{
+			String attribute = tagById.getAttribute("srcset");
+			Assert.assertTrue(attribute.contains(model.getObject().toString()));
+		}
+
+		String attribute = tagById.getAttribute("src");
+		Assert.assertEquals(externalImage2.getDefaultModelObject(), attribute);
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/78802c9c/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html
new file mode 100644
index 0000000..40d99d2
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html
@@ -0,0 +1,13 @@
+<html xmlns:wicket="http://wicket.apache.org/">
+	<head>
+	    <title>external image test page</title>
+	</head>
+	<body>
+		<img wicket:id="externalImage1" />
+		<img id="externalImage2" wicket:id="externalImage2" />
+		<picture wicket:id="externalPicture">
+			<source wicket:id="externalSource"/>
+			<img wicket:id="externalImage3"/>
+		</picture>
+	</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/78802c9c/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
new file mode 100644
index 0000000..a75b54b
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.wicket.markup.html.image;
+
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.model.Model;
+
+/**
+ * page to test the external components
+ * 
+ * @author Tobias Soloschenko
+ *
+ */
+public class ExternalImageTestPage extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Creates the external test page
+	 */
+	public ExternalImageTestPage()
+	{
+		add(new ExternalImage("externalImage1", "http://wicket.apache.org/img/wicket-7-bg.jpg"));
+		ExternalImage externalImage2 = new ExternalImage("externalImage2", "http://wicket.apache.org/img/wicket-7-bg.jpg","http://wicket.apache.org/img/wicket-7-bg-1.jpg","http://wicket.apache.org/img/wicket-7-bg-2.jpg");
+		externalImage2.setSizes("s1","s2");
+		externalImage2.setXValues("x1","x2");
+		add(externalImage2);
+		Picture picture = new Picture("externalPicture");
+		ExternalSource externalSource = new ExternalSource("externalSource", Model.of("http://wicket.apache.org/img/wicket-7-bg-1.jpg"),Model.of("http://wicket.apache.org/img/wicket-7-bg-2.jpg"));
+		externalSource.setXValues("","x2");
+		externalSource.setSizes("1");
+		externalSource.setMedia("(min-width: 650px)");
+		picture.add(externalSource);
+		ExternalImage externalImage3 = new ExternalImage("externalImage3", "http://wicket.apache.org/img/wicket-7-bg.jpg","http://wicket.apache.org/img/wicket-7-bg-1.jpg","http://wicket.apache.org/img/wicket-7-bg-2.jpg");
+		picture.add(externalImage3);
+		add(picture);
+	}
+}


[2/7] wicket git commit: WICKET-6042 - Improvements

Posted by ts...@apache.org.
WICKET-6042 - Improvements

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1ac89ee1
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1ac89ee1
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1ac89ee1

Branch: refs/heads/master
Commit: 1ac89ee1c8c305097e34c3733c41bb217d627e57
Parents: 78802c9
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Tue Dec 1 20:25:28 2015 +0100
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Fri Dec 4 18:47:40 2015 +0100

----------------------------------------------------------------------
 .../wicket/markup/html/image/ExternalImage.java | 47 ++++++++++++++------
 .../markup/html/image/ExternalSource.java       | 13 +++---
 .../apache/wicket/markup/html/image/Image.java  |  6 ++-
 3 files changed, 44 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/1ac89ee1/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
index f3b6ae0..78de861 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.html.image;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -48,7 +49,7 @@ public class ExternalImage extends WebComponent
 	 */
 	private Cors crossOrigin = null;
 
-	private IModel<?>[] srcSet;
+	private IModel<?>[] srcSetModels;
 
 	/**
 	 * Creates an external image
@@ -60,7 +61,7 @@ public class ExternalImage extends WebComponent
 	 * @param srcSet
 	 *            a list of URLs placed in the srcset attribute
 	 */
-	public ExternalImage(String id, String src, String... srcSet)
+	public ExternalImage(String id, Serializable src, Serializable... srcSet)
 	{
 		this(id, src != null ? Model.of(src) : null, convertToModel(srcSet));
 	}
@@ -70,15 +71,15 @@ public class ExternalImage extends WebComponent
 	 * 
 	 * @param id
 	 *            the component id
-	 * @param src
+	 * @param srcModel
 	 *            the model source URL
 	 * @param srcSetModels
 	 *            a model list of URLs placed in the srcset attribute
 	 */
-	public ExternalImage(String id, IModel<?> src, IModel<?>... srcSetModels)
+	public ExternalImage(String id, IModel<?> srcModel, IModel<?>... srcSetModels)
 	{
-		super(id, src);
-		this.srcSet = srcSetModels;
+		super(id, srcModel);
+		this.srcSetModels = srcSetModels;
 	}
 
 	/**
@@ -88,7 +89,7 @@ public class ExternalImage extends WebComponent
 	 *            a variable argument of URLs to be converted to an array of models
 	 * @return an array of models
 	 */
-	private static IModel<?>[] convertToModel(String... srcSet)
+	private static IModel<?>[] convertToModel(Serializable... srcSet)
 	{
 		IModel<?>[] models = null;
 		if (srcSet != null)
@@ -96,7 +97,7 @@ public class ExternalImage extends WebComponent
 
 			models = new IModel<?>[srcSet.length];
 			int i = 0;
-			for (String srcSetElement : srcSet)
+			for (Serializable srcSetElement : srcSet)
 			{
 				models[i] = Model.of(srcSetElement);
 				i++;
@@ -148,8 +149,10 @@ public class ExternalImage extends WebComponent
 	 */
 	protected void buildSrcAttribute(final ComponentTag tag, IModel<?> srcModel)
 	{
-		// The first model is the one put into src attribute
-		tag.put("src", srcModel.getObject().toString());
+		if (srcModel != null)
+		{
+			tag.put("src", srcModel.getObject().toString());
+		}
 	}
 
 	/**
@@ -219,7 +222,10 @@ public class ExternalImage extends WebComponent
 		{
 			xValues = new ArrayList<>();
 		}
-		xValues.clear();
+		else
+		{
+			xValues.clear();
+		}
 		xValues.addAll(Arrays.asList(values));
 	}
 
@@ -233,7 +239,10 @@ public class ExternalImage extends WebComponent
 		{
 			this.sizes = new ArrayList<>();
 		}
-		this.sizes.clear();
+		else
+		{
+			this.sizes.clear();
+		}
 		this.sizes.addAll(Arrays.asList(sizes));
 	}
 
@@ -268,7 +277,19 @@ public class ExternalImage extends WebComponent
 	 */
 	public List<IModel<?>> getSrcSet()
 	{
-		return Arrays.asList(srcSet);
+		return Arrays.asList(srcSetModels);
 	}
 
+	/**
+	 * Detaches the srcSetModels
+	 */
+	@Override
+	protected void onDetach()
+	{
+		for (IModel<?> model : srcSetModels)
+		{
+			model.detach();
+		}
+		super.onDetach();
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/1ac89ee1/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
index 637d69e..a2d184a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
@@ -16,12 +16,11 @@
  */
 package org.apache.wicket.markup.html.image;
 
-import java.util.Arrays;
+import java.io.Serializable;
 
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.image.Image.Cors;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.util.lang.Args;
 
 /**
  * A component which displays external images within a picture tag.
@@ -48,9 +47,9 @@ public class ExternalSource extends ExternalImage
 	 * @param srcSet
 	 *            a list of URLs placed in the srcset attribute
 	 */
-	public ExternalSource(String id, String... srcSet)
+	public ExternalSource(String id, Serializable... srcSet)
 	{
-		super(id, null, Arrays.copyOfRange(srcSet, 1, srcSet.length));
+		super(id, null, srcSet);
 	}
 
 	/**
@@ -60,12 +59,12 @@ public class ExternalSource extends ExternalImage
 	 *            the component id
 	 * @param src
 	 *            the model source URL
-	 * @param srcSet
+	 * @param srcSetModels
 	 *            a model list of URLs placed in the srcset attribute
 	 */
-	public ExternalSource(String id, IModel<?>... srcSet)
+	public ExternalSource(String id, IModel<?>... srcSetModels)
 	{
-		super(id, null, srcSet);
+		super(id, null, srcSetModels);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/1ac89ee1/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
index f96e66c..5a64395 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
@@ -316,8 +316,9 @@ public class Image extends WebComponent implements IResourceListener
 		if (xValues == null)
 		{
 			xValues = new ArrayList<>();
+		}else{			
+			xValues.clear();
 		}
-		xValues.clear();
 		xValues.addAll(Arrays.asList(values));
 	}
 
@@ -330,8 +331,9 @@ public class Image extends WebComponent implements IResourceListener
 		if (this.sizes == null)
 		{
 			this.sizes = new ArrayList<>();
+		}else{			
+			this.sizes.clear();
 		}
-		this.sizes.clear();
 		this.sizes.addAll(Arrays.asList(sizes));
 	}
 


[6/7] wicket git commit: WICKET-6042 - src tag created with String.valueOf

Posted by ts...@apache.org.
WICKET-6042 - src tag created with String.valueOf

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b174c21c
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b174c21c
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b174c21c

Branch: refs/heads/master
Commit: b174c21c42220d9ccb4a01579ee9b0723a121513
Parents: 4eacb2a
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Fri Dec 4 09:46:37 2015 +0100
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Fri Dec 4 18:47:43 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/wicket/markup/html/image/ExternalImage.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b174c21c/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
index 407229e..d24fb1a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
@@ -161,7 +161,7 @@ public class ExternalImage extends WebComponent
 	 */
 	protected void buildSrcAttribute(final ComponentTag tag, IModel<?> srcModel)
 	{
-		tag.put("src", srcModel.getObject().toString());
+		tag.put("src", String.valueOf(srcModel.getObject()));
 	}
 
 	/**


[3/7] wicket git commit: WICKET-6042 - Constructor changes / typo

Posted by ts...@apache.org.
WICKET-6042 - Constructor changes / typo

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/a1b19493
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/a1b19493
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/a1b19493

Branch: refs/heads/master
Commit: a1b19493da671dce33f258de8021713fdc45234a
Parents: 93fe70d
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Wed Dec 2 21:40:07 2015 +0100
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Fri Dec 4 18:47:41 2015 +0100

----------------------------------------------------------------------
 .../wicket/markup/html/image/ExternalImage.java | 97 ++++++++++++--------
 .../markup/html/image/ExternalSource.java       | 28 +++++-
 .../markup/html/image/ExternalImageTest.java    |  3 +-
 .../html/image/ExternalImageTestPage.java       |  7 +-
 4 files changed, 88 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/a1b19493/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
index 832c711..407229e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
@@ -19,6 +19,7 @@ package org.apache.wicket.markup.html.image;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.wicket.markup.ComponentTag;
@@ -28,9 +29,14 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
 /**
- * A component to display external images. The src / srcset information are hold in models
+ * A component to display external images. The src / srcSet information are hold in models
+ * 
+ * @see org.apache.wicket.markup.html.image.Image
  * 
  * @author Tobias Soloschenko
+ * @author Sebastien Briquet
+ * @author Sven Meier
+ * @author Martin Grigorov
  *
  */
 public class ExternalImage extends WebComponent
@@ -49,7 +55,18 @@ public class ExternalImage extends WebComponent
 	 */
 	private Cors crossOrigin = null;
 
-	private IModel<List<Serializable>> srcSetModels;
+	private IModel<List<Serializable>> srcSetModel;
+
+	/**
+	 * Creates an external image
+	 * 
+	 * @param id
+	 *            the component id
+	 */
+	public ExternalImage(String id)
+	{
+		this(id, null, Model.ofList(Collections.<Serializable> emptyList()));
+	}
 
 	/**
 	 * Creates an external image
@@ -61,7 +78,7 @@ public class ExternalImage extends WebComponent
 	 */
 	public ExternalImage(String id, Serializable src)
 	{
-		this(id, src, (List<Serializable>)null);
+		this(id, Model.of(src), Model.ofList(Collections.<Serializable> emptyList()));
 	}
 
 	/**
@@ -72,7 +89,7 @@ public class ExternalImage extends WebComponent
 	 * @param src
 	 *            the source URL
 	 * @param srcSet
-	 *            a list of URLs placed in the srcset attribute
+	 *            a list of URLs placed in the srcSet attribute
 	 */
 	public ExternalImage(String id, Serializable src, List<Serializable> srcSet)
 	{
@@ -86,12 +103,10 @@ public class ExternalImage extends WebComponent
 	 *            the component id
 	 * @param srcModel
 	 *            the model source URL
-	 * @param srcSetModels
-	 *            a model list of URLs placed in the srcset attribute
 	 */
 	public ExternalImage(String id, IModel<Serializable> srcModel)
 	{
-		this(id, srcModel, (IModel<List<Serializable>>)null);
+		this(id, srcModel, Model.ofList(Collections.<Serializable> emptyList()));
 	}
 
 	/**
@@ -101,14 +116,14 @@ public class ExternalImage extends WebComponent
 	 *            the component id
 	 * @param srcModel
 	 *            the model source URL
-	 * @param srcSetModels
-	 *            a model list of URLs placed in the srcset attribute
+	 * @param srcSetModel
+	 *            a model list of URLs placed in the srcSet attribute
 	 */
 	public ExternalImage(String id, IModel<Serializable> srcModel,
-		IModel<List<Serializable>> srcSetModels)
+		IModel<List<Serializable>> srcSetModel)
 	{
 		super(id, srcModel);
-		this.srcSetModels = srcSetModels;
+		this.srcSetModel = srcSetModel;
 	}
 
 	@Override
@@ -118,13 +133,13 @@ public class ExternalImage extends WebComponent
 
 		if ("source".equals(tag.getName()))
 		{
-			buildSrcSetAttribute(tag, getSrcSet());
+			buildSrcSetAttribute(tag, getSrcSetModel());
 		}
 		else
 		{
 			checkComponentTag(tag, "img");
 			buildSrcAttribute(tag, getDefaultModel());
-			buildSrcSetAttribute(tag, getSrcSet());
+			buildSrcSetAttribute(tag, getSrcSetModel());
 		}
 
 		buildSizesAttribute(tag);
@@ -146,10 +161,7 @@ public class ExternalImage extends WebComponent
 	 */
 	protected void buildSrcAttribute(final ComponentTag tag, IModel<?> srcModel)
 	{
-		if (srcModel != null)
-		{
-			tag.put("src", srcModel.getObject().toString());
-		}
+		tag.put("src", srcModel.getObject().toString());
 	}
 
 	/**
@@ -157,32 +169,28 @@ public class ExternalImage extends WebComponent
 	 *
 	 * @param tag
 	 *            the component tag
-	 * @param srcSetModels
+	 * @param srcSetModel
 	 *            the models containing the src set URLs
 	 */
 	protected void buildSrcSetAttribute(final ComponentTag tag,
-		IModel<List<Serializable>> srcSetModels)
+		IModel<List<Serializable>> srcSetModel)
 	{
 		int srcSetPosition = 0;
-		List<Serializable> srcSetItems = srcSetModels.getObject();
-		if (srcSetItems != null)
+		List<Serializable> srcSetItems = srcSetModel.getObject();
+		for (Serializable srcSet : srcSetItems)
 		{
-			for (Serializable srcSetModel : srcSetItems)
-			{
-				String srcset = tag.getAttribute("srcset");
-				String xValue = "";
+			String srcset = tag.getAttribute("srcset");
+			String xValue = "";
 
-				// If there are xValues set process them in the applied order to the srcset
-				// attribute.
-				if (xValues != null)
-				{
-					xValue = xValues.size() > srcSetPosition && xValues.get(srcSetPosition) != null
-						? " " + xValues.get(srcSetPosition)
-						: "";
-				}
-				tag.put("srcset", (srcset != null ? srcset + ", " : "") + srcSetModel + xValue);
-				srcSetPosition++;
+			// If there are xValues set process them in the applied order to the srcset
+			// attribute.
+			if (xValues != null)
+			{
+				xValue = xValues.size() > srcSetPosition && xValues.get(srcSetPosition) != null
+					? " " + xValues.get(srcSetPosition) : "";
 			}
+			tag.put("srcset", (srcset != null ? srcset + ", " : "") + srcSet + xValue);
+			srcSetPosition++;
 		}
 	}
 
@@ -278,9 +286,20 @@ public class ExternalImage extends WebComponent
 	 * 
 	 * @return a list of models containing the src set values
 	 */
-	public IModel<List<Serializable>> getSrcSet()
+	public IModel<List<Serializable>> getSrcSetModel()
+	{
+		return srcSetModel;
+	}
+
+	/**
+	 * Sets the source set model
+	 * 
+	 * @param srcSetModel
+	 *            the model of a list of src set entries
+	 */
+	public void setSrcSetModel(IModel<List<Serializable>> srcSetModel)
 	{
-		return srcSetModels;
+		this.srcSetModel = srcSetModel;
 	}
 
 	/**
@@ -289,9 +308,9 @@ public class ExternalImage extends WebComponent
 	@Override
 	protected void onDetach()
 	{
-		if (srcSetModels != null)
+		if (srcSetModel != null)
 		{
-			srcSetModels.detach();
+			srcSetModel.detach();
 		}
 		super.onDetach();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/a1b19493/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
index 3485f9d..a1bf59a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
@@ -17,11 +17,13 @@
 package org.apache.wicket.markup.html.image;
 
 import java.io.Serializable;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.image.Image.Cors;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
 
 /**
  * A component which displays external images within a picture tag.
@@ -29,6 +31,9 @@ import org.apache.wicket.model.IModel;
  * @see org.apache.wicket.markup.html.image.Source
  * 
  * @author Tobias Soloschenko
+ * @author Sebastien Briquet
+ * @author Sven Meier
+ * @author Martin Grigorov
  *
  */
 public class ExternalSource extends ExternalImage
@@ -48,9 +53,24 @@ public class ExternalSource extends ExternalImage
 	 * @param srcSet
 	 *            a list of URLs placed in the srcset attribute
 	 */
+	public ExternalSource(String id)
+	{
+		super(id, null, Model.ofList(Collections.<Serializable> emptyList()));
+	}
+	
+	/**
+	 * Creates an external source
+	 * 
+	 * @param id
+	 *            the component id
+	 * @param src
+	 *            the source URL
+	 * @param srcSet
+	 *            a list of URLs placed in the srcset attribute
+	 */
 	public ExternalSource(String id, List<Serializable> srcSet)
 	{
-		super(id, null, srcSet);
+		super(id, null, Model.ofList(srcSet));
 	}
 
 	/**
@@ -60,12 +80,12 @@ public class ExternalSource extends ExternalImage
 	 *            the component id
 	 * @param src
 	 *            the model source URL
-	 * @param srcSetModels
+	 * @param srcSetModel
 	 *            a model list of URLs placed in the srcset attribute
 	 */
-	public ExternalSource(String id, IModel<List<Serializable>> srcSetModels)
+	public ExternalSource(String id, IModel<List<Serializable>> srcSetModel)
 	{
-		super(id, null, srcSetModels);
+		super(id, null, srcSetModel);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/a1b19493/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
index d520f7c..c761513 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
@@ -40,6 +40,7 @@ public class ExternalImageTest extends WicketTestCase
 	{
 		tester.startPage(ExternalImageTestPage.class);
 		String lastResponseAsString = tester.getLastResponse().getDocument();
+		System.out.println(lastResponseAsString);
 		Assert.assertTrue(lastResponseAsString.contains(
 			"<img wicket:id=\"externalImage1\" src=\"http://wicket.apache.org/img/wicket-7-bg.jpg\"/>"));
 		Assert.assertTrue(lastResponseAsString.contains(
@@ -58,7 +59,7 @@ public class ExternalImageTest extends WicketTestCase
 		ExternalImage externalImage2 = (ExternalImage)externalImage2Component;
 
 		TagTester tagById = tester.getTagById("externalImage2");
-		 IModel<List<Serializable>> srcSet = externalImage2.getSrcSet();
+		 IModel<List<Serializable>> srcSet = externalImage2.getSrcSetModel();
 		for (Serializable model :srcSet.getObject())
 		{
 			String attribute = tagById.getAttribute("srcset");

http://git-wip-us.apache.org/repos/asf/wicket/blob/a1b19493/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
index 753d487..0beeb1a 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.html.image;
 
+import java.io.Serializable;
 import java.util.Arrays;
 
 import org.apache.wicket.markup.html.WebPage;
@@ -39,14 +40,14 @@ public class ExternalImageTestPage extends WebPage
 		add(new ExternalImage("externalImage1", "http://wicket.apache.org/img/wicket-7-bg.jpg"));
 		ExternalImage externalImage2 = new ExternalImage("externalImage2",
 			"http://wicket.apache.org/img/wicket-7-bg.jpg",
-			Arrays.asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+			Arrays.<Serializable>asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
 				"http://wicket.apache.org/img/wicket-7-bg-2.jpg"));
 		externalImage2.setSizes("s1", "s2");
 		externalImage2.setXValues("x1", "x2");
 		add(externalImage2);
 		Picture picture = new Picture("externalPicture");
 		ExternalSource externalSource = new ExternalSource("externalSource",
-			Model.ofList(Arrays.asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+			Model.ofList(Arrays.<Serializable>asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
 				"http://wicket.apache.org/img/wicket-7-bg-2.jpg")));
 		externalSource.setXValues("", "x2");
 		externalSource.setSizes("1");
@@ -54,7 +55,7 @@ public class ExternalImageTestPage extends WebPage
 		picture.add(externalSource);
 		ExternalImage externalImage3 = new ExternalImage("externalImage3",
 			"http://wicket.apache.org/img/wicket-7-bg.jpg",
-			Arrays.asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+			Arrays.<Serializable>asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
 				"http://wicket.apache.org/img/wicket-7-bg-2.jpg"));
 		picture.add(externalImage3);
 		add(picture);


[4/7] wicket git commit: WICKET-6042 - List instead of Varargs

Posted by ts...@apache.org.
WICKET-6042 - List instead of Varargs

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/93fe70d0
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/93fe70d0
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/93fe70d0

Branch: refs/heads/master
Commit: 93fe70d08cf255d6673243ae02e36c01c360eaf7
Parents: 1ac89ee
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Wed Dec 2 18:58:10 2015 +0100
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Fri Dec 4 18:47:41 2015 +0100

----------------------------------------------------------------------
 .../wicket/markup/html/image/ExternalImage.java | 101 ++++++++++---------
 .../markup/html/image/ExternalSource.java       |   5 +-
 .../markup/html/image/ExternalImageTest.java    |   9 +-
 .../html/image/ExternalImageTestPage.java       |  22 ++--
 4 files changed, 76 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/93fe70d0/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
index 78de861..832c711 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
@@ -49,7 +49,20 @@ public class ExternalImage extends WebComponent
 	 */
 	private Cors crossOrigin = null;
 
-	private IModel<?>[] srcSetModels;
+	private IModel<List<Serializable>> srcSetModels;
+
+	/**
+	 * Creates an external image
+	 * 
+	 * @param id
+	 *            the component id
+	 * @param src
+	 *            the source URL
+	 */
+	public ExternalImage(String id, Serializable src)
+	{
+		this(id, src, (List<Serializable>)null);
+	}
 
 	/**
 	 * Creates an external image
@@ -61,9 +74,9 @@ public class ExternalImage extends WebComponent
 	 * @param srcSet
 	 *            a list of URLs placed in the srcset attribute
 	 */
-	public ExternalImage(String id, Serializable src, Serializable... srcSet)
+	public ExternalImage(String id, Serializable src, List<Serializable> srcSet)
 	{
-		this(id, src != null ? Model.of(src) : null, convertToModel(srcSet));
+		this(id, Model.of(src), Model.ofList(srcSet));
 	}
 
 	/**
@@ -76,38 +89,26 @@ public class ExternalImage extends WebComponent
 	 * @param srcSetModels
 	 *            a model list of URLs placed in the srcset attribute
 	 */
-	public ExternalImage(String id, IModel<?> srcModel, IModel<?>... srcSetModels)
+	public ExternalImage(String id, IModel<Serializable> srcModel)
 	{
-		super(id, srcModel);
-		this.srcSetModels = srcSetModels;
+		this(id, srcModel, (IModel<List<Serializable>>)null);
 	}
 
 	/**
-	 * Converts a variable argument of Strings to an array of models
+	 * Creates an external image
 	 * 
-	 * @param srcSet
-	 *            a variable argument of URLs to be converted to an array of models
-	 * @return an array of models
+	 * @param id
+	 *            the component id
+	 * @param srcModel
+	 *            the model source URL
+	 * @param srcSetModels
+	 *            a model list of URLs placed in the srcset attribute
 	 */
-	private static IModel<?>[] convertToModel(Serializable... srcSet)
+	public ExternalImage(String id, IModel<Serializable> srcModel,
+		IModel<List<Serializable>> srcSetModels)
 	{
-		IModel<?>[] models = null;
-		if (srcSet != null)
-		{
-
-			models = new IModel<?>[srcSet.length];
-			int i = 0;
-			for (Serializable srcSetElement : srcSet)
-			{
-				models[i] = Model.of(srcSetElement);
-				i++;
-			}
-		}
-		else
-		{
-			models = new IModel<?>[0];
-		}
-		return models;
+		super(id, srcModel);
+		this.srcSetModels = srcSetModels;
 	}
 
 	@Override
@@ -121,13 +122,9 @@ public class ExternalImage extends WebComponent
 		}
 		else
 		{
-			List<IModel<?>> srcSet = getSrcSet();
 			checkComponentTag(tag, "img");
 			buildSrcAttribute(tag, getDefaultModel());
-			if (srcSet.size() > 1)
-			{
-				buildSrcSetAttribute(tag, srcSet);
-			}
+			buildSrcSetAttribute(tag, getSrcSet());
 		}
 
 		buildSizesAttribute(tag);
@@ -163,23 +160,29 @@ public class ExternalImage extends WebComponent
 	 * @param srcSetModels
 	 *            the models containing the src set URLs
 	 */
-	protected void buildSrcSetAttribute(final ComponentTag tag, List<IModel<?>> srcSetModels)
+	protected void buildSrcSetAttribute(final ComponentTag tag,
+		IModel<List<Serializable>> srcSetModels)
 	{
 		int srcSetPosition = 0;
-		for (IModel<?> srcSetModel : srcSetModels)
+		List<Serializable> srcSetItems = srcSetModels.getObject();
+		if (srcSetItems != null)
 		{
-			String srcset = tag.getAttribute("srcset");
-			String xValue = "";
-
-			// If there are xValues set process them in the applied order to the srcset attribute.
-			if (xValues != null)
+			for (Serializable srcSetModel : srcSetItems)
 			{
-				xValue = xValues.size() > srcSetPosition && xValues.get(srcSetPosition) != null
-					? " " + xValues.get(srcSetPosition) : "";
+				String srcset = tag.getAttribute("srcset");
+				String xValue = "";
+
+				// If there are xValues set process them in the applied order to the srcset
+				// attribute.
+				if (xValues != null)
+				{
+					xValue = xValues.size() > srcSetPosition && xValues.get(srcSetPosition) != null
+						? " " + xValues.get(srcSetPosition)
+						: "";
+				}
+				tag.put("srcset", (srcset != null ? srcset + ", " : "") + srcSetModel + xValue);
+				srcSetPosition++;
 			}
-			tag.put("srcset",
-				(srcset != null ? srcset + ", " : "") + srcSetModel.getObject() + xValue);
-			srcSetPosition++;
 		}
 	}
 
@@ -275,9 +278,9 @@ public class ExternalImage extends WebComponent
 	 * 
 	 * @return a list of models containing the src set values
 	 */
-	public List<IModel<?>> getSrcSet()
+	public IModel<List<Serializable>> getSrcSet()
 	{
-		return Arrays.asList(srcSetModels);
+		return srcSetModels;
 	}
 
 	/**
@@ -286,9 +289,9 @@ public class ExternalImage extends WebComponent
 	@Override
 	protected void onDetach()
 	{
-		for (IModel<?> model : srcSetModels)
+		if (srcSetModels != null)
 		{
-			model.detach();
+			srcSetModels.detach();
 		}
 		super.onDetach();
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/93fe70d0/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
index a2d184a..3485f9d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalSource.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.markup.html.image;
 
 import java.io.Serializable;
+import java.util.List;
 
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.image.Image.Cors;
@@ -47,7 +48,7 @@ public class ExternalSource extends ExternalImage
 	 * @param srcSet
 	 *            a list of URLs placed in the srcset attribute
 	 */
-	public ExternalSource(String id, Serializable... srcSet)
+	public ExternalSource(String id, List<Serializable> srcSet)
 	{
 		super(id, null, srcSet);
 	}
@@ -62,7 +63,7 @@ public class ExternalSource extends ExternalImage
 	 * @param srcSetModels
 	 *            a model list of URLs placed in the srcset attribute
 	 */
-	public ExternalSource(String id, IModel<?>... srcSetModels)
+	public ExternalSource(String id, IModel<List<Serializable>> srcSetModels)
 	{
 		super(id, null, srcSetModels);
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/93fe70d0/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
index fb4e072..d520f7c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.html.image;
 
+import java.io.Serializable;
 import java.util.List;
 
 import org.apache.wicket.Component;
@@ -51,17 +52,17 @@ public class ExternalImageTest extends WicketTestCase
 	public void testExternalImageModel()
 	{
 		tester.startPage(ExternalImageTestPage.class);
-		String lastResponseAsString = tester.getLastResponse().getDocument();
+		tester.getLastResponse().getDocument();
 		Component externalImage2Component = tester
 			.getComponentFromLastRenderedPage("externalImage2");
 		ExternalImage externalImage2 = (ExternalImage)externalImage2Component;
-		Object defaultModelObject = externalImage2.getDefaultModelObject();
 
 		TagTester tagById = tester.getTagById("externalImage2");
-		for (IModel<?> model : externalImage2.getSrcSet())
+		 IModel<List<Serializable>> srcSet = externalImage2.getSrcSet();
+		for (Serializable model :srcSet.getObject())
 		{
 			String attribute = tagById.getAttribute("srcset");
-			Assert.assertTrue(attribute.contains(model.getObject().toString()));
+			Assert.assertTrue(attribute.contains(model.toString()));
 		}
 
 		String attribute = tagById.getAttribute("src");

http://git-wip-us.apache.org/repos/asf/wicket/blob/93fe70d0/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
index a75b54b..753d487 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.markup.html.image;
 
+import java.util.Arrays;
+
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.model.Model;
 
@@ -35,17 +37,25 @@ public class ExternalImageTestPage extends WebPage
 	public ExternalImageTestPage()
 	{
 		add(new ExternalImage("externalImage1", "http://wicket.apache.org/img/wicket-7-bg.jpg"));
-		ExternalImage externalImage2 = new ExternalImage("externalImage2", "http://wicket.apache.org/img/wicket-7-bg.jpg","http://wicket.apache.org/img/wicket-7-bg-1.jpg","http://wicket.apache.org/img/wicket-7-bg-2.jpg");
-		externalImage2.setSizes("s1","s2");
-		externalImage2.setXValues("x1","x2");
+		ExternalImage externalImage2 = new ExternalImage("externalImage2",
+			"http://wicket.apache.org/img/wicket-7-bg.jpg",
+			Arrays.asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+				"http://wicket.apache.org/img/wicket-7-bg-2.jpg"));
+		externalImage2.setSizes("s1", "s2");
+		externalImage2.setXValues("x1", "x2");
 		add(externalImage2);
 		Picture picture = new Picture("externalPicture");
-		ExternalSource externalSource = new ExternalSource("externalSource", Model.of("http://wicket.apache.org/img/wicket-7-bg-1.jpg"),Model.of("http://wicket.apache.org/img/wicket-7-bg-2.jpg"));
-		externalSource.setXValues("","x2");
+		ExternalSource externalSource = new ExternalSource("externalSource",
+			Model.ofList(Arrays.asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+				"http://wicket.apache.org/img/wicket-7-bg-2.jpg")));
+		externalSource.setXValues("", "x2");
 		externalSource.setSizes("1");
 		externalSource.setMedia("(min-width: 650px)");
 		picture.add(externalSource);
-		ExternalImage externalImage3 = new ExternalImage("externalImage3", "http://wicket.apache.org/img/wicket-7-bg.jpg","http://wicket.apache.org/img/wicket-7-bg-1.jpg","http://wicket.apache.org/img/wicket-7-bg-2.jpg");
+		ExternalImage externalImage3 = new ExternalImage("externalImage3",
+			"http://wicket.apache.org/img/wicket-7-bg.jpg",
+			Arrays.asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+				"http://wicket.apache.org/img/wicket-7-bg-2.jpg"));
 		picture.add(externalImage3);
 		add(picture);
 	}


[5/7] wicket git commit: WICKET-6042 - Removed unwanted output

Posted by ts...@apache.org.
WICKET-6042 - Removed unwanted output

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/4eacb2ab
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/4eacb2ab
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/4eacb2ab

Branch: refs/heads/master
Commit: 4eacb2aba5f580fbbb851293834253ec7a8b3ce9
Parents: a1b1949
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Wed Dec 2 21:48:06 2015 +0100
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Fri Dec 4 18:47:42 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/wicket/markup/html/image/ExternalImageTest.java | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/4eacb2ab/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
index c761513..062a04b 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
@@ -40,7 +40,6 @@ public class ExternalImageTest extends WicketTestCase
 	{
 		tester.startPage(ExternalImageTestPage.class);
 		String lastResponseAsString = tester.getLastResponse().getDocument();
-		System.out.println(lastResponseAsString);
 		Assert.assertTrue(lastResponseAsString.contains(
 			"<img wicket:id=\"externalImage1\" src=\"http://wicket.apache.org/img/wicket-7-bg.jpg\"/>"));
 		Assert.assertTrue(lastResponseAsString.contains(


[7/7] wicket git commit: WICKET-6042 - Additional test / remove methods for xvalues / sizes

Posted by ts...@apache.org.
WICKET-6042 - Additional test / remove methods for xvalues / sizes

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/ee572d0e
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ee572d0e
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ee572d0e

Branch: refs/heads/master
Commit: ee572d0ee597a357f10735cb2141b01ec19d19a4
Parents: b174c21
Author: Tobias Soloschenko <ts...@sapient.com>
Authored: Fri Dec 4 15:07:01 2015 +0100
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Fri Dec 4 18:47:43 2015 +0100

----------------------------------------------------------------------
 .../wicket/markup/html/image/ExternalImage.java | 22 +++++++++
 .../apache/wicket/markup/html/image/Image.java  | 26 +++++++++-
 .../markup/html/image/ExternalImageTest.java    |  2 +
 .../html/image/ExternalImageTestPage.html       |  1 +
 .../html/image/ExternalImageTestPage.java       | 50 ++++++++++++++++++--
 5 files changed, 95 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ee572d0e/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
index d24fb1a..2a30418 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/ExternalImage.java
@@ -241,6 +241,17 @@ public class ExternalImage extends WebComponent
 	}
 
 	/**
+	 * Removes all sizes values. The corresponding tag will not be rendered anymore.
+	 */
+	public void removeSizes()
+	{
+		if (sizes != null)
+		{
+			sizes.clear();
+		}
+	}
+
+	/**
 	 * @param sizes
 	 *            the sizes to be used in the size
 	 */
@@ -258,6 +269,17 @@ public class ExternalImage extends WebComponent
 	}
 
 	/**
+	 * Removes all x values from the image src set.
+	 */
+	public void removeXValues()
+	{
+		if (xValues != null)
+		{
+			xValues.clear();
+		}
+	}
+
+	/**
 	 * Gets the cross origin settings
 	 * 
 	 * @see {@link org.apache.wicket.markup.html.image.Image#setCrossOrigin(Cors)}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee572d0e/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
index 5a64395..19f4f7a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
@@ -316,13 +316,24 @@ public class Image extends WebComponent implements IResourceListener
 		if (xValues == null)
 		{
 			xValues = new ArrayList<>();
-		}else{			
+		}else{
 			xValues.clear();
 		}
 		xValues.addAll(Arrays.asList(values));
 	}
 
 	/**
+	 * Removes all x values from the image src set
+	 */
+	public void removeXValues()
+	{
+		if (xValues != null)
+		{
+			xValues.clear();
+		}
+	}
+
+	/**
 	 * @param sizes
 	 *            the sizes to be used in the size
 	 */
@@ -331,13 +342,24 @@ public class Image extends WebComponent implements IResourceListener
 		if (this.sizes == null)
 		{
 			this.sizes = new ArrayList<>();
-		}else{			
+		}else{
 			this.sizes.clear();
 		}
 		this.sizes.addAll(Arrays.asList(sizes));
 	}
 
 	/**
+	 * Removes all sizes values. The corresponding attribute will not be rendered anymore.
+	 */
+	public void removeSizes()
+	{
+		if (sizes != null)
+		{
+			sizes.clear();
+		}
+	}
+
+	/**
 	 * @see org.apache.wicket.Component#setDefaultModel(org.apache.wicket.model.IModel)
 	 */
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee572d0e/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
index 062a04b..6c285ed 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTest.java
@@ -46,6 +46,8 @@ public class ExternalImageTest extends WicketTestCase
 			"<img id=\"externalImage2\" wicket:id=\"externalImage2\" src=\"http://wicket.apache.org/img/wicket-7-bg.jpg\" srcset=\"http://wicket.apache.org/img/wicket-7-bg-1.jpg x1, http://wicket.apache.org/img/wicket-7-bg-2.jpg x2\" sizes=\"s1,s2\"/>"));
 		Assert.assertTrue(lastResponseAsString.contains(
 			"<source wicket:id=\"externalSource\" srcset=\"http://wicket.apache.org/img/wicket-7-bg-1.jpg , http://wicket.apache.org/img/wicket-7-bg-2.jpg x2\" sizes=\"1\" media=\"(min-width: 650px)\"/>"));
+		Assert.assertTrue(lastResponseAsString.contains(
+			"<img wicket:id=\"compoundImage\" src=\"http://www.google.de/test.jpg\"/>"));
 	}
 
 	@Test

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee572d0e/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html
index 40d99d2..498daed 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.html
@@ -9,5 +9,6 @@
 			<source wicket:id="externalSource"/>
 			<img wicket:id="externalImage3"/>
 		</picture>
+		<img wicket:id="compoundImage" />
 	</body>
 </html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/ee572d0e/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
index 0beeb1a..dd0ce95 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/image/ExternalImageTestPage.java
@@ -20,6 +20,7 @@ import java.io.Serializable;
 import java.util.Arrays;
 
 import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.Model;
 
 /**
@@ -40,24 +41,65 @@ public class ExternalImageTestPage extends WebPage
 		add(new ExternalImage("externalImage1", "http://wicket.apache.org/img/wicket-7-bg.jpg"));
 		ExternalImage externalImage2 = new ExternalImage("externalImage2",
 			"http://wicket.apache.org/img/wicket-7-bg.jpg",
-			Arrays.<Serializable>asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+			Arrays.<Serializable> asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
 				"http://wicket.apache.org/img/wicket-7-bg-2.jpg"));
 		externalImage2.setSizes("s1", "s2");
 		externalImage2.setXValues("x1", "x2");
 		add(externalImage2);
 		Picture picture = new Picture("externalPicture");
 		ExternalSource externalSource = new ExternalSource("externalSource",
-			Model.ofList(Arrays.<Serializable>asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
-				"http://wicket.apache.org/img/wicket-7-bg-2.jpg")));
+			Model.ofList(
+				Arrays.<Serializable> asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+					"http://wicket.apache.org/img/wicket-7-bg-2.jpg")));
 		externalSource.setXValues("", "x2");
 		externalSource.setSizes("1");
 		externalSource.setMedia("(min-width: 650px)");
 		picture.add(externalSource);
 		ExternalImage externalImage3 = new ExternalImage("externalImage3",
 			"http://wicket.apache.org/img/wicket-7-bg.jpg",
-			Arrays.<Serializable>asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
+			Arrays.<Serializable> asList("http://wicket.apache.org/img/wicket-7-bg-1.jpg",
 				"http://wicket.apache.org/img/wicket-7-bg-2.jpg"));
 		picture.add(externalImage3);
 		add(picture);
+
+		ImageSrc imageSrc = new ImageSrc();
+		imageSrc.setUrl("http://www.google.de/test.jpg");
+		CompoundPropertyModel<ImageSrc> compoundPropertyModel = new CompoundPropertyModel<ImageSrc>(imageSrc);
+		add(new ExternalImage("compoundImage",compoundPropertyModel.bind("url")));
+	}
+
+	/**
+	 * Model object for url
+	 * 
+	 * @author Tobias Soloschenko
+	 */
+	private class ImageSrc implements Serializable
+	{
+
+		private static final long serialVersionUID = 1L;
+		
+		private String url;
+
+		/**
+		 * Gets the url
+		 * 
+		 * @return the url
+		 */
+		@SuppressWarnings("unused")
+		public String getUrl()
+		{
+			return url;
+		}
+
+		/**
+		 * Sets the url
+		 * 
+		 * @param url
+		 *            the url to be used
+		 */
+		public void setUrl(String url)
+		{
+			this.url = url;
+		}
 	}
 }