summaryrefslogtreecommitdiffstats
path: root/src/uml/qumlstringexpression.cpp
diff options
context:
space:
mode:
authorSandro S. Andrade <sandroandrade@kde.org>2013-09-02 22:02:41 -0300
committerSandro S. Andrade <sandroandrade@kde.org>2013-09-03 03:04:37 +0200
commita143fe8c5451493b128b4c6f0750f02b58af8666 (patch)
tree4b74787f6ece9256db04dc65002cae749f6936b3 /src/uml/qumlstringexpression.cpp
parent2bfe659e4d30b449747585e18eeb84bfc5d73f43 (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.cpp461
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
-