void UmlClassMember::write_type(FileOut & out, const UmlTypeSpec & t, Q3CString s, const char * k_name, const char * k_type) { s = s.simplifyWhiteSpace(); int index; // remove k_name and all after it except [] if (k_name && *k_name && ((index = s.find(k_name, 0)) != -1)) {//[rageek] Removed CS=FALSE - rethink this, case sensitive //remove name s.remove(index, strlen(k_name)); for (;;) { if (s[index] == ' ') s.remove(index, 1); if (s[index] != '[') break; index += 1; int index2; if ((index2 = s.find(index, ']')) == -1) break; index = index2 + 1; } s.resize(index); } else if ((index = s.find('=')) != -1) { s.resize(index); s = s.simplifyWhiteSpace(); } if (k_type && *k_type && ((index = s.find(k_type)) == -1)) out.idref_datatype(s); else if (s != k_type) { // have modifiers if (t.type != 0) { s.replace(index, strlen(k_type), t.type->name()); out.idref(s, t.type); } else out.idref_datatype(s.replace(index, strlen(k_type), t.explicit_type)); } else if (t.type != 0) out.idref(t.type); else out.idref_datatype(t.explicit_type); }
void UmlOperation::write_return_type(FileOut & out, QCString decl) { const UmlTypeSpec & t = returnType(); static int return_rank = 0; if ((t.type != 0) || !t.explicit_type.isEmpty()) { out.indent(); out << "<UML:Parameter name=\"return\" xmi.id=\"BOUML_return_" << ++return_rank << "\" kind=\"return\">\n"; out.indent(); out << "\t<UML:Parameter.type>\n"; out.indent(); out << "\t\t<UML:DataType"; switch (_lang) { case Uml: if (t.type != 0) out.idref(t.type); else out.idref_datatype(t.explicit_type); break; case Cpp: write_cpp_returntype(out, decl); break; default: // java write_java_returntype(out, decl); } out << "/>\n"; out.indent(); out << "\t</UML:Parameter.type>\n"; out.indent(); out << "</UML:Parameter>\n"; } }
void UmlOperation::write_uml_params(FileOut & out) { const QValueList<UmlParameter> p = params(); QValueList<UmlParameter>::ConstIterator it; for (it = p.begin(); it != p.end(); ++it) { out.indent(); out << "<UML:Parameter name=\"" << (*it).name << "\" xmi.id=\"BOUML_op_param_" << ++param_id << "\" kind =\""; switch ((*it).dir) { case InputOutputDirection: out << "inout\">\n"; break; case OutputDirection: out << "out\">\n"; break; default: out << "in\">\n"; } const UmlTypeSpec & pt = (*it).type; if (pt.type != 0) { out.indent(); out << "\t<UML:Parameter.type>\n"; out.indent(); out << "\t\t<UML:DataType"; out.idref(pt.type); out << "/>\n"; out.indent(); out << "\t</UML:Parameter.type>\n"; } else if (!pt.explicit_type.isEmpty()) { out.indent(); out << "\t<UML:Parameter.type>\n"; out.indent(); out << "\t\t<UML:DataType"; out.idref_datatype(pt.explicit_type); out << "/>\n"; out.indent(); out << "\t</UML:Parameter.type>\n"; } out.indent(); out << "</UML:Parameter>\n"; } }
void UmlOperation::write_exceptions(FileOut & out) { const Q3ValueList<UmlTypeSpec> excpts = exceptions(); Q3ValueList<UmlTypeSpec>::ConstIterator iter; for (iter = excpts.begin(); iter != excpts.end(); ++iter) { const UmlTypeSpec & e = *iter; if (e.type != 0) { out.indent(); out << "<raisedException"; out.idref(e.type); out << "/>\n"; } else if (!e.explicit_type.isEmpty()) { out.indent(); out << "<raisedException"; out.idref_datatype(e.explicit_type); out << "/>\n"; } } }
void UmlItem::write_type(FileOut & out, const UmlTypeSpec & t, const char * tk) { if (t.type != 0) { out.indent(); out << '<' << ((tk != 0) ? tk : "type") << " xmi:type=\"uml:Class\""; out.idref(t.type); out << "/>\n"; } else if (!t.explicit_type.isEmpty()) { out.indent(); out << '<' << ((tk != 0) ? tk : "type") << " xmi:type=\"uml:"; if (t.explicit_type == "int") out << ((_uml_20) ? "PrimitiveType\" href=\"http://schema.omg.org/spec/UML/2.0/uml.xml#Integer\"/>\n" : "PrimitiveType\" href=\"http://schema.omg.org/spec/UML/2.1/uml.xml#Integer\"/>\n"); else if (t.explicit_type == "bool") out << ((_uml_20) ? "PrimitiveType\" href=\"http://schema.omg.org/spec/UML/2.0/uml.xml#Boolean\"/>\n" : "PrimitiveType\" href=\"http://schema.omg.org/spec/UML/2.1/uml.xml#Boolean\"/>\n"); else if (t.explicit_type == "string") out << ((_uml_20) ? "PrimitiveType\" href=\"http://schema.omg.org/spec/UML/2.0/uml.xml#String\"/>\n" : "PrimitiveType\" href=\"http://schema.omg.org/spec/UML/2.1/uml.xml#String\"/>\n"); else if (t.explicit_type == "long") out << ((_uml_20) ? "PrimitiveType\" href=\"http://schema.omg.org/spec/UML/2.0/uml.xml#UnlimitedNatural\"/>\n" : "PrimitiveType\" href=\"http://schema.omg.org/spec/UML/2.1/uml.xml#UnlimitedNatural\"/>\n"); else { out << "Class\""; out.idref_datatype(t.explicit_type); out << "/>\n"; } } }
bool UmlAttribute::write_if_needed(FileOut & out) { switch (_lang) { case Uml: parent()->write(out); out.indent(); out << "<UML:Attribute name=\"" << name() << '"'; break; case Cpp: if (cppDecl().isEmpty()) return FALSE; parent()->write(out); out.indent(); out << "<UML:Attribute name=\"" << true_name(cppDecl()) << '"'; break; default: // Java if (javaDecl().isEmpty()) return FALSE; parent()->write(out); out.indent(); out << "<UML:Attribute name=\"" << true_name(javaDecl()) << '"'; break; } out.id(this); switch (_lang) { case Uml: write_visibility(out); break; case Cpp: write_visibility(out, (cppVisibility() == DefaultVisibility) ? visibility() : cppVisibility()); break; default: // Java if (javaDecl().find("${visibility}") != -1) write_visibility(out, visibility()); break; } write_scope(out); out << ">\n"; out.indent(+1); const UmlTypeSpec & t = type(); if ((t.type != 0) || !t.explicit_type.isEmpty()) { out.indent(); out << "<UML:StructuralFeature.type>\n"; out.indent(); out << "\t<UML:DataType"; switch (_lang) { case Uml: if (t.type != 0) out.idref(t.type); else out.idref_datatype(t.explicit_type); break; case Cpp: write_cpp_type(out); break; default: // java write_java_type(out); } out << "/>\n"; out.indent(); out << "</UML:StructuralFeature.type>\n"; } write_stereotype(out); write_annotation(out); write_description_properties(out); out.indent(-1); out.indent(); out << "</UML:Attribute>\n"; unload(); return TRUE; }