Skip to content

Instantly share code, notes, and snippets.

@criedel
Created July 27, 2012 12:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save criedel/3187796 to your computer and use it in GitHub Desktop.
Save criedel/3187796 to your computer and use it in GitHub Desktop.
JSON PropertyBinding
import org.apache.tapestry5.internal.bindings.AbstractBinding;
import org.apache.tapestry5.internal.bindings.PropBinding;
import org.apache.tapestry5.json.JSONObject;
public class JSONBinding extends AbstractBinding {
private final String prop;
private final PropBinding propBinding;
public JSONBinding(final String prop,
final PropBinding propBinding) {
this.prop = prop;
this.propBinding = propBinding;
}
@Override
public Object get() {
return ((JSONObject) propBinding.get()).get(prop);
}
}
import org.apache.tapestry5.Binding;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.PropertyConduit;
import org.apache.tapestry5.internal.bindings.PropBinding;
import org.apache.tapestry5.internal.services.StringInterner;
import org.apache.tapestry5.ioc.Location;
import org.apache.tapestry5.services.BindingFactory;
import org.apache.tapestry5.services.PropertyConduitSource;
public class JSONBindingFactory implements BindingFactory {
private final PropertyConduitSource source;
private final StringInterner interner;
public JSONBindingFactory(PropertyConduitSource propertyConduitSource, StringInterner interner)
{
source = propertyConduitSource;
this.interner = interner;
}
@Override
public Binding newBinding(final String description,
final ComponentResources container,
final ComponentResources component,
final String expression,
final Location location) {
Object target = container.getComponent();
Class targetClass = target.getClass();
final int indexOfFirstDot = expression.indexOf(".");
final String ex = expression.substring(0, indexOfFirstDot);
final String prop = expression.substring(indexOfFirstDot + 1);
PropertyConduit conduit = source.create(targetClass, ex);
String toString = interner.format("JSONBinding[%s %s(%s)]", description, container
.getCompleteId(), expression);
return new JSONBinding(prop, new PropBinding(location, target, conduit, toString));
}
}
import org.apache.tapestry5.ioc.MappedConfiguration;
import org.apache.tapestry5.services.BindingFactory;
public class JSONBindingModule {
public static void contributeBindingSource(MappedConfiguration<String, BindingFactory> configuration) {
configuration.addInstance("json", JSONBindingFactory.class);
}
}
${json:js.name1}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment