summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/component.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/component.cpp')
-rw-r--r--umbrello/umbrello/component.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/umbrello/umbrello/component.cpp b/umbrello/umbrello/component.cpp
new file mode 100644
index 00000000..6c8f674b
--- /dev/null
+++ b/umbrello/umbrello/component.cpp
@@ -0,0 +1,100 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * copyright (C) 2003-2006 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+// own header
+#include "component.h"
+// qt/kde includes
+#include <kdebug.h>
+#include <klocale.h>
+// app includes
+#include "association.h"
+#include "object_factory.h"
+#include "model_utils.h"
+#include "clipboard/idchangelog.h"
+
+UMLComponent::UMLComponent(const QString & name, Uml::IDType id)
+ : UMLPackage(name, id) {
+ init();
+}
+
+UMLComponent::~UMLComponent() {
+}
+
+void UMLComponent::init() {
+ m_BaseType = Uml::ot_Component;
+ m_executable = false;
+}
+
+UMLObject* UMLComponent::clone() const {
+ UMLComponent *clone = new UMLComponent();
+ UMLObject::copyInto(clone);
+ return clone;
+}
+
+void UMLComponent::saveToXMI(QDomDocument& qDoc, QDomElement& qElement) {
+ QDomElement componentElement = UMLObject::save("UML:Component", qDoc);
+ componentElement.setAttribute("executable", m_executable);
+ // Save contained components if any.
+ if (m_objects.count()) {
+ QDomElement ownedElement = qDoc.createElement( "UML:Namespace.ownedElement" );
+ for (UMLObject *obj = m_objects.first(); obj; obj = m_objects.next())
+ obj->saveToXMI (qDoc, ownedElement);
+ componentElement.appendChild(ownedElement);
+ }
+ qElement.appendChild(componentElement);
+}
+
+bool UMLComponent::load(QDomElement& element) {
+ QString executable = element.attribute("executable", "0");
+ m_executable = (bool)executable.toInt();
+ for (QDomNode node = element.firstChild(); !node.isNull();
+ node = node.nextSibling()) {
+ if (node.isComment())
+ continue;
+ QDomElement tempElement = node.toElement();
+ QString type = tempElement.tagName();
+ if (Model_Utils::isCommonXMIAttribute(type))
+ continue;
+ if (Uml::tagEq(type, "Namespace.ownedElement") ||
+ Uml::tagEq(type, "Namespace.contents")) {
+ //CHECK: Umbrello currently assumes that nested elements
+ // are ownedElements anyway.
+ // Therefore these tags are not further interpreted.
+ if (! load(tempElement))
+ return false;
+ continue;
+ }
+ UMLObject *pObject = Object_Factory::makeObjectFromXMI(type);
+ if( !pObject ) {
+ kWarning() << "UMLComponent::load: "
+ << "Unknown type of umlobject to create: "
+ << type << endl;
+ continue;
+ }
+ pObject->setUMLPackage(this);
+ if (pObject->loadFromXMI(tempElement)) {
+ addObject(pObject);
+ } else {
+ delete pObject;
+ }
+ }
+ return true;
+}
+
+void UMLComponent::setExecutable(bool executable) {
+ m_executable = executable;
+}
+
+bool UMLComponent::getExecutable() {
+ return m_executable;
+}
+
+#include "component.moc"