From 4819f16c142e39061dafb8ebf14ca180037e2d77 Mon Sep 17 00:00:00 2001 From: "Sandro S. Andrade" Date: Fri, 1 Nov 2013 18:29:35 -0300 Subject: Add initial steps for UML Profiles code generation Change-Id: I9673531b25ef305a972383f5abc24d1a2e0a9779 Reviewed-by: Sandro S. Andrade --- examples/uml/profile-definition/main.cpp | 11 +++++++---- scripts/generate-class.pl | 6 ++++++ scripts/xmi2qt.pl | 7 +++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/examples/uml/profile-definition/main.cpp b/examples/uml/profile-definition/main.cpp index 3ef20ca6..b359c7eb 100644 --- a/examples/uml/profile-definition/main.cpp +++ b/examples/uml/profile-definition/main.cpp @@ -79,11 +79,18 @@ int main () // Adding attribute to stereotype QUmlPrimitiveType *booleanPrimitiveType = new QUmlPrimitiveType; booleanPrimitiveType->setName("boolean"); + QUmlProperty *property = new QUmlProperty; property->setName("isTransient"); property->setType(booleanPrimitiveType); stereotype->addOwnedAttribute(property); + // Adding stereotype attribute that play the role of extension end + QUmlProperty *stereotypeProperty = new QUmlProperty; + stereotypeProperty->setName("base_class"); + stereotypeProperty->setType(class_); + stereotype->addOwnedAttribute(stereotypeProperty); + // Create UML meta-model element import QUmlElementImport *elementImport = new QUmlElementImport; elementImport->setImportedElement(umlModel->packagedElements().toList().first()); @@ -107,10 +114,6 @@ int main () QUmlExtension *extension = new QUmlExtension; extension->setName("class_stereotype"); - QUmlProperty *stereotypeProperty = new QUmlProperty; - stereotypeProperty->setName("base_class"); - stereotypeProperty->setType(class_); - QUmlExtensionEnd *extensionEnd = new QUmlExtensionEnd; extensionEnd->setName("extension_stereotype"); extensionEnd->setType(stereotype); diff --git a/scripts/generate-class.pl b/scripts/generate-class.pl index 532e1fb1..055cf548 100755 --- a/scripts/generate-class.pl +++ b/scripts/generate-class.pl @@ -55,7 +55,13 @@ my $tt = Template->new(INTERPOLATE => 1, INCLUDE_PATH => 'templates/'); my $xmi = XML::XPath->new(filename => $options{i}); my $namespace = $xmi->findvalue('//uml:Package/@name'); +if ($namespace eq "") { + $namespace = $xmi->findvalue('//uml:Profile/@name'); +} my $classset = $xmi->findnodes('//packagedElement[@xmi:type=\'uml:Class\' and @name=\'' . $options{c} . '\']'); +if ($classset->size() == 0) { + $classset = $xmi->findnodes('//packagedElement[@xmi:type=\'uml:Stereotype\' and @name=\'' . $options{c} . '\']'); +} binmode STDOUT, ':utf8'; diff --git a/scripts/xmi2qt.pl b/scripts/xmi2qt.pl index 3be79c35..64e827c5 100755 --- a/scripts/xmi2qt.pl +++ b/scripts/xmi2qt.pl @@ -56,6 +56,10 @@ my $tt = Template->new(INTERPOLATE => 1, INCLUDE_PATH => 'templates/'); my $xmi = XML::XPath->new(filename => $options{i}); my $namespace = $xmi->findvalue('//uml:Package/@name'); +if ($namespace eq "") { + $namespace = $xmi->findvalue('//uml:Profile/@name'); +} + make_path($options{o}."/".$namespace."/"."qobjects"); { @@ -98,6 +102,9 @@ close STDOUT; } my $classset = $xmi->find('//packagedElement[@xmi:type=\'uml:Class\']'); +if ($classset->size() == 0) { + $classset = $xmi->find('//packagedElement[@xmi:type=\'uml:Stereotype\']'); +} foreach my $class ($classset->get_nodelist) { my $className = $class->findvalue('@name'); die "could not fork" unless defined(my $pid = fork); -- cgit v1.2.3