summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/codegenerators/javaclassdeclarationblock.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/codegenerators/javaclassdeclarationblock.cpp')
-rw-r--r--umbrello/umbrello/codegenerators/javaclassdeclarationblock.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/umbrello/umbrello/codegenerators/javaclassdeclarationblock.cpp b/umbrello/umbrello/codegenerators/javaclassdeclarationblock.cpp
new file mode 100644
index 00000000..0e4ccdbf
--- /dev/null
+++ b/umbrello/umbrello/codegenerators/javaclassdeclarationblock.cpp
@@ -0,0 +1,169 @@
+/***************************************************************************
+ * *
+ * 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) 2004-2006 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+/* This code generated by:
+ * Author : thomas
+ * Date : Wed Jul 16 2003
+ */
+#include "javaclassdeclarationblock.h"
+#include "javacodedocumentation.h"
+#include "../codegenerator.h"
+#include "../codegenerationpolicy.h"
+#include "../uml.h"
+
+// Constructors/Destructors
+//
+
+JavaClassDeclarationBlock::JavaClassDeclarationBlock
+ ( JavaClassifierCodeDocument * parentDoc, const QString &startText, const QString &endText, const QString &comment)
+ : OwnedHierarchicalCodeBlock(parentDoc->getParentClassifier(), parentDoc, startText, endText, comment)
+{
+ init(parentDoc, comment);
+}
+
+JavaClassDeclarationBlock::~JavaClassDeclarationBlock ( ) { }
+
+//
+// Methods
+//
+
+/**
+ * Save the XMI representation of this object
+ */
+void JavaClassDeclarationBlock::saveToXMI ( QDomDocument & doc, QDomElement & root ) {
+ QDomElement blockElement = doc.createElement( "javaclassdeclarationblock" );
+
+ setAttributesOnNode(doc, blockElement);
+
+ root.appendChild( blockElement );
+}
+
+/**
+ * load params from the appropriate XMI element node.
+ */
+void JavaClassDeclarationBlock::loadFromXMI ( QDomElement & root )
+{
+ setAttributesFromNode(root);
+}
+
+// Accessor methods
+//
+
+// Other methods
+//
+
+/**
+ * update the start and end text for this ownedhierarchicalcodeblock.
+ */
+void JavaClassDeclarationBlock::updateContent ( )
+{
+
+ JavaClassifierCodeDocument *parentDoc = dynamic_cast<JavaClassifierCodeDocument*>(getParentDocument());
+ UMLClassifier *c = parentDoc->getParentClassifier();
+ CodeGenerationPolicy *commonPolicy = UMLApp::app()->getCommonPolicy();
+ QString endLine = commonPolicy->getNewLineEndingChars();
+ bool isInterface = parentDoc->parentIsInterface(); // a little shortcut
+ QString JavaClassName = parentDoc->getJavaClassName(c->getName());
+
+ // COMMENT
+ if(isInterface)
+ getComment()->setText("Interface "+JavaClassName+endLine+c->getDoc());
+ else
+ getComment()->setText("Class "+JavaClassName+endLine+c->getDoc());
+
+ bool forceDoc = UMLApp::app()->getCommonPolicy()->getCodeVerboseDocumentComments();
+ if(forceDoc || !c->getDoc().isEmpty())
+ getComment()->setWriteOutText(true);
+ else
+ getComment()->setWriteOutText(false);
+
+
+ // Now set START/ENDING Text
+ QString startText = "";
+ // In Java, we need declare abstract only on classes
+ if (c->getAbstract() && !isInterface)
+ startText.append("abstract ");
+
+ if (c->getVisibility() != Uml::Visibility::Public) {
+ // We should probably emit a warning in here .. java doesn't like to allow
+ // private/protected classes. The best we can do (I believe)
+ // is to let these declarations default to "package visibility"
+ // which is a level between traditional "private" and "protected"
+ // scopes. To get this visibility level we just print nothing..
+ } else
+ startText.append("public ");
+
+ if(parentDoc->parentIsInterface())
+ startText.append("interface ");
+ else
+ startText.append("class ");
+
+ startText.append(JavaClassName);
+
+ // write inheritances out
+ UMLClassifierList superclasses =
+ c->findSuperClassConcepts(UMLClassifier::CLASS);
+ UMLClassifierList superinterfaces =
+ c->findSuperClassConcepts(UMLClassifier::INTERFACE);
+ int nrof_superclasses = superclasses.count();
+ int nrof_superinterfaces = superinterfaces.count();
+
+ // write out inheritance
+ int i = 0;
+ if(nrof_superclasses >0)
+ startText.append(" extends ");
+ for (UMLClassifier * concept= superclasses.first(); concept; concept = superclasses.next())
+ {
+ startText.append(parentDoc->cleanName(concept->getName()));
+ if(i != (nrof_superclasses-1))
+ startText.append(", ");
+ i++;
+ }
+
+ // write out what we 'implement'
+ i = 0;
+ if(nrof_superinterfaces >0)
+ {
+ // In Java interfaces "extend" other interfaces. Classes "implement" interfaces
+ if(isInterface)
+ startText.append(" extends ");
+ else
+ startText.append(" implements ");
+ }
+ for (UMLClassifier * concept= superinterfaces.first(); concept; concept = superinterfaces.next())
+ {
+ startText.append(parentDoc->cleanName(concept->getName()));
+ if(i != (nrof_superinterfaces-1))
+ startText.append(", ");
+ i++;
+ }
+
+ // Set the header and end text for the hier.codeblock
+ setStartText(startText+" {");
+
+ // setEndText("}"); // not needed
+
+}
+
+void JavaClassDeclarationBlock::init (JavaClassifierCodeDocument *parentDoc, const QString &comment)
+{
+
+ setComment(new JavaCodeDocumentation(parentDoc));
+ getComment()->setText(comment);
+
+ setEndText("}");
+
+ updateContent();
+
+}
+
+
+#include "javaclassdeclarationblock.moc"