void DCodeAccessorMethod::updateContent() { CodeClassField * parentField = getParentClassField(); DCodeClassField * dfield = dynamic_cast<DCodeClassField*>(parentField); QString fieldName = dfield->getFieldName(); QString text; switch(getType()) { case CodeAccessorMethod::ADD: { int maxOccurs = dfield->maximumListOccurances(); QString fieldType = dfield->getTypeName(); QString indent = getIndentation(); QString endLine = UMLApp::app()->commonPolicy()->getNewLineEndingChars(); if(maxOccurs > 0) text += QLatin1String("if (") + fieldName + QLatin1String(".size() < ")+ QString::number(maxOccurs) + QLatin1String(") {") + endLine + indent; text += fieldName + QLatin1String(".add(value);"); if(maxOccurs > 0) { text += endLine + QLatin1String("} else {") + endLine; text += indent + QLatin1String("System.err.println(\"ERROR: Cant add") + fieldType + QLatin1String(" to ") + fieldName + QLatin1String(", minimum number of items reached.\");") + endLine + QLatin1Char('}') + endLine; } break; } case CodeAccessorMethod::GET: text = QLatin1String("return ") + fieldName + QLatin1Char(';'); break; case CodeAccessorMethod::LIST: text = QLatin1String("return (List) ") + fieldName + QLatin1Char(';'); break; case CodeAccessorMethod::REMOVE: { int minOccurs = dfield->minimumListOccurances(); QString fieldType = dfield->getTypeName(); QString endLine = UMLApp::app()->commonPolicy()->getNewLineEndingChars(); QString indent = getIndentation(); if(minOccurs > 0) text += QLatin1String("if (") + fieldName + QLatin1String(".size() >= ")+ QString::number(minOccurs) + QLatin1String(") {") + endLine + indent; text += fieldName + QLatin1String(".remove(value);"); if(minOccurs > 0) { text += endLine + QLatin1String("} else {") + endLine; text += indent + QLatin1String("System.err.println(\"ERROR: Cant remove") + fieldType + QLatin1String(" from ") + fieldName + QLatin1String(", minimum number of items reached.\");") + endLine + QLatin1Char('}') + endLine; } break; } case CodeAccessorMethod::SET: text = fieldName + QLatin1String(" = value;"); break; default: // do nothing break; } setText(text); }
void DCodeAccessorMethod::updateMethodDeclaration() { DCodeClassField * dfield = dynamic_cast<DCodeClassField*>(getParentClassField()); // Check for dynamic casting failure! if (dfield == 0) { uError() << "dfield: invalid dynamic cast"; return; } CodeGenerationPolicy *commonpolicy = UMLApp::app()->commonPolicy(); // gather defs Uml::Visibility::Enum scopePolicy = commonpolicy->getAttributeAccessorScope(); QString strVis = Uml::Visibility::toString(dfield->getVisibility()); QString fieldName = dfield->getFieldName(); QString fieldType = dfield->getTypeName(); QString objectType = dfield->getListObjectType(); if(objectType.isEmpty()) objectType = fieldName; QString endLine = UMLApp::app()->commonPolicy()->getNewLineEndingChars(); // set scope of this accessor appropriately..if its an attribute, // we need to be more sophisticated if (dfield->parentIsAttribute()) { switch (scopePolicy) { case Uml::Visibility::Public: case Uml::Visibility::Private: case Uml::Visibility::Protected: strVis = Uml::Visibility::toString(scopePolicy); break; default: case Uml::Visibility::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 = QLatin1String("add") + Codegen_Utils::capitalizeFirstLetter(fieldType); methodReturnType = QLatin1String("void"); methodParams = objectType + QLatin1String(" value "); headerText = QLatin1String("Add an object of type ") + objectType + QLatin1String(" to the List ") + fieldName + endLine + getParentObject()->doc() + endLine + QLatin1String("@return void"); break; case CodeAccessorMethod::GET: methodName = QLatin1String("get") + Codegen_Utils::capitalizeFirstLetter(fieldName); methodReturnType = fieldType; headerText = QLatin1String("Get the value of ") + fieldName + endLine + getParentObject()->doc() + endLine + QLatin1String("@return the value of ") + fieldName; break; case CodeAccessorMethod::LIST: methodName = QLatin1String("get") + Codegen_Utils::capitalizeFirstLetter(fieldType) + QLatin1String("List"); methodReturnType = QLatin1String("List"); headerText = QLatin1String("Get the list of ") + fieldName + endLine + getParentObject()->doc() + endLine + QLatin1String("@return List of ") + fieldName; break; case CodeAccessorMethod::REMOVE: methodName = QLatin1String("remove") + Codegen_Utils::capitalizeFirstLetter(fieldType); methodReturnType = QLatin1String("void"); methodParams = objectType + QLatin1String(" value "); headerText = QLatin1String("Remove an object of type ") + objectType + QLatin1String(" from the List ") + fieldName + endLine + getParentObject()->doc(); break; case CodeAccessorMethod::SET: methodName = QLatin1String("set") + Codegen_Utils::capitalizeFirstLetter(fieldName); methodReturnType = QLatin1String("void"); methodParams = fieldType + QLatin1String(" value "); headerText = QLatin1String("Set the value of ") + fieldName + endLine + getParentObject()->doc() + endLine; break; default: // do nothing..no idea what this is uWarning()<<"Warning: cant generate DCodeAccessorMethod for type: "<<getType(); break; } // set header once. if(getComment()->getText().isEmpty()) getComment()->setText(headerText); // set start/end method text setStartMethodText(strVis + QLatin1Char(' ') + methodReturnType + QLatin1Char(' ') + methodName + QLatin1String(" (") + methodParams + QLatin1String(") {")); setEndMethodText(QLatin1String("}")); }
/** * This will be called by syncToParent whenever the parent object is "modified". */ void DCodeClassFieldDeclarationBlock::updateContent() { CodeClassField * cf = getParentClassField(); DCodeClassField * jcf = dynamic_cast<DCodeClassField*>(cf); if (!jcf) { uError() << "jcf: invalid dynamic cast"; return; } CodeGenerationPolicy * commonpolicy = UMLApp::app()->commonPolicy(); Uml::Visibility::Enum scopePolicy = commonpolicy->getAssociationFieldScope(); // Set the comment QString notes = getParentObject()->doc(); getComment()->setText(notes); // Set the body QString staticValue = getParentObject()->isStatic() ? QLatin1String("static ") : QString(); QString scopeStr = Uml::Visibility::toString(getParentObject()->visibility()); // IF this is from an association, then scope taken as appropriate to policy if (!jcf->parentIsAttribute()) { switch (scopePolicy) { case Uml::Visibility::Public: case Uml::Visibility::Private: case Uml::Visibility::Protected: scopeStr = Uml::Visibility::toString(scopePolicy); break; default: case Uml::Visibility::FromParent: // do nothing here... will leave as from parent object break; } } QString typeName = jcf->getTypeName(); QString fieldName = jcf->getFieldName(); QString initialV = jcf->getInitialValue(); if (!cf->parentIsAttribute() && !cf->fieldIsSingleValue()) typeName = QLatin1String("List"); QString body = staticValue + scopeStr + QLatin1Char(' ') + typeName + QLatin1Char(' ') + fieldName; if (!initialV.isEmpty()) body.append(QLatin1String(" = ") + initialV); else if (!cf->parentIsAttribute()) { UMLRole * role = dynamic_cast<UMLRole*>(cf->getParentObject()); // Check for dynamic casting failure! if (role == NULL) { uError() << "role: invalid dynamic cast"; return; } if (role->object()->baseType() == UMLObject::ot_Interface) { // do nothing.. can't instantiate an interface } else { // FIX?: IF a constructor method exists in the classifiercodedoc // of the parent Object, then we can use that instead (if its empty). if(cf->fieldIsSingleValue()) { if(!typeName.isEmpty()) body.append(QLatin1String(" = new ") + typeName + QLatin1String(" ()")); } else body.append(QLatin1String(" = new Vector ()")); } } setText(body + QLatin1Char(';')); }