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.
224 lines
8.1 KiB
224 lines
8.1 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-2007 *
|
|
* Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
|
|
***************************************************************************/
|
|
|
|
/* This code generated by:
|
|
* Author : thomas
|
|
* Date : Fri Jun 20 2003
|
|
*/
|
|
|
|
// own header
|
|
#include "javacodeaccessormethod.h"
|
|
|
|
// qt/kde includes
|
|
#include <kdebug.h>
|
|
|
|
// local includes
|
|
#include "../attribute.h"
|
|
#include "../codegenerator.h"
|
|
#include "../codegenerationpolicy.h"
|
|
#include "../classifiercodedocument.h"
|
|
#include "../umlobject.h"
|
|
#include "../umlrole.h"
|
|
#include "../uml.h"
|
|
#include "codegen_utils.h"
|
|
#include "javaclassifiercodedocument.h"
|
|
#include "javacodegenerationpolicy.h"
|
|
#include "javacodeclassfield.h"
|
|
#include "javacodedocumentation.h"
|
|
|
|
// Constructors/Destructors
|
|
//
|
|
|
|
JavaCodeAccessorMethod::JavaCodeAccessorMethod ( CodeClassField * field, CodeAccessorMethod::AccessorType type)
|
|
: CodeAccessorMethod ( field )
|
|
{
|
|
setType(type);
|
|
|
|
// lets use full-blown comment
|
|
JavaClassifierCodeDocument* jccd = dynamic_cast<JavaClassifierCodeDocument*>(field->getParentDocument());
|
|
setComment(new JavaCodeDocumentation(jccd));
|
|
}
|
|
|
|
JavaCodeAccessorMethod::~JavaCodeAccessorMethod ( ) { }
|
|
|
|
// Other methods
|
|
//
|
|
|
|
void JavaCodeAccessorMethod::setAttributesOnNode ( TQDomDocument & doc, TQDomElement & blockElement)
|
|
{
|
|
|
|
// set super-class attributes
|
|
CodeAccessorMethod::setAttributesOnNode(doc, blockElement);
|
|
|
|
// set local attributes now
|
|
}
|
|
|
|
void JavaCodeAccessorMethod::setAttributesFromNode( TQDomElement & root)
|
|
{
|
|
|
|
// set attributes from superclass method the XMI
|
|
CodeAccessorMethod::setAttributesFromNode(root);
|
|
|
|
// load local stuff
|
|
|
|
}
|
|
|
|
void JavaCodeAccessorMethod::updateContent( )
|
|
{
|
|
|
|
CodeClassField * parentField = getParentClassField();
|
|
JavaCodeClassField * javafield = dynamic_cast<JavaCodeClassField*>(parentField);
|
|
TQString fieldName = javafield->getFieldName();
|
|
|
|
TQString text = "";
|
|
switch(getType()) {
|
|
case CodeAccessorMethod::ADD:
|
|
{
|
|
int maxOccurs = javafield->maximumListOccurances();
|
|
TQString fieldType = javafield->getTypeName();
|
|
TQString indent = getIndentation();
|
|
TQString endLine = UMLApp::app()->getCommonPolicy()->getNewLineEndingChars();
|
|
if(maxOccurs > 0)
|
|
text += "if ("+fieldName+".size() < "+ TQString::number(maxOccurs)+") {"+endLine+indent;
|
|
text += fieldName+".add(value);";
|
|
if(maxOccurs > 0)
|
|
{
|
|
text += endLine+"} else {"+endLine;
|
|
text += indent + "System.err.println(\"ERROR: Cant add"+fieldType+" to "+fieldName+", minimum number of items reached.\");"+endLine+'}'+endLine;
|
|
}
|
|
break;
|
|
}
|
|
case CodeAccessorMethod::GET:
|
|
text = "return "+fieldName+';';
|
|
break;
|
|
case CodeAccessorMethod::LIST:
|
|
text = "return (List) "+fieldName+';';
|
|
break;
|
|
case CodeAccessorMethod::REMOVE:
|
|
{
|
|
int minOccurs = javafield->minimumListOccurances();
|
|
TQString fieldType = javafield->getTypeName();
|
|
TQString endLine = UMLApp::app()->getCommonPolicy()->getNewLineEndingChars();
|
|
TQString indent = getIndentation();
|
|
|
|
if(minOccurs > 0)
|
|
text += "if ("+fieldName+".size() >= "+ TQString::number(minOccurs)+") {"+endLine+indent;
|
|
text += fieldName+".remove(value);";
|
|
if(minOccurs > 0)
|
|
{
|
|
text += endLine+"} else {"+endLine;
|
|
text += indent + "System.err.println(\"ERROR: Cant remove"+fieldType+" from "+fieldName+", minimum number of items reached.\");"+endLine+'}'+endLine;
|
|
}
|
|
break;
|
|
}
|
|
case CodeAccessorMethod::SET:
|
|
text = fieldName+" = value;";
|
|
break;
|
|
default:
|
|
// do nothing
|
|
break;
|
|
}
|
|
|
|
setText(text);
|
|
|
|
}
|
|
|
|
void JavaCodeAccessorMethod::updateMethodDeclaration()
|
|
{
|
|
|
|
JavaCodeClassField * javafield = dynamic_cast<JavaCodeClassField*>(getParentClassField());
|
|
JavaClassifierCodeDocument * javadoc = dynamic_cast<JavaClassifierCodeDocument*>(javafield->getParentDocument());
|
|
CodeGenerationPolicy *commonpolicy = UMLApp::app()->getCommonPolicy();
|
|
|
|
// gather defs
|
|
CodeGenerationPolicy::ScopePolicy scopePolicy = commonpolicy->getAttributeAccessorScope();
|
|
TQString strVis = javadoc->scopeToJavaDecl(javafield->getVisibility());
|
|
TQString fieldName = javafield->getFieldName();
|
|
TQString fieldType = javafield->getTypeName();
|
|
TQString objectType = javafield->getListObjectType();
|
|
if(objectType.isEmpty())
|
|
objectType = fieldName;
|
|
TQString endLine = UMLApp::app()->getCommonPolicy()->getNewLineEndingChars();
|
|
|
|
// set scope of this accessor appropriately..if its an attribute,
|
|
// we need to be more sophisticated
|
|
if(javafield->parentIsAttribute())
|
|
switch (scopePolicy) {
|
|
case CodeGenerationPolicy::Public:
|
|
case CodeGenerationPolicy::Private:
|
|
case CodeGenerationPolicy::Protected:
|
|
strVis = javadoc->scopeToJavaDecl((Uml::Visibility::Value) scopePolicy);
|
|
break;
|
|
default:
|
|
case CodeGenerationPolicy::FromParent:
|
|
// do nothing..already have taken parent value
|
|
break;
|
|
}
|
|
|
|
// some variables we will need to populate
|
|
TQString headerText = "";
|
|
TQString methodReturnType = "";
|
|
TQString methodName = "";
|
|
TQString methodParams = "";
|
|
|
|
switch(getType()) {
|
|
case CodeAccessorMethod::ADD:
|
|
methodName = "add" + Codegen_Utils::capitalizeFirstLetter(fieldType);
|
|
methodReturnType = "void";
|
|
methodParams = objectType+" value ";
|
|
headerText = "Add an object of type "+objectType+" to the List "+fieldName+endLine+getParentObject()->getDoc()+endLine+"@return void";
|
|
break;
|
|
case CodeAccessorMethod::GET:
|
|
methodName = "get" + Codegen_Utils::capitalizeFirstLetter(fieldName);
|
|
methodReturnType = fieldType;
|
|
headerText = "Get the value of "+fieldName+endLine+getParentObject()->getDoc()+endLine+"@return the value of "+fieldName;
|
|
break;
|
|
case CodeAccessorMethod::LIST:
|
|
methodName = "get" + Codegen_Utils::capitalizeFirstLetter(fieldType)+"List";
|
|
methodReturnType = "List";
|
|
headerText = "Get the list of "+fieldName+endLine+getParentObject()->getDoc()+endLine+"@return List of "+fieldName;
|
|
break;
|
|
case CodeAccessorMethod::REMOVE:
|
|
methodName = "remove" + Codegen_Utils::capitalizeFirstLetter(fieldType);
|
|
methodReturnType = "void";
|
|
methodParams = objectType+" value ";
|
|
headerText = "Remove an object of type "+objectType+" from the List "+fieldName+endLine+getParentObject()->getDoc();
|
|
break;
|
|
case CodeAccessorMethod::SET:
|
|
methodName = "set" + Codegen_Utils::capitalizeFirstLetter(fieldName);
|
|
methodReturnType = "void";
|
|
methodParams = fieldType + " value ";
|
|
headerText = "Set the value of "+fieldName+endLine+getParentObject()->getDoc()+endLine;
|
|
break;
|
|
default:
|
|
// do nothing..no idea what this is
|
|
kWarning()<<"Warning: cant generate JavaCodeAccessorMethod for type: "<<getType()<<endl;
|
|
break;
|
|
}
|
|
|
|
// set header once.
|
|
if(getComment()->getText().isEmpty())
|
|
getComment()->setText(headerText);
|
|
|
|
// set start/end method text
|
|
setStartMethodText(strVis+' '+methodReturnType+' '+methodName+" ( "+methodParams+" ) {");
|
|
setEndMethodText("}");
|
|
|
|
}
|
|
|
|
void JavaCodeAccessorMethod::update()
|
|
{
|
|
updateMethodDeclaration();
|
|
updateContent();
|
|
}
|
|
|
|
#include "javacodeaccessormethod.moc"
|