summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSandro S. Andrade <sandroandrade@kde.org>2013-11-01 18:29:35 -0300
committerSandro S. Andrade <sandroandrade@kde.org>2013-11-01 22:35:03 +0100
commit4819f16c142e39061dafb8ebf14ca180037e2d77 (patch)
treea7aa954e7b5a666a003448fef5ae5ad569131f77
parent768419e7f612f76eec0e7c75ff240f13e7d76edc (diff)
Add initial steps for UML Profiles code generation
Change-Id: I9673531b25ef305a972383f5abc24d1a2e0a9779 Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
-rw-r--r--examples/uml/profile-definition/main.cpp11
-rwxr-xr-xscripts/generate-class.pl6
-rwxr-xr-xscripts/xmi2qt.pl7
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);