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)));
+ }
}