2015-05-26 1 views
0

Я определил этот запрос,Acceleo Коллекция Коллекции

[query public genCascadePath(aCSharpResourceModel : CSharpResourceModel) : Sequence(Sequence(CSharpResourceModel)) = 
    aCSharpResourceModel.hasRelatedCSharpRMManager->collect(rmm | rmm.hasRelatedCSharpRModel->asSequence()->prepend(aCSharpResourceModel)) 
/] 

То, что я на самом деле сделать это:

  1. получить последовательность из "aCSharpModel"

  2. для каждого элемента в этом последовательность, я определяю ее как последовательность и добавляю другой элемент (rmm.hasRelatedCSharpRModel внутри сборника не имеет значения, это всего лишь соотношение 1 к 1)

Так что мне нужно что-то вроде этого:

{element} -> {{element , element1},{element, element2}} 

Но когда я пытаюсь получить доступ к каждой из внутренних последовательностей в результате из шаблона, экс:

[for (path :Sequence(CSharpResourceModel) | aCSharpResourceModelManager.hasRelatedCSharpRModel.genCascadePath()) separator(' -> \n')] 
[/for] 

я получаю ошибка:

org.eclipse.acceleo.engine.AcceleoEvaluationException: Неверный тип для итерации по строке 18 в модуле TODODbResourceRepositoryCSharpFile для блока для (genCascadePath (aCSharpResourceModelManager.hasRelatedCSharpRModel)) separator ('->'). org.eclipse.emf.ecore.impl.DynamicEObjectImpl не был экземпляром последовательности (CSharpResourceModel).

Если я пытаюсь сделать то же самое для цикла, но с итератором как тип CSharpResourceModel вместо Sequence(CSharpResourceModel), это не приводит к ошибке, но он рассматривает результат моего запроса в качестве одной последовательности, сплющенных один ,

Дело в том, что мне нужно иметь поведение, которое я описал в начале.

Как я могу это достичь?

спасибо.

ответ

0

В OCL «собирать» сгладит результат. Операция «collectNested» должна использоваться, если вы не хотите сгладить результат. См. Acceleo documentation для получения дополнительной информации.

+0

О, боже, спасибо. Они должны четко указать, что сбор сглаживает результат в документации, хотя ... Тем не менее, вы решили мою проблему –

Смежные вопросы