You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.4 KiB
170 lines
5.4 KiB
/***************************************************************************
|
|
* *
|
|
* 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 TQString &startText, const TQString &endText, const TQString &comment)
|
|
: OwnedHierarchicalCodeBlock(parentDoc->getParentClassifier(), parentDoc, startText, endText, comment)
|
|
{
|
|
init(parentDoc, comment);
|
|
}
|
|
|
|
JavaClassDeclarationBlock::~JavaClassDeclarationBlock ( ) { }
|
|
|
|
//
|
|
// Methods
|
|
//
|
|
|
|
/**
|
|
* Save the XMI representation of this object
|
|
*/
|
|
void JavaClassDeclarationBlock::saveToXMI ( TQDomDocument & doc, TQDomElement & root ) {
|
|
TQDomElement blockElement = doc.createElement( "javaclassdeclarationblock" );
|
|
|
|
setAttributesOnNode(doc, blockElement);
|
|
|
|
root.appendChild( blockElement );
|
|
}
|
|
|
|
/**
|
|
* load params from the appropriate XMI element node.
|
|
*/
|
|
void JavaClassDeclarationBlock::loadFromXMI ( TQDomElement & 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();
|
|
TQString endLine = commonPolicy->getNewLineEndingChars();
|
|
bool isInterface = parentDoc->parentIsInterface(); // a little shortcut
|
|
TQString 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
|
|
TQString 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 TQString &comment)
|
|
{
|
|
|
|
setComment(new JavaCodeDocumentation(parentDoc));
|
|
getComment()->setText(comment);
|
|
|
|
setEndText("}");
|
|
|
|
updateContent();
|
|
|
|
}
|
|
|
|
|
|
#include "javaclassdeclarationblock.moc"
|