{
return getExpressions().getExpression(index);
}
if (parent instanceof DataFactory)
{
final DataFactory dataFactory = (DataFactory) parent;
final String[] queryNames = dataFactory.getQueryNames();
return new ReportQueryNode(dataFactory, queryNames[index], true);
}
if (parent instanceof ReportQueryNode)
{
final ReportQueryNode queryNode = (ReportQueryNode) parent;
if (isSelectedDataSource(queryNode))
{
final String[] names = getDataFactoryColumns();
final String name = names[index];
final ContextAwareDataSchemaModel model = context.getReportDataSchemaModel();
final DataAttributes attributes = model.getDataSchema().getAttributes(name);
final Class type = (Class) attributes.getMetaAttribute
(MetaAttributeNames.Core.NAMESPACE, MetaAttributeNames.Core.TYPE, Class.class, model.getDataAttributeContext());
final DataFactory dataFactory = queryNode.getDataFactory();
return new ReportFieldNode(context, dataFactory, name, type);
}
throw new IndexOutOfBoundsException();
}