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