[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [m2m-dev] FW: Quality Assessment of QVTO Model Transformations
|
Hi Phu,
The problem in your snippet is that you use wrong API call
(EPackageImpl.createResource()). It does something different then you
suppose :)
I've attached slightly modifed Java code to show how to
initialize EPackage.Registry. Also .qvto scripts now reference
classes from BOOKS.ecore and PUB.ecore for testing purpose.
Regards,
Sergey.
Hi
Sergey,
Yes, it is very easy to map the metamodels to
the URIs via QVT Settings in Eclipse. However I am still not sure how to do it
programmatically. I used EPackage.Registry as
follows:
static {
class inputMMPackageImpl extends
EPackageImpl {
@Override
protected
Resource createResource(String uri) {
return
super.createResource(uri);
}
}
String inputNS_URI =
"http:///BOOKS.ecore"; //$NON-NLS-1$
inputMMPackageImpl qvtoPackage = new
inputMMPackageImpl();
qvtoPackage.setName("BOOKS");
//$NON-NLS-1$
qvtoPackage.setNsPrefix("BOOKS");
//$NON-NLS-1$
qvtoPackage.setNsURI(inputNS_URI);
//$NON-NLS-1$
qvtoPackage.createResource("file:///C:/temp/BOOKS.ecore");
EPackage.Registry.INSTANCE.put(qvtoPackage.getNsURI(),
qvtoPackage);
}
static {
class outputMMPackageImpl extends
EPackageImpl {
@Override
protected
Resource createResource(String uri) {
return
super.createResource(uri);
}
}
String outputNS_URI =
"http:///PUB.ecore"; //$NON-NLS-1$
outputMMPackageImpl qvtoPackage = new
outputMMPackageImpl();
qvtoPackage.setName("PUB");
//$NON-NLS-1$
qvtoPackage.setNsPrefix("PUB");
//$NON-NLS-1$
qvtoPackage.setNsURI(outputNS_URI);
//$NON-NLS-1$
qvtoPackage.createResource("file:///C:/temp/PUB.ecore");
EPackage.Registry.INSTANCE.put(qvtoPackage.getNsURI(),
qvtoPackage);
}
InternalTransformationExecutor executor = new
InternalTransformationExecutor(transformationURI,
EPackage.Registry.INSTANCE);
Diagnostic diag =
executor.loadTransformation();
if (diag.getSeverity() ==
Diagnostic.ERROR || diag.getSeverity() == Diagnostic.CANCEL) {
System.err.println(diag);
return;
}
But there were still errors
while compiling the qvto file:
Diagnostic ERROR source=org.eclipse.m2m.qvt.oml.execution
code=130 Compilation errors found in unit
'file:///C:/temp/SimpleBook2Publication.qvto' data="" [Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unknown type (Book)
(at:12) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unknown type
(Publication) (at:12) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unrecognized
variable: (Book) (at:9) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Condition must be a
TypeExp or Boolean! (at:9) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Cannot find
operation (book2pub()) neither for the type (Set(Element)) nor for its element
type (Element) (at:9) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Mapping operation
expected (at:9) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unrecognized
variable: (title) (at:13) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unrecognized
variable: (title) (at:13) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unrecognized
variable: (chapters) (at:14) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unrecognized
variable: (nbPages) (at:14) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unrecognized
variable: (chapters) (at:15) data="" Diagnostic ERROR
source=file:///C:/temp/SimpleBook2Publication.qvto code=0 Unrecognized
variable: (authors) (at:15) data="">
I do not understand why type Book, Publication... still can not
be recognized.
Is there any better way to map
the metamodels programmatically?
Best regards,
Phu
On Tue, Sep 21, 2010 at 8:53 PM, Sergey Boyko
<Sergey.Boyko@xxxxxxxxxxx>
wrote:
Hi
Phu,
Comments
are in-lined below.
Regards,
Sergey
Sent: Tuesday, September 21, 2010 02:54
To: M2M dev list
Subject: Re: [m2m-dev]
FW: Quality Assessment of QVTO Model
Transformations
Hi Sergey,
Thank you very much for
your helpful example. So it is also quite convenient to save/load QVTo AST
with full composition. I have been able to obtain the
QVTo ASTs of tt1.qvto and tt4.qvto with full
composition.
@ Ed Willink: I found out the reason why the QVTo
AST I serialized before (qvtoAST.xmi) was not
correct. It caused by the error - Failed to resolve metamodel
'file:///C:/temp/BOOK.ecore'.
I tried several ways to
config the metamodel, i.e.:
modeltype BOOKS uses
'file:///C:/temp/BOOKS.ecore';
But it does not works. Could
someone tell me what is wrong?
The reason is that we
allowed only .ecore model URI in metamodel definition.
Usually it's "Ns URI" property of the
model root package or package.uri element of the
'org.eclipse.emf.ecore.generated_package' extension
point.
In Eclipse
workspace you can map arbitrary .ecore to some URI via "Project
Properties/QVT Settings/Metamodel
Mappings".
Programmatically such arbitrary model can be specified
using optional second parameter (of EPackage.Registry type) in
InternalTransformationExecutor
constructor.
Anyway, it is possible to serialize the QVTo
AST. So, it is possible to extract metrics from QVTo model transformations
to enable their quality measurement. We have got good results for ATL and
Xtend. Hope that we can make it for QVTo soon. Thanks again for your kind
helps.
Best regards,
Phu
On Mon, Sep 20, 2010 at 9:37 PM, Sergey Boyko
<Sergey.Boyko@xxxxxxxxxxx> wrote:
Hi
Phu,
I've
posted sample _javascript_ that shows how to save/load compiled qvto
transformation (QVTo AST) with full information obtained from .qvto file
(even token positions as well).
Regards,
Sergey
Sent: Monday, September 20, 2010
14:08
To: M2M dev list
Subject: Re: [m2m-dev] FW:
Quality Assessment of QVTO Model Transformations
Hello Ed Willink,
Thank you. Now I know that it is not
easy to obtain a QVTo AST with full
composition. You are right about my problem. The serialized AST I got
seems to be the wrong one. Please find the QVTo
file and the corresponding xmi file in the attachments
Is there any suggestion about
obtaining a QVTo AST with full
composition?
Best
regards,
Phu
On Mon, Sep 20, 2010 at 10:56 AM, Ed Willink
<ed@xxxxxxxxxxxxx> wrote:
Hi Phu
If you have a
true QVTo AST then it should compose/share all the information you
require.
When you invoke Resource.save to serialize, what is the
URI in the XMI?
QVT 1.0 enabled at least three different
interpreations of some AST definitions and in some cases all three
were wrong with the result that not all child objects were composed
and so those elements were omitted from a serialized AST. Perhaps
your problem is that you do not have a QVTo AST with full
composition.
Please post the XMI file resulting from
Resource.save.
Regards
Ed
Willink
On 20/09/2010 09:32, Phu H. Nguyen wrote:
Hello,
First I would like to thank for
suggestions from Ed
Willink and Sergey.
I
tried several ways and I have found out that it is possible to
obtain AST of corresponding QVTo file by using
the InternalTransformationExecutor:
InternalTransformationExecutor
executor = new
InternalTransformationExecutor(transformationURI);
CompiledUnit
myCompiled = executor.getUnit();
OperationalTransformation
trans = executor.getTransformation();
Resource
res = trans.eResource();
EObject
qvtoModule = res.getContents().get(0);
Via the OperationalTransformation
object, generated AST can
be accessed and it certainly conforms to the metamodels
QVTOperational.ecore
and ImperativeOCL.ecore
For now it is possible to
extract some information from the AST, i.e. names of modeltype,
transformation, name of mapping operations. However I have not
found out the way to access other parts, i.e. bodies
of mapping operation.
Are there any suggestions?
Last but not least, it would
be much better to access the AST if there is a way to serialize
it. The ATL tool kit allows obtaining the file of ATL model
(generated AST) quite easily. I was wondering if QVTO tool kit has
a similar function?
If you have any suggestions,
please let me know. Thank you very much!
Best regards,
Phu
On Mon, Sep 13, 2010 at 11:25 PM, Sergey
Boyko
<Sergey.Boyko@xxxxxxxxxxx> wrote:
From: Sergey Boyko
Sent: Tuesday, September 14, 2010 01:24
To:
'nguyenhongphu@xxxxxxxxx'
Subject:
RE: [m2m-dev] Quality Assessment of QVTO Model
Transformations
Hi
Phu,
QVTo engine is able to be launched outside
Eclipse.
Inside Eclipse you can obtain AST
of corresponding .qvto by means of EMF Resource, i.e. some
like follows:
URI uri =
URI.createURI("file:/.../my.qvto");
Resource
res = new ResourceSetImpl().createResource(uri);
EObject qvtoModule =
res.getContents().get(0);
Generated AST is conformed to
org.eclipse.m2m.qvt.oml/model/QVTOperational.ecore (for
QVTOperational package) and
org.eclipse.m2m.qvt.oml.ecore.imperativeocl/ImperativeOCL.ecore
(for ImperativeOCL package). In fact that models have some (very
minor) deviations from official OMG QVTO
metamodels.
Regards,
Sergey
_______________________________________________
m2m-dev
mailing list
m2m-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2m-dev
Click here to report this email as spam.
This message has been scanned for viruses by MailController.
_______________________________________________
m2m-dev
mailing list
m2m-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2m-dev
_______________________________________________
m2m-dev
mailing list
m2m-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2m-dev
Attachment:
tt4.qvto
Description: tt4.qvto
Attachment:
BOOKS.ecore
Description: BOOKS.ecore
Attachment:
PUB.ecore
Description: PUB.ecore
Attachment:
QvtoTransformationTest.java
Description: QvtoTransformationTest.java
Attachment:
tt1.qvto
Description: tt1.qvto