2012-07-07 5 views
0

Acceleo Model to Text 변환에서 클래스 (UML 모델의 클래스 네임 스페이스)를 포함하는 패키지와 일관된 UML 클래스 파일을 만들고 싶습니다.ACCELEO : 모델 구조에 따라 경로에 파일 생성

: 내가 직면하고 문제는 내가 [파일] 같은 라인에서 명령은 내가이

[file ((c.allOwningPackages().name.->sep('/')).concat(c.name.concat('.hpp')),false,'UTF-8')] 

같은 것을하려하지만 난 CONCAT에이 오류를 얻고있다 필요로 할 필요가 있다는 것입니다

Cannot find operation (concat(String)) for the type (OclAny) 

올바른 방법은 무엇입니까?

답변

1

파일 블록과 동일한 행에서 필수 사항은 아닙니다. 당신이 뭘 하려는지 달성하기 위해 두 가지 일반적인 방법은

  • 둥지에 파일 렛 블록에 블록 또는
  • 다른 템플릿 또는 쿼리에 논리를 추출 할 수 있습니다. - 컬렉션 대신 " .concat"의 ">을 포함 "는이다의 사용이

    [template public myMainTemplate(c : uml::Class)] 
        [file (getpackage(c), false, 'UTF-8')] 
         ... 
        [/file] 
    [/template] 
    
    [template private getPackage(c : uml::Class) post(trim())] 
        [c.ancestors()->reverse()->sep('/')->including(c.name.concat('.hpp'))/] 
    [/template] 
    

    참고 : 예를 들어

, b)는 종류의 무언가를 줄 것이다 오류 메시지가 표시된 이유. 물론 이것은 모든 것을 하나의 단일 표현으로 만 나타 냈습니다. 다음과 같이 읽을 수 있습니다.

[template private getPackage(c : uml::Class) post(trim())] 
    [c.ancestors()->reverse()->sep('/')/]/[c.name/].hpp 
[/template] 
+0

감사합니다. 그러나 c.ancestors() -> reverse() 작업은 의미있는 결과를 제공하지 않습니다. 나는 c.allOwningPackages() .name-> sep ('/')를 사용했으며 여러분이 제안한대로 작동합니다. 열쇠는 내가 다른 템플릿에 필요한 것을 넣고 있었는데, 왜 내가 파일 블록에서 템플릿을 호출 할 수 없다고 생각했는지 모르겠다 :) 다시 한번 감사드립니다. – Sindico

관련 문제