/*************************************************************************** * * * 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 * ***************************************************************************/ /* This code generated by: * Author : thomas * Date : Fri Jun 20 2003 */ // own header #include "javacodeaccessormethod.h" // qt/kde includes #include // 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(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(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(getParentClassField()); JavaClassifierCodeDocument * javadoc = dynamic_cast(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: "<getText().isEmpty()) getComment()->setText(headerText); // set start/end method text setStartMethodText(strVis+' '+methodReturnType+' '+methodName+" ( "+methodParams+" ) {"); setEndMethodText("}"); } void JavaCodeAccessorMethod::update() { updateMethodDeclaration(); updateContent(); } #include "javacodeaccessormethod.moc"