| [news.eclipse.modeling.gmt] Re: [Epsilon]cloning a model element in EOL |
Hi Kimon,
Say you have
class A {
attr String a1;
ref A[*] referenced;
val A[*] contained[*];
}To create a copy you should define an operation like this:
operation A createCopy() {
var n : new A;
n.a1 := self.a1;
n.referenced := self.referenced;
for (contained in self.contained) {
n.contained.add(contained.createCopy());
}
return n;
}Cheers, Dimitris
So, let's suppose there is model element A of type TypeOfA , and I wish to create a copy.
Isn't it possible to create a copy in a more 'manual' manner, with the following the steps below:
1. create a new element e.g. B := new TypeOfA;
2. copy A's attributes and feature values one by one (looping through the attributes and features of A, B(.
3. move B in the container of choice.
However, I am not sure as to how I should reference the atttributes and features of A (and their values).
I realise the solution (if feasible) is a bit 'brute force' but it's a relatively small model I 've got, so I don't think performance would be an issue.
Thanks, Kimon
O/H Dimitrios Kolovos έγραψε:Hi Kimon,
Thanks for submitting https://bugs.eclipse.org/bugs/show_bug.cgi?id=246352
I'll look into it shortly.
Cheers, Dimitris
Dimitrios Kolovos wrote:Hi Kimon,
There is currently no built-in operation for copying model elements in EOL; however this seems to be a useful addition. Could you please open a feature request in the bugzilla?
As a temporary workaround you can use the (static) EcoreUtil.copy(EObject eObject) method which does exactly that. You'll need to create a new Epsilon tool and add a copy(EObject) operation that delegates to the respective operation of the EcoreUtil class.
Cheers, Dimitris
Kimon Polychroniadis wrote:Hi,
I am trying to copy an element of my model in another container in the model. For example I got element A in container C1 and I want to make a copy of A (e.g. B) in another container (e.g. C2). So the goal is to have A in C1 and B in C2, wiht A and B being identical.
However, I noticed that the ':= ' operator moves the object rather
copying it. I also thought of using the clone() command, manipulating the element as a Collection, no result. Is there a more rational way of doing this?
Thank you in advance, Kimon