diff options
| author | Sandro S. Andrade <sandroandrade@kde.org> | 2013-09-02 22:02:41 -0300 |
|---|---|---|
| committer | Sandro S. Andrade <sandroandrade@kde.org> | 2013-09-03 03:04:37 +0200 |
| commit | a143fe8c5451493b128b4c6f0750f02b58af8666 (patch) | |
| tree | 4b74787f6ece9256db04dc65002cae749f6936b3 /src/uml/qumlstringexpression.cpp | |
| parent | 2bfe659e4d30b449747585e18eeb84bfc5d73f43 (diff) | |
Add initial version of new UML metamodel implementation
Change-Id: Ic29a04dc49fac075d9c736237573b7f4e3da85ef
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'src/uml/qumlstringexpression.cpp')
| -rw-r--r-- | src/uml/qumlstringexpression.cpp | 461 |
1 files changed, 54 insertions, 407 deletions
diff --git a/src/uml/qumlstringexpression.cpp b/src/uml/qumlstringexpression.cpp index e0344df6..8805e75d 100644 --- a/src/uml/qumlstringexpression.cpp +++ b/src/uml/qumlstringexpression.cpp @@ -40,462 +40,109 @@ ****************************************************************************/ #include "qumlstringexpression.h" -#include <QtUml/QUmlComment> -#include <QtUml/QUmlDependency> -#include <QtUml/QUmlElement> -#include <QtUml/QUmlNamedElement> -#include <QtUml/QUmlNamespace> -#include <QtUml/QUmlPackage> -#include <QtUml/QUmlParameterableElement> -#include <QtUml/QUmlTemplateBinding> -#include <QtUml/QUmlTemplateParameter> -#include <QtUml/QUmlTemplateSignature> -#include <QtUml/QUmlType> -#include <QtUml/QUmlValueSpecification> - -QT_BEGIN_NAMESPACE +#include "private/qumlstringexpressionobject_p.h" /*! - \class UmlStringExpression + \class QUmlStringExpression \inmodule QtUml \brief An expression that specifies a string value that is derived by concatenating a set of sub string expressions, some of which might be template parameters. */ - -QUmlStringExpression::QUmlStringExpression(QObject *parent) : - QObject(parent) -{ -} - -// OWNED ATTRIBUTES [Element] - -/*! - The Comments owned by this element. - */ -const QSet<QUmlComment *> QUmlStringExpression::ownedComment() const -{ - return *(reinterpret_cast<const QSet<QUmlComment *> *>(&_ownedComment)); -} - -/*! - The Elements owned by this element. - */ -const QSet<QUmlElement *> QUmlStringExpression::ownedElement() const -{ - return *(reinterpret_cast<const QSet<QUmlElement *> *>(&_ownedElement)); -} - -/*! - The Element that owns this element. - */ -QUmlElement *QUmlStringExpression::owner() const -{ - return reinterpret_cast<QUmlElement *>(_owner); -} - -// OWNED ATTRIBUTES [NamedElement] - -/*! - Indicates the dependencies that reference the client. - */ -const QSet<QUmlDependency *> QUmlStringExpression::clientDependency() const -{ - return *(reinterpret_cast<const QSet<QUmlDependency *> *>(&_clientDependency)); -} - -/*! - The name of the NamedElement. - */ -QString QUmlStringExpression::name() const -{ - return _name; -} - -/*! - The string expression used to define the name of this named element. - */ -QUmlStringExpression *QUmlStringExpression::nameExpression() const -{ - return reinterpret_cast<QUmlStringExpression *>(_nameExpression); -} - -/*! - Specifies the namespace that owns the NamedElement. - */ -QUmlNamespace *QUmlStringExpression::namespace_() const -{ - return reinterpret_cast<QUmlNamespace *>(_namespace_); -} - -/*! - A name which allows the NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from the names of the containing namespaces starting at the root of the hierarchy and ending with the name of the NamedElement itself. - */ -QString QUmlStringExpression::qualifiedName() const -{ - return UmlNamedElement::qualifiedName(); -} -// OWNED ATTRIBUTES [TypedElement] - -/*! - This information is derived from the return result for this Operation.The type of the TypedElement. - */ -QUmlType *QUmlStringExpression::type() const -{ - return reinterpret_cast<QUmlType *>(_type); -} - -// OWNED ATTRIBUTES [ParameterableElement] - -/*! - The formal template parameter that owns this element. - */ -QUmlTemplateParameter *QUmlStringExpression::owningTemplateParameter() const +QUmlStringExpression::QUmlStringExpression(bool createQObject) : + QUmlExpression(false), + _owningExpression(0) { - return reinterpret_cast<QUmlTemplateParameter *>(_owningTemplateParameter); + if (createQObject) + _qObject = new QUmlStringExpressionObject(this); } -/*! - The template parameter that exposes this element as a formal parameter. - */ -QUmlTemplateParameter *QUmlStringExpression::templateParameter() const -{ - return reinterpret_cast<QUmlTemplateParameter *>(_templateParameter); -} - -// OWNED ATTRIBUTES [PackageableElement] - -/*! - Indicates that packageable elements must always have a visibility, i.e., visibility is not optional. - */ -QtUml::VisibilityKind QUmlStringExpression::visibility() const -{ - return _visibility; -} - -// OWNED ATTRIBUTES [Expression] - -/*! - Specifies a sequence of operands. - */ -const QList<QUmlValueSpecification *> QUmlStringExpression::operand() const +QUmlStringExpression::~QUmlStringExpression() { - return *(reinterpret_cast<const QList<QUmlValueSpecification *> *>(&_operand)); + if (!deletingFromQObject) { + _qObject->setProperty("deletingFromModelingObject", true); + delete _qObject; + } } -/*! - The symbol associated with the node in the expression tree. - */ -QString QUmlStringExpression::symbol() const -{ - return _symbol; -} - -// OWNED ATTRIBUTES [TemplateableElement] - -/*! - The optional template signature specifying the formal template parameters. - */ -QUmlTemplateSignature *QUmlStringExpression::ownedTemplateSignature() const -{ - return reinterpret_cast<QUmlTemplateSignature *>(_ownedTemplateSignature); -} - -/*! - The optional bindings from this element to templates. - */ -const QSet<QUmlTemplateBinding *> QUmlStringExpression::templateBinding() const -{ - return *(reinterpret_cast<const QSet<QUmlTemplateBinding *> *>(&_templateBinding)); -} - -// OWNED ATTRIBUTES [StringExpression] +// OWNED ATTRIBUTES /*! The string expression of which this expression is a substring. */ -QUmlStringExpression *QUmlStringExpression::owningExpression() const -{ - return reinterpret_cast<QUmlStringExpression *>(_owningExpression); -} - -/*! - The StringExpressions that constitute this StringExpression. - */ -const QSet<QUmlStringExpression *> QUmlStringExpression::subExpression() const -{ - return *(reinterpret_cast<const QSet<QUmlStringExpression *> *>(&_subExpression)); -} - -// OPERATIONS [Element] - -/*! - The query allOwnedElements() gives all of the direct and indirect owned elements of an element. - */ -QSet<QUmlElement *> QUmlStringExpression::allOwnedElements() const -{ - QSet<QUmlElement *> r; - foreach (UmlElement *element, UmlElement::allOwnedElements()) - r.insert(reinterpret_cast<QUmlElement *>(element)); - return r; -} - -/*! - The query mustBeOwned() indicates whether elements of this type must have an owner. Subclasses of Element that do not require an owner must override this operation. - */ -bool QUmlStringExpression::mustBeOwned() const -{ - return UmlElement::mustBeOwned(); -} - -// OPERATIONS [NamedElement] - -/*! - The query allNamespaces() gives the sequence of namespaces in which the NamedElement is nested, working outwards. - */ -QList<QUmlNamespace *> QUmlStringExpression::allNamespaces() const -{ - QList<QUmlNamespace *> r; - foreach (UmlNamespace *element, UmlNamedElement::allNamespaces()) - r.append(reinterpret_cast<QUmlNamespace *>(element)); - return r; -} - -/*! - The query allOwningPackages() returns all the directly or indirectly owning packages. - */ -QSet<QUmlPackage *> QUmlStringExpression::allOwningPackages() const +QUmlStringExpression * +QUmlStringExpression::owningExpression() const { - QSet<QUmlPackage *> r; - foreach (UmlPackage *element, UmlNamedElement::allOwningPackages()) - r.insert(reinterpret_cast<QUmlPackage *>(element)); - return r; -} + // This is a read-write association end -/*! - The query isDistinguishableFrom() determines whether two NamedElements may logically co-exist within a Namespace. By default, two named elements are distinguishable if (a) they have unrelated types or (b) they have related types but different names. - */ -bool QUmlStringExpression::isDistinguishableFrom(QUmlNamedElement *n, QUmlNamespace *ns) const -{ - return UmlNamedElement::isDistinguishableFrom(n, ns); + return _owningExpression; } -/*! - The query separator() gives the string that is used to separate names when constructing a qualified name. - */ -QString QUmlStringExpression::separator() const +void QUmlStringExpression::setOwningExpression(QUmlStringExpression *owningExpression) { - return UmlNamedElement::separator(); -} + // This is a read-write association end -// OPERATIONS [ParameterableElement] - -/*! - The query isTemplateParameter() determines if this parameterable element is exposed as a formal template parameter. - */ -bool QUmlStringExpression::isTemplateParameter() const -{ - return UmlParameterableElement::isTemplateParameter(); -} + if (_owningExpression != owningExpression) { + // Adjust subsetted properties -// OPERATIONS [ValueSpecification] + _owningExpression = owningExpression; + if (owningExpression->asQObject() && this->asQObject()) + QObject::connect(owningExpression->asQObject(), SIGNAL(destroyed()), this->asQObject(), SLOT(setOwningExpression())); -/*! - The query booleanValue() gives a single Boolean value when one can be computed. - */ -bool QUmlStringExpression::booleanValue() const -{ - return UmlValueSpecification::booleanValue(); + // Adjust subsetted properties + setOwner(owningExpression); + } } /*! - The query integerValue() gives a single Integer value when one can be computed. + The StringExpressions that constitute this StringExpression. */ -int QUmlStringExpression::integerValue() const +const QSet<QUmlStringExpression *> +QUmlStringExpression::subExpression() const { - return UmlValueSpecification::integerValue(); -} + // This is a read-write association end -/*! - The query isCompatibleWith() determines if this parameterable element is compatible with the specified parameterable element. By default parameterable element P is compatible with parameterable element Q if the kind of P is the same or a subtype as the kind of Q. In addition, for ValueSpecification, the type must be conformant with the type of the specified parameterable element. - */ -bool QUmlStringExpression::isCompatibleWith(QUmlParameterableElement *p) const -{ - return UmlValueSpecification::isCompatibleWith(p); + return _subExpression; } -/*! - The query isComputable() determines whether a value specification can be computed in a model. This operation cannot be fully defined in OCL. A conforming implementation is expected to deliver true for this operation for all value specifications that it can compute, and to compute all of those for which the operation is true. A conforming implementation is expected to be able to compute the value of all literals. - */ -bool QUmlStringExpression::isComputable() const +void QUmlStringExpression::addSubExpression(QUmlStringExpression *subExpression) { - return UmlValueSpecification::isComputable(); -} + // This is a read-write association end -/*! - The query isNull() returns true when it can be computed that the value is null. - */ -bool QUmlStringExpression::isNull() const -{ - return UmlValueSpecification::isNull(); -} + if (!_subExpression.contains(subExpression)) { + _subExpression.insert(subExpression); + if (subExpression->asQObject() && this->asQObject()) + QObject::connect(subExpression->asQObject(), SIGNAL(destroyed(QObject*)), this->asQObject(), SLOT(removeSubExpression(QObject *))); + subExpression->asQObject()->setParent(this->asQObject()); -/*! - The query realValue() gives a single Real value when one can be computed. - */ -double QUmlStringExpression::realValue() const -{ - return UmlValueSpecification::realValue(); + // Adjust subsetted properties + addOwnedElement(subExpression); + } } -/*! - The query unlimitedValue() gives a single UnlimitedNatural value when one can be computed. - */ -int QUmlStringExpression::unlimitedValue() const +void QUmlStringExpression::removeSubExpression(QUmlStringExpression *subExpression) { - return UmlValueSpecification::unlimitedValue(); -} + // This is a read-write association end -// OPERATIONS [TemplateableElement] + if (_subExpression.contains(subExpression)) { + _subExpression.remove(subExpression); + if (subExpression->asQObject()) + subExpression->asQObject()->setParent(0); -/*! - The query isTemplate() returns whether this templateable element is actually a template. - */ -bool QUmlStringExpression::isTemplate() const -{ - return UmlTemplateableElement::isTemplate(); + // Adjust subsetted properties + removeOwnedElement(subExpression); + } } -/*! - The query parameterableElements() returns the set of elements that may be used as the parametered elements for a template parameter of this templateable element. By default, this set includes all the owned elements. Subclasses may override this operation if they choose to restrict the set of parameterable elements. - */ -QSet<QUmlParameterableElement *> QUmlStringExpression::parameterableElements() const -{ - QSet<QUmlParameterableElement *> r; - foreach (UmlParameterableElement *element, UmlTemplateableElement::parameterableElements()) - r.insert(reinterpret_cast<QUmlParameterableElement *>(element)); - return r; -} - -// OPERATIONS [StringExpression] +// OPERATIONS /*! The query stringValue() returns the string that concatenates, in order, all the component string literals of all the subexpressions that are part of the StringExpression. */ QString QUmlStringExpression::stringValue() const { - return UmlStringExpression::stringValue(); -} - -// SLOTS FOR OWNED ATTRIBUTES [Element] - -void QUmlStringExpression::addOwnedComment(UmlComment *ownedComment) -{ - UmlElement::addOwnedComment(ownedComment); -} - -void QUmlStringExpression::removeOwnedComment(UmlComment *ownedComment) -{ - UmlElement::removeOwnedComment(ownedComment); -} - -// SLOTS FOR OWNED ATTRIBUTES [NamedElement] - -void QUmlStringExpression::addClientDependency(UmlDependency *clientDependency) -{ - UmlNamedElement::addClientDependency(clientDependency); -} - -void QUmlStringExpression::removeClientDependency(UmlDependency *clientDependency) -{ - UmlNamedElement::removeClientDependency(clientDependency); -} - -void QUmlStringExpression::setName(QString name) -{ - UmlNamedElement::setName(name); -} - -void QUmlStringExpression::setNameExpression(QUmlStringExpression *nameExpression) -{ - UmlNamedElement::setNameExpression(nameExpression); -} -// SLOTS FOR OWNED ATTRIBUTES [TypedElement] - -void QUmlStringExpression::setType(QUmlType *type) -{ - UmlTypedElement::setType(type); -} - -// SLOTS FOR OWNED ATTRIBUTES [ParameterableElement] - -void QUmlStringExpression::setOwningTemplateParameter(QUmlTemplateParameter *owningTemplateParameter) -{ - UmlParameterableElement::setOwningTemplateParameter(owningTemplateParameter); -} - -void QUmlStringExpression::setTemplateParameter(QUmlTemplateParameter *templateParameter) -{ - UmlParameterableElement::setTemplateParameter(templateParameter); -} - -// SLOTS FOR OWNED ATTRIBUTES [PackageableElement] - -void QUmlStringExpression::setVisibility(QtUml::VisibilityKind visibility) -{ - UmlPackageableElement::setVisibility(visibility); -} + qWarning("UmlStringExpression::stringValue(): to be implemented (operation)"); -// SLOTS FOR OWNED ATTRIBUTES [Expression] - -void QUmlStringExpression::addOperand(UmlValueSpecification *operand) -{ - UmlExpression::addOperand(operand); + return QString (); } -void QUmlStringExpression::removeOperand(UmlValueSpecification *operand) -{ - UmlExpression::removeOperand(operand); -} - -void QUmlStringExpression::setSymbol(QString symbol) -{ - UmlExpression::setSymbol(symbol); -} - -// SLOTS FOR OWNED ATTRIBUTES [TemplateableElement] - -void QUmlStringExpression::setOwnedTemplateSignature(QUmlTemplateSignature *ownedTemplateSignature) -{ - UmlTemplateableElement::setOwnedTemplateSignature(ownedTemplateSignature); -} - -void QUmlStringExpression::addTemplateBinding(UmlTemplateBinding *templateBinding) -{ - UmlTemplateableElement::addTemplateBinding(templateBinding); -} - -void QUmlStringExpression::removeTemplateBinding(UmlTemplateBinding *templateBinding) -{ - UmlTemplateableElement::removeTemplateBinding(templateBinding); -} - -// SLOTS FOR OWNED ATTRIBUTES [StringExpression] - -void QUmlStringExpression::setOwningExpression(QUmlStringExpression *owningExpression) -{ - UmlStringExpression::setOwningExpression(owningExpression); -} - -void QUmlStringExpression::addSubExpression(UmlStringExpression *subExpression) -{ - UmlStringExpression::addSubExpression(subExpression); -} - -void QUmlStringExpression::removeSubExpression(UmlStringExpression *subExpression) -{ - UmlStringExpression::removeSubExpression(subExpression); -} - -QT_END_NAMESPACE - |
