Public: Create seperate top level interfaces for
GwtSpecificValidators.
Review at http://gwt-code-reviews.appspot.com/1058801
Review by: robertvawter@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9164 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/validation/rebind/BeanHelper.java b/user/src/com/google/gwt/validation/rebind/BeanHelper.java
index 021c7c3..fc1aae0 100644
--- a/user/src/com/google/gwt/validation/rebind/BeanHelper.java
+++ b/user/src/com/google/gwt/validation/rebind/BeanHelper.java
@@ -51,6 +51,14 @@
return jClass.getName() + "Descriptor";
}
+ public String getFullyQualifiedValidatorName() {
+ return jClass.getQualifiedSourceName() + "Validator";
+ }
+
+ public String getPackage() {
+ return jClass.getPackage().getName();
+ }
+
public String getTypeCanonicalName() {
return jClass.getQualifiedSourceName();
}
diff --git a/user/src/com/google/gwt/validation/rebind/ValidatorCreator.java b/user/src/com/google/gwt/validation/rebind/ValidatorCreator.java
index 8d52981..e8e8e83 100644
--- a/user/src/com/google/gwt/validation/rebind/ValidatorCreator.java
+++ b/user/src/com/google/gwt/validation/rebind/ValidatorCreator.java
@@ -20,6 +20,7 @@
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import com.google.gwt.user.rebind.AbstractSourceCreator;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
import com.google.gwt.validation.client.GwtValidation;
@@ -28,6 +29,7 @@
import com.google.gwt.validation.client.impl.GwtSpecificValidator;
import com.google.gwt.validation.client.impl.GwtValidationContext;
+import java.io.PrintWriter;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -110,31 +112,6 @@
writeGetConstraintsForClass(sourceWriter);
}
- protected void writeTypeSupport(SourceWriter sw) {
- // TODO (nchalko) write these as top level interfaces.
- // As top level interfaces other generated Validators can use them.
- // Without it a gwt application can only have ONE validator.
- for (BeanHelper bean : beansToValidate.values()) {
- sw.println("public interface " + bean.getValidatorName()
- + " extends GwtSpecificValidator<" + bean.getTypeCanonicalName()
- + "> {");
- sw.println("}");
-
- sw.println("public interface " + bean.getDescriptorName()
- + " extends GwtBeanDescriptor<"
- + bean.getTypeCanonicalName() + "> {");
- sw.println("}");
-
- sw.print("private final " + bean.getValidatorName() + " ");
- sw.print(bean.getValidatorInstanceName());
- sw.println(" = GWT.create(" + bean.getValidatorName() + ".class);");
- }
- }
-
- private String getQaulifiedName() {
- return validatorType.getQualifiedSourceName() + "Impl";
- }
-
private String getSimpleName() {
return validatorType.getSimpleSourceName() + "Impl";
}
@@ -161,6 +138,7 @@
sw.println("}");
}
+
private void writeContext(SourceWriter sw, BeanHelper bean, String objectName) {
// GwtValidationContext<T> context =
// new GwtValidationContext<T>(object,myBeanValidator.getConstraints());
@@ -181,11 +159,37 @@
sourceWriter.println("}");
}
- private void writeIfEqulsBeanType(SourceWriter sourceWriter, BeanHelper bean) {
+ private void writeIfEqualsBeanType(SourceWriter sourceWriter, BeanHelper bean) {
sourceWriter.println("if (object.getClass().equals("
+ bean.getTypeCanonicalName() + ".class)) {");
}
+ /**
+ * Write an Empty Interface implementing {@link GwtSpecificValidator} with
+ * Generic parameter of the bean type.
+ *
+ * @param bean
+ */
+ private void writeInterface(BeanHelper bean) {
+ PrintWriter pw = context.tryCreate(logger, bean.getPackage(),
+ bean.getValidatorName());
+ if (pw != null) {
+ TreeLogger interfaceLogger = AbstractSourceCreator.branch(
+ logger,
+ "Creating the interface for "
+ + bean.getFullyQualifiedValidatorName());
+
+ ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(
+ bean.getPackage(), bean.getValidatorName());
+ factory.addImplementedInterface(GwtSpecificValidator.class.getCanonicalName()
+ + " <" + bean.getTypeCanonicalName() + ">");
+ factory.makeInterface();
+ SourceWriter sw2 = factory.createSourceWriter(context, pw);
+ sw2.commit(interfaceLogger);
+ pw.close();
+ }
+ }
+
private void writeThrowIllegalArgumnet(SourceWriter sourceWriter) {
sourceWriter.print("throw new IllegalArgumentException(\""
+ this.validatorType.getName() + " can only validate ");
@@ -193,6 +197,24 @@
sourceWriter.println("\");");
}
+ private void writeTypeSupport(SourceWriter sw) {
+ for (BeanHelper bean : beansToValidate.values()) {
+ writeInterface(bean);
+ // private final MyBeanValidator myBeanValidator =
+ sw.print("private final " + bean.getFullyQualifiedValidatorName() + " ");
+ sw.print(bean.getValidatorInstanceName());
+ sw.println(" = ");
+ sw.indent();
+ sw.indent();
+
+ // GWT.create(MyBeanValidator
+ sw.println("GWT.create(" + bean.getFullyQualifiedValidatorName()
+ + ".class);");
+ sw.outdent();
+ sw.outdent();
+ }
+ }
+
private void writeValidate(SourceWriter sw) {
// public <T> Set<ConstraintViolation<T>> validate(T object, Class<?>...
// groups) {
@@ -214,7 +236,7 @@
}
private void writeValidate(SourceWriter sw, BeanHelper bean) {
- writeIfEqulsBeanType(sw, bean);
+ writeIfEqualsBeanType(sw, bean);
sw.indent();
writeContext(sw, bean, "object");
@@ -250,7 +272,7 @@
}
private void writeValidateProperty(SourceWriter sw, BeanHelper bean) {
- writeIfEqulsBeanType(sw, bean);
+ writeIfEqualsBeanType(sw, bean);
sw.indent();
writeContext(sw, bean, "object");
sw.print("return " + bean.getValidatorInstanceName()