crystal-facet-uml Architecture
crystal-facet-uml Architecture UMLClassDiagram D0042
About this Document:
(C)
We acknowledge that this document uses material from the
arc 42 architecture template, http://www.arc42.de.
Created by Dr. Peter Hruschka & Dr. Gernot Starke.
crystal-facet-uml Architecture
This Document Comment C0161
describes
- the challenge to be solved
- the selected solution
- the decisions and considered alternatives
crystal-facet-uml Architecture
Crystal-Facet-Uml cfu Image C0525
Introduction and Goals
Introduction and Goals UMLUseCaseDiagram D0001
crystal-facet-uml creates sysml/uml diagrams to document system and software architecture.
As software architect, you create a set of diagrams describing
use-cases, requirements, structural views, behavioral and deployment views.
This diagram shows the use-cases that crystal-facet-uml addresses.
Introduction and Goals, Use Cases on Data Model
Design consistent architecture diagrams UseCase C0008
The main goal of crystal facet uml is to create a set of consistent uml diagrams.
Diagrams help in desinging a system that satisfies a set of requirements and decomposes the system into smaller entities.
Consistency encompasses:
- Consistent relations between objects
- Consistent naming of objects
- Consistent locations of objects in diagrams
check what items to integrate --> SW Integrator Association R0036
understand interfaces to test --> SW Integration Tester Association R0037
cluster items of same lifecycle --> Configuration Manager Association R0038
discuss what to create --> SW Developer Association R0039
primary actor --> SW Architect Association R0773
Introduction and Goals, gui search sequence, Context And Scope, undo control flow, gui paste from clipboard
SW Architect Actor C0046
create diagrams --> crystal-facet-uml application Association R0649
Introduction and Goals, Context And Scope
Configuration Manager Actor C0047
Introduction and Goals, Context And Scope
SW Developer Actor C0048
A software developer understands the requirements and architecture; creates the software parts and performs reviews and unit-tests.
Introduction and Goals, Context And Scope
SW Integrator Actor C0049
Introduction and Goals, Context And Scope
SW Integration Tester Actor C0050
Understand Problem UseCase C0158
Understand
- Use Cases
- Requirements
- Quality Goals
actor --> SW Architect Association R0774
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
+-- Design consistent architecture diagrams Association R0652
Use Cases on Diagrams
Use Cases on Diagrams UMLUseCaseDiagram D0004
This diagram lists the main features of crystal facet uml.
Show Classifiers req UseCase C0009
Classifiers are drawn to diagrams one classifier is visible in one or multiple diagrams
··> Show multiple instances in same diagram Trace R0058
··> Mark Classifiers Trace R0061
··> Classifier has relations Trace R0062
··> Classifier is implicit instance Trace R0795
··> Classifier is explicit instance Trace R0796
Classifier is contained (child) req Requirement C0010
A Classifier can either exist stand-alone or be a sub-element of another classifier.
Show multiple instances in same diagram req Requirement C0011
One and the same classifier can be shown in a diagram multiple times (either as class/type or as instance)
Classifier has relations req Requirement C0012
A classifier can have zero, one or many relations; these may be of one or of differnet types. Circular dependencies may be forbidden if semantics undefined.
··> Classifier is contained (child) Refine R0063
Mark Classifiers req Requirement C0013
A classifier can be highlighted in one or several diagrams. The highlighting may be different in different diagrams where the classifier is shown.
highlight Operation F0007
grey out Operation F0008
Classifier is explicit instance req Requirement C0014
A classifier can be an explicitly modelled instance of another classifier
Classifier is implicit instance req Requirement C0015
A classifier can represent an anonymous (implicit) instance without defining an explicit instance relation
Diagrams are hierarchical req Requirement C0016
There is one root diagram. All other diagrams shall have a parent diagram.
Draw Diagrams req UseCase C0031
··> Show Classifiers Include R0057
··> Diagrams are hierarchical Trace R0794
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
+-- Classifier is explicit instance Association R0785
+-- Classifier is contained (child) Association R0786
+-- Classifier is implicit instance Association R0787
+-- Classifier has relations Association R0788
+-- Show Classifiers Association R0789
+-- Mark Classifiers Association R0790
+-- Show multiple instances in same diagram Association R0791
+-- Diagrams are hierarchical Association R0792
+-- Draw Diagrams Association R0793
Use Cases on Data Model
Use Cases on Data Model UMLUseCaseDiagram D0056
During development, new use cases are identified.
Use identical classifier in multiple diagrams req Requirement C0233
Provide means to use the identical classifier in multiple diagrams
Search Classifiers, find diagrams req UseCase C0259
Use Cases on Data Model, ctrl: consistency
All model elements must be visible req Requirement C0467
Whatever elements are stored in the model,
these must be visible in some diagram.
Otherwise 1) these cannot be reviewed and
2) their intention is unclear.
Introduction and Goals, Use Cases on Data Model
Design consistent architecture diagrams UseCase C0008
The main goal of crystal facet uml is to create a set of consistent uml diagrams.
Diagrams help in desinging a system that satisfies a set of requirements and decomposes the system into smaller entities.
Consistency encompasses:
- Consistent relations between objects
- Consistent naming of objects
- Consistent locations of objects in diagrams
··> All model elements must be visible Trace R0746
··> Use identical classifier in multiple diagrams Trace R0747
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
+-- Design consistent architecture diagrams Association R0652
+-- Search Classifiers, find diagrams Association R0782
+-- Use identical classifier in multiple diagrams Association R0783
+-- All model elements must be visible Association R0784
Export Use Cases
Export Use Cases UMLUseCaseDiagram D0108
Export diagrams req UseCase C0232
Export diagrams for use in architecture Documents.
Export document req UseCase C0320
··> Export diagrams Include R0456
Export Use Cases, Import/Sync Use Cases
Export model req UseCase C0319
The model can be exported in a machine-readable format.
Export Use Cases, Export Database Model / Diagrams, Quality Scenarios
Export (Model and/or Diagrams) req UseCase C0347
··> Export diagrams Include R0495
··> Export document Include R0496
··> Export model Include R0497
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
+-- Export model Association R0777
+-- Export document Association R0779
+-- Export diagrams Association R0780
+-- Export (Model and/or Diagrams) Association R0781
Import/Sync Use Cases
Import/Sync Use Cases UMLUseCaseDiagram D0096
JSON Storage Format, Import/Sync Use Cases
data exchange with external scripts req UseCase C0370
··> Export model Include R0608
··> Import model Include R0611
JSON Storage Format, Import/Sync Use Cases
git support req UseCase C0371
The model shall be stored in git in a way that git blame shows changed data entries, git merge can automatically merge git mergetool allows to manually merge
··> Export model Include R0609
··> Import model Include R0610
Export Use Cases, Import/Sync Use Cases
Export model req UseCase C0319
The model can be exported in a machine-readable format.
Import model req UseCase C0408
The model can be imported from a machine-readable data format.
Supported modes are:
- Import all elements to an empty database
- Import only new elements,
ignore existing and deleted elements
(or notify on modifications)
Unsupported modes are:
- Import new elements,
overwrite existing elements,
ignore deleted elements
- Import new elements,
overwrite existing elements,
delete missing elements
- 3-Way merge
The unsupported use cases have to be solved by external scripts if needed. A possible solution may be to a) export all elements, b) modify the export, c) import all elements to a new, empty database.
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
+-- data exchange with external scripts Association R0775
+-- git support Association R0776
+-- Export model Association R0777
+-- Import model Association R0778
Constraints
Constraints CFUListDiagram D0033
Standards: UML, SysML context Requirement C0162
crystal-facet-uml shall draw diagrams that are compliant (subset) to UML or SysML.
Output: png, svg, pdf, ps, txt / db, html, xmi Requirement C0163
crystal-facet-uml shall produce output suitable to be processed by text layout engines:
- latex
- docbook
- doxygen
- html
Interoperability context Requirement C0189
crystal-facet-uml has its strenghts.
Providing a full-featured text layout engine is not one of them.
Therefore it is important to be interoperable with text layout engines like
- latex
- docbook
- markdown, asciidoc, doxygen
UML/SysML Overview
UML/SysML Overview context UMLPackageDiagram D0025
This diagram shows an overview on UML and aims to explain what parts are available in crystal-facet-uml and how this is mapped to the crystal-facet-uml database.
UML/SysML Overview, MOF Overview
MOF (M3) context Package C0111
UML/SysML Overview, Base classes of UML
UML (M2) context Package C0112
··|> MOF (M3) Realization R0152
User Model (M1) context Package C0113
··|> UML (M2) Realization R0151
Objects of Reality (M0) context Package C0114
··|> User Model (M1) Realization R0150
UML/SysML Overview, Selected classes of SysML
SysML (M2) context Package C0190
··|> MOF (M3) Realization R0248
<<include>> ··> UML (M2) Include R0249
MOF Overview
MOF Overview context UMLClassDiagram D0026
This diagram shows a selection of MOF meta classes.
MOF::Class context Class C0115
MOF::Feature context Class C0116
MOF::Association context Class C0117
This diagram shows some example classes of the MOF Meta Model.
UML/SysML Overview, MOF Overview
MOF (M3) context Package C0111
+-- MOF::Class Association R0153
+-- MOF::Feature Association R0154
+-- MOF::Association Association R0155
Base classes of UML
Base classes of UML context UMLClassDiagram D0027
This diagram shows the base classes of the UML
UML/SysML Overview, Base classes of UML
UML (M2) context Package C0112
+-- UML::Image Association R0690
+-- UML::Comment Association R0157
+-- UML::Relationship Association R0158
+-- UML::DirectedRelationship Association R0159
+-- UML::Element Association R0156
+-- UML::Classifier Association R0177
+-- UML::Feature Association R0178
Base classes of UML , UML Classifier Ancestors, UML Feature Ancestors
UML::Element metaclass Class C0118
ownedComment *-- UML::Comment Association R0160
ownedElement --> UML::Element Association R0161
UML::Comment metaclass Class C0119
--|> UML::Element Generalization R0162
annotatedElement (0..*) --> UML::Element Association R0439
UML::Relationship metaclass Class C0120
--|> UML::Element Generalization R0163
Base classes of UML , UML Relationships
UML::DirectedRelationship metaclass Class C0121
--|> UML::Relationship Generalization R0164
Base classes of UML , UML Classifier Ancestors, UML Feature Ancestors, UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::Classifier metaclass Class C0125
Base classes of UML , UML Feature Ancestors, UML Feature Descendants
UML::Feature metaclass Class C0129
featuringClassifier --> UML::Classifier Association R0176
Base classes of UML , UML Structure: Classifier Descendants
UML::Image metaclass Class C0441
--|> UML::Element Generalization R0691
UML Classifier Ancestors
UML Classifier Ancestors context UMLClassDiagram D0028
description: see http://www.omg.org/spec/UML/2.5
UML Classifier Ancestors, UML Structural Elements (Non-Classifiers)
UML::TemplateableElement metaclass Class C0122
description: see http://www.omg.org/spec/UML/2.5
--|> UML::Element Generalization R0170
UML::Type metaclass Class C0123
description: see http://www.omg.org/spec/UML/2.5
--|> UML::PackageableElement Generalization R0173
UML Classifier Ancestors, UML Structural Elements (Non-Classifiers)
UML::Namespace metaclass Class C0124
description: see http://www.omg.org/spec/UML/2.5
--|> UML::NamedElement Generalization R0172
Base classes of UML , UML Classifier Ancestors, UML Feature Ancestors, UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::Classifier metaclass Class C0125
--|> UML::Namespace Generalization R0165
--|> UML::TemplateableElement Generalization R0166
--|> UML::Type Generalization R0167
--|> UML::RedefinableElement Generalization R0168
UML Classifier Ancestors, UML Feature Ancestors, UML Classifier Behavioral Descendants
UML::RedefinableElement metaclass Class C0126
description: see http://www.omg.org/spec/UML/2.5
--|> UML::NamedElement Generalization R0169
UML Classifier Ancestors, UML Feature Ancestors, UML Feature Descendants, UML Structural Elements (Non-Classifiers)
UML::NamedElement metaclass Class C0127
description: see http://www.omg.org/spec/UML/2.5
--|> UML::Element Generalization R0171
Base classes of UML , UML Classifier Ancestors, UML Feature Ancestors
UML::Element metaclass Class C0118
ownedElement --> UML::Element Association R0161
UML Classifier Ancestors, UML Structural Elements (Non-Classifiers)
UML::PackageableElement metaclass Class C0128
description: see http://www.omg.org/spec/UML/2.5
--|> UML::NamedElement Generalization R0174
UML Structural Elements (Non-Classifiers)
UML Structural Elements (Non-Classifiers) context UMLClassDiagram D0060
UML Classifier Ancestors, UML Structural Elements (Non-Classifiers)
UML::PackageableElement metaclass Class C0128
description: see http://www.omg.org/spec/UML/2.5
--|> UML::NamedElement Generalization R0174
UML Classifier Ancestors, UML Structural Elements (Non-Classifiers)
UML::Namespace metaclass Class C0124
description: see http://www.omg.org/spec/UML/2.5
--|> UML::NamedElement Generalization R0172
UML Classifier Ancestors, UML Structural Elements (Non-Classifiers)
UML::TemplateableElement metaclass Class C0122
description: see http://www.omg.org/spec/UML/2.5
UML Structural Elements (Non-Classifiers)
UML::Package metaclass Class C0252
--|> UML::PackageableElement Generalization R0343
--|> UML::Namespace Generalization R0342
--|> UML::TemplateableElement Generalization R0344
UML Classifier Ancestors, UML Feature Ancestors, UML Feature Descendants, UML Structural Elements (Non-Classifiers)
UML::NamedElement metaclass Class C0127
description: see http://www.omg.org/spec/UML/2.5
UML Structural Elements (Non-Classifiers)
UML::Artifact metaclass Class C0253
--|> UML::DeployedArtifact Generalization R0345
UML Structural Elements (Non-Classifiers)
UML::DeployedArtifact metaclass Class C0254
--|> UML::NamedElement Generalization R0346
UML Structural Elements (Non-Classifiers)
UML::DeploymentTarget metaclass Class C0255
--|> UML::NamedElement Generalization R0347
UML Structural Elements (Non-Classifiers), UML Structure: Classifier Descendants
UML::Node metaclass Class C0256
--|> UML::DeploymentTarget Generalization R0348
UML Structure: Classifier Descendants
UML Structure: Classifier Descendants context UMLClassDiagram D0031
Base classes of UML , UML Classifier Ancestors, UML Feature Ancestors, UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::Classifier metaclass Class C0125
UML Structure: Classifier Descendants
UML::Interface metaclass Class C0137
--|> UML::Classifier Generalization R0188
UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::StructuredClassifier metaclass Class C0138
--|> UML::Classifier Generalization R0189
UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::EncapsulatedClassifier metaclass Class C0139
--|> UML::StructuredClassifier Generalization R0190
UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::Class metaclass Class C0140
--|> UML::EncapsulatedClassifier Generalization R0191
--|> UML::BehavioredClassifier Generalization R0192
UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::BehavioredClassifier metaclass Class C0141
--|> UML::Classifier Generalization R0193
UML Structure: Classifier Descendants
UML::Component metaclass Class C0142
--|> UML::Class Generalization R0194
UML Structure: Classifier Descendants
UML::Stereotype metaclass Class C0442
--|> UML::Class Generalization R0692
icon *-- UML::Image Association R0693
Base classes of UML , UML Structure: Classifier Descendants
UML::Image metaclass Class C0441
UML Structural Elements (Non-Classifiers), UML Structure: Classifier Descendants
UML::Node metaclass Class C0256
--|> UML::Class Generalization R0694
UML Classifier Behavioral Descendants
UML Classifier Behavioral Descendants context UMLClassDiagram D0032
UML Classifier Behavioral Descendants
UML::Activity metaclass Class C0145
--|> UML::Behavior Generalization R0196
UML Classifier Behavioral Descendants
UML::Behavior metaclass Class C0144
--|> UML::Class Generalization R0197
UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::Class metaclass Class C0140
--|> UML::EncapsulatedClassifier Generalization R0191
--|> UML::BehavioredClassifier Generalization R0192
UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::BehavioredClassifier metaclass Class C0141
--|> UML::Classifier Generalization R0193
UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::StructuredClassifier metaclass Class C0138
--|> UML::Classifier Generalization R0189
UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::EncapsulatedClassifier metaclass Class C0139
--|> UML::StructuredClassifier Generalization R0190
Base classes of UML , UML Classifier Ancestors, UML Feature Ancestors, UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::Classifier metaclass Class C0125
--|> UML::RedefinableElement Generalization R0168
UML Classifier Behavioral Descendants
UML::Actor metaclass Class C0147
--|> UML::BehavioredClassifier Generalization R0199
UML Classifier Behavioral Descendants
UML::State metaclass Class C0143
--|> UML::RedefinableElement Generalization R0195
UML Classifier Ancestors, UML Feature Ancestors, UML Classifier Behavioral Descendants
UML::RedefinableElement metaclass Class C0126
description: see http://www.omg.org/spec/UML/2.5
UML Classifier Behavioral Descendants
UML::UseCase metaclass Class C0146
--|> UML::BehavioredClassifier Generalization R0198
UML Feature Ancestors
UML Feature Ancestors context UMLClassDiagram D0029
Base classes of UML , UML Classifier Ancestors, UML Feature Ancestors
UML::Element metaclass Class C0118
ownedElement --> UML::Element Association R0161
UML Classifier Ancestors, UML Feature Ancestors, UML Classifier Behavioral Descendants
UML::RedefinableElement metaclass Class C0126
description: see http://www.omg.org/spec/UML/2.5
--|> UML::NamedElement Generalization R0169
UML Classifier Ancestors, UML Feature Ancestors, UML Feature Descendants, UML Structural Elements (Non-Classifiers)
UML::NamedElement metaclass Class C0127
description: see http://www.omg.org/spec/UML/2.5
--|> UML::Element Generalization R0171
Base classes of UML , UML Classifier Ancestors, UML Feature Ancestors, UML Structure: Classifier Descendants, UML Classifier Behavioral Descendants
UML::Classifier metaclass Class C0125
--|> UML::RedefinableElement Generalization R0168
Base classes of UML , UML Feature Ancestors, UML Feature Descendants
UML::Feature metaclass Class C0129
--|> UML::RedefinableElement Generalization R0175
featuringClassifier --> UML::Classifier Association R0176
UML Feature Descendants
UML Feature Descendants context UMLClassDiagram D0030
Base classes of UML , UML Feature Ancestors, UML Feature Descendants
UML::Feature metaclass Class C0129
UML::StructuralFeature metaclass Class C0130
--|> UML::Feature Generalization R0179
UML::BehavioralFeature metaclass Class C0131
--|> UML::Feature Generalization R0180
UML::Property metaclass Class C0132
--|> UML::StructuralFeature Generalization R0182
UML::Operation metaclass Class C0133
--|> UML::BehavioralFeature Generalization R0181
UML Classifier Ancestors, UML Feature Ancestors, UML Feature Descendants, UML Structural Elements (Non-Classifiers)
UML::NamedElement metaclass Class C0127
description: see http://www.omg.org/spec/UML/2.5
UML::LifeLine metaclass Class C0134
--|> UML::NamedElement Generalization R0183
UML::Port metaclass Class C0135
--|> UML::Property Generalization R0184
UML Relationships
UML Relationships UMLClassDiagram D0110
Base classes of UML , UML Relationships
UML::DirectedRelationship metaclass Class C0121
UML::Usage metaclass Class C0480
--|> UML::DirectedRelationship Generalization R0800
UML::Abstraction metaclass Class C0481
--|> UML::DirectedRelationship Generalization R0798
UML::Deployment metaclass Class C0482
--|> UML::DirectedRelationship Generalization R0799
Selected classes of SysML
Selected classes of SysML UMLClassDiagram D0045
UML/SysML Overview, Selected classes of SysML
SysML (M2) context Package C0190
+-- ConstraintProperty Association R0250
ConstraintProperty metaclass Class C0191
Context And Scope
Context And Scope context UMLPackageDiagram D0034
version control system context Package C0165
requirements engineering context Package C0166
source code documentation context Package C0167
user documentation context Package C0168
high quality layouted documentation context Package C0169
There are good layout engines to create high quality pdf pages, like:
- latex
- docbook
tests context Package C0170
unit-tests, integration tests, qualification tests, regression tests
project management context Package C0171
risk management context Package C0172
configuration management context Package C0173
+-- version control system Association R0229
Introduction and Goals, gui search sequence, Context And Scope, undo control flow, gui paste from clipboard
SW Architect Actor C0046
create diagrams --> crystal-facet-uml application Association R0649
Introduction and Goals, Context And Scope
Configuration Manager Actor C0047
do --> configuration management Association R0230
Introduction and Goals, Context And Scope
SW Developer Actor C0048
A software developer understands the requirements and architecture; creates the software parts and performs reviews and unit-tests.
do --> source code documentation Association R0233
Introduction and Goals, Context And Scope
SW Integrator Actor C0049
Introduction and Goals, Context And Scope
SW Integration Tester Actor C0050
do --> tests Association R0234
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
provide input #--> high quality layouted documentation ObjectFlow R0650
Solution Strategy
Solution Strategy UMLComponentDiagram D0040
During operation, crystal-facet-uml runs as application based on the libraries sqlite and gtk.
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
External Libraries, undo control flow, Solution Strategy, gui paste from clipboard
gtk4 Package C0005
Toolkit which provides
- Windows and Widgets
- User Input handling
technical strategy Comment C0185
crystal-facet-uml shall be portable,
therefore as few as possible 3rd party libraries
shall be linked against:
- To store the data, the sqlite database is used.
- To interact with the user, gtk is used.
··> crystal-facet-uml application Dependency R0244
··> gtk4 Dependency R0245
··> sqlite3 Dependency R0246
user interface strategy Comment C0186
The user shall
- focus on the semantics of the diagrams, not on the layout
- be able to order classifiers left-to-right and top-to-bottom
- be forced to use the same elements in different diagrams
crystal-facet-uml shall
- auto-layout classifier locations and sizes,
- auto-layout features and relationships
- hide the meta-model from the user
··> crystal-facet-uml application Dependency R0247
Development View: Tools
Development View: Tools UMLActivityDiagram D0007
This diagram shows the tools for designing, implementing, documenting, configuring and building the software.
manages --> c + doxygen + docbook Association R0054
cmake build Activity C0023
cmake and cpack are meta-build files which generate e.g. make files, rpm and deb package files.
make: build dependency handler Operation F0001
gcc/mingw: compiler Operation F0003
pack items --> deb, rpm ControlFlow R0312
c + doxygen + docbook source code and user documentation Activity C0024
c code and doxygen are the source code and documentation formats
feeds --> cmake ControlFlow R0007
crystal facet uml design Activity C0025
- drafts the software design (using this crystal facet uml tool which is under construction)
defines --> c + doxygen + docbook ControlFlow R0006
Building Block View
Building Block View UMLComponentDiagram D0002
This diagram shows the layering of the main software modules.
gui: White Box View, gui: Black Box View, Building Block View, consistency sequence
gui Component C0001
allows a user
- to select the database
- to export diagrams in various formats
- to navigate and search in the uml-model
- to modify the uml-model interactively
uses --> ctrl Association R0009
uses --> data/storage Association R0010
draw -- pencil CommunicationPath R0909
export -- io CommunicationPath R0532
user interaction -- pencil CommunicationPath R0911
pencil: White Box View, pencil: Black Box View, io: Black Box View, gui: Black Box View, Building Block View
pencil Component C0002
- renders diagrams to cairo drawing contexts:
this includes
- definnig a grid and
layouting the ekements and
- drawing the elements
- supports user interaction:
this includes
- highlighting of uml-elements
as requested by the gui module,
- allowing the gui module to re-position
the uml-elements
- providing the layout positions
to the gui module
get_layout_data Interface F0130
pencil_diagram_maker Port F0084
layout and draw Interface F0129
uses --> data/storage Association R0011
-- pencil CommunicationPath R0907
-- pencil CommunicationPath R0910
ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, undo control flow, gui paste from clipboard, Building Block View
ctrl Component C0003
- provides write access to the database
- ensures consistency of the uml-model, e.g. no circular contains-relations, no lifelines if no corresponding diagramelement exists
uses o-- data/storage Association R0012
data: Black Box View, ctrl: Black Box View, data: White Box View, Database Structure, pencil: Black Box View, io: Black Box View, Database Readers, Building Block View
data/storage Component C0004
- provides read access to ctrl, pencil and gui components
- provides write acccess to only the ctrl component
- ensures low-level consistency of database: all referenced elements exist.
- sends notifications on changes
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
+-- gui Association R0239
+-- pencil Association R0240
+-- ctrl Association R0241
+-- data/storage Association R0242
+-- io Association R0255
+-- data Association R0314
io: White Box View, io: Black Box View, Building Block View
io Component C0195
file output IF Port F0075
file input IF Port F0095
clipboard in IF Port F0074
clipboard out IF Port F0096
export_trigger Port F0085
uses --> data/storage Association R0258
uses --> ctrl Association R0392
draw -- pencil CommunicationPath R0908
data: Black Box View, ctrl: Black Box View, data: White Box View, pencil: Black Box View, io: Black Box View, Building Block View
data Package C0235
+-- data/storage Association R0313
data: Black Box View
data: Black Box View UMLComponentDiagram D0050
data: Black Box View, ctrl: Black Box View, data: White Box View, Database Structure, pencil: Black Box View, io: Black Box View, Database Readers, Building Block View
data/storage Component C0004
- provides read access to ctrl, pencil and gui components
- provides write acccess to only the ctrl component
- ensures low-level consistency of database: all referenced elements exist.
- sends notifications on changes
data: Black Box View, ctrl: Black Box View, data: White Box View, pencil: Black Box View, io: Black Box View, Building Block View
data Package C0235
+-- data/set Association R0890
+-- data/storage Association R0313
data/set Package C0518
provides specialized containers for structured-data of the data package
data: White Box View
data: White Box View UMLComponentDiagram D0009
This diagram shows the main classes in the data package.
data: White Box View, data: Runtime View, Mutexed data structures, Database Readers
data_database Class C0037
- wraps the sqlite database
- knows the current status and filename
- opens and closes the database
- manages the list of listeners and notifies changes
change_lock: GMutex Property F0124
A single, central lock for ctrl package and data_database class. A single lock prevents dead locks.
list: data_database_listener Property F0126
sql:create() Operation F0127
sql:execute() Operation F0128
data: White Box View, io: Runtime View, Separate data structures per thread, Database Readers
data_database _reader ro Class C0038
- reads data from the database
has o-- data_database Association R0028
data: White Box View, data: Runtime View
data_database _writer Class C0039
- writes changes to the database
- ensures low-level consistency of the database, e.g. all foreign keys point to existing rows (referential integrity)
- retrieves the old, changed values for the undo/redo list
uses --> data_database _reader Association R0027
has o-- data_database Association R0029
data: Black Box View, ctrl: Black Box View, data: White Box View, Database Structure, pencil: Black Box View, io: Black Box View, Database Readers, Building Block View
data/storage Component C0004
- provides read access to ctrl, pencil and gui components
- provides write acccess to only the ctrl component
- ensures low-level consistency of database: all referenced elements exist.
- sends notifications on changes
+-- data_database _writer Association R0040
+-- data_database _reader Association R0041
+-- data_database Association R0042
data: Black Box View, ctrl: Black Box View, data: White Box View, pencil: Black Box View, io: Black Box View, Building Block View
data Package C0235
+-- data/storage Association R0313
Database Structure
Database Structure UMLClassDiagram D0015
This diagram shows the tables and relationships of the database.
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
classifiers Class C0080
id: int64_t Property F0012
main_type: enum Property F0017
stereotype Property F0018
name Property F0019
description Property F0020
*-- features Association R0210
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
relationships Class C0081
id: int64_t Property F0014
main_type: enum Property F0021
name Property F0022
description Property F0023
from --> classifiers Association R0096
to --> classifiers Association R0097
from --> features Association R0205
to --> features Association R0206
Database Structure, Classifier and Port/Lifeline selection def view, Model Terms
diagramelements Class C0082
id: int64_t Property F0016
display_flags Property F0031
--> diagrams Association R0100
--> classifiers Association R0101
focused_feature --> features Association R0204
to select one of possibly several lifelines
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
features Class C0083
id: int64_t Property F0013
main_type: enum Property F0024
key (name) Property F0025
value (type) Property F0026
description Property F0027
Database Structure, Details on Classifier or Relationship Sel., Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
diagrams Class C0084
id: int64_t Property F0015
diagram_type: enum Property F0028
name Property F0029
description Property F0030
parent --> diagrams Association R0099
data: Black Box View, ctrl: Black Box View, data: White Box View, Database Structure, pencil: Black Box View, io: Black Box View, Database Readers, Building Block View
data/storage Component C0004
- provides read access to ctrl, pencil and gui components
- provides write acccess to only the ctrl component
- ensures low-level consistency of database: all referenced elements exist.
- sends notifications on changes
+-- diagrams Association R0266
+-- diagramelements Association R0267
+-- classifiers Association R0268
+-- relationships Association R0269
+-- features Association R0270
JSON Storage Format
JSON Storage Format SysMLRequirementDiagram D0089
git merge UseCase C0361
git mergetool (manual) UseCase C0362
git blame UseCase C0363
Disambiguation of non-unique IDs Requirement C0368
Disambiguation of non-unique IDs of
- classifiers
- features
- relationships
- diagrams
- diagramelements
··> git merge Refine R0516
human readable foreign keys Requirement C0369
Foreign keys shall be human readable. Therefore not only uuids but also the classifier names are stated in the json files.
··> git mergetool (manual) Refine R0518
JSON Storage Format, Import/Sync Use Cases
data exchange with external scripts req UseCase C0370
JSON Storage Format, Import/Sync Use Cases
git support req UseCase C0371
The model shall be stored in git in a way that git blame shows changed data entries, git merge can automatically merge git mergetool allows to manually merge
··> git blame Include R0519
··> git merge Include R0520
··> git mergetool (manual) Include R0521
line-based data entries Requirement C0372
··> git support Refine R0523
JSON Storage Format, data_model_traversal
Constant order for unchanged parts Requirement C0420
When merging two text files that have parts in common (the unchanged parts), then it is important that these unchanged parts occur in the same order in both files.
··> git merge Refine R0641
Database Readers
Database Readers UMLComponentDiagram D0116
data: White Box View, io: Runtime View, Separate data structures per thread, Database Readers
data_database _reader ro Class C0038
- reads data from the database
has o-- data_database Association R0028
manages open/close lifecycle *-- data_database _classifier_reader Association R0899
manages open/close lifecycle *-- data_database _diagram_reader Association R0900
data: White Box View, data: Runtime View, Mutexed data structures, Database Readers
data_database Class C0037
- wraps the sqlite database
- knows the current status and filename
- opens and closes the database
- manages the list of listeners and notifies changes
change_lock: GMutex Property F0124
A single, central lock for ctrl package and data_database class. A single lock prevents dead locks.
list: data_database_listener Property F0126
sql:create() Operation F0127
sql:execute() Operation F0128
data: Black Box View, ctrl: Black Box View, data: White Box View, Database Structure, pencil: Black Box View, io: Black Box View, Database Readers, Building Block View
data/storage Component C0004
- provides read access to ctrl, pencil and gui components
- provides write acccess to only the ctrl component
- ensures low-level consistency of database: all referenced elements exist.
- sends notifications on changes
+-- data_database _reader Association R0041
+-- data_database Association R0042
+-- data_database _head Association R0891
+-- data_database _text_search Association R0892
+-- data_database _classifier_reader Association R0895
+-- data_database _diagram_reader Association R0896
data_database _head rw Class C0519
o-- data_database Association R0893
data_database _text_search ro Class C0520
o-- data_database Association R0894
data_database _classifier_reader ro Class C0521
o-- data_database Association R0898
data_database _diagram_reader ro Class C0522
o-- data_database Association R0897
data: Runtime View
data: Runtime View UMLInteractionDiagram/sequence D0057
For multithreading concept see Multithreading in GUI Mode.
thread-1 Actor C0241
open -->> data_database Message R0320
init(:data_database) -->> r1 :data_data base_reader Message R0326
init(:data_database, r1) -->> data_database _writer Message R0324
get_diagram -->> r1 :data_data base_reader Message R0332
get_classifier -->> r1 :data_data base_reader Message R0333
set_feature -->> data_database _writer Message R0334
destroy -->> data_database _writer Message R0325
destroy -->> r1 :data_data base_reader Message R0329
close -->> data_database Message R0321
thread-2 Actor C0242
init(:data_database) -->> r2 :data_data base_reader Message R0327
get_diagram -->> r2 :data_data base_reader Message R0330
get_classifier -->> r2 :data_data base_reader Message R0331
destroy -->> r2 :data_data base_reader Message R0328
data: White Box View, data: Runtime View, Mutexed data structures, Database Readers
data_database Class C0037
- wraps the sqlite database
- knows the current status and filename
- opens and closes the database
- manages the list of listeners and notifies changes
data: White Box View, data: Runtime View
data_database _writer Class C0039
- writes changes to the database
- ensures low-level consistency of the database, e.g. all foreign keys point to existing rows (referential integrity)
- retrieves the old, changed values for the undo/redo list
get_feature -->> r1 :data_data base_reader Message R0335
get_database_ptr -->> data_database Message R0340
··>> thread-1 Message R0337
r1 :data_data base_reader Class C0244
get_database_ptr -->> data_database Message R0338
··>> data_database _writer Message R0336
r2 :data_data base_reader Class C0245
In the current implementation, the software runs single-threaded.
If running multiple threads,
a possible implementation is that the data_database object
exists just once and provides an sqlite3 connection object
in SQLITE_CONFIG_SERIALIZED mode
(see https://sqlite.org/threadsafe.html )
Every thread gets its own readers and writers
(to separate the statements-with-bound-variables
and statement-string-buffers)
There is a chance that thread-2 performs multiple independant queries
while thread-1 performs a write transaction.
This is expected to not cause a problem,
given the current sequences of statements.
get_database_ptr -->> data_database Message R0339
Locks needed here Comment C0425
The data_database_writer
can handle only one
client-thread at a time.
Locking is ensured by
the calling ctrl_controller.
··> data_database _writer Dependency R0659
ctrl: Black Box View
ctrl: Black Box View UMLComponentDiagram D0051
ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, undo control flow, gui paste from clipboard, Building Block View
ctrl Component C0003
- provides write access to the database
- ensures consistency of the uml-model, e.g. no circular contains-relations, no lifelines if no corresponding diagramelement exists
uses o-- data/storage Association R0012
data: Black Box View, ctrl: Black Box View, data: White Box View, pencil: Black Box View, io: Black Box View, Building Block View
data Package C0235
+-- data/storage Association R0313
data: Black Box View, ctrl: Black Box View, data: White Box View, Database Structure, pencil: Black Box View, io: Black Box View, Database Readers, Building Block View
data/storage Component C0004
- provides read access to ctrl, pencil and gui components
- provides write acccess to only the ctrl component
- ensures low-level consistency of database: all referenced elements exist.
- sends notifications on changes
ctrl: White Box View
ctrl: White Box View UMLClassDiagram D0010
This diagram shows the main classes in the ctrl package.
ctrl: White Box View, Mutexed data structures
ctrl_controller Class C0040
- changes the database contents
- maintains the undo redo list
has o-- ctrl_consistency_checker Association R0030
has o-- ctrl_undo_redo_list Association R0213
has o-- ctrl_ classifier_ controller Association R0216
has o-- ctrl_ diagram_ controller Association R0218
ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, undo control flow, gui paste from clipboard, Building Block View
ctrl Component C0003
- provides write access to the database
- ensures consistency of the uml-model, e.g. no circular contains-relations, no lifelines if no corresponding diagramelement exists
+-- ctrl_controller Association R0043
+-- ctrl_consistency_checker Association R0044
+-- ctrl_multi_step_changer Association R0605
+-- ctrl_ classifier_ trigger Association R0221
+-- consistency Association R0732
+-- ctrl_ diagram_ controller Association R0217
+-- ctrl_ classifier_ controller Association R0215
+-- ctrl_undo_redo_list Association R0211
+-- ctrl_ diagram_ trigger Association R0212
ctrl_undo_redo_list Class C0153
manages a list of actions to be undone or/and redone.
When performing undo or redo operations, this is done directly to the data_database_writer_t, not to the ctrl_controller which could start an endless-recursion.
db_writer Property F0113
db_reader Property F0114
ctrl: White Box View, consistency sequence
ctrl_ diagram_ trigger Class C0154
ensures that application level policies on the model are adhered whenever diagrams are modified.
post_update_diagram_type Operation F0109
post_create_diagramelement Operation F0110
post_delete_diagramelement Operation F0111
--> consistency Association R0733
ctrl: White Box View, consistency sequence
ctrl_ classifier_ controller Class C0155
performs changes on classifier, feature and relationship tables
calls --> ctrl_ classifier_ trigger Association R0738
ctrl: White Box View, consistency sequence
ctrl_ diagram_ controller Class C0156
performs changes on diagram and diagramelement tables
calls --> ctrl_ diagram_ trigger Association R0219
ctrl: White Box View, consistency sequence
ctrl_ classifier_ trigger Class C0157
ensures that application level policies on the model are adhered whenever classifiers are modified.
post_delete_feature Operation F0112
after deleting a lifeline, all references from diagramelements have to be removed.
--> consistency Association R0734
ctrl_multi_step_changer Component C0407
performs multi-step operations:
- delete a set of objects
- try create either with proposed
or with auto-generated id
calls --> ctrl_ diagram_ controller Association R0606
calls --> ctrl_ classifier_ controller Association R0607
ctrl: White Box View, ctrl: consistency
consistency Package C0469
calls --> ctrl_ classifier_ controller Association R0735
ctrl: consistency
ctrl: consistency UMLClassDiagram D0107
ctrl: consistency, consistency sequence
consis tency_ drop_ invisibles Class C0468
This class cares about deleting model elements that are not visible anymore.
··> ARC_NO_INVISIBLE_CLASSIFIERS Trace R0749
··> ARC_NO_INVISIBLE_RELATIONSHIPS Trace R0750
ctrl: consistency, consistency sequence
consis tency_ lifeline Class C0470
This class cares about creating and deleting lifelines depending on the surrounding diagram type.
··> ARC_LIFELINES_AT_INTERACTIONS Trace R0745
ctrl: White Box View, ctrl: consistency
consistency Package C0469
+-- consis tency_ drop_ invisibles Association R0736
+-- consis tency_ lifeline Association R0737
ARC_LIFELINES_AT_INTERACTIONS spec Requirement C0476
Lifelines shall exist for all elements in interaction diagrams.
Lifelines shall not exist for any element in non-interaction diagrams.
Rationale:
Lifelines shall be managed (created/deleted) by crystal-facet-uml automatically.
Lifelines are visible only in interaction diagrams, so they have to be deleted in non-interaction diagrams.
··> All model elements must be visible Trace R0748
Use Cases on Data Model, ctrl: consistency
All model elements must be visible req Requirement C0467
Whatever elements are stored in the model,
these must be visible in some diagram.
Otherwise 1) these cannot be reviewed and
2) their intention is unclear.
ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, undo control flow, gui paste from clipboard, Building Block View
ctrl Component C0003
- provides write access to the database
- ensures consistency of the uml-model, e.g. no circular contains-relations, no lifelines if no corresponding diagramelement exists
+-- consis tency_ drop_ invisibles Association R0729
+-- consistency Association R0732
ARC_NO_INVISIBLE_CLASSIFIERS spec Requirement C0477
When there is no diagram showing a classifier, this classifier shall not exist.
··> All model elements must be visible Trace R0751
ARC_NO_INVISIBLE_RELATIONSHIPS spec Requirement C0478
When there is no diagram showing a relationship, this relationship shall not exist.
··> All model elements must be visible Trace R0752
consistency sequence
consistency sequence UMLInteractionDiagram/sequence D0109
ctrl: White Box View, consistency sequence
ctrl_ diagram_ controller Class C0156
performs changes on diagram and diagramelement tables
post_update_diagram_type -->> ctrl_ diagram_ trigger Message R0758
··>> consis tency_ lifeline Message R0761
··>> consis tency_ lifeline Message R0771
··>> gui Message R0767
ctrl: White Box View, consistency sequence
ctrl_ classifier_ controller Class C0155
performs changes on classifier, feature and relationship tables
post_delete_feature -->> ctrl_ classifier_ trigger Message R0756
··>> consis tency_ lifeline Message R0764
··>> consis tency_ lifeline Message R0770
ctrl: White Box View, consistency sequence
ctrl_ diagram_ trigger Class C0154
ensures that application level policies on the model are adhered whenever diagrams are modified.
delete_lifelines -->> consis tency_ lifeline Message R0753
create_lifelines -->> consis tency_ lifeline Message R0754
··>> ctrl_ diagram_ controller Message R0766
ctrl: White Box View, consistency sequence
ctrl_ classifier_ trigger Class C0157
ensures that application level policies on the model are adhered whenever classifiers are modified.
unlink_lifeline -->> consis tency_ lifeline Message R0755
··>> ctrl_ classifier_ controller Message R0763
ctrl: consistency, consistency sequence
consis tency_ drop_ invisibles Class C0468
This class cares about deleting model elements that are not visible anymore.
ctrl: consistency, consistency sequence
consis tency_ lifeline Class C0470
This class cares about creating and deleting lifelines depending on the surrounding diagram type.
delete_feature -->> ctrl_ classifier_ controller Message R0759
update_diagramelement_focused_feature_id -->> ctrl_ diagram_ controller Message R0760
··>> ctrl_ classifier_ trigger Message R0762
··>> ctrl_ diagram_ trigger Message R0765
create_feature -->> ctrl_ classifier_ controller Message R0768
update_diagramelement_focused_feature_id -->> ctrl_ diagram_ controller Message R0769
··>> ctrl_ diagram_ trigger Message R0772
gui: White Box View, gui: Black Box View, Building Block View, consistency sequence
gui Component C0001
allows a user
- to select the database
- to export diagrams in various formats
- to navigate and search in the uml-model
- to modify the uml-model interactively
update_diagram_type -->> ctrl_ diagram_ controller Message R0757
re-entrance by recursion Comment C0479
··> consis tency_ lifeline Dependency R0797
pencil: Black Box View
pencil: Black Box View UMLComponentDiagram D0054
pencil: White Box View, pencil: Black Box View, io: Black Box View, gui: Black Box View, Building Block View
pencil Component C0002
- renders diagrams to cairo drawing contexts:
this includes
- definnig a grid and
layouting the ekements and
- drawing the elements
- supports user interaction:
this includes
- highlighting of uml-elements
as requested by the gui module,
- allowing the gui module to re-position
the uml-elements
- providing the layout positions
to the gui module
get_layout_data Interface F0130
pencil_diagram_maker Port F0084
layout and draw Interface F0129
uses --> data/storage Association R0011
+-- pencil/layout Association R0265
-- pencil CommunicationPath R0907
-- pencil CommunicationPath R0910
data: Black Box View, ctrl: Black Box View, data: White Box View, pencil: Black Box View, io: Black Box View, Building Block View
data Package C0235
+-- data/storage Association R0313
data: Black Box View, ctrl: Black Box View, data: White Box View, Database Structure, pencil: Black Box View, io: Black Box View, Database Readers, Building Block View
data/storage Component C0004
- provides read access to ctrl, pencil and gui components
- provides write acccess to only the ctrl component
- ensures low-level consistency of database: all referenced elements exist.
- sends notifications on changes
pencil: White Box View, pencil: Black Box View, pencil.layout package
pencil/layout Package C0196
This package contains data objects that define the layout positions of model elements.
pencil: White Box View
pencil: White Box View UMLComponentDiagram D0008
This diagram shows the main classes in the pencil package.
pencil: White Box View, Separate data structures per thread
pencil_diagram_maker Class C0032
- coordinates layouting and drawing of a diagram
- implements a front controller pattern: all requests from gui to pencil are addressed to the pencil_diagram_maker
uses o-- pencil_xxx_layouter Association R0023
uses o-- pencil_xxx_painter Association R0024
pencil: White Box View, pencil detailed structure
pencil_xxx_layouter abstract Package C0033
The pencil_xxx_layouter
- transforms a model description of a diagram
to a corresponding layout description
- can convert abstract order-values to x/y coordinates
and vice versa
The pencil layout package does not care about
- user interaction
- input modes like if user clicked a lifeline,
then select the parent classifier instead
(see gui_sketch_card in gui event notifications)
modifies --> layout_visible_set_t Association R0022
asks for sizes --> pencil_xxx_painter Association R0034
pencil: White Box View, pencil detailed structure
pencil_xxx_painter abstract Package C0034
- knows the bounding boxes of single elements
- draws single graphical elements
requires --> layout_visible_set_t Association R0025
use --> pencil/draw Association R0702
pencil: White Box View, pencil detailed structure
data_visible_set_t Class C0035
- caches data from the database needed to draw a diagram
pencil: White Box View, pencil detailed structure, pencil.layout package
layout_visible_set_t Class C0036
- stores locations of layouted elements (in the current diagram)
references o-- data_visible_set_t Association R0021
pencil: White Box View, pencil: Black Box View, io: Black Box View, gui: Black Box View, Building Block View
pencil Component C0002
- renders diagrams to cairo drawing contexts:
this includes
- definnig a grid and
layouting the ekements and
- drawing the elements
- supports user interaction:
this includes
- highlighting of uml-elements
as requested by the gui module,
- allowing the gui module to re-position
the uml-elements
- providing the layout positions
to the gui module
get_layout_data Interface F0130
pencil_diagram_maker Port F0084
layout and draw Interface F0129
+-- pencil/draw Association R0282
+-- pencil_diagram_maker Association R0049
+-- pencil_xxx_painter Association R0051
+-- data_visible_set_t Association R0052
+-- layout_visible_set_t Association R0053
+-- pencil_xxx_layouter Association R0056
+-- pencil/layout Association R0265
-- pencil_diagram_maker CommunicationPath R0651
-- pencil CommunicationPath R0907
-- pencil CommunicationPath R0910
pencil: White Box View, pencil: Black Box View, pencil.layout package
pencil/layout Package C0196
This package contains data objects that define the layout positions of model elements.
+-- layout_visible_set_t Association R0912
pencil/draw Package C0205
Encapulates drawing routines for
- geometric objects
- labels
- symbols/icons
pencil detailed structure
pencil detailed structure UMLClassDiagram D0022
pencil: White Box View, pencil detailed structure
pencil_xxx_painter abstract Package C0034
- knows the bounding boxes of single elements
- draws single graphical elements
+-- pencil_diagram_painter Association R0137
+-- pencil_feature_painter Association R0138
+-- pencil_relationship_painter Association R0139
+-- pencil_classifier_composer Association R0136
requires --> layout_visible_set_t Association R0025
pencil: White Box View, pencil detailed structure
pencil_xxx_layouter abstract Package C0033
The pencil_xxx_layouter
- transforms a model description of a diagram
to a corresponding layout description
- can convert abstract order-values to x/y coordinates
and vice versa
The pencil layout package does not care about
- user interaction
- input modes like if user clicked a lifeline,
then select the parent classifier instead
(see gui_sketch_card in gui event notifications)
+-- pencil_classifier_layouter Association R0133
+-- pencil_relationship_layouter Association R0135
+-- pencil_layouter Association R0132
+-- pencil_feature_layouter Association R0134
modifies --> layout_visible_set_t Association R0022
asks for sizes --> pencil_xxx_painter Association R0034
pencil: White Box View, pencil detailed structure, pencil.layout package
layout_visible_set_t Class C0036
- stores locations of layouted elements (in the current diagram)
references o-- data_visible_set_t Association R0021
pencil: White Box View, pencil detailed structure
data_visible_set_t Class C0035
- caches data from the database needed to draw a diagram
pencil_layouter Class C0098
- layouts multiple elements within the bounds of a diagram
- layouting is implemented in two steps:
1) defining a grid which associates abstract ordering data to diagram coordinates and
2) assigning elements to coordinates
o-- pencil_classifier_layouter Association R0632
o-- pencil_feature_layouter Association R0633
o-- pencil_relationship_layouter Association R0634
pencil_classifier_layouter Class C0099
pencil_feature_layouter Class C0100
pencil_relationship_layouter Class C0101
pencil_classifier_composer Class C0102
pencil_diagram_painter Class C0103
o-- pencil_classifier_composer Association R0635
o-- pencil_feature_painter Association R0636
o-- pencil_relationship_painter Association R0637
pencil_feature_painter Class C0104
pencil_relationship_painter Class C0105
pencil.layout package
pencil.layout package UMLComponentDiagram D0047
pencil: White Box View, pencil: Black Box View, pencil.layout package
pencil/layout Package C0196
This package contains data objects that define the layout positions of model elements.
+-- layout_feature Association R0262
+-- layout _visible_classifier Association R0263
+-- layout_diagram Association R0261
+-- layout _relationship Association R0264
+-- layout_visible_set_t Association R0912
layout_diagram Class C0200
bounds: rect Property F0044
draw_area: rect Property F0045
layout_feature Class C0201
bounds: rect Property F0049
label_box: rect Property F0053
--> features Association R0281
layout _visible_classifier Class C0202
bounds: rect Property F0048
space: rect Property F0050
label_box: rect Property F0052
--> visible_classifier Association R0280
*-- layout_feature Association R0294
layout _relationship Class C0203
visible: enum Property F0046
shape: connector Property F0047
label_box: rect Property F0051
data --> relationships Association R0272
from --> layout _visible_classifier Association R0273
to --> layout _visible_classifier Association R0274
from --> layout_feature Association R0275
to --> layout_feature Association R0293
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
classifiers Class C0080
id: int64_t Property F0012
main_type: enum Property F0017
stereotype Property F0018
name Property F0019
description Property F0020
*-- features Association R0210
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
features Class C0083
id: int64_t Property F0013
main_type: enum Property F0024
key (name) Property F0025
value (type) Property F0026
description Property F0027
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
relationships Class C0081
id: int64_t Property F0014
main_type: enum Property F0021
name Property F0022
description Property F0023
from --> classifiers Association R0096
to --> classifiers Association R0097
from --> features Association R0205
to --> features Association R0206
visible_classifier Class C0204
--> classifiers Association R0278
pencil: White Box View, pencil detailed structure, pencil.layout package
layout_visible_set_t Class C0036
- stores locations of layouted elements (in the current diagram)
pencil: Runtime View
pencil: Runtime View UMLActivityDiagram D0064
This diagram shows the different entry points for layouting and rendering a diagram.
pencil::start InitialNode C0269
--> gui/io select operations ControlFlow R0371
pencil::draw Activity C0270
--> pencil::finish ControlFlow R0377
Layouting Steps, pencil: Runtime View
pencil::define grid Activity C0271
implemented in pencil_diagram_maker
--> pencil::layout elements ControlFlow R0375
Layouting Steps, pencil: Runtime View
pencil::layout elements Activity C0272
implemented in pencil_diagram_maker
--> pencil::draw ControlFlow R0376
gui/io select operations DecisionNode C0273
layout and draw everything --> pencil::define grid ControlFlow R0372
while dragging, layout and draw --> pencil::layout elements ControlFlow R0373
if layout know, draw only --> pencil::draw ControlFlow R0374
pencil::finish ActivityFinalNode C0274
pencil::activities Activity C0312
+-- gui/io select operations Association R0440
+-- pencil::start Association R0441
+-- pencil::draw Association R0442
+-- pencil::layout elements Association R0443
+-- pencil::define grid Association R0444
+-- pencil::finish Association R0445
Layouting Steps
Layouting Steps UMLActivityDiagram D0065
Layouting Steps, pencil: Runtime View
pencil::layout elements Activity C0272
implemented in pencil_diagram_maker
+-- pencil::begin Association R0381
+-- pencil::classifier_layouter layout_* Association R0378
+-- pencil::feature_layouter do_layout Association R0379
+-- pencil::feat_label_layouter do_layout Association R0388
+-- pencil::relationship_layouter layout_* Association R0380
+-- pencil::rel_label_layouter do_layout Association R0387
+-- pencil::end Association R0382
··|> Layouting Algorithm Realization R0507
Layouting Steps, pencil: Runtime View
pencil::define grid Activity C0271
implemented in pencil_diagram_maker
--> pencil::layout elements ControlFlow R0375
pencil::classifier_layouter layout_* Activity C0275
--> pencil::feature_layouter do_layout ControlFlow R0384
pencil::feature_layouter do_layout Activity C0276
--> pencil::relationship_layouter layout_* ControlFlow R0385
pencil::relationship_layouter layout_* Activity C0277
--> pencil::feat_label_layouter do_layout ControlFlow R0389
pencil::begin InitialNode C0278
--> pencil::classifier_layouter layout_* ControlFlow R0383
pencil::end ActivityFinalNode C0279
pencil::rel_label_layouter do_layout Activity C0280
--> pencil::end ControlFlow R0391
pencil::feat_label_layouter do_layout Activity C0281
--> pencil::rel_label_layouter do_layout ControlFlow R0390
Layouting Steps, pencil: Crosscutting Concepts
Layouting Algorithm concept Activity C0358
pencil: Crosscutting Concepts
pencil: Crosscutting Concepts UMLActivityDiagram D0088
Whenever one of several layouting solutions shall be selected, the following algorithm applies.
This algorithm is a greedy algorithm which is efficient and finds a local maximum but may miss the overall optimum layout solution.
layouting:start InitialNode C0353
--> propose processing order ControlFlow R0498
layouting:finish ActivityFinalNode C0354
propose processing order Activity C0355
For the list of elements to be layouted, define the processing order.
--> propose solutions ControlFlow R0501
propose solutions Activity C0356
This step creates a set of possible solutions for 1 element to be layouted.
--> select solution ControlFlow R0499
select solution Activity C0357
This step selects the most promising of solutions for 1 element to be layouted.
--> end of list? ControlFlow R0509
Layouting Steps, pencil: Crosscutting Concepts
Layouting Algorithm concept Activity C0358
+-- end of list? Association R0508
+-- propose processing order Association R0502
+-- propose solutions Association R0503
+-- select solution Association R0504
+-- layouting:finish Association R0505
+-- layouting:start Association R0506
end of list? DecisionNode C0359
finished --> layouting:finish ControlFlow R0510
more elements --> propose solutions ControlFlow R0511
io: Black Box View
io: Black Box View UMLComponentDiagram D0053
The io module imports and exports data and diagrams.
Either the filesystem or the clipboard are source and destination.
With the io_data_file_t class, this module provides a wrapper around a database of the data module that can import/export json files when opening/closing the database.
io: White Box View, io: Black Box View, Building Block View
io Component C0195
file output IF Port F0075
file input IF Port F0095
clipboard in IF Port F0074
clipboard out IF Port F0096
export_trigger Port F0085
uses --> data/storage Association R0258
draw -- pencil CommunicationPath R0908
pencil: White Box View, pencil: Black Box View, io: Black Box View, gui: Black Box View, Building Block View
pencil Component C0002
- renders diagrams to cairo drawing contexts:
this includes
- definnig a grid and
layouting the ekements and
- drawing the elements
- supports user interaction:
this includes
- highlighting of uml-elements
as requested by the gui module,
- allowing the gui module to re-position
the uml-elements
- providing the layout positions
to the gui module
get_layout_data Interface F0130
pencil_diagram_maker Port F0084
layout and draw Interface F0129
uses --> data/storage Association R0011
-- pencil CommunicationPath R0907
-- pencil CommunicationPath R0910
data: Black Box View, ctrl: Black Box View, data: White Box View, pencil: Black Box View, io: Black Box View, Building Block View
data Package C0235
+-- data/storage Association R0313
data: Black Box View, ctrl: Black Box View, data: White Box View, Database Structure, pencil: Black Box View, io: Black Box View, Database Readers, Building Block View
data/storage Component C0004
- provides read access to ctrl, pencil and gui components
- provides write acccess to only the ctrl component
- ensures low-level consistency of database: all referenced elements exist.
- sends notifications on changes
io: White Box View
io: White Box View UMLComponentDiagram D0046
This component implements input output functionality, currently:
- Export of diagram images
io: White Box View, io: Black Box View, Building Block View
io Component C0195
file output IF Port F0075
file input IF Port F0095
clipboard in IF Port F0074
clipboard out IF Port F0096
export_trigger Port F0085
+-- image_format_writer Association R0283
+-- io_data_file Association R0631
+-- io_export_xxx_traversal Association R0419
+-- io_exporter Association R0285
+-- io_importer Association R0369
start export -- io_exporter CommunicationPath R0368
paste -- io_importer CommunicationPath R0370
cut/copy -- io_exporter CommunicationPath R0566
import/sync -- io_importer CommunicationPath R0567
+-- io_element_writer Association R0804
image_format_writer Class C0206
io: White Box View, io: Runtime View
io_exporter Class C0208
cases about
- file names
- traversing the diagram tree
o-- image_format_writer Association R0287
o-- io_export_xxx_traversal Association R0423
io_importer Class C0268
io: White Box View, io_export writers, data_model_traversal
io_export_xxx_traversal Component C0306
io_export_xxx_traversal implements several strategies to traverse the model and diagram trees.
For each found element during the model or diagram traversal, an io_element_writer is called.
write Port F0123
render element -- io_element_writer CommunicationPath R0806
io: White Box View, io_export writers, data_model_traversal
io_element_writer abstract Class C0373
This is the abstract base class of different writer objects.
io_export writers
io_export writers UMLComponentDiagram D0073
io: White Box View, io_export writers, data_model_traversal
io_export_xxx_traversal Component C0306
io_export_xxx_traversal implements several strategies to traverse the model and diagram trees.
For each found element during the model or diagram traversal, an io_element_writer is called.
write Port F0123
render element -- io_element_writer CommunicationPath R0806
io: Runtime View, io_export writers
document_element_writer Class C0209
cares about
- writing output-format specific meta data
- using right "writer" class to encode data
output formats are: txt, html, docbook.
use --> io_txt_writer Association R0432
use --> io_md_writer Association R0433
use --> io_xml_writer Association R0434
--|> io_element_writer Generalization R0526
xmi_element_writer Class C0308
use --> io_xml_writer Association R0431
--|> io_element_writer Generalization R0525
io_txt_writer Class C0309
io_xml_writer Class C0310
io_md_writer Class C0311
io: White Box View, io_export writers, data_model_traversal
io_element_writer abstract Class C0373
This is the abstract base class of different writer objects.
json_element_writer Component C0422
--|> io_element_writer Generalization R0648
format Package C0484
+-- io_txt_writer Association R0810
+-- io_md_writer Association R0811
+-- io_xml_writer Association R0812
data_model_traversal
data_model_traversal UMLComponentDiagram D0099
JSON Storage Format, data_model_traversal
Constant order for unchanged parts Requirement C0420
When merging two text files that have parts in common (the unchanged parts), then it is important that these unchanged parts occur in the same order in both files.
io_export_flat_traversal Component C0421
··> Constant order for unchanged parts Trace R0643
out -- io_export_xxx_traversal CommunicationPath R0809
io: White Box View, io_export writers, data_model_traversal
io_export_xxx_traversal Component C0306
io_export_xxx_traversal implements several strategies to traverse the model and diagram trees.
For each found element during the model or diagram traversal, an io_element_writer is called.
write Port F0123
+-- io_export_flat_traversal Association R0642
+-- io_export_diagram_traversal Association R0420
+-- io_export_model_traversal Association R0421
render element -- io_element_writer CommunicationPath R0806
io_export_model_traversal Class C0207
cares about
- selecting the model elements to export
out --> io_export_xxx_traversal Association R0808
io: Runtime View, data_model_traversal
io_export_diagram_traversal Class C0307
This class traverses the model in the database. The diagram traversal walks along the diagram tree starting at the root. There are other traversal classes implementing other strategies.
out --> io_export_xxx_traversal Association R0807
io: White Box View, io_export writers, data_model_traversal
io_element_writer abstract Class C0373
This is the abstract base class of different writer objects.
io: Runtime View
io: Runtime View UMLInteractionDiagram/communication D0071
The io_exporter sets up the data pipe
io: Runtime View, io_export writers
document_element_writer Class C0209
cares about
- writing output-format specific meta data
- using right "writer" class to encode data
output formats are: txt, html, docbook.
5.) document artifacts -->> Output Stream Message R0803
io: Runtime View, u8stream: WhiteBox View, Stream
Output Stream Interface C0305
data: White Box View, io: Runtime View, Separate data structures per thread, Database Readers
data_database _reader ro Class C0038
- reads data from the database
1b) diagram data #--> io_exporter ObjectFlow R0417
3b) diagrams and model --> io_export_diagram_traversal Association R0438
io: White Box View, io: Runtime View
io_exporter Class C0208
cases about
- file names
- traversing the diagram tree
1a) query diagrams --> data_database _reader ControlFlow R0416
2.) trigger --> io_export_diagram_traversal Association R0435
io: Runtime View, data_model_traversal
io_export_diagram_traversal Class C0307
This class traverses the model in the database. The diagram traversal walks along the diagram tree starting at the root. There are other traversal classes implementing other strategies.
3a) query diagrams and model --> data_database _reader Association R0436
4.) model data --> document_element_writer Association R0437
gui: Black Box View
gui: Black Box View UMLComponentDiagram D0052
gui: White Box View, gui: Black Box View, Building Block View, consistency sequence
gui Component C0001
allows a user
- to select the database
- to export diagrams in various formats
- to navigate and search in the uml-model
- to modify the uml-model interactively
uses --> ctrl Association R0009
draw -- pencil CommunicationPath R0909
user interaction -- pencil CommunicationPath R0911
pencil: White Box View, pencil: Black Box View, io: Black Box View, gui: Black Box View, Building Block View
pencil Component C0002
- renders diagrams to cairo drawing contexts:
this includes
- definnig a grid and
layouting the ekements and
- drawing the elements
- supports user interaction:
this includes
- highlighting of uml-elements
as requested by the gui module,
- allowing the gui module to re-position
the uml-elements
- providing the layout positions
to the gui module
get_layout_data Interface F0130
pencil_diagram_maker Port F0084
layout and draw Interface F0129
-- pencil CommunicationPath R0907
-- pencil CommunicationPath R0910
ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, undo control flow, gui paste from clipboard, Building Block View
ctrl Component C0003
- provides write access to the database
- ensures consistency of the uml-model, e.g. no circular contains-relations, no lifelines if no corresponding diagramelement exists
gui: White Box View
gui: White Box View UMLComponentDiagram D0011
This diagram shows the main classes in the gui package.
has *-- gui_toolbox Association R0226
has *-- gui_attributes_editor Association R0228
*-- gui_search_request Association R0354
has *-- sketch Association R0545
*-- gui_simple_message_to_user Association R0640
has (1..3) o-- gui_main_window Association R0033
gui: White Box View, gui: Black Box View, Building Block View, consistency sequence
gui Component C0001
allows a user
- to select the database
- to export diagrams in various formats
- to navigate and search in the uml-model
- to modify the uml-model interactively
+-- gui_search_request Association R0353
+-- gui_clipboard Association R0942
+-- sketch Association R0349
+-- gui_simple_message_to_user Association R0639
+-- gui_toolbox Association R0225
+-- gui_attributes_editor Association R0227
+-- gui_window_manager Association R0045
+-- gui_main_window Association R0046
gui: White Box View, gui search blocks, gui event notifications, undo control flow, gui paste from clipboard
gui_toolbox Component C0159
controller for the buttons in the tool bar:
- performs the callbacks when the user presses buttons
- switches between search, nav, edit and create mode
notify_listeners Interface F0087
set_selected_tool Interface F0086
-- gui_toolbox CommunicationPath R0533
-- gui_toolbox CommunicationPath R0534
*-- gui_clipboard Association R0943
gui: White Box View, gui event notifications
gui_attributes_editor Class C0160
This class manages 5 widgets.
It reads the data of the currently focused object into cache,
it writes back changes to the database (via the controller),
it updates the visible widgets when the focused object or the data changes.
A challenge for implementation is, that
on one hand, it implements the callback functions for 5 gtk widgets
(which look independant if ignoring the internal implementation),
on the other hand, it manages just one cached focused object
(update on user-interaction, reload on change events).
name_entry: GtkEntry * Property F0039
stereotype: GtkEntry * Property F0042
type_combo_box: GtkComboBox * Property F0040
description_text_view: GtkTextView * Property F0041
commit_button: GtkButton * Property F0043
object_changed Interface F0088
-- gui_attributes_editor CommunicationPath R0535
gui: White Box View, gui search blocks, gui search sequence, gui event notifications, undo control flow, gui paste from clipboard
sketch Component C0257
This component is the view and controller for the central sketch widget.
This includes the tree navigation bar and the search result list on the left.
gui_search_request Component C0258
This class manages
- a text entry widget so that the user can enter a search text
- a button that starts the search.
When a search is started,
the gui_search_runner is triggered to execute it.
search_runner: gui_search_runner_t Property F0083
gui_simple_message_to_user Component C0419
This class is the controller for the status bar widgets
gui: White Box View, gui paste from clipboard
gui_clipboard Component C0533
abstracts the gtk4 and OS clipboard
gui search blocks
gui search blocks UMLComponentDiagram D0061
gui search blocks, gui search sequence
search_entry Component C0260
run -- gui_search _runner CommunicationPath R0355
gui search blocks, gui search sequence
gui_search _runner Component C0261
-- gui_sketch _result_list CommunicationPath R0356
gui search blocks, gui search sequence
gui_sketch _result_list Component C0262
gui: White Box View, gui search blocks, gui search sequence, gui event notifications, undo control flow, gui paste from clipboard
sketch Component C0257
This component is the view and controller for the central sketch widget.
This includes the tree navigation bar and the search result list on the left.
+-- gui_sketch _result_list Association R0357
gui: White Box View, gui search blocks, gui event notifications, undo control flow, gui paste from clipboard
gui_toolbox Component C0159
controller for the buttons in the tool bar:
- performs the callbacks when the user presses buttons
- switches between search, nav, edit and create mode
notify_listeners Interface F0087
set_selected_tool Interface F0086
activate_callback -- search_entry CommunicationPath R0358
-- gui_toolbox CommunicationPath R0533
-- gui_toolbox CommunicationPath R0534
gui event notifications
gui event notifications UMLComponentDiagram D0090
gui: White Box View, gui search blocks, gui event notifications, undo control flow, gui paste from clipboard
gui_toolbox Component C0159
controller for the buttons in the tool bar:
- performs the callbacks when the user presses buttons
- switches between search, nav, edit and create mode
notify_listeners Interface F0087
set_selected_tool Interface F0086
-- gui_toolbox CommunicationPath R0533
-- gui_toolbox CommunicationPath R0534
-- gui_sketch_area CommunicationPath R0539
gui: White Box View, gui event notifications
gui_attributes_editor Class C0160
This class manages 5 widgets.
It reads the data of the currently focused object into cache,
it writes back changes to the database (via the controller),
it updates the visible widgets when the focused object or the data changes.
A challenge for implementation is, that
on one hand, it implements the callback functions for 5 gtk widgets
(which look independant if ignoring the internal implementation),
on the other hand, it manages just one cached focused object
(update on user-interaction, reload on change events).
name_entry: GtkEntry * Property F0039
stereotype: GtkEntry * Property F0042
type_combo_box: GtkComboBox * Property F0040
description_text_view: GtkTextView * Property F0041
commit_button: GtkButton * Property F0043
object_changed Interface F0088
-- gui_attributes_editor CommunicationPath R0535
gui: White Box View, gui search blocks, gui search sequence, gui event notifications, undo control flow, gui paste from clipboard
sketch Component C0257
This component is the view and controller for the central sketch widget.
This includes the tree navigation bar and the search result list on the left.
+-- gui_sketch_result_list Association R0919
+-- gui_sketch_area Association R0350
+-- gui_sketch_card Association R0351
+-- gui_sketch_nav_tree Association R0546
gui_sketch_nav_tree Component C0374
gui search sequence, gui event notifications
gui_sketch_card Block C0044
- maintains the data of one diagram
- displays one diagram
- performs user interaction
like highlighting elements under the mouse pointer
- visualizes order-hints of elements
- handles situation-specific modes
like not selecting lifelines but their classifiers instead
The gui gui_sketch_card is not responsible for
- mapping order-hints to layout-positions
(see pencil.layout package)
gui_sketch_area Block C0043
Manages the main drawing area:
- layouts its subwidgets,
- loads data-sets from the database,
- reacts on key+button events,
- handles data-change events,
- controls selection-set
- encapsulates quite complex logic for mouse events
notify_listeners IP-socket Interface F0094
tool_changed_callback Interface F0091
-- gui_sketch_area CommunicationPath R0538
-- gui_toolbox CommunicationPath R0541
-- gui_sketch_area CommunicationPath R0543
-- gui_attributes_editor CommunicationPath R0544
*-- gui_sketch_result_list Association R0920
*-- gui_sketch_nav_tree Association R0921
*-- gui_sketch_card Association R0922
gui event notifications, undo control flow
gui_marked_set Component C0535
glib_signal Port F0143
notify_focus Interface F0145
request_focus not-yet-implemented Interface F0144
-- gui_marked_set CommunicationPath R0964
-- gui_marked_set CommunicationPath R0965
gui: Runtime View
gui: Runtime View UMLActivityDiagram D0062
search Activity C0263
navigate Activity C0264
edit Activity C0265
create Activity C0266
GUI Activities Activity C0530
+-- navigate Association R0924
+-- create Association R0925
+-- edit Association R0926
+-- search Association R0927
gui search sequence
gui search sequence UMLInteractionDiagram/sequence D0063
gui search blocks, gui search sequence
search_entry Component C0260
run -->> gui_search _runner Message R0363
gui search blocks, gui search sequence
gui_search _runner Component C0261
show_result_list -->> sketch Message R0364
gui search blocks, gui search sequence
gui_sketch _result_list Component C0262
Introduction and Goals, gui search sequence, Context And Scope, undo control flow, gui paste from clipboard
SW Architect Actor C0046
enter search string --> search_entry Message R0362
search_start_callback g_signal --> search_entry Message R0361
gui: White Box View, gui search blocks, gui search sequence, gui event notifications, undo control flow, gui paste from clipboard
sketch Component C0257
This component is the view and controller for the central sketch widget.
This includes the tree navigation bar and the search result list on the left.
load_data -->> gui_sketch _result_list Message R0365
load data -->> gui_sketch_card Message R0367
gui search sequence, gui event notifications
gui_sketch_card Block C0044
- maintains the data of one diagram
- displays one diagram
- performs user interaction
like highlighting elements under the mouse pointer
- visualizes order-hints of elements
- handles situation-specific modes
like not selecting lifelines but their classifiers instead
The gui gui_sketch_card is not responsible for
- mapping order-hints to layout-positions
(see pencil.layout package)
undo control flow
undo control flow UMLInteractionDiagram/sequence D0118
Introduction and Goals, gui search sequence, Context And Scope, undo control flow, gui paste from clipboard
SW Architect Actor C0046
2. gui_toolbox_undo_btn_callback g_signal --> gui_toolbox Message R0963
gui: White Box View, gui search blocks, gui search sequence, gui event notifications, undo control flow, gui paste from clipboard
sketch Component C0257
This component is the view and controller for the central sketch widget.
This includes the tree navigation bar and the search result list on the left.
External Libraries, undo control flow, Solution Strategy, gui paste from clipboard
gtk4 Package C0005
Toolkit which provides
- Windows and Widgets
- User Input handling
7. gui_toolbox_*_btn_callback -->> gui_toolbox Message R0934
10. return ··>> gui_toolbox Message R0936
gui: White Box View, gui search blocks, gui event notifications, undo control flow, gui paste from clipboard
gui_toolbox Component C0159
controller for the buttons in the tool bar:
- performs the callbacks when the user presses buttons
- switches between search, nav, edit and create mode
3. ctrl_controller_undo -->> ctrl Message R0930
5. gui_toolbox_set_selected_tool_and_focus -->> gui_toolbox Message R0931
6. gtk_toggle_button_set_active -->> gtk4 Message R0932
8. cfu_tool_changed g_signal --> sketch Message R0970
9. return ··>> gtk4 Message R0935
11. gui_marked_set_request_focused_diagram -->> gui_marked_set Message R0966
14. return ··>> gui_toolbox Message R0939
ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, undo control flow, gui paste from clipboard, Building Block View
ctrl Component C0003
- provides write access to the database
- ensures consistency of the uml-model, e.g. no circular contains-relations, no lifelines if no corresponding diagramelement exists
4. return ··>> gui_toolbox Message R0933
gui event notifications, undo control flow
gui_marked_set Component C0535
12. gui_sketch_area_show_diagram --> sketch Message R0967
13. return ··>> gui_toolbox Message R0968
gui paste from clipboard
gui paste from clipboard UMLInteractionDiagram/sequence D0120
Introduction and Goals, gui search sequence, Context And Scope, undo control flow, gui paste from clipboard
SW Architect Actor C0046
copy -->> gui_toolbox Message R0944
paste -->> gui_toolbox Message R0950
gui: White Box View, gui search blocks, gui event notifications, undo control flow, gui paste from clipboard
gui_toolbox Component C0159
controller for the buttons in the tool bar:
- performs the callbacks when the user presses buttons
- switches between search, nav, edit and create mode
gui_clipboard_copy_set_to_clipboard -->> gui_clipboard Message R0945
··>> SW Architect Message R0949
gui_clipboard_request_clipboard_text -->> gui_clipboard Message R0951
··>> SW Architect Message R0955
cfu_tool_changed g_signal --> sketch Message R0962
··>> gui_clipboard Message R0961
External Libraries, undo control flow, Solution Strategy, gui paste from clipboard
gtk4 Package C0005
Toolkit which provides
- Windows and Widgets
- User Input handling
··>> gui_clipboard Message R0947
··>> gui_clipboard Message R0953
gui_clipboard_clipboard_text_received_callback g_async -->> gui_clipboard Message R0956
ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, undo control flow, gui paste from clipboard, Building Block View
ctrl Component C0003
- provides write access to the database
- ensures consistency of the uml-model, e.g. no circular contains-relations, no lifelines if no corresponding diagramelement exists
··>> gui_clipboard Message R0958
gui: White Box View, gui search blocks, gui search sequence, gui event notifications, undo control flow, gui paste from clipboard
sketch Component C0257
This component is the view and controller for the central sketch widget.
This includes the tree navigation bar and the search result list on the left.
gui: White Box View, gui paste from clipboard
gui_clipboard Component C0533
abstracts the gtk4 and OS clipboard
-->> gtk4 Message R0946
··>> gui_toolbox Message R0948
-->> gtk4 Message R0952
··>> gui_toolbox Message R0954
io_importer_import_clipboard -->> ctrl Message R0957
gui_toolbox_set_selected_tool -->> gui_toolbox Message R0960
The control/responsability of the "paste" requests stays with the gui_clipboard
··>> gtk4 Message R0959
gui: Crosscutting Concepts
gui: Crosscutting Concepts UMLStateMachineDiagram D0075
Widget States StateMachine C0321
+-- data available Association R0458
+-- not-yet-layouted Association R0463
+-- uninitialized Association R0457
+-- layouted Association R0459
uninitialized StateMachine C0322
load data --> data available Transition R0460
data available StateMachine C0323
+-- invalid layout Association R0466
+-- layouted Association R0464
+-- not-yet-layouted Association R0465
invalidate --> uninitialized Transition R0469
layouted StateMachine C0324
draw (drawing context) --> layouted Transition R0462
not-yet-layouted StateMachine C0325
do layout (drawing context) --> layouted Transition R0468
invalid layout InitialNode C0326
--> not-yet-layouted Transition R0467
main: Black Box View
main: Black Box View UMLComponentDiagram D0097
main.c Class C0073
calls --> main_commands Association R0630
+-- main.c Association R0090
+-- main_commands Association R0629
main_commands Class C0415
u8stream overview
u8stream overview UMLPackageDiagram D0006
This diagram shows small universal(u8) utility modules.
u8stream overview, u8stream: WhiteBox View
u8stream/ Package C0030
provides small, generic utility classes that are independant of the project
+-- utf8stream Association R0623
+-- u8 Association R0654
+-- u8dir Association R0653
+-- u8stream Association R0405
+-- utf8stringbuf Association R0699
+-- u8list Association R0700
+-- u8arena Association R0701
u8stream overview, utf8stringbuf classes and dependencies
utf8stringbuf Package C0194
String library
u8stream overview, u8stream: WhiteBox View, Stream
u8stream Package C0302
u8arena Package C0410
This package provides functions to provide dynamic-sized data structures which are allocated within a fixed-size memory region.
u8stream overview, u8stream: WhiteBox View
u8list Package C0412
This package is a collection of functinos to handle variable-length lists in statically allocated fixed-sized buffers.
utf8stream Package C0414
This package provides readers and writers that stream unicode code points instead of bytes.
Also conversion functions are provides to write decimals and hexadecimals.
u8dir Package C0423
U8 base classes and macros, u8stream overview, u8 types and functions
u8 Package C0424
u8stream: WhiteBox View
u8stream: WhiteBox View UMLComponentDiagram D0072
u8stream overview, u8stream: WhiteBox View
u8stream/ Package C0030
provides small, generic utility classes that are independant of the project
+-- Simple Random Association R0554
+-- Utf8 Writer Association R0550
+-- u8stream Association R0405
+-- u8list Association R0700
u8stream overview, u8stream: WhiteBox View, Stream
u8stream Package C0302
+-- Output Stream Association R0408
+-- Input Stream Association R0547
io: Runtime View, u8stream: WhiteBox View, Stream
Output Stream Interface C0305
u8stream: WhiteBox View, Stream
Input Stream Component C0375
Utf8 Writer Component C0378
*-- Output Stream Association R0553
Simple Random Component C0379
Pseudo random number generator, not suitable for security appliances.
u8stream overview, u8stream: WhiteBox View
u8list Package C0412
This package is a collection of functinos to handle variable-length lists in statically allocated fixed-sized buffers.
+-- Array List Association R0624
+-- Array Index Sorter Association R0625
Array List Class C0267
Array Index Sorter Class C0058
U8 base classes and macros
U8 base classes and macros UMLPackageDiagram D0100
This diagram shows small universal(u8) utility modules.
U8 base classes and macros, u8 types and functions
u8trace Package C0020
- provides trace macros
- traces allow to reconstruct/follow the program flow
The macros shall be typesafe;
The compiler shall complain if using wrong-typed parameters.
The trace functions are intended for debugging purposes only.
They are disabled in RELEASE/NDEBUG code.
Therefore it is valid to trace confidential information.
+-- Info Association R0088
+-- Timestamp Association R0089
+-- End (function) Association R0087
+-- Begin (function) Association R0086
Begin (function) Class C0069
Info Class C0071
Timestamp Class C0072
End (function) Class C0070
U8 base classes and macros, u8 types and functions
u8log Package C0019
- provides macros for event-logging and error-logging
- macros are typesafe (ts) so that e.g. integers are not acidentially passed to char* parameters
Logging functionality may be enabled even in RELEASE/NDEBUG code.
Logs must not contain confidential data:
These may be forwarded to syslog or the filesystem
where access rights differ from the OS-process in which crystal-facet-uml runs.
+-- Error Association R0064
+-- Anomaly Association R0066
+-- Event Association R0067
+-- Warning Association R0065
Error Class C0052
An error is a condition that leads to an observalbe malfunction.
Event Class C0055
An event is a signal that is send to or received from external software parts.
Anomaly Class C0054
An anomaly is a condition that is expected to not cause a malfunction but that should be logged to easier analyze issues.
E.g. an unknown classifier type in the database may be caused by opening a database file that was created by a newer program version. This could lead to unexpected behavior but should not cause a malfunctioning of the program.
Warning Class C0053
A warning is issued when a condition may possibly lead to a malfunction.
U8 base classes and macros, u8stream overview, u8 types and functions
u8 Package C0424
+-- u8_error Association R0655
+-- u8_error_info Association R0656
+-- u8trace Association R0657
+-- u8log Association R0658
U8 base classes and macros, u8 types and functions, Error Propagation
u8_error Class C0411
An error mask representing one or multiple errors
U8 base classes and macros, u8 types and functions
u8_error_info Class C0418
An error info struct representing one error with detailed information
Stream
Stream UMLComponentDiagram D0091
u8stream overview, u8stream: WhiteBox View, Stream
u8stream Package C0302
+-- Output Stream Association R0408
+-- Memory Output Stream Association R0407
+-- File Output Stream Association R0406
+-- Escaping Output Stream Association R0555
+-- Stream Output Stream Association R0556
+-- Input Stream Association R0547
+-- File input stream Association R0549
+-- Memory Input Stream Association R0548
io: Runtime View, u8stream: WhiteBox View, Stream
Output Stream Interface C0305
Memory Output Stream Class C0304
··|> Output Stream Realization R0409
File Output Stream Class C0303
··|> Output Stream Realization R0410
File input stream Component C0377
··|> Input Stream Realization R0552
Memory Input Stream Component C0376
··|> Input Stream Realization R0551
u8stream: WhiteBox View, Stream
Input Stream Component C0375
Escaping Output Stream Component C0380
··|> Output Stream Realization R0557
··|> Output Stream Realization R0558
utf8stringbuf classes and dependencies
utf8stringbuf classes and dependencies UMLClassDiagram D0101
u8stream overview, utf8stringbuf classes and dependencies
utf8stringbuf Package C0194
String library
+-- utf8:codepoint iterator Association R0661
+-- utf8:string Association R0662
+-- uft8:stringview iterator Association R0665
+-- storage classes Association R0667
+-- view classes Association R0668
+-- utf8:stringview Association R0664
+-- utf8:stringview tokenizer Association R0666
+-- utf8:stringbuf Association R0663
+-- utf8:codepoint Association R0660
utf8stringbuf classes and dependencies
utf8:codepoint Class C0426
utf8stringbuf classes and dependencies
utf8:codepoint iterator Class C0427
provides ··> utf8:codepoint Dependency R0677
iterates on ··> utf8:stringview Dependency R0802
utf8stringbuf classes and dependencies
utf8:string Class C0428
utf8stringbuf classes and dependencies
utf8:stringbuf pointer_t Class C0429
The methods of this stringbuf take an instance as parameter, which is kind of a pointer to the underlying character array.
consumes / produces ··> utf8:string Dependency R0676
use ··> utf8:stringview Dependency R0683
utf8stringbuf classes and dependencies
utf8:stringview Class C0430
selects ··> utf8:string Dependency R0678
utf8stringbuf classes and dependencies
uft8:stringview iterator Class C0431
iterates on / provides ··> utf8:stringview Dependency R0679
utf8stringbuf classes and dependencies
utf8:stringview tokenizer Class C0432
iterates on / provides ··> utf8:stringview Dependency R0680
utf8stringbuf classes and dependencies
storage classes Package C0433
+-- utf8:stringbuf Association R0669
+-- utf8:codepoint Association R0674
+-- utf8:string Association R0675
utf8stringbuf classes and dependencies
view classes Package C0434
+-- uft8:stringview iterator Association R0670
+-- utf8:stringview Association R0671
+-- utf8:codepoint iterator Association R0672
+-- utf8:stringview tokenizer Association R0673
u8 types and functions
u8 types and functions UMLComponentDiagram D0111
U8 base classes and macros, u8stream overview, u8 types and functions
u8 Package C0424
+-- u8_fault_inject Association R0801
+-- u8_error Association R0655
+-- u8_error_info Association R0656
+-- u8trace Association R0657
+-- u8log Association R0658
U8 base classes and macros, u8 types and functions
u8_error_info Class C0418
An error info struct representing one error with detailed information
U8 base classes and macros, u8 types and functions
u8trace Package C0020
- provides trace macros
- traces allow to reconstruct/follow the program flow
The macros shall be typesafe;
The compiler shall complain if using wrong-typed parameters.
The trace functions are intended for debugging purposes only.
They are disabled in RELEASE/NDEBUG code.
Therefore it is valid to trace confidential information.
U8 base classes and macros, u8 types and functions
u8log Package C0019
- provides macros for event-logging and error-logging
- macros are typesafe (ts) so that e.g. integers are not acidentially passed to char* parameters
Logging functionality may be enabled even in RELEASE/NDEBUG code.
Logs must not contain confidential data:
These may be forwarded to syslog or the filesystem
where access rights differ from the OS-process in which crystal-facet-uml runs.
U8 base classes and macros, u8 types and functions, Error Propagation
u8_error Class C0411
An error mask representing one or multiple errors
test_fw: White Box View, u8 types and functions
u8_fault_inject Class C0483
Provides some macros that allow test cases to inject faults into the code under test.
External Libraries
External Libraries UMLPackageDiagram D0003
This diagram shows the base libraries. crystal-facet-uml links to these dynamically.
External Libraries, undo control flow, Solution Strategy, gui paste from clipboard
gtk4 Package C0005
Toolkit which provides
- Windows and Widgets
- User Input handling
depends on o-- gdk Association R0001
o-- atk Association R0316
o-- gio Association R0318
uses o-- cairo Association R0002
uses o-- pango Association R0003
depends on o-- glib Association R0004
atk Package C0236
Accessibility Toolkit, kind of IPC to make widgets interfaces accessible.
o-- glib Association R0317
o-- glib Association R0319
test_fw: Black Box View
test_fw: Black Box View UMLComponentDiagram D0005
This diagram shows the sw-components involved in unit-testing.
test_fw: White Box View, test_fw: Black Box View
test_fw Package C0017
Test framework
- runs test cases
- reports test results
main/test Component C0018
Each SW-moldule may have a subfolder named unittest which contains a set of tests; these
- test the SW-module
+-- test_main Association R0071
depends on --> test_fw Association R0005
-- data/test/unit CommunicationPath R0076
-- pencil/test/* CommunicationPath R0077
-- universal/test/unit CommunicationPath R0078
-- ctrl/test/unit CommunicationPath R0079
data/test/unit Component C0059
··> test_fw Dependency R0075
ctrl/test/unit Component C0060
··> test_fw Dependency R0072
test_main Class C0061
pencil/test/* Component C0062
··> test_fw Dependency R0074
universal/test/unit Component C0063
··> test_fw Dependency R0073
io/test/* Component C0210
··> test_fw Dependency R0291
utf8stringbuf/test/unit Component C0211
··> test_fw Dependency R0292
test_fw: White Box View
test_fw: White Box View UMLClassDiagram D0055
test_fw: White Box View, test_fw: Black Box View
test_fw Package C0017
Test framework
- runs test cases
- reports test results
+-- test_suite Association R0301
+-- test_assert Association R0304
+-- test_fixture Association R0305
+-- test_runner Association R0302
+-- test_result Association R0303
test_suite Class C0227
test_case: [list] Property F0054
setup() Operation F0055
tear_down() Operation F0056
call --> test_assert Association R0309
test_runner Class C0228
aggregate o-- test_result Association R0308
run_suite --> test_suite Association R0311
test_result Class C0229
test_assert Class C0230
··> test_suite Dependency R0306
··> test_suite Dependency R0307
test_fw: White Box View, u8 types and functions
u8_fault_inject Class C0483
Provides some macros that allow test cases to inject faults into the code under test.
Runtime View
Runtime View UMLActivityDiagram D0012
This diagram depicts the run modes of the software.
mode? DecisionNode C0064
start repair via command line --> run test /repair /export / import via CLI ControlFlow R0080
start GUI --> show GUI, no DB file selected ControlFlow R0081
show GUI, no DB file selected Activity C0065
select DB file --> show GUI, show+alter DB ControlFlow R0082
run test /repair /export / import via CLI Activity C0066
report and finish --> end ControlFlow R0085
end ActivityFinalNode C0067
show GUI, show+alter DB Activity C0068
switch DB file --> show GUI, show+alter DB ControlFlow R0083
select non-DB file --> show GUI, no DB file selected ControlFlow R0102
Try to open a non-sqlite 3 DB file.
start InitialNode C0192
--> mode? ControlFlow R0251
Multithreading in GUI Mode, Runtime View
GUI-mode Activity C0193
+-- show GUI, no DB file selected Association R0252
+-- show GUI, show+alter DB Association R0253
quit --> end ControlFlow R0254
runmodes Activity C0313
+-- mode? Association R0446
+-- start Association R0447
+-- run test /repair /export / import via CLI Association R0448
+-- end Association R0449
+-- GUI-mode Association R0450
Multithreading in GUI Mode
Multithreading in GUI Mode UMLActivityDiagram D0112
Concept for Multithreading:
In general, all modules shall work in a multithreaded environment.
- The gui module requires own data structures in order to be thread-safe
and relies on the base libraries gtk, gdk which need to support multi-threading,
- The pencil module requires own data structures in order to be thread safe
and relies on the base libraries pango and cairo which need to support multi-threading.
- The data module does not need own data structures,
it comes with a module-wide lock in the database_t structure.
- The ctrl module requires own data structures in order to be thread safe.
This limitation would need to be changed if a multi-threaded gui
should access a single ctrl and data instance. (Currently, the software is single-threaded)
Multithreading in GUI Mode, Runtime View
GUI-mode Activity C0193
+-- start_for_MT Association R0813
+-- start_par Association R0816
+-- Load-or-Render Thread(s) Association R0815
+-- end_par Association R0817
+-- end_from_MT Association R0818
+-- Main GUI Thread Association R0814
+-- Future Multithreading Concept Association R0923
Future Multithreading Concept Comment C0485
This diagram shows a possible future multhreading conecpt. Today, the software runs single threaded.
start_for_MT InitialNode C0486
--> start_par ControlFlow R0819
Multithreading in GUI Mode, Mutexed data structures, Separate data structures per thread
Main GUI Thread Activity C0487
+-- orchestrate work Association R0827
+-- run Association R0828
Multithreading in GUI Mode, Mutexed data structures, Separate data structures per thread
Load-or-Render Thread(s) not-yet-implemented Activity C0488
+-- wait Association R0823
+-- work Association R0824
start_par ForkNode C0489
start thread(s) --> Load-or-Render Thread(s) ControlFlow R0820
start GUI main thread --> Main GUI Thread ControlFlow R0821
end_par JoinNode C0490
--> end_from_MT ControlFlow R0822
end_from_MT ActivityFinalNode C0491
wait AcceptEventAction C0492
--> work ControlFlow R0825
work Activity C0493
--> wait ControlFlow R0826
end thread --> end_par ControlFlow R0831
orchestrate work SendSignalAction C0494
--> run ControlFlow R0830
run Activity C0495
--> orchestrate work ControlFlow R0829
end --> end_par ControlFlow R0832
Mutexed data structures
Mutexed data structures UMLComponentDiagram D0113
Multithreading in GUI Mode, Mutexed data structures, Separate data structures per thread
Main GUI Thread Activity C0487
create/write/delete elements exclusive --> ctrl_controller ControlFlow R0841
check open/close database exclusive --> data_database ControlFlow R0842
Multithreading in GUI Mode, Mutexed data structures, Separate data structures per thread
Load-or-Render Thread(s) not-yet-implemented Activity C0488
open/close database exclusive --> data_database ControlFlow R0833
create/write/delete elements exclusive --> ctrl_controller ControlFlow R0838
data: White Box View, data: Runtime View, Mutexed data structures, Database Readers
data_database Class C0037
- wraps the sqlite database
- knows the current status and filename
- opens and closes the database
- manages the list of listeners and notifies changes
change_lock: GMutex Property F0124
A single, central lock for ctrl package and data_database class. A single lock prevents dead locks.
list: data_database_listener Property F0126
sql:create() Operation F0127
sql:execute() Operation F0128
ctrl: White Box View, Mutexed data structures
ctrl_controller Class C0040
- changes the database contents
- maintains the undo redo list
use central lock --> data_database Association R0849
The controller uses the same central mutex as the database. This avoids dead locks.
Only one per database Comment C0498
Only one controller and only one database class shall exist per database. This ensures that the undo redo history is not damaged by multiple concurrent threads.
singleton ··> ctrl_controller Dependency R0839
singleton ··> data_database Dependency R0840
Separate data structures per thread
Separate data structures per thread UMLComponentDiagram D0114
Separate data structures per thread
db_reader_2 :data_database _reader Class C0496
instance of ··|> data_database _reader Realization R0835
Separate data structures per thread
db_reader_1 :data_database _reader Class C0497
instance of ··|> data_database _reader Realization R0834
Multithreading in GUI Mode, Mutexed data structures, Separate data structures per thread
Load-or-Render Thread(s) not-yet-implemented Activity C0488
use own reader --> db_reader_2 :data_database _reader ControlFlow R0836
use own pencil --> pencil_2 :pencil_diagram_maker ControlFlow R0846
Multithreading in GUI Mode, Mutexed data structures, Separate data structures per thread
Main GUI Thread Activity C0487
use own reader --> db_reader_1 :data_database _reader ControlFlow R0837
use own pencil --> pencil_1 :pencil_diagram_maker ControlFlow R0845
pencil: White Box View, Separate data structures per thread
pencil_diagram_maker Class C0032
- coordinates layouting and drawing of a diagram
- implements a front controller pattern: all requests from gui to pencil are addressed to the pencil_diagram_maker
Separate data structures per thread
pencil_1 :pencil_diagram_maker Class C0499
instance of ··|> pencil_diagram_maker Realization R0843
Separate data structures per thread
pencil_2 :pencil_diagram_maker Class C0500
intance of ··|> pencil_diagram_maker Realization R0844
Separate data structures per thread
Every thread has own data structures Comment C0501
Every thread has own data structures for reading data and rendering diagrams to allow concurrent execution.
··> Load-or-Render Thread(s) Dependency R0847
··> Main GUI Thread Dependency R0848
data: White Box View, io: Runtime View, Separate data structures per thread, Database Readers
data_database _reader ro Class C0038
- reads data from the database
Database File Recovery
Database File Recovery UMLActivityDiagram D0115
crystal-facet-uml stores the data model in a json based file. While working on the model, it is kept in a temporary database. These two locations can run out of sync. This diagram lists the causes and the mitigations.
DATA FILE EXISTS InterruptibleActivityRegion C0502
+-- parse data file Association R0854
+-- TEMP DB FILE EXISTS Association R0850
+-- more actual? Association R0862
+-- delete temp db file Association R0869
TEMP DB FILE EXISTS InterruptibleActivityRegion C0503
+-- checksum changed? Association R0885
+-- do work Association R0856
+-- write data file Association R0858
+-- pause work Association R0876
+-- unexpected termination Association R0866
+-- git merge performed Association R0861
work on model Activity C0504
+-- open data file Association R0852
+-- interrupt work Association R0867
+-- DATA FILE EXISTS Association R0851
open data file InitialNode C0505
--> more actual? ControlFlow R0863
parse data file Activity C0506
--> do work ControlFlow R0857
do work Activity C0507
save or quit or focus lost --> write data file ControlFlow R0889
write data file Activity C0508
warn-on-overwite() Operation F0125
If the data file to be written changed while having the focus, the user shall be warned on overwriting.
[return after save] --> do work ControlFlow R0860
[quit] --> delete temp db file ControlFlow R0872
[focus lost] --> pause work ControlFlow R0882
git merge performed AcceptEventAction C0509
more actual? not-yet-implemented DecisionNode C0510
If the .tmp-cfu file has the right checksum of the data file stored, then the .tmp-cfu file is more actual. Otherwise the .cfuJ file is modified and shall not be overwritten.
[.tmp-cfu] --> do work ControlFlow R0864
[.cfuJ] --> parse data file ControlFlow R0865
unexpected termination AcceptEventAction C0511
--> interrupt work ControlFlow R0868
interrupt work ActivityFinalNode C0512
delete temp db file Activity C0513
--> interrupt work ControlFlow R0871
pause work Activity C0515
focus gained --> checksum changed? ControlFlow R0888
checksum changed? not-yet-implemented DecisionNode C0517
If the checksum of the data file changed during focus lost, the data file shall be reloaded.
[yes] --> parse data file ControlFlow R0886
[no] --> do work ControlFlow R0887
Deployment View
Deployment View UMLComponentDiagram D0035
PC: Hardware Node C0175
The physical or virtual environment within the software runs.
+-- Linux/Win: OS Association R0237
+-- JSON Data Exchange Association R0561
+-- Other export formats Association R0564
+-- Database File Association R0559
+-- crystal-facet-uml process Association R0238
crystal-facet-uml process Node C0177
+-- crystal-facet-uml application Association R0243
Introduction and Goals, Use Cases on Diagrams, Use Cases on Data Model, Export Use Cases, Context And Scope, Solution Strategy, Building Block View, Deployment View, Import/Sync Use Cases
crystal-facet-uml application Component C0178
-- Database File CommunicationPath R0560
im/export -- JSON Data Exchange CommunicationPath R0563
export -- Other export formats CommunicationPath R0565
Database File Artifact C0382
Data models of crystal-facet-uml are stored to and read from sqlite database files.
JSON Data Exchange Artifact C0383
Data models of crystal-facet-uml are stored to and read from json files.
··> Version Control System Deployment R0562
Version Control System Component C0384
Other export formats Artifact C0385
Data models of crystal-facet-uml are exported as rendered images and/or text-based data files.
Crosscutting Concepts
Crosscutting Concepts CFUBoxDiagram D0039
This chapter shows concepts that shall be applied through all parts of the software.
Crosscutting Concepts Comment C0217
Trace, Log, Assert, Error Propagation, Memory Management
Assert
Assert SysMLRequirementDiagram D0048
Program Assert Requirement C0220
Use "if(COND) {...} else {LOG("error");assert(false);}" statements to ensure code+data consistency towards other software modules, This makes code more robust if unexpected behavior occurs during operation.
Assert-Goal Comment C0221
Maintainability:
- When modifying code,
illegal modifcations shall be detected early
Analyzability:
- When receiving bug reports,
an anomaly in the program/data flow
shall be detected early
Reliability:
- Errors in one SW module
shall not cause errors in other modules
Testability:
- Assert-paths in code shall be testable
··> Program Assert Dependency R0295
··> External Data Check Dependency R0298
··> Local Assert Dependency R0299
··> Test Environment Assert Dependency R0300
Local Assert Requirement C0224
Use "assert(COND);" statements to ensure code+data consistency within one software module, These are executed in DEBUG mode only.
External Data Check Requirement C0225
Use "if(COND) {...} else {LOG("error");}" statements to ensure code+data consistency towards external input, External input may possibly not follow any specification.
Test Environment Assert Requirement C0226
Use "TEST_ENVIRONMENT_ASSERT()" statement to ensure a valid test environment. Errors always terminate the test run.
Log, Trace
Log, Trace SysMLRequirementDiagram D0049
Trace-Goal Comment C0223
Trace messages shall be activated for debugging to follow the program flow and visualize the processed data.
··> Trace Dependency R0297
Trace Requirement C0218
Performance:
- Deactivated trace messages shall not slow down the program by more than 1%.
- Activated trace messages shall not slow down the program by more than 10%.
- Operation performance (NDEBUG-mode) shall not be affected by trace messages.
Log-Goal Comment C0222
Log Messages are written during operation to be able to analyze important events, anomalies and faults.
··> Log Dependency R0296
Memory Management
Memory Management SysMLRequirementDiagram D0058
Stack Mem Requirement C0246
On stack, only small data structures (<10kB) shall be stored.
··> Degradation Mode Trace R0471
Static Allocations Requirement C0248
All data structures of crystal-facet-uml shall be statically allocated.
··> Degradation Mode Trace R0470
Limited dynamic allocations future extension Requirement C0297
Memory may be dynamically allocated from heap for non-base use cases. The program shall continue operation if no memory is available anymore. See Performance Efficiency (Time+Resource).
··> Degradation Mode Trace R0472
Performance Efficiency (Time+Resource), Memory Management
Degradation Mode UseCase C0295
In case of low memory, the base functionality of crystal-facet-uml shall still work reliably.
Error Propagation
Error Propagation UMLUseCaseDiagram D0059
Error Codes Comment C0249
When a failure is detected, it shall be logged. If a failure can be handled locally, this shall be done. Typically, an error is propagated from where it is detected to another location in the program where it can be handled. This is done using error codes.
Bitmask req Requirement C0250
The error bitmask shall be designed in a way that a zero represents no error, that the bits define the error cause/type, that two errors can be merged into one error code using a bitwise or. Error codes are not netative because this makes evaluation of the bitmask difficult to understand.
U8 base classes and macros, u8 types and functions, Error Propagation
u8_error Class C0411
An error mask representing one or multiple errors
··> Bitmask Trace R0901
··|> ERROR Realization R0903
Top Level Error-Categories, Error Propagation
ERROR logical element Class C0386
Top Level Error-Categories
Top Level Error-Categories UMLClassDiagram D0092
Top Level Error-Categories, Error Propagation
ERROR logical element Class C0386
Logic Errors, Top Level Error-Categories, User Errors, Operations Error Categories
Error-Categories by Reaction Package C0387
+-- CONTINUE Association R0575
+-- USR_ERROR Association R0576
+-- LOGIC_ERROR Association R0579
+-- OP0_ERROR Association R0580
+-- OP1_ERROR Association R0577
+-- USR_ERROR Association R0578
+-- OP1_ERROR Association R0573
+-- NO_START Association R0581
+-- TERMINATE Association R0582
CONTINUE Class C0388
--|> ERROR Generalization R0569
NO_START Class C0389
--|> ERROR Generalization R0568
TERMINATE Class C0390
--|> ERROR Generalization R0570
Top Level Error-Categories, User Errors
USR_ERROR Class C0391
notify user: in statusbar Operation F0097
--|> CONTINUE Generalization R0902
Top Level Error-Categories, Operations Error Categories
OP1_ERROR Class C0392
notify operator: via log Operation F0098
--|> CONTINUE Generalization R0574
Top Level Error-Categories, Operations Error Categories
OP0_ERROR Class C0393
notify operator Operation F0099
--|> NO_START Generalization R0572
--|> TERMINATE Generalization R0571
Logic Errors
Logic Errors UMLClassDiagram D0094
Logic Errors, Top Level Error-Categories, User Errors, Operations Error Categories
Error-Categories by Reaction Package C0387
+-- LOGIC_ERROR Association R0579
STATE internal Class C0400
--|> LOGIC_ERROR Generalization R0596
PARAMS internal Class C0401
--|> LOGIC_ERROR Generalization R0595
DATA_CORRUPT internal Class C0402
--|> LOGIC_ERROR Generalization R0594
Logic Errors, User Errors, Operations Error Categories
Error-Categories by Cause Package C0399
+-- PARAMS Association R0592
+-- STATE Association R0591
+-- DATA_CORRUPT Association R0593
User Errors
User Errors UMLClassDiagram D0093
INPUT /SOURCE external Class C0395
--|> USR_ERROR Generalization R0584
OUTPUT /SINK external Class C0396
--|> USR_ERROR Generalization R0583
USER_ACCESS (r/w/x) external Class C0397
--|> USR_ERROR Generalization R0585
--|> USR_ERROR Generalization R0586
Top Level Error-Categories, User Errors
USR_ERROR Class C0391
notify user: in statusbar Operation F0097
Logic Errors, Top Level Error-Categories, User Errors, Operations Error Categories
Error-Categories by Reaction Package C0387
+-- USR_ERROR Association R0576
+-- USR_ERROR Association R0578
Logic Errors, User Errors, Operations Error Categories
Error-Categories by Cause Package C0399
+-- USER_ACCESS (r/w/x) Association R0588
+-- INPUT /SOURCE Association R0590
+-- OUTPUT /SINK Association R0589
+-- WRONG_MODE Association R0587
Operations Error Categories
Operations Error Categories UMLClassDiagram D0095
Logic Errors, Top Level Error-Categories, User Errors, Operations Error Categories
Error-Categories by Reaction Package C0387
+-- OP0_ERROR Association R0580
+-- OP1_ERROR Association R0577
+-- OP1_ERROR Association R0573
Top Level Error-Categories, Operations Error Categories
OP1_ERROR Class C0392
notify operator: via log Operation F0098
Top Level Error-Categories, Operations Error Categories
OP0_ERROR Class C0393
notify operator Operation F0099
Logic Errors, User Errors, Operations Error Categories
Error-Categories by Cause Package C0399
+-- ENV_RUN Association R0603
+-- SYSTEM_ACCESS Association R0602
+-- TIME/SYNC Association R0601
+-- ENV_START Association R0604
--|> OP1_ERROR Generalization R0597
SYSTEM_ACCESS external Class C0404
--|> OP1_ERROR Generalization R0598
--|> OP1_ERROR Generalization R0599
--|> OP0_ERROR Generalization R0600
Architectural Decisions
Architectural Decisions reason_decision UMLUseCaseDiagram D0016
This diagram shows which major design decisions were taken.
Question, Alternatives, selected Decision Comment C0085
··> How to store data persistently? Dependency R0103
··> How to structure persistent data? Dependency R0104
··> How can diagrams select the parts to show? Dependency R0105
··> How to traverse the model for XMI export? Dependency R0401
Alternatives on data structure of UML-Model, Architectural Decisions
How to structure persistent data? reason_decision UseCase C0086
The database structure shall be simple but also close to UML in oder to store an UML-Model
Alternatives on persistent Data Storage, Architectural Decisions
How to store data persistently? reason_decision UseCase C0075
The UML Model shall be stored persistently.
Architectural Decisions, Alternatives on UML-Model selection for Diagram
How can diagrams select the parts to show? reason_decision UseCase C0087
Each diagram shall show selected parts of the UML-Model, especially the scenario-based sequence, communication and timing diagrams.
Architectural Decisions, Alternatives on XMI export/model traverse
How to traverse the model for XMI export? reason_decision UseCase C0298
Alternatives on persistent Data Storage
Alternatives on persistent Data Storage reason_decision SysMLRequirementDiagram D0013
This diagram shows fundamental design decisions of the crystal-facet-uml architecture.
Alternatives on persistent Data Storage
XML DB reason_rejected Requirement C0074
The database is stored in XML format.
pro: text based, fits to svn and git repositories
con: all data needs to fit to RAM
(or complex data handling), difficult to read for humans, especially for relations between data entries.
solves ··> How to store data persistently? Trace R0094
Alternatives on persistent Data Storage, Architectural Decisions
How to store data persistently? reason_decision UseCase C0075
The UML Model shall be stored persistently.
Alternatives on persistent Data Storage
Json DB reason_chosen Requirement C0076
The database is stored in Json format.
pro: text based, fits to svn and git repositories
con: all data needs to fit to RAM
(or complex data handling)
solves ··> How to store data persistently? Trace R0093
Alternatives on persistent Data Storage
SQLite DB reason_chosen Requirement C0077
The database is stored in sqlite3 format.
pro: the database cares on handling big amounts of data
the database cares on reliability and consistency of data
con: binary files are not suitable for git repositories
solves ··> How to store data persistently? Trace R0091
Alternatives on persistent Data Storage
Key-Value Pairs DB reason_rejected Requirement C0078
The database is stored as key-value pairs.
pro: allows automatic merges by git and svn
con: all data needs to fit to RAM (or complex data handling),
difficult to express complex data entries or relations between these
solves ··> How to store data persistently? Trace R0092
Alternatives on persistent Data Storage
SQLite is chosen reason_argument Comment C0079
Rationale: This alternative is most future-proof in case the database becomes large.
··> SQLite DB Dependency R0095
Alternatives on persistent Data Storage
Json as second/optional storage format reason_argument Comment C0360
Rationale:
A human-readable JSON based storage format
allows to support the following use cases:
- git blame shall show who changed model elements
- git merge shall allow to automatically merge models
- git mergetool shall allow to manually merge models
- Data exchange with external scripts
··> Json DB Dependency R0512
Alternatives on data structure of UML-Model
Alternatives on data structure of UML-Model reason_decision UMLClassDiagram D0017
Alternatives on data structure of UML-Model, Architectural Decisions
How to structure persistent data? reason_decision UseCase C0086
The database structure shall be simple but also close to UML in oder to store an UML-Model
Alternatives on data structure of UML-Model, Details on simple data structure
Simple data structure reason_chosen Package C0088
The data is structured with focus on simplicity.
pro: Simple data structure.
There are similarities to UML (M2 Meta-Model) and MOF (M3 Meta-Model).
con: takes into account that some things of UML cannot be represented
solves ··> How to structure persistent data? Trace R0110
Alternatives on data structure of UML-Model
Copy of the OMG UML Defintion Model reason_rejected Package C0089
The data is structured according to the UML meta model defined by OMG (see UML/SysML Overview).
pro: allows to model all UML elements
easy conversion to XMI and back
con: the UML meta model is complex.
Not suitable for a small diagram-drawing application like crystal-facet-uml.
solves ··> How to structure persistent data? Trace R0109
Alternatives on data structure of UML-Model
Simple structure is chosen reason_argument Comment C0091
The OMG UML definition model is quite complex and exceeds the possibilities of a small OSS program like crystal-facet-uml.
··> Simple data structure Dependency R0117
Details on simple data structure
Details on simple data structure UMLClassDiagram D0020
This diagram shows the data structure of the 'Simple data structure' alternative.
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
relationships Class C0081
id: int64_t Property F0014
main_type: enum Property F0021
name Property F0022
description Property F0023
from --> classifiers Association R0096
to --> classifiers Association R0097
from --> features Association R0205
to --> features Association R0206
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
classifiers Class C0080
id: int64_t Property F0012
main_type: enum Property F0017
stereotype Property F0018
name Property F0019
description Property F0020
*-- features Association R0210
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
features Class C0083
id: int64_t Property F0013
main_type: enum Property F0024
key (name) Property F0025
value (type) Property F0026
description Property F0027
Alternatives on data structure of UML-Model, Details on simple data structure
Simple data structure reason_chosen Package C0088
The data is structured with focus on simplicity.
pro: Simple data structure.
There are similarities to UML (M2 Meta-Model) and MOF (M3 Meta-Model).
con: takes into account that some things of UML cannot be represented
+-- relationships Association R0106
+-- classifiers Association R0107
+-- features Association R0108
Alternatives on UML-Model selection for Diagram
Alternatives on UML-Model selection for Diagram reason_decision UMLPackageDiagram D0018
Architectural Decisions, Alternatives on UML-Model selection for Diagram
How can diagrams select the parts to show? reason_decision UseCase C0087
Each diagram shall show selected parts of the UML-Model, especially the scenario-based sequence, communication and timing diagrams.
Details on Classifier Selected View, Alternatives on UML-Model selection for Diagram
Classifier selection defines view reason_rejected Package C0090
Diagramelements define which classifiers are visible in which diagram.
All features of a visible classifier are shown.
All relationships are shown that have visible classifiers at both ends.
pro: simple selection rule
con: Problematic for diagrams that show possible scenarios and alternatives (e.g sequences).
This solution assumes that the model is invariant for all diagrams,
therefore all diagrams showing examples/scenarios have to show own instances of classes,
not generic classes that are used in other diagrams.
solves ··> How can diagrams select the parts to show? Trace R0116
Details on Classifier or Relationship Sel., Alternatives on UML-Model selection for Diagram
Classifier or Relationship selection def. view reason_rejected Package C0092
Diagram element records define what is shown in a diagram.
Depending on the diagram type, these select either classifiers or relationships and thereby determine what is visible.
pro: similar concept for diagrams that show options/alternatives/scenarios (as the 4 types of interaction diagrams) to diagrams that show invariants (that are all other diagrams).
con: Bigger extension to existing structure.
Algorithm to distinguish used from unused elements gets complicated
solves ··> How can diagrams select the parts to show? Trace R0118
Alternatives on UML-Model selection for Diagram
Diagrams have filters reason_rejected Package C0096
Either diagrams filter ranges of x-order/y-order/list-order
or diagrams filter by use-case (which requires that all relations belong to a use-case)
pro: small changes to existing database structure only
con: Unclear gui concept: How to make this filtering transparent to the user?
How to copy/paste between diagrams? How to make invisible relationships visible?
solves ··> How can diagrams select the parts to show? Trace R0127
Alternatives on UML-Model selection for Diagram
Classifier+Lifeline solution is chosen reason_argument Comment C0097
This solution allows with few additional relationships to provide a user friendly solution to scenario and example based diagrams.
··> Classifier and port/lifeline selection def view Dependency R0141
Alternatives on UML-Model selection for Diagram
Classifier and port/lifeline selection def view reason_chosen Package C0106
solves ··> How can diagrams select the parts to show? Trace R0140
DATA_CLASSIFIER _TYPE_INTERACTION, Alternatives on UML-Model selection for Diagram
DATA_CLASSIFIER _TYPE_INTERACTION reason_rejected Package C0455
Diagramelements define which classifiers are visible in which diagram.
All features of a visible classifier are shown.
All relationships are shown that have visible classifiers at both ends.
In contrast to Classifier and Port/Lifeline selection def view, this solution links lifelines (which are features) to both: their classifier and also to their interaction.
pro: similar simplicity as Classifier and Port/Lifeline selection def view.
The model encodes all information even when ignoring the view classes.
The solution is closer to the UML proposal
The xmi export would not require exceptional handlings for interactions
con: Idea for this solution popped up after Classifier and Port/Lifeline selection def view was already implemented.
There would be 1 more implicit object to manage automatically
More error cases have to be handled
solves ··> How can diagrams select the parts to show? Trace R0713
Details on Classifier or Relationship Sel.
Details on Classifier or Relationship Sel. reason_rejected UMLClassDiagram D0019
Depending on the diagram type, selection of contents is done on classifiers or relationships.
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
relationships Class C0081
id: int64_t Property F0014
main_type: enum Property F0021
name Property F0022
description Property F0023
from --> classifiers Association R0096
to --> classifiers Association R0097
from --> features Association R0205
to --> features Association R0206
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
classifiers Class C0080
id: int64_t Property F0012
main_type: enum Property F0017
stereotype Property F0018
name Property F0019
description Property F0020
*-- features Association R0210
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
features Class C0083
id: int64_t Property F0013
main_type: enum Property F0024
key (name) Property F0025
value (type) Property F0026
description Property F0027
Database Structure, Details on Classifier or Relationship Sel., Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
diagrams Class C0084
id: int64_t Property F0015
diagram_type: enum Property F0028
name Property F0029
description Property F0030
parent --> diagrams Association R0099
Details on Classifier or Relationship Sel.
diagramrelationships reason_rejected Class C0095
for diagrams that show options/alternatives/scenarios
--> relationships Association R0126
--> diagrams Association R0130
Details on Classifier or Relationship Sel., Alternatives on UML-Model selection for Diagram
Classifier or Relationship selection def. view reason_rejected Package C0092
Diagram element records define what is shown in a diagram.
Depending on the diagram type, these select either classifiers or relationships and thereby determine what is visible.
pro: similar concept for diagrams that show options/alternatives/scenarios (as the 4 types of interaction diagrams) to diagrams that show invariants (that are all other diagrams).
con: Bigger extension to existing structure.
Algorithm to distinguish used from unused elements gets complicated
+-- diagramrelationships Association R0121
+-- diagramelements_simple Association R0712
Details on Classifier or Relationship Sel., Details on Classifier Selected View, DATA_CLASSIFIER _TYPE_INTERACTION
diagramelements_simple reason_rejected Class C0152
id: int64_t Property F0034
display_flags Property F0035
--> diagrams Association R0207
--> classifiers Association R0208
Details on Classifier Selected View
Details on Classifier Selected View reason_rejected UMLClassDiagram D0021
The simple solution is to not implement special mechanisms for scenario-based diagrams but to require that all shown classifiers in a scenario based diagram are explicit instances of the model-class.
Details on Classifier Selected View, Alternatives on UML-Model selection for Diagram
Classifier selection defines view reason_rejected Package C0090
Diagramelements define which classifiers are visible in which diagram.
All features of a visible classifier are shown.
All relationships are shown that have visible classifiers at both ends.
pro: simple selection rule
con: Problematic for diagrams that show possible scenarios and alternatives (e.g sequences).
This solution assumes that the model is invariant for all diagrams,
therefore all diagrams showing examples/scenarios have to show own instances of classes,
not generic classes that are used in other diagrams.
+-- diagramelements_simple Association R0209
Database Structure, Details on Classifier or Relationship Sel., Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
diagrams Class C0084
id: int64_t Property F0015
diagram_type: enum Property F0028
name Property F0029
description Property F0030
parent --> diagrams Association R0099
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
relationships Class C0081
id: int64_t Property F0014
main_type: enum Property F0021
name Property F0022
description Property F0023
from --> classifiers Association R0096
to --> classifiers Association R0097
from --> features Association R0205
to --> features Association R0206
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
classifiers Class C0080
id: int64_t Property F0012
main_type: enum Property F0017
stereotype Property F0018
name Property F0019
description Property F0020
*-- features Association R0210
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
features Class C0083
id: int64_t Property F0013
main_type: enum Property F0024
key (name) Property F0025
value (type) Property F0026
description Property F0027
Details on Classifier or Relationship Sel., Details on Classifier Selected View, DATA_CLASSIFIER _TYPE_INTERACTION
diagramelements_simple reason_rejected Class C0152
id: int64_t Property F0034
display_flags Property F0035
--> diagrams Association R0207
--> classifiers Association R0208
Classifier and Port/Lifeline selection def view
Classifier and Port/Lifeline selection def view reason_chosen UMLClassDiagram D0024
This (finally chosen and implemented) solution selects timing and sequence lifelines by a focused_feature link. To enhance usability, this cannot be selected but the program creates an own lifeline for every scenario-based diagram.
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
features Class C0083
id: int64_t Property F0013
main_type: enum Property F0024
key (name) Property F0025
value (type) Property F0026
description Property F0027
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
classifiers Class C0080
id: int64_t Property F0012
main_type: enum Property F0017
stereotype Property F0018
name Property F0019
description Property F0020
*-- features Association R0210
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
relationships Class C0081
id: int64_t Property F0014
main_type: enum Property F0021
name Property F0022
description Property F0023
from --> classifiers Association R0096
to --> classifiers Association R0097
from --> features Association R0205
to --> features Association R0206
Database Structure, Details on Classifier or Relationship Sel., Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
diagrams Class C0084
id: int64_t Property F0015
diagram_type: enum Property F0028
name Property F0029
description Property F0030
parent --> diagrams Association R0099
Database Structure, Classifier and Port/Lifeline selection def view, Model Terms
diagramelements Class C0082
id: int64_t Property F0016
display_flags Property F0031
--> diagrams Association R0100
--> classifiers Association R0101
focused_feature --> features Association R0204
to select one of possibly several lifelines
Classifier and Port/Lifeline selection def view, DATA_CLASSIFIER _TYPE_INTERACTION
lifelines Class C0466
--|> features Generalization R0726
DATA_CLASSIFIER _TYPE_INTERACTION
DATA_CLASSIFIER _TYPE_INTERACTION reason_rejected UMLComponentDiagram D0104
DATA_CLASSIFIER _TYPE_INTERACTION, Alternatives on UML-Model selection for Diagram
DATA_CLASSIFIER _TYPE_INTERACTION reason_rejected Package C0455
Diagramelements define which classifiers are visible in which diagram.
All features of a visible classifier are shown.
All relationships are shown that have visible classifiers at both ends.
In contrast to Classifier and Port/Lifeline selection def view, this solution links lifelines (which are features) to both: their classifier and also to their interaction.
pro: similar simplicity as Classifier and Port/Lifeline selection def view.
The model encodes all information even when ignoring the view classes.
The solution is closer to the UML proposal
The xmi export would not require exceptional handlings for interactions
con: Idea for this solution popped up after Classifier and Port/Lifeline selection def view was already implemented.
There would be 1 more implicit object to manage automatically
More error cases have to be handled
+-- interaction classifier Association R0715
+-- diagramelements_simple Association R0714
Database Structure, Details on Classifier or Relationship Sel., Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
diagrams Class C0084
id: int64_t Property F0015
diagram_type: enum Property F0028
name Property F0029
description Property F0030
parent --> diagrams Association R0099
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
classifiers Class C0080
id: int64_t Property F0012
main_type: enum Property F0017
stereotype Property F0018
name Property F0019
description Property F0020
*-- features Association R0210
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
relationships Class C0081
id: int64_t Property F0014
main_type: enum Property F0021
name Property F0022
description Property F0023
from --> classifiers Association R0096
to --> classifiers Association R0097
from --> features Association R0205
to --> features Association R0206
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
features Class C0083
id: int64_t Property F0013
main_type: enum Property F0024
key (name) Property F0025
value (type) Property F0026
description Property F0027
Details on Classifier or Relationship Sel., Details on Classifier Selected View, DATA_CLASSIFIER _TYPE_INTERACTION
diagramelements_simple reason_rejected Class C0152
id: int64_t Property F0034
display_flags Property F0035
--> diagrams Association R0207
--> classifiers Association R0208
DATA_CLASSIFIER _TYPE_INTERACTION
interaction classifier reason_argument Class C0456
--|> classifiers Generalization R0716
---> has lifeline /. <--- context reason_argument o-- lifelines Association R0727
Classifier and Port/Lifeline selection def view, DATA_CLASSIFIER _TYPE_INTERACTION
lifelines Class C0466
--|> features Generalization R0726
Use Cases to address
Use Cases to address UMLUseCaseDiagram D0105
User interaction UseCase C0457
··> Consistency Include R0718
XMI Export UseCase C0458
Consistency UseCase C0459
Classifier selection reason_argument Requirement C0460
Diagramelelements: know the lifelines that they represent Property F0104
··> User interaction Trace R0719
diagram to interaction Requirement C0461
An interaction classifier: must exist while diag is type interaction Property F0105
An interaction classifier: must not exist otherwise Property F0106
··> Consistency Trace R0720
lifeline to interaction Requirement C0462
A lifeline: must exist when interaction exists and classifier type can have lifelines Property F0107
A lifeline: must not exist otherwise Property F0108
··> Consistency Trace R0721
To Realize reason_argument Comment C0463
Todays solution Classifier and Port/Lifeline selection def view stores interaction information in diagramelements (as focused feature).
It would be cleaner if the model would be fully specified without diagrams and diagramelements.
But the user interaction use-case requires todays database fields to be present anyhow.
··> Classifier selection Dependency R0722
··> User interaction Dependency R0728
Alternatives on XMI export/model traverse
Alternatives on XMI export/model traverse reason_decision UMLUseCaseDiagram D0070
Architectural Decisions, Alternatives on XMI export/model traverse
How to traverse the model for XMI export? reason_decision UseCase C0298
Alternatives on XMI export/model traverse
traverse diagram tree reason_rejected Requirement C0300
as for other document exports,
simply traverse the diagram tree
in depth first order.
pro: simple to implement
con: the hierarchical xmi structure
cannot be produced
··> How to traverse the model for XMI export? Include R0403
Interaction Diagrams, Alternatives on XMI export/model traverse
sort classifiers by number of parents reason_chosen Requirement C0301
traverse the list of classifiers,
not the diagrams;
export classifiers without parents first;
export each classifier together with all children
pro: allows to export the expected xmi structure
con: difficult to implement,
diagram descriptions are lost
··> How to traverse the model for XMI export? Trace R0404
Alternatives on XMI export/model traverse
classifier list is iterated reason_argument Comment C0314
classifier list is
- sorted,
- iterated,
- containment parents
are descended to children
··> sort classifiers by number of parents Dependency R0451
Interaction Diagrams
Interaction Diagrams reason_decision UMLUseCaseDiagram D0074
Interaction Diagrams, Alternatives on XMI export/model traverse
sort classifiers by number of parents reason_chosen Requirement C0301
traverse the list of classifiers,
not the diagrams;
export classifiers without parents first;
export each classifier together with all children
pro: allows to export the expected xmi structure
con: difficult to implement,
diagram descriptions are lost
How to generate the Interactions? reason_decision UseCase C0315
Interactions are
- Sequence,
- Timing,
- Communication and
- Interaction Overview
Diagrams
··> sort classifiers by number of parents Refine R0452
Create an new "Interaction" Classifier reason_rejected Requirement C0316
This solution is in line with the UML specification: An interaction classifier encapsulates all messages belonging to this interaction. The interaction classifier can be referenced from multiple diagrams.
··> How to generate the Interactions? Trace R0453
Traverse the corresponding diagram reason_chosen Requirement C0317
Traverse the corresponding diagram when encountering lifelines. This solution sticks to what the current gui can manage in an understandable way for the user.
··> How to generate the Interactions? Trace R0454
planned solution reason_argument Comment C0318
pro:
- simpler to implement
- less redundancy in database
con:
- less UML like
- no clear separation of model and diagrams
- no solution for interaction fragments
··> Traverse the corresponding diagram Dependency R0455
Quality Requirements
Quality Requirements SysMLRequirementDiagram D0038
Quality Tree InteractionUse C0338
Quality Scenarios InteractionUse C0339
Ordering by Quality Attributes Comment C0340
This section shows the quality requirement on crystal-facet-uml ordered by quality characteristics / attributes.
··> Quality Tree Dependency R0485
Ordering by Use Cases / Scenarios Comment C0341
This section shows the quality requirement on crystal-facet-uml ordered by use cases / usage scenarios.
··> Quality Scenarios Dependency R0486
Quality Tree
Quality Tree CFUListDiagram D0076
This section shows quality requirements (structured into a quality tree)
Compatibility SW-product-quality InteractionUse C0292
Performace Efficiency SW-product-quality InteractionUse C0289
Performance Efficiency (Time+Resource)
Performance Efficiency (Time+Resource) SysMLRequirementDiagram D0067
Performance Efficiency (Time+Resource)
Performance of User Interface Requirement C0286
Performance Efficiency (Time+Resource), Reliability in Low-Memory Situations
Reliability of Program operation feature Requirement C0287
Performance Efficiency (Time+Resource), Reliability in Low-Memory Situations
Degradation Mode Scenario Comment C0288
If memory resources are low,
a degradation mode is acceptable if
- no data from the database is lost
- the focused diagram is displayed correctly
- the data export works reliably
- 3 undo operations are possible
In degradation mode,
the following shortcomings are acceptable:
- not all diagrams on a screen are drawn completely
- the list of search results may be truncated
- the number of simultaneous open windows may be limited
··> Reliability of Program operation Dependency R0395
explains ··> Degradation Mode Dependency R0396
Performance Efficiency (Time+Resource), Memory Management
Degradation Mode UseCase C0295
In case of low memory, the base functionality of crystal-facet-uml shall still work reliably.
··> Reliability of Program operation Trace R0397
Reliability in Low-Memory Situations
Reliability in Low-Memory Situations SysMLRequirementDiagram D0081
Performance Efficiency (Time+Resource), Reliability in Low-Memory Situations
Reliability of Program operation feature Requirement C0287
Performance Efficiency (Time+Resource), Reliability in Low-Memory Situations
Degradation Mode Scenario Comment C0288
If memory resources are low,
a degradation mode is acceptable if
- no data from the database is lost
- the focused diagram is displayed correctly
- the data export works reliably
- 3 undo operations are possible
In degradation mode,
the following shortcomings are acceptable:
- not all diagrams on a screen are drawn completely
- the list of search results may be truncated
- the number of simultaneous open windows may be limited
··> Reliability of Program operation Dependency R0395
Program Start and About Window, Reliability in Low-Memory Situations
When starting, if not enough memory, stop Reliability-Req Requirement C0335
When starting, if not enough memory is available to operate, the program shall inform the user and stop.
··> Reliability of Program operation Trace R0482
Reliability in Low-Memory Situations, Navigate and Search and Open multiple Windows
When opening a new window, if low-mem, cancel Reliability-Req Requirement C0336
When opening a new main window, if low-mem, the program shall inform the user and cancel the operation.
··> Reliability of Program operation Trace R0483
Reliability in Low-Memory Situations, Navigate and Search and Open multiple Windows
When searching, if low-mem, show only parts Reliability-Req Requirement C0337
When searching, if not enough memory available for storing the search result list, the program shall indicate that some results are omitted and show only parts of the result list.
··> Reliability of Program operation Trace R0484
Reliability in Low-Memory Situations, Navigate and Search and Open multiple Windows
When navigating, if low-mem, show placeholders Reliability-Req Requirement C0342
When navigating, if low-mem, the program shall show placeholder rectangles where rendering of diagrams is not possible.
··> Reliability of Program operation Trace R0487
Reliability in Low-Memory Situations, Undo and Redo
When undoing, allow at least 3 undo operations Reliability-Req Requirement C0343
When undoing/redoing past actions, the program shall perform at least 3 undo/redo operations before informing the user that undo/redo is not possible anymore.
··> Reliability of Program operation Trace R0488
Reliability in Low-Memory Situations
Other operations shall work reliable if OOM Reliability-Req Requirement C0344
When the user operates the program, if low-mem, the program shall work reliably for all use cases where no exception is stated.
··> Reliability of Program operation Trace R0489
Usability (Attactiveness,...)
Usability (Attactiveness,...) SysMLRequirementDiagram D0068
Aesthetics of Auto-layouted diagrams Requirement C0291
Compatibility (Replace,Interop.,...)
Compatibility (Replace,Interop.,...) SysMLRequirementDiagram D0069
Compatibility (Replace,Interop.,...)
Compatibility of Export-Formats Requirement C0293
Compatibility (Replace,Interop.,...)
Data migration at SW Updates Requirement C0294
Quality Scenarios
Quality Scenarios UMLComponentDiagram D0077
This section shows scenarios which are of special importance for the quallity requirements stated in Quality Tree.
Program Start and About Window, Quality Scenarios
Program Start and About Window UseCase C0345
Open a Model Database, Quality Scenarios
Open a Model Database UseCase C0346
Export Use Cases, Export Database Model / Diagrams, Quality Scenarios
Export (Model and/or Diagrams) req UseCase C0347
Navigate and Search and Open multiple Windows, Quality Scenarios
Navigate and Search and Open multiple Windows UseCase C0348
Modify / Create / Delete Diagrams and Elements UseCase C0349
Undo and Redo, Quality Scenarios
Undo and Redo UseCase C0350
Check and Repair Database, Quality Scenarios
Check and Repair Database UseCase C0351
Program Start and About Window
Program Start and About Window SysMLRequirementDiagram D0078
Program Start and About Window, Quality Scenarios
Program Start and About Window UseCase C0345
··> When starting, if not enough memory, stop Trace R0490
Program Start and About Window, Reliability in Low-Memory Situations
When starting, if not enough memory, stop Reliability-Req Requirement C0335
When starting, if not enough memory is available to operate, the program shall inform the user and stop.
Open a Model Database
Open a Model Database UMLComponentDiagram D0087
Open a Model Database, Quality Scenarios
Open a Model Database UseCase C0346
Export Database Model / Diagrams
Export Database Model / Diagrams UMLComponentDiagram D0083
Export Use Cases, Export Database Model / Diagrams, Quality Scenarios
Export (Model and/or Diagrams) req UseCase C0347
Navigate and Search and Open multiple Windows
Navigate and Search and Open multiple Windows UMLComponentDiagram D0084
Navigate and Search and Open multiple Windows, Quality Scenarios
Navigate and Search and Open multiple Windows UseCase C0348
··> When opening a new window, if low-mem, cancel Trace R0529
··> When searching, if low-mem, show only parts Trace R0492
··> When navigating, if low-mem, show placeholders Trace R0493
Reliability in Low-Memory Situations, Navigate and Search and Open multiple Windows
When searching, if low-mem, show only parts Reliability-Req Requirement C0337
When searching, if not enough memory available for storing the search result list, the program shall indicate that some results are omitted and show only parts of the result list.
Reliability in Low-Memory Situations, Navigate and Search and Open multiple Windows
When navigating, if low-mem, show placeholders Reliability-Req Requirement C0342
When navigating, if low-mem, the program shall show placeholder rectangles where rendering of diagrams is not possible.
Reliability in Low-Memory Situations, Navigate and Search and Open multiple Windows
When opening a new window, if low-mem, cancel Reliability-Req Requirement C0336
When opening a new main window, if low-mem, the program shall inform the user and cancel the operation.
Modify / Create / Delete Diagrams and Elements
Modify / Create / Delete Diagrams and Elements UMLComponentDiagram D0082
Modify / Create / Delete Diagrams and Elements
Modify / Create / Delete Diagrams and Element UseCase C0352
Undo and Redo
Undo and Redo UMLComponentDiagram D0085
Undo and Redo, Quality Scenarios
Undo and Redo UseCase C0350
··> When undoing, allow at least 3 undo operations Trace R0494
Reliability in Low-Memory Situations, Undo and Redo
When undoing, allow at least 3 undo operations Reliability-Req Requirement C0343
When undoing/redoing past actions, the program shall perform at least 3 undo/redo operations before informing the user that undo/redo is not possible anymore.
Check and Repair Database
Check and Repair Database UMLComponentDiagram D0086
Check and Repair Database, Quality Scenarios
Check and Repair Database UseCase C0351
Risks and Technical Debt
Risks and Technical Debt CFUListDiagram D0037
see Todo list Comment C0187
A Todo-list exists in the git repository for things that shall be changed.
Static Memory Allocation Comment C0188
Except for the libraries gtk and sqlite (sqlite is configured for dynamic allocations),
crystal-facet-uml uses fixed-size arrays and strings for all displayed data.
One could change this - but for most use cases, valid upper memory limits can be stated.
Glossary
Glossary CFUBoxDiagram D0036
Structure Comment C0240
The glossary is split into sections for contexts
- GUI terms
- Code terms
- Database terms
GUI Terms
GUI Terms CFUListDiagram D0043
focused element (yellow corners) Comment C0179
a focused element is the one element to which input is directed:
- changing name, stereotype, type or description is done on the focused element.
highlighted element (green color) Comment C0181
the highlightes element is the one on which the mouse arrow hovers. In case of a mouse click, the highlighted elements gets the focused element.
selected element (pink corners) Comment C0180
a selected element is an element that belongs to the selected set
Pencil Terms
Pencil Terms UMLClassDiagram D0079
This diagram explains terms used mainly in pencil module.
Pencil Terms, GUI/Pencil Terms
icon Comment C0327
An icon is a small picture representing an element-type
--|> symbol Generalization R0473
contour Comment C0328
A contour is an outer line around an element. The exact shape of it depends on the elements type. Some elements do not have a contour.
--|> symbol Generalization R0474
top-right-icon optional o-- icon Association R0682
Pencil Terms, GUI/Pencil Terms
label Comment C0329
A label is the text attached to the visual representation of an element. It consists of its name and optionally an stereotype.
o-- symbol Association R0478
o-- space Association R0479
o-- label Association R0480
Pencil Terms, GUI/Pencil Terms
space Comment C0334
the rectangular area of all contained compartments (except the label-compartment)
image Comment C0435
The image of a stereotype. This may replace either the stand-alone icon or the icon in the top right corner of a contour.
GUI/Pencil Terms
GUI/Pencil Terms UMLClassDiagram D0080
Label Compartment Comment C0331
The rectangular area containing label and possibly an icon. It is the top-most compartment.
--|> Compartment Generalization R0475
may have 0..1 o-- icon Association R0476
has 1..1 o-- label Association R0477
Compartment UML-Term Comment C0332
A compartment is an area in a classifier showing features of the classifier, e.g. tags, methods, attributes, use-cases
Pencil Terms, GUI/Pencil Terms
icon Comment C0327
An icon is a small picture representing an element-type
Pencil Terms, GUI/Pencil Terms
label Comment C0329
A label is the text attached to the visual representation of an element. It consists of its name and optionally an stereotype.
Pencil Terms, GUI/Pencil Terms
space Comment C0334
the rectangular area of all contained compartments (except the label-compartment)
has 1..n o-- Compartment Association R0481
Pencil Modes
Pencil Modes UMLProfileDiagram D0102
Class Metaclass Class C0443
standalone-icon Stereotype C0444
<path d=" M 3,0 h 4 v 4 h -4 v -4 "/> <path stroke="#0088ff" fill="#cceeff" d=" M 1,4.5 h 8 v 2 h -8 v -2 "/> <path d=" M 2,7 h 2 m 2,0 h 2 v 2 h -2 m -2,0 h -2 v -2 "/>
--|> Class Generalization R0695
*-- icon-img Association R0697
contour-and-icon Stereotype C0445
<path d=" M 1,2 h 8 v 6 h -8 v -6 M 6.5,3 h 1.5 v 1.5 h -1.5 v -1.5 "/> <path stroke="#0088ff" fill="#cceeff" d=" M 2,3 h 4 v 2 h -4 v -2 "/> <path d=" M 2,5.5 h 2 m 2,0 h 2 v 2 h -2 m -2,0 h -2 v -2 "/>
--|> Class Generalization R0696
*-- contour-img Association R0698
icon-img standalone-icon Image C0446
contour-img contour-and-icon Image C0447
Code Terms
Code Terms CFUListDiagram D0044
assertions Comment C0184
- assert() from assert.h checks during runtime (in DEBUG-mode) if assumptions on the code are valid.
- TEST_ASSERT() checks during and after a test case execution if the test result fits the expectations.
- PROG_ASSERT() checks during a test case for errors in the testing environment.
logging Comment C0182
In RELEASE/NDEBUG mode, the program logs only important events, anomalies, warnings and errors. These shall be as sparse as possible to not slow down performance or consume too much memory. Goal of logging is to be able to help analyze or reproduce a bug that occurred during operation.
tracing Comment C0183
In DEBUG mode, the program writes abundant information to a trace channel. Goal of tracing is to follow the program flow as well as to visualize the data changes.
Model Terms
Model Terms UMLClassDiagram D0117
Database Structure, Details on Classifier or Relationship Sel., Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
diagrams Class C0084
id: int64_t Property F0015
diagram_type: enum Property F0028
name Property F0029
description Property F0030
parent --> diagrams Association R0099
--|> element Generalization R0917
Database Structure, Classifier and Port/Lifeline selection def view, Model Terms
diagramelements Class C0082
id: int64_t Property F0016
display_flags Property F0031
--> diagrams Association R0100
--> classifiers Association R0101
focused_feature --> features Association R0204
to select one of possibly several lifelines
--|> element Generalization R0918
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
classifiers Class C0080
id: int64_t Property F0012
main_type: enum Property F0017
stereotype Property F0018
name Property F0019
description Property F0020
*-- features Association R0210
--|> object Generalization R0914
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
relationships Class C0081
id: int64_t Property F0014
main_type: enum Property F0021
name Property F0022
description Property F0023
from --> classifiers Association R0096
to --> classifiers Association R0097
from --> features Association R0205
to --> features Association R0206
--|> object Generalization R0913
Database Structure, Details on Classifier or Relationship Sel., Details on simple data structure, Details on Classifier Selected View, Classifier and Port/Lifeline selection def view, pencil.layout package, DATA_CLASSIFIER _TYPE_INTERACTION, Model Terms
features Class C0083
id: int64_t Property F0013
main_type: enum Property F0024
key (name) Property F0025
value (type) Property F0026
description Property F0027
--|> object Generalization R0915
element abstract Class C0527
object abstract Class C0528
--|> element Generalization R0916
Database Terms
Database Terms CFUListDiagram D0066
data_id Comment C0283
A data-id is an identifier that refers to a table and a row-id in the database. It is unique within one database.
row_id Comment C0284
A row-id is an identifier for a data row within one table. It is unique within a table but not within a database.
uuid Comment C0417
A uuid identifies a data record. It is unique within a database, also between different versions/branches. It is unique even between different databases.
full_id Comment C0526
A data_full_id identifies one or two objects, which are called primary and secondary. The secondary object is void for relationships, classifiers and diagrams. In case of a diagramelement or a feature, the secondary object refers to the associated classifier.
Stereotypes on Problem Space
Stereotypes on Problem Space req UMLProfileDiagram D0106
context Stereotype C0436
<path fill="#e0ffe0" stroke="#009955" d=" M 0, 6 c 0, -3.3 2.7, -6 6, -6 l 0, 2 c -2.2, 0, -4, 1.8, -4, 4 l -2, 0 M 10, 6 c 0, 2.2, -1.8, 4, -4, 4 l 0, 2 c 3.3, 0 6, -2.7 6, -6 l -2, 0 "/> <path fill="#e0e0e0" d=" M 4, 6 c 0, -1.1 0.9, -2 2, -2 c 1.1, 0 2, 0.9 2,2 c 0, 1.1, -0.9, 2, -2, 2 c -1.1, 0 -2, -0.9, -2, -2 "/>
*-- cntx-img Association R0687
cntx-img context Image C0439
meta-img metaclass Image C0440
metaclass Stereotype C0437
<path
fill="none" stroke="#000055"
d="
l 2,0
m 1,0
l 2,0
m 1,0
l 2,0
l 0,2
m 0,1
l 0,2
l -2,0
m -1,0
l -2,0
m -1,0
l -2,0
l 0,-2
m 0,-1
l 0,-2
"/>
*-- meta-img Association R0689
Stereotypes on Context Package C0438
+-- context Association R0684
+-- metaclass Association R0685
+-- meta-img Association R0688
+-- cntx-img Association R0686
Stereotypes on Requirements Package C0471
+-- req Association R0739
+-- req-img Association R0740
+-- spec Association R0742
+-- spec-img Association R0743
req Stereotype C0472
<path stroke="none" fill="#ffff00" d=" M 3.2,0.2 L 7.5,2 L 3.2,3.8 Z "/> <path d=" M 3,9 L 3,0 L 8,2 L 3,4 "/>
*-- req-img Association R0741
req-img req Image C0473
spec Stereotype C0474
<path stroke="none" fill="#ffaaee" d=" M 3.2,0.2 L 7.5,2 L 3.2,3.8 Z "/> <path d=" M 3,9 L 3,0 L 8,2 L 3,4 "/>
*-- spec-img Association R0744
spec-img spec Image C0475
Stereotypes on Solution Space
Stereotypes on Solution Space reason_argument UMLProfileDiagram D0103
Stereotypes on Decisions Package C0448
+-- reason_decision Association R0703
+-- decision_img Association R0706
+-- reason_argument Association R0723
+-- argument Association R0724
+-- chosen_img Association R0707
+-- reason_rejected Association R0708
+-- reason_chosen Association R0705
+-- rejected_img Association R0704
reason_decision Stereotype C0449
<path d="m 8,12 l -4,7 1,1 6,0 1,-1 -4,-7 l 8,-4 9,0 l -4,7 1,1 6,0 1,-1 -4,-7 " /><path d="m 15,5 l 1,3 m 0,2 l 0,17 " />
*-- decision_img Association R0709
rejected_img reason_rejected Image C0450
reason_chosen Stereotype C0451
<path d="m 1,24 4,4 22,0 4,-4 " /><path stroke="#00aa00" d="m 8,17 c 0,-4.4375 3.5625,-8 8,-8 s 8,3.5625 8,8 s
-3.5625,8 -8,8 s -8,-3.5625 -8,-8 " /><path stroke="#00aa00" d="m 11,17 l 10,0 m -5,-5 l 0,10 " />
*-- chosen_img Association R0710
decision_img reason_decision Image C0452
chosen_img reason_chosen Image C0453
reason_rejected Stereotype C0454
<path d="m 1,24 4,4 22,0 4,-4 " /><path stroke="#cc0000" d="m 8,17 c 0,-4.4375 3.5625,-8 8,-8 s 8,3.5625 8,8 s
-3.5625,8 -8,8 s -8,-3.5625 -8,-8 " /><path stroke="#cc0000" d="m 11,17 l 10,0 " />
*-- rejected_img Association R0711
reason_argument Stereotype C0464
<path fill="#eeff00" d=" M4,0 L6,0 L5.5,6.5 L4.5,6.5 Z M 4,8.5 C 4,7 6,7 6,8.5 C 6,10 4,10 4,8.5 "/>
*-- argument Association R0725
argument reason_argument Image C0465
cfu Stereotype C0523
<path d="m 21.351332,1051.6633 4.69059,-25.2011 -5.371482,-5.0705 -5.749755,-0.6812 -5.9767186,1.665 -3.9340424,3.6326 -1.5130934,7.1138 z" /> <path d="m 3.4823316,1033.0901 17.8703884,18.5152 4.701708,-25.1648 -5.307278,-4.9458 -5.79026,-0.7744 -6.0397606,1.6505 -3.9057674,3.5625 z" /> <path d="m 20.943668,1021.5214 -2.971832,3.9903 -7.58974,2.2221 -5.3602594,-1.731"/> <path d="m 3.4182675,1033.1062 7.1708205,3.1688 11.315614,-3.1943 4.048696,-6.6135" /> <path d="m 10.260116,1027.7444 0.424461,8.4823 10.737141,15.4642" /> <path d="m 17.764844,1025.3728 4.155874,7.783 -0.567998,18.3962"/> <path fill="#00ac7e" stroke="none" d="m 3.9583316,1032.8667 1.2752037,-6.3742 3.2730231,1.0695 -1.530244,3.1657 0.680109,1.8395 -1.147684,1.4546 z" /> <path fill="#00ac7e" stroke="none" d="m 10.674406,1028.0326 0.371574,7.7321 2.603902,-0.7162 0.25504,-2.0107 -1.275204,-2.3528 0.807629,-3.4803 z" /> <path fill="#00ac7e" stroke="none" d="m 18.368136,1025.6797 3.570571,6.7164 0.595095,-1.0267 -0.637602,-2.3956 -1.530244,-1.1979 -1.020164,-3.5507 z"/> <path fill="#00ac7e" stroke="none" d="m 8.3790384,1026.6637 0.850136,-2.0963 5.6108976,-1.8823 1.19019,-1.4545 -1.105177,-0.1283 -5.7809236,1.5828 -3.485558,3.1657 z" /> <path fill="#00ac7e" stroke="none" d="m 22.278762,1033.1234 -0.595096,15.6146 0.93515,-7.2298 -0.297547,-3.9357 0.935149,-6.0748 z"/> <path fill="#00ac7e" stroke="none" d="m 11.269501,1036.4174 9.81907,14.374 -2.12534,-6.4169 -3.273023,-3.5935 -0.977657,-5.3047 z"/> <path fill="#00ac7e" stroke="none" d="m 4.9359881,1034.1501 14.5798319,15.2296 -4.463214,-5.6469 -3.698091,-4.1496 -2.0403266,-3.508 z" />
*-- cfu-img Association R0904
cfu-img cfu Stereotype C0524
Further Stereotypes on Solution Space
Further Stereotypes on Solution Space UMLProfileDiagram D0119
Further Stereotypes on Solution Space
not-yet-implemented Stereotype C0531
<path fill="#eeff00" d=" M 3.5,10 C 3.5,7 1,7 1,4 C 1,0 9,0 9,4 C 9,7 6.5,7 6.5,10 " /> <path fill="#777777" d=" M 4,10 4,12, 5,12.5, 6,12, 6,10 " />
*-- not-yet-implemented-img Association R0941
Further Stereotypes on Solution Space
not-yet-implemented-img not-yet-implemented Image C0532