[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [mmt-dev] AST Creation of QVT-O
|
Sorry for creating an entry here, I started a new thread at
Nonetheless, I attached the Eclipse project including a launch configuration as you have requested.
Thanks & regards Sebastian
|
Attachment:
QVTo2AST-Test.zip
Description: Zip archive
Am 28.07.2012 um 12:00 schrieb Ed Willink:
Hi
Please use the QVTo newsgroup for user problems.
I'm sorry. I don't have time to figure out how your Java fits in to
the rest of your code. If you want me to look at it, provide a
zipped project, including a launch configuration that can just be
run directly in debug to show the problem.
Regards
Ed Willink
On 28/07/2012 09:54, Sebastian Lehrig
wrote:
Hello,
similar to the approach discussed here ( http://dev.eclipse.org/mhonarc/lists/m2m-dev/msg00265.html ) I want to create an AST of my QVT-O scripts and to store it as an XMI file. I am already able to create the XMI file, however, when trying to open certain elements of the file, I get exceptions of the form "java.net.UnknownHostException: m2m.upb.de".
Have you any idea why this happens? (see the code and the attached models below)
Thank you and best regards
Sebastian
1) This is the code for parsing the QVT-O scripts:
-----------------------------------------------------------------
URI transformationURI = URI.createFileURI(myQVTOScriptURI.toString());
// load metamodels from QVT Operational's metamodel mapping registry (project specific)
EPackage.Registry registry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE);
// TODO Remove hard-coded project reference "de.upb.m2m.quality.casestudies" to something generic ;)
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("de.upb.m2m.quality.casestudies");
try {
MappingContainer uriMap = MetamodelURIMappingHelper.loadMappings(project);
for(URIMapping mapping : uriMap.getMapping())
{
ResourceSet rs = new ResourceSetImpl();
EPackage modelPackage = (EPackage) rs.getResource(URI.createURI(mapping.getTargetURI()), true).getContents().get(0);
registry.put(modelPackage.getNsURI(), modelPackage);
}
} catch (IOException e) {
System.err.println("Unable to load models from QVT Operational's metamodel mapping registry!");
}
// Load qvto transformation from file.
// That transformation can import other transformation files.
InternalTransformationExecutor executor = new InternalTransformationExecutor(transformationURI, registry);
Diagnostic diag = executor.loadTransformation();
if (diag.getSeverity() == Diagnostic.ERROR || diag.getSeverity() == Diagnostic.CANCEL) {
System.err.println(diag);
return;
}
// Obtain transformation object.
// Note that we receive abstract type 'Module' since actual object type
// is an instance of 'OperationalTransformation' or 'Library'
CompiledUnit unit = executor.getUnit();
org.eclipse.m2m.internal.qvt.oml.expressions.Module module = unit.getModules().get(0);
2) This is the code for saving to XMI:
-------------------------------------------------
// Save compiled transformation
try {
ExeXMISerializer.saveUnitXMI(new CompiledUnit[] {unit}, registry);
// don't forget about imported transformations/libraries
for (CompiledUnit importUnit : unit.getCompiledImports()) {
ExeXMISerializer.saveUnitXMI(new CompiledUnit[] {importUnit}, registry);
}
} catch (IOException e) {
System.err.println("Parser error: could not save with ExeXMISerializer!");
}
// move compiled "qvtox" file to target location
URI xmiQvtoURI = ExeXMISerializer.toXMIUnitURI(transformationURI);
File source = new File(xmiQvtoURI.toFileString());
File target = new File(xmiURI.toFileString());
if(target.exists()) target.delete();
try {
FileUtils.moveFile(source, target);
System.out.println("Saved "+target.toString());
} catch (IOException e) {
System.err.println("Unable to move "+source.toString()+" to "+target.toString()+":\n"+e);
}
3) This is the code for dynamically loading the XMI file:
--------------------------------------------------------------------------
// Load serialized transformation
CompiledUnit loadedUnit = null;
if (URIConverter.INSTANCE.exists(xmiQvtoURI, null)) {
// check if the bin XMI is up-to-date with the QVT source file
Long srcTStamp = (Long)URIConverter.INSTANCE.getAttributes(transformationURI, null).get(URIConverter.ATTRIBUTE_TIME_STAMP);
Long binTStamp = (Long)URIConverter.INSTANCE.getAttributes(xmiQvtoURI, null).get(URIConverter.ATTRIBUTE_TIME_STAMP);
if (binTStamp == null || (srcTStamp != null && binTStamp.equals(srcTStamp))) {
// all imports will loaded automatically
loadedUnit = new CompiledUnit(xmiQvtoURI, CompiledUnit.createResourceSet());
}
}
if(loadedUnit == null)
{
System.err.println("Parser error: loadedUnit is null!");
}
4) Files attached:
------------------------
- QVT-O Script "uml2rdbms.qvto"
- QVT-O Script XMI Output "uml2rdbms.qvto.xmi"
- source MetaModel "simpleUML.ecore"
- target MetaModel "simpleRDBMS.ecore"
- example source Model "simpleUML.xmi"
- example target Model "simpleRDBMS.xmi"
_______________________________________________
mmt-dev mailing list
mmt-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/mmt-dev
-----
No virus found in this message.
Checked by AVG - www.avg.com
Version: 2012.0.2178 / Virus Database: 2437/5159 - Release Date: 07/27/12
_______________________________________________ mmt-dev mailing list mmt-dev@xxxxxxxxxxx http://dev.eclipse.org/mailman/listinfo/mmt-dev
|