private String updateProxy(final ClassOrInterfaceTypeDetails proxy,
final List<MethodMetadata> proxyMethods,
final List<String> exclusionList, final List<String> readOnlyList) {
// Create a new ClassOrInterfaceTypeDetailsBuilder for the Proxy, will
// be overridden if the Proxy has already been created
final ClassOrInterfaceTypeDetailsBuilder cidBuilder = new ClassOrInterfaceTypeDetailsBuilder(
proxy);
// Only inherit from EntityProxy if extension is not already defined
if (!cidBuilder.getExtendsTypes().contains(OLD_ENTITY_PROXY)
&& !cidBuilder.getExtendsTypes().contains(ENTITY_PROXY)) {
cidBuilder.addExtendsTypes(ENTITY_PROXY);
}
if (!cidBuilder.getExtendsTypes().contains(ENTITY_PROXY)) {
cidBuilder.addExtendsTypes(ENTITY_PROXY);
}
final String destinationMetadataId = proxy.getDeclaredByMetadataId();
final List<MethodMetadataBuilder> methods = new ArrayList<MethodMetadataBuilder>();
for (final MethodMetadata method : proxyMethods) {
if (exclusionList.contains(method.getMethodName().getSymbolName())) {
continue;
}
final String propertyName = StringUtils.uncapitalize(BeanInfoUtils
.getPropertyNameForJavaBeanMethod(method).getSymbolName());
if (exclusionList.contains(propertyName)) {
continue;
}
final MethodMetadataBuilder abstractAccessorMethodBuilder = new MethodMetadataBuilder(
destinationMetadataId, method);
abstractAccessorMethodBuilder
.setBodyBuilder(new InvocableMemberBodyBuilder());
abstractAccessorMethodBuilder.setModifier(Modifier.ABSTRACT);
methods.add(abstractAccessorMethodBuilder);
if (readOnlyList.contains(propertyName)) {
continue;
}
final MethodMetadataBuilder abstractMutatorMethodBuilder = new MethodMetadataBuilder(
destinationMetadataId, method);
abstractMutatorMethodBuilder
.setBodyBuilder(new InvocableMemberBodyBuilder());
abstractMutatorMethodBuilder.setModifier(Modifier.ABSTRACT);
abstractMutatorMethodBuilder.setReturnType(JavaType.VOID_PRIMITIVE);
abstractMutatorMethodBuilder
.setParameterTypes(AnnotatedJavaType
.convertFromJavaTypes(Arrays.asList(method
.getReturnType())));
abstractMutatorMethodBuilder.setParameterNames(Arrays
.asList(new JavaSymbolName(StringUtils
.uncapitalize(propertyName))));
abstractMutatorMethodBuilder.setMethodName(new JavaSymbolName(
method.getMethodName().getSymbolName()
.replaceFirst("get", "set")));
methods.add(abstractMutatorMethodBuilder);
}
cidBuilder.setDeclaredMethods(methods);
return gwtFileManager.write(cidBuilder.build(),
GwtUtils.PROXY_REQUEST_WARNING);
}