return f.evaluate( this );
}
else if( element == this || element instanceof Element )
{
final Element el = ( element == this ? element() : (Element) element );
final Property property = el.property( name );
if( property != null )
{
final Function f = new ReadPropertyFunction( property, name, PropertyContentEvent.class )
{
@Override
protected Object evaluate()
{
return this.context;
}
};
f.init();
return f.evaluate( this );
}
}
else if( element instanceof ElementHandle )
{
final ElementHandle<?> handle = (ElementHandle<?>) element;
final ElementProperty elementPropertyDef = handle.definition();
boolean ok = false;
if( elementPropertyDef instanceof ImpliedElementProperty )
{
ok = ( elementPropertyDef.getType().property( name ) != null );
}
else
{
for( final ElementType possibleChildType : handle.service( PossibleTypesService.class ).types() )
{
ok = ( possibleChildType.property( name ) != null );
if( ok )
{
break;
}
}
}
if( ok )
{
final Function f = new ReadPropertyFunction( handle, name, PropertyContentEvent.class )
{
@Override
protected Object evaluate()
{
final Element child = ( (ElementHandle<?>) this.context ).content();
if( child != null )
{
return child.property( name );
}
return null;
}
};