summaryrefslogtreecommitdiffstats
path: root/scripts/xmi2qt.pl
diff options
context:
space:
mode:
authorSandro S. Andrade <sandroandrade@kde.org>2012-09-22 01:03:56 +0000
committerSandro S. Andrade <sandroandrade@kde.org>2012-09-22 03:05:13 +0200
commit19bb2b8e8e990928bfd8e57bb8147cc34ae272d0 (patch)
treed51321353ce65a60ab9ab14a54fb7347010824a4 /scripts/xmi2qt.pl
parenta202c7955689ca09604e72e28840c5b48078e32e (diff)
Add initial version of xquery xmi -> qtxmi transformation
Change-Id: If1eef69cd8649a373ab81329b8fb5313e32ae6a9 Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'scripts/xmi2qt.pl')
-rwxr-xr-xscripts/xmi2qt.pl53
1 files changed, 53 insertions, 0 deletions
diff --git a/scripts/xmi2qt.pl b/scripts/xmi2qt.pl
new file mode 100755
index 00000000..a2ec9951
--- /dev/null
+++ b/scripts/xmi2qt.pl
@@ -0,0 +1,53 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use XML::Simple;
+use Data::Dumper;
+use File::Slurp;
+use Template;
+
+my $xml = new XML::Simple(keyattr => ['name'], ForceArray => ['generalization', 'ownedAttribute', 'ownedOperation', 'ownedParameter']);
+
+my $xmi = $xml->XMLin($ARGV[0]);
+write_file 'dump.log', Dumper($xmi);
+
+my $classesKernel = $xmi->{'uml:Package'}->{'packagedElement'}->{'Classes'}->{'packagedElement'}->{'Kernel'}->{'packagedElement'};
+
+my $tt = Template->new(INTERPOLATE => 1, INCLUDE_PATH => 'templates/');
+
+open STDOUT, '>', "./uml.pro";
+if ($tt->process('template.pro', {
+currentPackage => 'Classes::Kernel',
+classes => $classesKernel
+}) ne 1) { print $tt->error(); }
+
+open STDOUT, '>', "./Classes/Kernel/qtenumeration.h";
+if ($tt->process('qtenumeration.h', {
+currentPackage => 'Classes::Kernel',
+package => $classesKernel
+}) ne 1) { print $tt->error(); }
+
+open STDOUT, '>', "./Classes/Kernel/qtenumeration.cpp";
+if ($tt->process('qtenumeration.cpp', {
+currentPackage => 'Classes::Kernel',
+package => $classesKernel
+}) ne 1) { print $tt->error(); }
+
+foreach my $key (keys $classesKernel) {
+ if ($classesKernel->{$key}->{'xmi:type'} eq 'uml:Class' ) {
+ open STDOUT, '>', "./Classes/Kernel/q".lc($key).".h";
+ if ($tt->process('class.h', {
+ currentPackage => 'Classes::Kernel',
+ className => $key,
+ classData => $classesKernel->{$key},
+ }) ne 1) { print $tt->error(); }
+ open STDOUT, '>', "./Classes/Kernel/q".lc($key).".cpp";
+ if ($tt->process('class.cpp', {
+ currentPackage => 'Classes::Kernel',
+ className => $key,
+ classData => $classesKernel->{$key},
+ }) ne 1) { print $tt->error(); }
+ }
+}
+