Package org.apache.hivemind.service

Examples of org.apache.hivemind.service.BodyBuilder


    }

    private void buildMutator(EnhancementOperation op, String parameterName, String propertyName,
            Class propertyType, String fieldName, String defaultFieldName, String cachedFieldName)
    {
        BodyBuilder builder = new BodyBuilder();
        builder.begin();

        // The mutator method may be invoked from finishLoad(), in which
        // case it changes the default value for the parameter property, if the parameter
        // is not bound.

        builder.addln("if (! isInActiveState())");
        builder.begin();
        builder.addln("{0} = $1;", defaultFieldName);
        builder.addln("return;");
        builder.end();

        // In the normal state, we update the binding firstm, and it's an error
        // if the parameter is not bound.

        addBindingReference(builder, "binding", parameterName);

        builder.addln("if (binding == null)");
        builder.addln(
                "  throw new {0}(\"Parameter ''{1}'' is not bound and can not be updated.\");",
                ApplicationRuntimeException.class.getName(),
                parameterName);

        // Always updated the binding first (which may fail with an exception).

        builder.addln("binding.setObject(($w) $1);");

        // While rendering, we store the updated value for fast
        // access again (while the component is still rendering).
        // The property value will be reset to default by cleanupAfterRender().

        builder.addln("if (isRendering())");
        builder.begin();
        builder.addln("{0} = $1;", fieldName);
        builder.addln("{0} = true;", cachedFieldName);
        builder.end();

        builder.end();

        String mutatorMethodName = EnhanceUtils.createMutatorMethodName(propertyName);

        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, mutatorMethodName,
                new Class[]
                { propertyType }, null), builder.toString());
    }
View Full Code Here


    void buildAccessor(EnhancementOperation op, String parameterName, String propertyName,
            Class propertyType, String fieldName, String defaultFieldName, String cachedFieldName,
            boolean cache)
    {
        BodyBuilder builder = new BodyBuilder();
        builder.begin();

        builder.addln("if ({0}) return {1};", cachedFieldName, fieldName);

        addBindingReference(builder, "binding", parameterName);

        builder.addln("if (binding == null) return {0};", defaultFieldName);

        String javaTypeName = ClassFabUtils.getJavaClassName(propertyType);

        builder.addln("{0} result = {1};", javaTypeName, EnhanceUtils.createUnwrapExpression(
                op,
                "binding",
                propertyType));

        // Values read via the binding are cached during the render of
        // the component (if the parameter defines cache to be true, which
        // is the default), or any time the binding is invariant
        // (such as most bindings besides ExpressionBinding.

        String expression = cache ? "isRendering() || binding.isInvariant()"
                : "binding.isInvariant()";

        builder.addln("if ({0})", expression);
        builder.begin();
        builder.addln("{0} = result;", fieldName);
        builder.addln("{0} = true;", cachedFieldName);
        builder.end();

        builder.addln("return result;");

        builder.end();

        String accessorMethodName = op.getAccessorMethodName(propertyName);

        op.addMethod(Modifier.PUBLIC, new MethodSignature(propertyType, accessorMethodName, null,
                null), builder.toString());
    }
View Full Code Here

    private void extendCleanupAfterRender(EnhancementOperation op,
            String parameterName, String propertyName, Class propertyType,
            String fieldName, String defaultFieldName, String cachedFieldName)
    {
        BodyBuilder cleanupBody = new BodyBuilder();

        // Cached is only set when the field is updated in the accessor or
        // mutator.
        // After rendering, we want to clear the cached value and cached flag
        // unless the binding is invariant, in which case it can stick around
        // for some future render.

        String bindingName = propertyName + "Binding";

        addBindingReference(cleanupBody, bindingName, parameterName);

        cleanupBody.addln("if ({0} && ! {1}.isInvariant())", cachedFieldName,
                bindingName);
        cleanupBody.begin();
        cleanupBody.addln("{0} = false;", cachedFieldName);
        cleanupBody.addln("{0} = {1};", fieldName, defaultFieldName);
        cleanupBody.end();

        op.extendMethodImplementation(IComponent.class,
                EnhanceUtils.CLEANUP_AFTER_RENDER_SIGNATURE, cleanupBody
                        .toString());
    }
View Full Code Here

    private void buildMutator(EnhancementOperation op, String parameterName,
            String propertyName, Class propertyType, String fieldName,
            String defaultFieldName, String cachedFieldName, Location location)
    {
        BodyBuilder builder = new BodyBuilder();
        builder.begin();

        // The mutator method may be invoked from finishLoad(), in which
        // case it changes the default value for the parameter property, if the
        // parameter
        // is not bound.

        builder.addln("if (! isInActiveState())");
        builder.begin();
        builder.addln("{0} = $1;", defaultFieldName);
        builder.addln("return;");
        builder.end();

        // In the normal state, we update the binding firstm, and it's an error
        // if the parameter is not bound.

        addBindingReference(builder, "binding", parameterName);

        builder.addln("if (binding == null)");
        builder
                .addln(
                        "  throw new {0}(\"Parameter ''{1}'' is not bound and can not be updated.\");",
                        ApplicationRuntimeException.class.getName(),
                        parameterName);

        // Always updated the binding first (which may fail with an exception).

        builder.addln("binding.setObject(($w) $1);");

        // While rendering, we store the updated value for fast
        // access again (while the component is still rendering).
        // The property value will be reset to default by cleanupAfterRender().

        builder.addln("if (isRendering())");
        builder.begin();
        builder.addln("{0} = $1;", fieldName);
        builder.addln("{0} = true;", cachedFieldName);
        builder.end();

        builder.end();

        String mutatorMethodName = EnhanceUtils
                .createMutatorMethodName(propertyName);

        op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class,
                mutatorMethodName, new Class[] { propertyType }, null), builder
                .toString(), location);
    }
View Full Code Here

    void buildAccessor(EnhancementOperation op, String parameterName,
            String propertyName, Class propertyType, String fieldName,
            String defaultFieldName, String cachedFieldName, boolean cache,
            Location location)
    {
        BodyBuilder builder = new BodyBuilder();
        builder.begin();

        builder.addln("if ({0}) return {1};", cachedFieldName, fieldName);

        addBindingReference(builder, "binding", parameterName);

        builder.addln("if (binding == null) return {0};", defaultFieldName);

        String javaTypeName = ClassFabUtils.getJavaClassName(propertyType);

        builder.addln("{0} result = {1};", javaTypeName, EnhanceUtils
                .createUnwrapExpression(op, "binding", propertyType));

        // Values read via the binding are cached during the render of
        // the component (if the parameter defines cache to be true, which
        // is the default), or any time the binding is invariant
        // (such as most bindings besides ExpressionBinding.

        String expression = cache ? "isRendering() || binding.isInvariant()"
                : "binding.isInvariant()";

        builder.addln("if ({0})", expression);
        builder.begin();
        builder.addln("{0} = result;", fieldName);
        builder.addln("{0} = true;", cachedFieldName);
        builder.end();

        builder.addln("return result;");

        builder.end();

        String accessorMethodName = op.getAccessorMethodName(propertyName);

        op.addMethod(Modifier.PUBLIC, new MethodSignature(propertyType,
                accessorMethodName, null, null), builder.toString(), location);
    }
View Full Code Here

        control.setReturnValue("_source");

        op.getAccessorMethodName("fooBar");
        control.setReturnValue("getFooBar");

        BodyBuilder builder = new BodyBuilder();
        builder.begin();
        builder.addln("java.lang.String meta = _source.getComponentProperty(this, \"foo.bar\");");
        builder.addln("return java.lang.Integer.parseInt(meta);");
        builder.end();

        op.addMethod(Modifier.PUBLIC, sig, builder.toString());

        replayControls();

        InjectMetaWorker worker = new InjectMetaWorker();
View Full Code Here

        control.setReturnValue("_source");

        op.getAccessorMethodName("fooBar");
        control.setReturnValue("getFooBar");

        BodyBuilder builder = new BodyBuilder();
        builder.begin();
        builder.addln("java.lang.String meta = _source.getComponentProperty(this, \"foo.bar\");");
        builder.addln("return meta.charAt(0);");
        builder.end();

        op.addMethod(Modifier.PUBLIC, sig, builder.toString());

        replayControls();

        InjectMetaWorker worker = new InjectMetaWorker();
View Full Code Here

        control.setReturnValue("vc");

        op.getClassReference(Object.class);
        control.setReturnValue("_$Object");

        BodyBuilder builder = new BodyBuilder();
        builder.begin();
        builder.addln("java.lang.String meta = _source.getComponentProperty(this, \"foo.bar\");");
        builder.addln("return (java.lang.Object) vc.coerceValue(meta, _$Object);");
        builder.end();

        op.addMethod(Modifier.PUBLIC, sig, builder.toString());

        replayControls();

        InjectMetaWorker worker = new InjectMetaWorker();
View Full Code Here

    public void testParameterCacheDisabled()
    {
        MockControl opc = newControl(EnhancementOperation.class);
        EnhancementOperation op = (EnhancementOperation) opc.getMock();

        BodyBuilder builder = new BodyBuilder();
        builder.begin();
        builder.addln("if (_$fred$Cached) return _$fred;");
        builder.addln("org.apache.tapestry.IBinding binding = getBinding(\"barney\");");
        builder.addln("if (binding == null) return _$fred$Default;");
        builder.add("boolean result = ");
        builder.addln(EnhanceUtils.class.getName() + ".toBoolean(binding);");
        builder.addln("if (binding.isInvariant())");
        builder.begin();
        builder.addln("_$fred = result;");
        builder.addln("_$fred$Cached = true;");
        builder.end();
        builder.addln("return result;");
        builder.end();

        op.getAccessorMethodName("fred");
        opc.setReturnValue("isFred");

        op.addMethod(
                Modifier.PUBLIC,
                new MethodSignature(boolean.class, "isFred", null, null),
                builder.toString());

        replayControls();

        new ParameterPropertyWorker().buildAccessor(
                op,
View Full Code Here

        opc.setReturnValue("_$applicationStateManager");

        op.getAccessorMethodName("fred");
        opc.setReturnValue("getFred");

        BodyBuilder builder = new BodyBuilder();

        // Accessor

        builder.begin();
        builder.addln("if (_$fred == null)");
        builder.addln("  _$fred = (java.util.Map) _$applicationStateManager.get(\"barney\");");
        builder.addln("return _$fred;");
        builder.end();

        MethodSignature sig = new MethodSignature(Map.class, "getFred", null, null);

        op.addMethod(Modifier.PUBLIC, sig, builder.toString());

        builder.clear();
        builder.begin();
        builder.addln("_$applicationStateManager.store(\"barney\", $1);");
        builder.addln("_$fred = $1;");
        builder.end();

        sig = new MethodSignature(void.class, "setFred", new Class[]
        { Map.class }, null);

        op.addMethod(Modifier.PUBLIC, sig, builder.toString());
        op.extendMethodImplementation(
                PageDetachListener.class,
                EnhanceUtils.PAGE_DETACHED_SIGNATURE,
                "_$fred = null;");
View Full Code Here

TOP

Related Classes of org.apache.hivemind.service.BodyBuilder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.