Exemple #1
0
void UmlTransition::solveThem()
{
    Q3ValueList<Transition>::Iterator iter;

    for (iter = All.begin(); iter != All.end(); ++iter) {
        Transition & transition = *iter;

        QMap<WrapperStr, UmlItem *>::Iterator isrc = UmlItem::All.find(transition.source);
        QMap<WrapperStr, UmlItem *>::Iterator itgt = UmlItem::All.find(transition.target);

        if ((isrc == UmlItem::All.end()) /*&&
	((isrc = Outgoings.find(transition.id)) == Outgoings.end())*/) {
            if (!FileIn::isBypassedId(transition.source))
                UmlCom::trace("transition '" + transition.id + "' : unknown source reference '" + transition.source + "'<br>");
        }
        else if ((itgt == UmlItem::All.end()) /*&&
	     ((itgt = Incomings.find(transition.id)) == Incomings.end())*/) {
            if (!FileIn::isBypassedId(transition.target))
                UmlCom::trace("transition '" + transition.id + "' : unknown target reference '" + transition.target + "'<br>");
        }
        else {
            UmlTransition * t = UmlTransition::create(*isrc, *itgt);

            if (t == 0)
                UmlCom::trace("cannot create transition '" + transition.id + "'<br>");
            else {
                UmlItem::All.insert(transition.id, t);

                if (! transition.name.isEmpty())
                    t->set_Name(transition.name);

                if (! transition.effect.isEmpty())
                    t->set_Activity(transition.effect);

                if (! transition.trigger.isEmpty())
                    t->set_Trigger(transition.trigger);
                else if (! transition.triggerRef.isEmpty()) {
                    WrapperStr trig = Trigger::get(transition.triggerRef);

                    if (!trig.isNull())
                        t->set_Trigger(trig);
                    else if (!FileIn::isBypassedId(transition.triggerRef))
                        UmlCom::trace("transition '" + transition.id + "' : unknown trigger reference '" + transition.triggerRef + "'<br>");
                }

                if (! transition.guard.isEmpty())
                    t->set_Guard(transition.guard);

                if (*isrc == *itgt)
                    t->set_IsExternal(transition.kind == "external");

                t->unload(FALSE, FALSE);
            }
        }
    }

    All.clear();
}