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