[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.modeling.gmf] How to make GMF represent recursive object model

Hi,

I am having a problem representing a recursive object in GMF.

I have an example emf model with 3 classes: Model, Filesystem, and Folder. 
The Model is the only root-level object and contains a Filesystem. The 
Filesystem contains Folders. And a Folder contains other Folders as 
subfolders.

I need to set the Model object as the diagram root element. So ideally, I 
would be able to place a Filesystem object on the diagram, place Folder 
objects in the Filesystem, and then recursively place Folder objects in 
other Folders.

I read that in order to reuse a Node Mapping in the gmfmap file, a Top Node 
Reference must be defined. So I tried to define a Folder as a Top Node 
Reference in order to reuse it in a recursive manner. But this does not seem 
to work because the root Model object does not have an aggregation 
relationship to Folder. If I try to make the gmfgen file, I get an error 
saying "Top level node 'Containment Feature' must be available in the 
diagram 'Domain Element' or its super-class."

So I've been stuck for a while on how to get the recursive GMF behavior on 
the Folder object.  I can't reuse the Folder node if I don't define it as a 
Top Node Reference. And I can't define the Folder node as a Top Node 
Reference because the diagram root element Model does not have a direct 
containment on a Folder object. Is this a limitation of GMF or am I doing 
something completely wrong? Can some one please give me a hint as to how to 
proceed?

I've attached the related ecore, genmodel, gmfgraph, gmftool, and gmfmap 
files for reference.

Thanks in advance,

Johann 


begin 666 example.ecore
M/#]X;6P@=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B/SX-"CQE8V]R
M93I%4&%C:V%G92!X;6DZ=F5R<VEO;CTB,BXP(@T*(" @('AM;&YS.GAM:3TB
M:'1T<#HO+W=W=RYO;6<N;W)G+UA-22(@>&UL;G,Z>'-I/2)H='1P.B\O=W=W
M+G<S+F]R9R\R,# Q+UA-3%-C:&5M82UI;G-T86YC92(-"B @("!X;6QN<SIE
M8V]R93TB:'1T<#HO+W=W=RYE8VQI<'-E+F]R9R]E;68O,C P,B]%8V]R92(@
M;F%M93TB97AA;7!L92(-"B @("!N<U5223TB97AA;7!L92(@;G-0<F5F:7@]
M(F5X86UP;&4B/@T*(" \94-L87-S:69I97)S('AS:3IT>7!E/2)E8V]R93I%
M0VQA<W,B(&YA;64](F9I;&5S>7-T96TB/@T*(" @(#QE4W1R=6-T=7)A;$9E
M871U<F5S('AS:3IT>7!E/2)E8V]R93I%4F5F97)E;F-E(B!N86UE/2)F;VQD
M97)S(B!U<'!E<D)O=6YD/2(M,2(-"B @(" @(" @951Y<&4](B,O+V9O;&1E
M<B(@8V]N=&%I;FUE;G0](G1R=64B+SX-"B @/"]E0VQA<W-I9FEE<G,^#0H@
M(#QE0VQA<W-I9FEE<G,@>'-I.G1Y<&4](F5C;W)E.D5#;&%S<R(@;F%M93TB
M9F]L9&5R(CX-"B @(" \95-T<G5C='5R86Q&96%T=7)E<R!X<VDZ='EP93TB
M96-O<F4Z15)E9F5R96YC92(@;F%M93TB<W5B9F]L9&5R<R(@=7!P97)";W5N
M9#TB+3$B#0H@(" @(" @(&54>7!E/2(C+R]F;VQD97(B(&-O;G1A:6YM96YT
M/2)T<G5E(B\^#0H@(#PO94-L87-S:69I97)S/@T*(" \94-L87-S:69I97)S
M('AS:3IT>7!E/2)E8V]R93I%0VQA<W,B(&YA;64](FUO9&5L(CX-"B @(" \
M95-T<G5C='5R86Q&96%T=7)E<R!X<VDZ='EP93TB96-O<F4Z15)E9F5R96YC
M92(@;F%M93TB9FEL97-Y<W1E;2(@951Y<&4](B,O+V9I;&5S>7-T96TB#0H@
M(" @(" @(&-O;G1A:6YM96YT/2)T<G5E(B\^#0H@(#PO94-L87-S:69I97)S
6/@T*/"]E8V]R93I%4&%C:V%G93X-"@``
`
end

begin 666 example.genmodel
M/#]X;6P@=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B/SX-"CQG96YM
M;V1E;#I'96Y-;V1E;"!X;6DZ=F5R<VEO;CTB,BXP(@T*(" @('AM;&YS.GAM
M:3TB:'1T<#HO+W=W=RYO;6<N;W)G+UA-22(@>&UL;G,Z96-O<F4](FAT=' Z
M+R]W=W<N96-L:7!S92YO<F<O96UF+S(P,#(O16-O<F4B#0H@(" @>&UL;G,Z
M9V5N;6]D96P](FAT=' Z+R]W=W<N96-L:7!S92YO<F<O96UF+S(P,#(O1V5N
M36]D96PB(&UO9&5L1&ER96-T;W)Y/2(O<F5C=7)S:6]N17AA;7!L92]S<F,B
M#0H@(" @;6]D96Q0;'5G:6Y)1#TB<F5C=7)S:6]N17AA;7!L92(@;6]D96Q.
M86UE/2)%>&%M<&QE(B!I;7!O<G1E<DE$/2)O<F<N96-L:7!S92YE;68N:6UP
M;W)T97(N96-O<F4B/@T*(" \9F]R96EG;DUO9&5L/F5X86UP;&4N96-O<F4\
M+V9O<F5I9VY-;V1E;#X-"B @/&=E;E!A8VMA9V5S('!R969I>#TB17AA;7!L
M92(@9&ES<&]S86)L95!R;W9I9&5R1F%C=&]R>3TB=')U92(@96-O<F5086-K
M86=E/2)E>&%M<&QE+F5C;W)E(R\B/@T*(" @(#QG96Y#;&%S<V5S(&5C;W)E
M0VQA<W,](F5X86UP;&4N96-O<F4C+R]F:6QE<WES=&5M(CX-"B @(" @(#QG
M96Y&96%T=7)E<R!P<F]P97)T>3TB3F]N92(@8VAI;&1R96X](G1R=64B(&-R
M96%T94-H:6QD/2)T<G5E(B!E8V]R949E871U<F4](F5C;W)E.D52969E<F5N
M8V4@97AA;7!L92YE8V]R92,O+V9I;&5S>7-T96TO9F]L9&5R<R(O/@T*(" @
M(#PO9V5N0VQA<W-E<SX-"B @(" \9V5N0VQA<W-E<R!E8V]R94-L87-S/2)E
M>&%M<&QE+F5C;W)E(R\O9F]L9&5R(CX-"B @(" @(#QG96Y&96%T=7)E<R!P
M<F]P97)T>3TB3F]N92(@8VAI;&1R96X](G1R=64B(&-R96%T94-H:6QD/2)T
M<G5E(B!E8V]R949E871U<F4](F5C;W)E.D52969E<F5N8V4@97AA;7!L92YE
M8V]R92,O+V9O;&1E<B]S=6)F;VQD97)S(B\^#0H@(" @/"]G96Y#;&%S<V5S
M/@T*(" @(#QG96Y#;&%S<V5S(&5C;W)E0VQA<W,](F5X86UP;&4N96-O<F4C
M+R]M;V1E;"(^#0H@(" @(" \9V5N1F5A='5R97,@<')O<&5R='D](DYO;F4B
M(&-H:6QD<F5N/2)T<G5E(B!C<F5A=&5#:&EL9#TB=')U92(@96-O<F5&96%T
M=7)E/2)E8V]R93I%4F5F97)E;F-E(&5X86UP;&4N96-O<F4C+R]M;V1E;"]F
M:6QE<WES=&5M(B\^#0H@(" @/"]G96Y#;&%S<V5S/@T*(" \+V=E;E!A8VMA
<9V5S/@T*/"]G96YM;V1E;#I'96Y-;V1E;#X-"@``
`
end

begin 666 example.gmfgraph
M/#]X;6P@=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B/SX-"CQG;69G
M<F%P:#I#86YV87,@>&UI.G9E<G-I;VX](C(N,"(-"B @("!X;6QN<SIX;6D]
M(FAT=' Z+R]W=W<N;VUG+F]R9R]834DB#0H@(" @>&UL;G,Z>'-I/2)H='1P
M.B\O=W=W+G<S+F]R9R\R,# Q+UA-3%-C:&5M82UI;G-T86YC92(-"B @("!X
M;6QN<SIG;69G<F%P:#TB:'1T<#HO+W=W=RYE8VQI<'-E+F]R9R]G;68O,C P
M-2]'<F%P:&EC86Q$969I;FET:6]N(B!N86UE/2)E>&%M<&QE(CX-"B @/&9I
M9W5R97,-"B @(" @(&YA;64](D1E9F%U;'0B/@T*(" @(#QF:6=U<F5S#0H@
M(" @(" @('AS:3IT>7!E/2)G;69G<F%P:#I296-T86YG;&4B#0H@(" @(" @
M(')E9F5R96YC:6YG16QE;65N=',](F9I;&5S>7-T96TB#0H@(" @(" @(&YA
M;64](F9I;&5S>7-T96U&:6=U<F4B+SX-"B @(" \9FEG=7)E<PT*(" @(" @
M("!X<VDZ='EP93TB9VUF9W)A<&@Z4F5C=&%N9VQE(@T*(" @(" @("!R969E
M<F5N8VEN9T5L96UE;G1S/2)F;VQD97(B#0H@(" @(" @(&YA;64](F9O;&1E
M<D9I9W5R92(O/@T*(" \+V9I9W5R97,^#0H@(#QN;V1E<PT*(" @(" @;F%M
M93TB9FEL97-Y<W1E;2(-"B @(" @(&9I9W5R93TB9FEL97-Y<W1E;49I9W5R
M92(O/@T*(" \;F]D97,-"B @(" @(&YA;64](F9O;&1E<B(-"B @(" @(&9I
K9W5R93TB9F]L9&5R1FEG=7)E(B\^#0H\+V=M9F=R87!H.D-A;G9A<SX-"@``
`
end

begin 666 example.gmftool
M/#]X;6P@=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B/SX-"CQG;69T
M;V]L.E1O;VQ296=I<W1R>2!X;6DZ=F5R<VEO;CTB,BXP(@T*(" @('AM;&YS
M.GAM:3TB:'1T<#HO+W=W=RYO;6<N;W)G+UA-22(-"B @("!X;6QN<SIX<VD]
M(FAT=' Z+R]W=W<N=S,N;W)G+S(P,#$O6$U,4V-H96UA+6EN<W1A;F-E(@T*
M(" @('AM;&YS.F=M9G1O;VP](FAT=' Z+R]W=W<N96-L:7!S92YO<F<O9VUF
M+S(P,#4O5&]O;$1E9FEN:71I;VXB/@T*(" \<&%L971T93X-"B @(" \=&]O
M;',-"B @(" @(" @>'-I.G1Y<&4](F=M9G1O;VPZ5&]O;$=R;W5P(@T*(" @
M(" @("!T:71L93TB97AA;7!L92(^#0H@(" @(" \=&]O;',-"B @(" @(" @
M("!X<VDZ='EP93TB9VUF=&]O;#I#<F5A=&EO;E1O;VPB#0H@(" @(" @(" @
M=&ET;&4](F9I;&5S>7-T96TB#0H@(" @(" @(" @9&5S8W)I<'1I;VX](D-R
M96%T92!N97<@9FEL97-Y<W1E;2(^#0H@(" @(" @(#QS;6%L;$EC;VX-"B @
M(" @(" @(" @('AS:3IT>7!E/2)G;69T;V]L.D1E9F%U;'1);6%G92(O/@T*
M(" @(" @(" \;&%R9V5)8V]N#0H@(" @(" @(" @("!X<VDZ='EP93TB9VUF
M=&]O;#I$969A=6QT26UA9V4B+SX-"B @(" @(#PO=&]O;',^#0H@(" @(" \
M=&]O;',-"B @(" @(" @("!X<VDZ='EP93TB9VUF=&]O;#I#<F5A=&EO;E1O
M;VPB#0H@(" @(" @(" @=&ET;&4](F9O;&1E<B(-"B @(" @(" @("!D97-C
M<FEP=&EO;CTB0W)E871E(&YE=R!F;VQD97(B/@T*(" @(" @(" \<VUA;&Q)
M8V]N#0H@(" @(" @(" @("!X<VDZ='EP93TB9VUF=&]O;#I$969A=6QT26UA
M9V4B+SX-"B @(" @(" @/&QA<F=E26-O;@T*(" @(" @(" @(" @>'-I.G1Y
M<&4](F=M9G1O;VPZ1&5F875L=$EM86=E(B\^#0H@(" @(" \+W1O;VQS/@T*
M(" @(#PO=&]O;',^#0H@(#PO<&%L971T93X-"CPO9VUF=&]O;#I4;V]L4F5G
(:7-T<GD^#0H`
`
end

begin 666 example.gmfmap
M/#]X;6P@=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B/SX-"CQG;69M
M87 Z36%P<&EN9R!X;6DZ=F5R<VEO;CTB,BXP(@T*(" @('AM;&YS.GAM:3TB
M:'1T<#HO+W=W=RYO;6<N;W)G+UA-22(-"B @("!X;6QN<SIX<VD](FAT=' Z
M+R]W=W<N=S,N;W)G+S(P,#$O6$U,4V-H96UA+6EN<W1A;F-E(@T*(" @('AM
M;&YS.F=M9FUA<#TB:'1T<#HO+W=W=RYE8VQI<'-E+F]R9R]G;68O,C P-2]M
M87!P:6YG<R(-"B @("!X;6QN<SIG;69T;V]L/2)H='1P.B\O=W=W+F5C;&EP
M<V4N;W)G+V=M9B\R,# U+U1O;VQ$969I;FET:6]N(CX-"B @/&YO9&5S/@T*
M(" @(#QC;VYT86EN;65N=$9E871U<F4-"B @(" @(" @:')E9CTB97AA;7!L
M92YE8V]R92,O+VUO9&5L+V9I;&5S>7-T96TB+SX-"B @(" \;W=N961#:&EL
M9#X-"B @(" @(#QD;VUA:6Y-971A16QE;65N= T*(" @(" @(" @(&AR968]
M(F5X86UP;&4N96-O<F4C+R]F:6QE<WES=&5M(B\^#0H@(" @(" \=&]O; T*
M(" @(" @(" @('AS:3IT>7!E/2)G;69T;V]L.D-R96%T:6]N5&]O;"(-"B @
M(" @(" @("!H<F5F/2)E>&%M<&QE+F=M9G1O;VPC+R] <&%L971T92] =&]O
M;',N,"] =&]O;',N,"(O/@T*(" @(" @/&1I86=R86U.;V1E#0H@(" @(" @
M(" @:')E9CTB97AA;7!L92YG;69G<F%P:"-F:6QE<WES=&5M(B\^#0H@(" @
M(" \8VAI;&1R96X-"B @(" @(" @("!R969E<F5N8V5D0VAI;&0](B\O0&YO
M9&5S+C$O0&]W;F5D0VAI;&0B/@T*(" @(" @(" \8V]N=&%I;FUE;G1&96%T
M=7)E#0H@(" @(" @(" @("!H<F5F/2)E>&%M<&QE+F5C;W)E(R\O9FEL97-Y
M<W1E;2]F;VQD97)S(B\^#0H@(" @(" @(#QC:&EL9')E;D9E871U<F4-"B @
M(" @(" @(" @(&AR968](F5X86UP;&4N96-O<F4C+R]F:6QE<WES=&5M+V9O
M;&1E<G,B+SX-"B @(" @(#PO8VAI;&1R96X^#0H@(" @/"]O=VYE9$-H:6QD
M/@T*(" \+VYO9&5S/@T*(" \;F]D97,^#0H@(" @/&-O;G1A:6YM96YT1F5A
M='5R90T*(" @(" @("!H<F5F/2)E>&%M<&QE+F5C;W)E(R\O9FEL97-Y<W1E
M;2]F;VQD97)S(B\^#0H@(" @/&]W;F5D0VAI;&0^#0H@(" @(" \9&]M86EN
M365T845L96UE;G0-"B @(" @(" @("!H<F5F/2)E>&%M<&QE+F5C;W)E(R\O
M9F]L9&5R(B\^#0H@(" @(" \=&]O; T*(" @(" @(" @('AS:3IT>7!E/2)G
M;69T;V]L.D-R96%T:6]N5&]O;"(-"B @(" @(" @("!H<F5F/2)E>&%M<&QE
M+F=M9G1O;VPC+R] <&%L971T92] =&]O;',N,"] =&]O;',N,2(O/@T*(" @
M(" @/&1I86=R86U.;V1E#0H@(" @(" @(" @:')E9CTB97AA;7!L92YG;69G
M<F%P:"-F;VQD97(B+SX-"B @(" @(#QC:&EL9')E;@T*(" @(" @(" @(')E
M9F5R96YC961#:&EL9#TB+R] ;F]D97,N,2] ;W=N961#:&EL9"(^#0H@(" @
M(" @(#QC;VYT86EN;65N=$9E871U<F4-"B @(" @(" @(" @(&AR968](F5X
M86UP;&4N96-O<F4C+R]F;VQD97(O<W5B9F]L9&5R<R(O/@T*(" @(" @(" \
M8VAI;&1R96Y&96%T=7)E#0H@(" @(" @(" @("!H<F5F/2)E>&%M<&QE+F5C
M;W)E(R\O9F]L9&5R+W-U8F9O;&1E<G,B+SX-"B @(" @(#PO8VAI;&1R96X^
M#0H@(" @/"]O=VYE9$-H:6QD/@T*(" \+VYO9&5S/@T*(" \9&EA9W)A;3X-
M"B @(" \9&EA9W)A;4-A;G9A<PT*(" @(" @("!H<F5F/2)E>&%M<&QE+F=M
M9F=R87!H(V5X86UP;&4B+SX-"B @(" \9&]M86EN36]D96P-"B @(" @(" @
M:')E9CTB97AA;7!L92YE8V]R92,O(B\^#0H@(" @/&1O;6%I;DUE=&%%;&5M
M96YT#0H@(" @(" @(&AR968](F5X86UP;&4N96-O<F4C+R]M;V1E;"(O/@T*
M(" @(#QP86QE='1E#0H@(" @(" @(&AR968](F5X86UP;&4N9VUF=&]O;",O
M+T!P86QE='1E(B\^#0H@(#PO9&EA9W)A;3X-"CPO9VUF;6%P.DUA<'!I;F<^
"#0H`
`
end