1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 Jochen Becher
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25
26 #include "dflatassignmentvisitor.h"
27
28 #include "qmt/diagram/delement.h"
29 #include "qmt/diagram/dobject.h"
30 #include "qmt/diagram/dpackage.h"
31 #include "qmt/diagram/dclass.h"
32 #include "qmt/diagram/dcomponent.h"
33 #include "qmt/diagram/ddiagram.h"
34 #include "qmt/diagram/ditem.h"
35 #include "qmt/diagram/drelation.h"
36 #include "qmt/diagram/dinheritance.h"
37 #include "qmt/diagram/ddependency.h"
38 #include "qmt/diagram/dassociation.h"
39 #include "qmt/diagram/dconnection.h"
40 #include "qmt/diagram/dannotation.h"
41 #include "qmt/diagram/dboundary.h"
42 #include "qmt/diagram/dswimlane.h"
43 #include "qmt/infrastructure/qmtassert.h"
44
45 namespace qmt {
46
47 // TODO may flat assignment visitor use operator=() ?
48
DFlatAssignmentVisitor(DElement * target)49 DFlatAssignmentVisitor::DFlatAssignmentVisitor(DElement *target)
50 : m_target(target)
51 {
52 QMT_CHECK(target);
53 }
54
visitDElement(const DElement * element)55 void DFlatAssignmentVisitor::visitDElement(const DElement *element)
56 {
57 Q_UNUSED(element)
58 }
59
visitDObject(const DObject * object)60 void DFlatAssignmentVisitor::visitDObject(const DObject *object)
61 {
62 visitDElement(object);
63 auto target = dynamic_cast<DObject *>(m_target);
64 QMT_ASSERT(target, return);
65 target->setStereotypes(object->stereotypes());
66 target->setName(object->name());
67 target->setPos(object->pos());
68 target->setRect(object->rect());
69 target->setAutoSized(object->isAutoSized());
70 target->setDepth(object->depth());
71 target->setVisualPrimaryRole(object->visualPrimaryRole());
72 target->setVisualSecondaryRole(object->visualSecondaryRole());
73 target->setVisualEmphasized(object->isVisualEmphasized());
74 target->setStereotypeDisplay(object->stereotypeDisplay());
75 }
76
visitDPackage(const DPackage * package)77 void DFlatAssignmentVisitor::visitDPackage(const DPackage *package)
78 {
79 visitDObject(package);
80 }
81
visitDClass(const DClass * klass)82 void DFlatAssignmentVisitor::visitDClass(const DClass *klass)
83 {
84 visitDObject(klass);
85 auto target = dynamic_cast<DClass *>(m_target);
86 QMT_ASSERT(target, return);
87 target->setUmlNamespace(klass->umlNamespace());
88 target->setTemplateParameters(klass->templateParameters());
89 target->setTemplateDisplay(klass->templateDisplay());
90 target->setMembers(klass->members());
91 target->setShowAllMembers(klass->showAllMembers());
92 target->setVisibleMembers(klass->visibleMembers());
93 }
94
visitDComponent(const DComponent * component)95 void DFlatAssignmentVisitor::visitDComponent(const DComponent *component)
96 {
97 visitDObject(component);
98 auto target = dynamic_cast<DComponent *>(m_target);
99 QMT_ASSERT(target, return);
100 target->setPlainShape(component->isPlainShape());
101 }
102
visitDDiagram(const DDiagram * diagram)103 void DFlatAssignmentVisitor::visitDDiagram(const DDiagram *diagram)
104 {
105 visitDObject(diagram);
106 }
107
visitDItem(const DItem * item)108 void DFlatAssignmentVisitor::visitDItem(const DItem *item)
109 {
110 visitDObject(item);
111 auto target = dynamic_cast<DItem *>(m_target);
112 QMT_ASSERT(target, return);
113 target->setVariety(target->variety());
114 target->setShapeEditable(target->isShapeEditable());
115 target->setShape(target->shape());
116 }
117
visitDRelation(const DRelation * relation)118 void DFlatAssignmentVisitor::visitDRelation(const DRelation *relation)
119 {
120 visitDElement(relation);
121 auto target = dynamic_cast<DRelation *>(m_target);
122 QMT_ASSERT(target, return);
123 target->setStereotypes(relation->stereotypes());
124 target->setIntermediatePoints(relation->intermediatePoints());
125 }
126
visitDInheritance(const DInheritance * inheritance)127 void DFlatAssignmentVisitor::visitDInheritance(const DInheritance *inheritance)
128 {
129 visitDRelation(inheritance);
130 }
131
visitDDependency(const DDependency * dependency)132 void DFlatAssignmentVisitor::visitDDependency(const DDependency *dependency)
133 {
134 visitDRelation(dependency);
135 auto target = dynamic_cast<DDependency *>(m_target);
136 QMT_ASSERT(target, return);
137 target->setDirection(dependency->direction());
138 }
139
visitDAssociation(const DAssociation * association)140 void DFlatAssignmentVisitor::visitDAssociation(const DAssociation *association)
141 {
142 visitDRelation(association);
143 auto target = dynamic_cast<DAssociation *>(m_target);
144 QMT_ASSERT(target, return);
145 target->setEndA(association->endA());
146 target->setEndB(association->endB());
147 // TODO assign assoziation class?
148 }
149
visitDConnection(const DConnection * connection)150 void DFlatAssignmentVisitor::visitDConnection(const DConnection *connection)
151 {
152 visitDRelation(connection);
153 auto target = dynamic_cast<DConnection *>(m_target);
154 QMT_ASSERT(target, return);
155 target->setCustomRelationId(connection->customRelationId());
156 target->setEndA(connection->endA());
157 target->setEndB(connection->endB());
158 }
159
visitDAnnotation(const DAnnotation * annotation)160 void DFlatAssignmentVisitor::visitDAnnotation(const DAnnotation *annotation)
161 {
162 visitDElement(annotation);
163 auto target = dynamic_cast<DAnnotation *>(m_target);
164 QMT_ASSERT(target, return);
165 target->setText(annotation->text());
166 target->setPos(annotation->pos());
167 target->setRect(annotation->rect());
168 target->setAutoSized(annotation->isAutoSized());
169 target->setVisualRole(annotation->visualRole());
170 }
171
visitDBoundary(const DBoundary * boundary)172 void DFlatAssignmentVisitor::visitDBoundary(const DBoundary *boundary)
173 {
174 visitDElement(boundary);
175 auto target = dynamic_cast<DBoundary *>(m_target);
176 QMT_ASSERT(target, return);
177 target->setText(boundary->text());
178 target->setPos(boundary->pos());
179 target->setRect(boundary->rect());
180 }
181
visitDSwimlane(const DSwimlane * swimlane)182 void DFlatAssignmentVisitor::visitDSwimlane(const DSwimlane *swimlane)
183 {
184 visitDElement(swimlane);
185 auto target = dynamic_cast<DSwimlane *>(m_target);
186 QMT_ASSERT(target, return);
187 target->setText(swimlane->text());
188 target->setHorizontal(swimlane->isHorizontal());
189 target->setPos(swimlane->pos());
190 }
191
192 } // namespace qmt
193