Exemplo n.º 1
0
void UmlFragment::write(FileOut & out, UmlItem * diagram, Q3PtrList<UmlSequenceMessage> & msgs)
{
    WrapperStr oper = name();

    if (oper == "ref")
        write_ref(out, diagram, msgs);
    else {
        if ((oper != "alt") &&
            (oper != "opt") &&
            (oper != "loop") &&
            (oper != "break") &&
            (oper != "par") &&
            (oper != "seq") &&
            (oper != "strict") &&
            (oper != "neg") &&
            (oper != "critical") &&
            (oper != "assert") &&
            (oper != "ignore") &&
            (oper != "consider"))
            oper = "";
        else {
            static int rank = 0;

            out.indent();
            out << "<fragment xmi:type=\"uml:CombinedFragment\"";
            out.id_prefix(diagram, "COMBINEDFRAGMENT", ++rank);

            if (! covered.isEmpty()) {
                out << " covered=\"";

                UmlClassInstanceReference * lifeline = covered.first();

                for (;;) {
                    out.ref_only(diagram, lifeline->lifeline());
                    lifeline = covered.next();

                    if (lifeline == 0)
                        break;

                    out << " ";
                }

                out << '"';
            }

            out << " interactionOperator=\"" << oper.operator QString() << "\">\n";
            out.indent(+1);
        }

        const Q3PtrVector<UmlFragmentCompartment> & subs = compartments();
        unsigned n = subs.size();

        for (unsigned i = 0; i != n; i += 1)
            subs.at(i)->write(out, diagram, msgs, oper);

        if (!oper.isEmpty()) {
            out.indent(-1);
            out.indent();
            out << "</fragment>\n";
        }
    }
}