private final ListenerContext listeners = new ListenerContext();
public NodeFactory( final MasterDetailsContentNodeFactoryDef definition,
final Map<String,String> params )
{
final ModelPath path = new ModelPath( substituteParams( definition.getProperty().content(), params ) );
Element element = getLocalModelElement();
Property p = null;
for( int i = 0, n = path.length(); i < n; i++ )
{
if( p != null )
{
throw new RuntimeException( path.toString() );
}
final ModelPath.Segment segment = path.segment( i );
if( segment instanceof ModelPath.ModelRootSegment )
{
element = element.root();
}
else if( segment instanceof ModelPath.ParentElementSegment )
{
element = element.parent().element();
}
else if( segment instanceof ModelPath.PropertySegment )
{
final Property property = element.property( ( (ModelPath.PropertySegment) segment ).getPropertyName() );
if( property != null && property.definition() instanceof ImpliedElementProperty )
{
element = ( (ElementHandle<?>) property ).content();
}
else if( property instanceof ElementList || property instanceof ElementHandle )
{
p = property;
}
else
{
throw new RuntimeException( path.toString() );
}
}
else
{
throw new RuntimeException( path.toString() );
}
}
if( p == null )
{
throw new RuntimeException( path.toString() );
}
this.property = p;
this.propertyListener = new Listener()