op.addField("_$fred$Cached", boolean.class);
op.getClassReference(String.class);
opc.setReturnValue("_class$String");
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("java.lang.String result = ");
builder.addln("(java.lang.String) binding.getObject(_class$String);");
builder.addln("if (isRendering() || 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("getFred");
op.addMethod(
Modifier.PUBLIC,
new MethodSignature(String.class, "getFred", null, null),
builder.toString());
builder.clear();
builder.begin();
builder.addln("if (! isInActiveState())");
builder.begin();
builder.addln("_$fred$Default = $1;");
builder.addln("return;");
builder.end();
builder.addln("org.apache.tapestry.IBinding binding = getBinding(\"barney\");");
builder.addln("if (binding == null)");
builder
.addln(" throw new org.apache.hivemind.ApplicationRuntimeException(\"Parameter 'barney' is not bound and can not be updated.\");");
builder.addln("binding.setObject(($w) $1);");
builder.addln("if (isRendering())");
builder.begin();
builder.addln("_$fred = $1;");
builder.addln("_$fred$Cached = true;");
builder.end();
builder.end();
op.addMethod(Modifier.PUBLIC, new MethodSignature(void.class, "setFred", new Class[]
{ String.class }, null), builder.toString());
BodyBuilder expectedCleanup = new BodyBuilder();
expectedCleanup.addln("org.apache.tapestry.IBinding fredBinding = getBinding(\"barney\");");
expectedCleanup.addln("if (_$fred$Cached && ! fredBinding.isInvariant())");
expectedCleanup.begin();
expectedCleanup.addln("_$fred$Cached = false;");
expectedCleanup.addln("_$fred = _$fred$Default;");
expectedCleanup.end();
op.extendMethodImplementation(
IComponent.class,
EnhanceUtils.CLEANUP_AFTER_RENDER_SIGNATURE,
expectedCleanup.toString());
replayControls();
ParameterPropertyWorker w = new ParameterPropertyWorker();