Example usage for com.google.gwt.uibinder.client UiTemplate UiTemplate

List of usage examples for com.google.gwt.uibinder.client UiTemplate UiTemplate

Introduction

In this page you can find the example usage for com.google.gwt.uibinder.client UiTemplate UiTemplate.

Prototype

UiTemplate

Source Link

Usage

From source file:org.jboss.errai.uibinder.rebind.GWTUiBinderIOCExtension.java

License:Apache License

@Override
public void configure(final IOCProcessingContext context, final InjectionContext injectionContext,
        final IOCConfigProcessor procFactory) {

    context.registerTypeDiscoveryListener(new TypeDiscoveryListener() {
        @Override/*from   www  . ja  v  a  2  s.  c om*/
        public void onDiscovery(final IOCProcessingContext context, final InjectionPoint injectionPoint,
                final MetaClass type) {
            // final MetaClass type = injectionPoint.getElementTypeOrMethodReturnType();
            final MetaClass enclosingType = injectionPoint.getEnclosingType();

            if (type.isAssignableFrom(UiBinder.class)) {
                MetaClass uiBinderParameterized = MetaClassFactory.parameterizedAs(UiBinder.class,
                        MetaClassFactory.typeParametersOf(type.getParameterizedType().getTypeParameters()[0],
                                enclosingType));

                BuildMetaClass uiBinderBoilerPlaterIface = ClassBuilder
                        .define(enclosingType.getFullyQualifiedName().replaceAll("\\.", "_") + "_UiBinder",
                                uiBinderParameterized)
                        .publicScope().staticClass().interfaceDefinition().body().getClassDefinition();

                UiTemplate handler = new UiTemplate() {
                    @Override
                    public String value() {
                        return enclosingType.getFullyQualifiedName() + ".ui.xml";
                    }

                    @Override
                    public Class<? extends Annotation> annotationType() {
                        return UiTemplate.class;
                    }
                };

                PackageTarget packageTarget = new PackageTarget() {
                    @Override
                    public String value() {
                        return enclosingType.getPackageName();
                    }

                    @Override
                    public Class<? extends Annotation> annotationType() {
                        return PackageTarget.class;
                    }
                };

                uiBinderBoilerPlaterIface.addAnnotation(handler);
                uiBinderBoilerPlaterIface.addAnnotation(packageTarget);

                context.getBootstrapClass().addInnerClass(new InnerClass(uiBinderBoilerPlaterIface));

                final BlockStatement staticInit = context.getBootstrapClass().getStaticInitializer();

                String varName = "uiBinderInst_" + enclosingType.getFullyQualifiedName().replaceAll("\\.", "_");

                if (Boolean.getBoolean("errai.simulatedClient")) {
                    staticInit.addStatement(Stmt.declareVariable(UiBinder.class).named(varName)
                            .initializeWith(ObjectBuilder.newInstanceOf(uiBinderBoilerPlaterIface).extend()
                                    .publicOverridesMethod("createAndBindUi", Parameter.of(type, "w"))
                                    .append(Stmt.loadLiteral(null).returnValue()).finish().finish()));
                } else {
                    staticInit.addStatement(Stmt.declareVariable(UiBinder.class).named(varName)
                            .initializeWith(Stmt.invokeStatic(GWT.class, "create",
                                    LiteralFactory.getLiteral(uiBinderBoilerPlaterIface))));
                }

                staticInit.addStatement(Stmt.invokeStatic(UiBinderProvider.class, "registerBinder",
                        enclosingType, Refs.get(varName)));
            } else if (type.isAssignableTo(SafeHtmlTemplates.class)) {
                final String varName = "safeTemplateInst_"
                        + type.getFullyQualifiedName().replaceAll("\\.", "_");

                if (Boolean.getBoolean("errai.simulatedClient")) {
                    context.append(Stmt.declareVariable(SafeHtmlTemplates.class).named(varName)
                            .initializeWith(ObjectBuilder.newInstanceOf(type).extend()
                                    .publicOverridesMethod("link", Parameter.of(SafeUri.class, "safe"),
                                            Parameter.of(String.class, "str"))
                                    .append(Stmt.loadLiteral(null).returnValue()).finish().finish()));

                } else {
                    context.append(Stmt.declareVariable(type).named(varName).initializeWith(
                            Stmt.invokeStatic(GWT.class, "create", LiteralFactory.getLiteral(type))));
                }

                injectionContext.registerInjector(new AbstractInjector() {
                    @Override
                    public void renderProvider(InjectableInstance injectableInstance) {
                    }

                    @Override
                    public Statement getBeanInstance(InjectableInstance injectableInstance) {
                        return Refs.get(varName);
                    }

                    @Override
                    public boolean isRendered() {
                        return false;
                    }

                    @Override
                    public boolean isSingleton() {
                        return false;
                    }

                    @Override
                    public boolean isPseudo() {
                        return false;
                    }

                    @Override
                    public String getInstanceVarName() {
                        return varName;
                    }

                    @Override
                    public MetaClass getInjectedType() {
                        return type;
                    }
                });
            }
        }
    });
}