Public: custom serializer and other code needed to send constraint violations
from the server to the client.
Review at http://gwt-code-reviews.appspot.com/1040802
Review by: bobv@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9135 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java b/user/src/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java
new file mode 100644
index 0000000..97883fa
--- /dev/null
+++ b/user/src/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed 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.hibernate.validator.engine;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.lang.annotation.ElementType;
+
+import javax.validation.Path;
+import javax.validation.metadata.ConstraintDescriptor;
+
+/**
+ * Custom Serializer for {@link ConstraintViolationImpl}.
+ */
+public class ConstraintViolationImpl_CustomFieldSerializer {
+
+ public static void deserialize(SerializationStreamReader streamReader,
+ ConstraintViolationImpl instance) throws SerializationException {
+ // no fields
+ }
+
+ public static ConstraintViolationImpl<Object> instantiate(
+ SerializationStreamReader streamReader) throws SerializationException {
+
+ String messageTemplate = null;
+ String interpolatedMessage = streamReader.readString();
+ Class<Object> rootBeanClass = null;
+ Object rootBean = null;
+ Object leafBeanInstance = null;
+ Object value = null;
+ Path propertyPath = (Path) streamReader.readObject();
+ ConstraintDescriptor<?> constraintDescriptor = null;
+ ElementType elementType = null;
+ return new ConstraintViolationImpl<Object>(messageTemplate,
+ interpolatedMessage, rootBeanClass, rootBean, leafBeanInstance, value,
+ propertyPath, constraintDescriptor, elementType);
+ }
+
+ /**
+ * Only a subset of fields are actually serialized.
+ * <p/>
+ * There is no guarantee that the root bean is GWT-serializable or that it's
+ * appropriate for it to be exposed on the client. Even if the root bean could
+ * be sent back, the lack of reflection on the client makes it troublesome to
+ * interpret the path as a sequence of property accesses.
+ * <p/>
+ * The current implementation is the simplest-to-implement properties.
+ * <ol>
+ * <li>Message</li>
+ * <li>Property Path</li>
+ * </ol>
+ */
+ public static void serialize(SerializationStreamWriter streamWriter,
+ ConstraintViolationImpl instance) throws SerializationException {
+
+ // streamWriter.writeString(instance.getMessageTemplate());
+ streamWriter.writeString(instance.getMessage());
+ // streamWriter.writeObject(instance.getRootBeanClass());
+ // streamWriter.writeObject(instance.getRootBean());
+ // streamWriter.writeObject(instance.getLeafBean());
+ // streamWriter.writeObject(instance.getInvalidValue());
+ streamWriter.writeObject(instance.getPropertyPath());
+ // streamWriter.writeObject(instance.getConstraintDescriptor());
+ // ElementType
+ }
+}