summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/codegenerators/javacodeaccessormethod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/codegenerators/javacodeaccessormethod.cpp')
-rw-r--r--umbrello/umbrello/codegenerators/javacodeaccessormethod.cpp223
1 files changed, 223 insertions, 0 deletions
diff --git a/umbrello/umbrello/codegenerators/javacodeaccessormethod.cpp b/umbrello/umbrello/codegenerators/javacodeaccessormethod.cpp
new file mode 100644
index 00000000..524e6a48
--- /dev/null
+++ b/umbrello/umbrello/codegenerators/javacodeaccessormethod.cpp
@@ -0,0 +1,223 @@
+/***************************************************************************
+ * *
+ * 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 ( QDomDocument & doc, QDomElement & blockElement)
+{
+
+ // set super-class attributes
+ CodeAccessorMethod::setAttributesOnNode(doc, blockElement);
+
+ // set local attributes now
+}
+
+void JavaCodeAccessorMethod::setAttributesFromNode( QDomElement & 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);
+ QString fieldName = javafield->getFieldName();
+
+ QString text = "";
+ switch(getType()) {
+ case CodeAccessorMethod::ADD:
+ {
+ int maxOccurs = javafield->maximumListOccurances();
+ QString fieldType = javafield->getTypeName();
+ QString indent = getIndentation();
+ QString endLine = UMLApp::app()->getCommonPolicy()->getNewLineEndingChars();
+ if(maxOccurs > 0)
+ text += "if ("+fieldName+".size() < "+ QString::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();
+ QString fieldType = javafield->getTypeName();
+ QString endLine = UMLApp::app()->getCommonPolicy()->getNewLineEndingChars();
+ QString indent = getIndentation();
+
+ if(minOccurs > 0)
+ text += "if ("+fieldName+".size() >= "+ QString::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();
+ QString strVis = javadoc->scopeToJavaDecl(javafield->getVisibility());
+ QString fieldName = javafield->getFieldName();
+ QString fieldType = javafield->getTypeName();
+ QString objectType = javafield->getListObjectType();
+ if(objectType.isEmpty())
+ objectType = fieldName;
+ QString 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
+ QString headerText = "";
+ QString methodReturnType = "";
+ QString methodName = "";
+ QString 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"