/**************************************************************************** ** ** Copyright (C) 2013 Sandro S. Andrade ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtUml module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qumlcalloperationaction.h" #include "private/qumlcalloperationactionobject_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE /*! \class QUmlCallOperationAction \inmodule QtUml \brief A call operation action is an action that transmits an operation call request to the target object, where it may cause the invocation of associated behavior. The argument values of the action are available to the execution of the invoked behavior. If the action is marked synchronous, the execution of the call operation action waits until the execution of the invoked behavior completes and a reply transmission is returned to the caller; otherwise execution of the action is complete when the invocation of the operation is established and the execution of the invoked operation proceeds concurrently with the execution of the calling behavior. Any values returned as part of the reply transmission are put on the result output pins of the call operation action. Upon receipt of the reply transmission, execution of the call operation action is complete. */ /*! Creates a new QUmlCallOperationAction. Also creates the corresponding QObject-based representation returned by asQModelingObject() if \a createQModelingObject is true. */ QUmlCallOperationAction::QUmlCallOperationAction(bool createQModelingObject) : _operation(0), _target(0) { if (createQModelingObject) _qModelingObject = qobject_cast(new QUmlCallOperationActionObject(this)); } /*! Destroys the QUmlCallOperationAction. */ QUmlCallOperationAction::~QUmlCallOperationAction() { QModelingElement::deleteQModelingObject(); } /*! Returns a deep-copied clone of the QUmlCallOperationAction. */ QModelingElement *QUmlCallOperationAction::clone() const { QUmlCallOperationAction *c = new QUmlCallOperationAction; c->asQModelingObject()->setObjectName(this->asQModelingObject()->objectName()); c->asQModelingObject()->setProperty("role", this->asQModelingObject()->property("role")); foreach (QUmlComment *element, ownedComments()) c->addOwnedComment(dynamic_cast(element->clone())); c->setName(name()); if (nameExpression()) c->setNameExpression(dynamic_cast(nameExpression()->clone())); c->setVisibility(visibility()); c->setLeaf(isLeaf()); foreach (QUmlExceptionHandler *element, handlers()) c->addHandler(dynamic_cast(element->clone())); c->setLocallyReentrant(isLocallyReentrant()); foreach (QUmlConstraint *element, localPostconditions()) c->addLocalPostcondition(dynamic_cast(element->clone())); foreach (QUmlConstraint *element, localPreconditions()) c->addLocalPrecondition(dynamic_cast(element->clone())); foreach (QUmlInputPin *element, arguments()) c->addArgument(dynamic_cast(element->clone())); c->setSynchronous(isSynchronous()); foreach (QUmlOutputPin *element, results()) c->addResult(dynamic_cast(element->clone())); if (target()) c->setTarget(dynamic_cast(target()->clone())); return c; } // OWNED ATTRIBUTES /*! The operation to be invoked by the action execution. */ QUmlOperation *QUmlCallOperationAction::operation() const { // This is a read-write association end return _operation; } /*! Adjusts operation to \a operation. */ void QUmlCallOperationAction::setOperation(QUmlOperation *operation) { // This is a read-write association end if (_operation != operation) { _operation = operation; if (operation && operation->asQModelingObject() && this->asQModelingObject()) QObject::connect(operation->asQModelingObject(), SIGNAL(destroyed()), this->asQModelingObject(), SLOT(setOperation())); } } /*! The target object to which the request is sent. The classifier of the target object is used to dynamically determine a behavior to invoke. This object constitutes the context of the execution of the operation. \b {Subsetted property(ies):} QUmlAction::inputs(). */ QUmlInputPin *QUmlCallOperationAction::target() const { // This is a read-write association end return _target; } /*! Adjusts target to \a target. */ void QUmlCallOperationAction::setTarget(QUmlInputPin *target) { // This is a read-write association end if (_target != target) { // Adjust subsetted properties removeInput(_target); _target = target; if (target && target->asQModelingObject() && this->asQModelingObject()) QObject::connect(target->asQModelingObject(), SIGNAL(destroyed()), this->asQModelingObject(), SLOT(setTarget())); target->asQModelingObject()->setParent(this->asQModelingObject()); // Adjust subsetted properties if (target) { addInput(target); } } } QT_END_NAMESPACE