use of org.apache.tapestry5.annotations.Mixin in project tapestry-5 by apache.
the class EmbeddedComponentAssemblerImpl method addMixin.
private void addMixin(String className, String... order) {
Instantiator mixinInstantiator = instantiatorSource.getInstantiator(className);
String mixinId = InternalUtils.lastTerm(className);
if (mixinIdToInstantiator.containsKey(mixinId))
throw new TapestryException(String.format("Mixins applied to a component must be unique. Mixin '%s' has already been applied.", mixinId), location, null);
mixinIdToInstantiator.put(mixinId, mixinInstantiator);
mixinsIdToOrderConstraints.put(mixinId, order);
}
use of org.apache.tapestry5.annotations.Mixin in project tapestry-5 by apache.
the class EmbeddedComponentAssemblerImpl method prescanMixins.
private String prescanMixins(boolean strictMixinParameters) {
// Mixin id found to support informal parameters
String supportsInformals = null;
for (Map.Entry<String, Instantiator> entry : mixinIdToInstantiator.entrySet()) {
String mixinId = entry.getKey();
ComponentModel mixinModel = entry.getValue().getModel();
updateParameterNameToQualified(mixinId, mixinModel, strictMixinParameters);
if (supportsInformals == null && mixinModel.getSupportsInformalParameters())
supportsInformals = mixinId;
}
// The component comes last and overwrites simple names from the others.
updateParameterNameToQualified(null, componentModel, false);
return supportsInformals;
}
use of org.apache.tapestry5.annotations.Mixin in project tapestry-5 by apache.
the class EmbeddedComponentAssemblerImpl method createParameterBinderFromQualifiedParameterName.
private ParameterBinder createParameterBinderFromQualifiedParameterName(String qualifiedParameterName, String mixinId, String parameterName) {
if (mixinId.equalsIgnoreCase(componentPsuedoMixinId)) {
return createParameterBinderForComponent(qualifiedParameterName, parameterName);
}
if (!mixinIdToInstantiator.containsKey(mixinId)) {
throw new TapestryException(String.format("Mixin id for parameter '%s' not found. Attached mixins: %s.", qualifiedParameterName, InternalUtils.joinSorted(mixinIdToInstantiator.keySet())), location, null);
}
ParameterBinder binder = parameterNameToBinder.get(qualifiedParameterName);
if (binder != null) {
return binder;
}
// Ok, so perhaps this is a qualified name for an informal parameter of the mixin.
Instantiator instantiator = mixinIdToInstantiator.get(mixinId);
assert instantiator != null;
return bindInformalParameter(qualifiedParameterName, mixinId, parameterName, instantiator.getModel());
}
use of org.apache.tapestry5.annotations.Mixin in project tapestry-5 by apache.
the class PageLoaderImpl method connectInheritedParameter.
private void connectInheritedParameter(ComponentPageElement container, ComponentPageElement embedded, String parameterName, String containerParameterName) {
// TODO: This assumes that the two parameters are both on the core component and not on
// a mixin. I think this could be improved with more static analysis.
Binding containerBinding = container.getBinding(containerParameterName);
if (containerBinding == null)
return;
// This helps with debugging, and re-orients any thrown exceptions
// to the location of the inherited binding, rather than the container component's
// binding.
// Binding inherited = new InheritedBinding(description, containerBinding, embedded.getLocation());
embedded.bindParameter(parameterName, containerBinding);
}
use of org.apache.tapestry5.annotations.Mixin in project tapestry-5 by apache.
the class OverridenMixin method afterRender.
void afterRender(MarkupWriter writer) {
final Element element = writer.getDocument().getElementById(clientElement.getClientId());
element.element("span", "id", "overridenMixin").text(" [Overriden mixin]");
}
Aggregations