You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2016/11/18 22:11:09 UTC

wicket git commit: WICKET-6279 AttributeModifier.VALUELESS_ATTRIBUTE_REMOVE does not work after deserialisation

Repository: wicket
Updated Branches:
  refs/heads/master ee7382032 -> b523a40ec


WICKET-6279 AttributeModifier.VALUELESS_ATTRIBUTE_REMOVE does not work after deserialisation


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

Branch: refs/heads/master
Commit: b523a40ec0c1586aa90af7125498077aa9c3b4f5
Parents: ee73820
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri Nov 18 23:10:46 2016 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Nov 18 23:10:46 2016 +0100

----------------------------------------------------------------------
 .../org/apache/wicket/AttributeModifier.java    | 33 ++++++++++++++++++++
 .../apache/wicket/AttributeModifierTest.java    | 18 +++++++++++
 2 files changed, 51 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b523a40e/wicket-core/src/main/java/org/apache/wicket/AttributeModifier.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/AttributeModifier.java b/wicket-core/src/main/java/org/apache/wicket/AttributeModifier.java
index 826939b..b78398c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/AttributeModifier.java
+++ b/wicket-core/src/main/java/org/apache/wicket/AttributeModifier.java
@@ -29,6 +29,8 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.value.IValueMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This class allows a tag attribute of a component to be modified dynamically with a value obtained
@@ -67,6 +69,8 @@ import org.apache.wicket.util.value.IValueMap;
  */
 public class AttributeModifier extends Behavior implements IClusterable
 {
+	private static final Logger LOG = LoggerFactory.getLogger(AttributeModifier.class);
+
 	/** Marker value to have an attribute without a value added. */
 	public static final String VALUELESS_ATTRIBUTE_ADD = new String("VA_ADD");
 
@@ -370,4 +374,33 @@ public class AttributeModifier extends Behavior implements IClusterable
 
 		return replace(attributeName, Model.of(VALUELESS_ATTRIBUTE_REMOVE));
 	}
+
+	private void readObject(java.io.ObjectInputStream s) throws java.io.IOException,
+			ClassNotFoundException
+	{
+		s.defaultReadObject();
+
+		try
+		{
+			if (replaceModel instanceof Model)
+			{
+				Model<Serializable> model = (Model<Serializable>) replaceModel;
+
+				final Object replacement = replaceModel.getObject();
+				if (VALUELESS_ATTRIBUTE_ADD.equals(replacement))
+				{
+					model.setObject(VALUELESS_ATTRIBUTE_ADD);
+				}
+				else if (VALUELESS_ATTRIBUTE_REMOVE.equals(replacement))
+				{
+					model.setObject(VALUELESS_ATTRIBUTE_REMOVE);
+				}
+			}
+		}
+		catch (Exception x)
+		{
+			LOG.debug("Cannot reset the value of replaceModel to 'VALUELESS_ATTRIBUTE_ADD/REMOVE': {}",
+					x.getMessage(), x);
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/b523a40e/wicket-core/src/test/java/org/apache/wicket/AttributeModifierTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/AttributeModifierTest.java b/wicket-core/src/test/java/org/apache/wicket/AttributeModifierTest.java
index bd71b4f..db7052e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/AttributeModifierTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/AttributeModifierTest.java
@@ -16,10 +16,16 @@
  */
 package org.apache.wicket;
 
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.sameInstance;
+
 import java.util.Map;
 
+import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.parser.XmlTag;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.junit.Assert;
 import org.junit.Test;
@@ -326,4 +332,16 @@ public class AttributeModifierTest extends Assert
 		assertFalse(attributes.isEmpty());
 		assertEquals("VA_REMOVE VA_REMOVE", attributes.get(attrName));
 	}
+
+	/**
+	 * https://issues.apache.org/jira/browse/WICKET-6279
+	 */
+	@Test
+	public void deserialize()
+	{
+		AttributeModifier appender = AttributeModifier.append("class", AttributeModifier.VALUELESS_ATTRIBUTE_ADD);
+		final AttributeModifier copy = WicketObjects.cloneObject(appender);
+		final IModel<?> replaceModel = copy.getReplaceModel();
+		assertThat(replaceModel.getObject().toString(), is(sameInstance(AttributeModifier.VALUELESS_ATTRIBUTE_ADD)));
+	}
 }