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

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

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

Introduction and Goals

Understand Problem UseCase C0158

Understand
- Use Cases
- Requirements
- Quality Goals

actor --> SW Architect Association R0774

+-- 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.

Use Cases on Diagrams

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

Use Cases on Diagrams

Classifier is contained (child) req Requirement C0010

A Classifier can either exist stand-alone or be a sub-element of another classifier.

Use Cases on Diagrams

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)

Use Cases on Diagrams

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

Use Cases on Diagrams

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

Use Cases on Diagrams

Classifier is explicit instance req Requirement C0014

A classifier can be an explicitly modelled instance of another classifier

Use Cases on Diagrams

Classifier is implicit instance req Requirement C0015

A classifier can represent an anonymous (implicit) instance without defining an explicit instance relation

Use Cases on Diagrams

Diagrams are hierarchical req Requirement C0016

There is one root diagram. All other diagrams shall have a parent diagram.

Use Cases on Diagrams

Draw Diagrams req UseCase C0031

··> Show Classifiers Include R0057

··> Diagrams are hierarchical Trace R0794

+-- 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 Cases on Data Model

Use identical classifier in multiple diagrams req Requirement C0233

Provide means to use the identical classifier in multiple diagrams

Use Cases on Data Model

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

+-- 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 Use Cases

Export diagrams req UseCase C0232

Export diagrams for use in architecture Documents.

Export Use Cases

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, Quality Scenarios, Export Database Model / Diagrams

Export (Model and/or Diagrams) req UseCase C0347

··> Export diagrams Include R0495

··> Export document Include R0496

··> Export model Include R0497

+-- 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/Sync Use Cases

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.

+-- data exchange with external scripts Association R0775

+-- git support Association R0776

+-- Export model Association R0777

+-- Import model Association R0778

Constraints

Constraints CFUListDiagram D0033

Constraints

Standards: UML, SysML context Requirement C0162

crystal-facet-uml shall draw diagrams that are compliant (subset) to UML or SysML.

Constraints

Output: png, svg, pdf, ps, txt / db, xhtml, xmi Requirement C0163

crystal-facet-uml shall produce output suitable to be processed by text layout engines:
- latex
- docbook
- doxygen
- html

Constraints

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

UML/SysML Overview

User Model (M1) context Package C0113

..|> UML (M2) Realization R0151

UML/SysML Overview

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 Overview

MOF::Class context Class C0115

MOF Overview

MOF::Feature context Class C0116

MOF Overview

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

ownedComment *-- UML::Comment Association R0160

ownedElement --> UML::Element Association R0161

Base classes of UML

UML::Comment metaclass Class C0119

--|> UML::Element Generalization R0162

annotatedElement (0..*) --> UML::Element Association R0439

Base classes of UML

UML::Relationship metaclass Class C0120

--|> UML::Element Generalization R0163

Base classes of UML , UML Relationships

UML::DirectedRelationship metaclass Class C0121

--|> UML::Relationship Generalization R0164

featuringClassifier --> UML::Classifier Association R0176

--|> 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 Classifier Ancestors

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

--|> 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

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::DeploymentTarget Generalization R0348

UML Structure: Classifier Descendants

UML Structure: Classifier Descendants context UMLClassDiagram D0031

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::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

--|> 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::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

--|> 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

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

--|> UML::RedefinableElement Generalization R0168

--|> UML::RedefinableElement Generalization R0175

featuringClassifier --> UML::Classifier Association R0176

UML Feature Descendants

UML Feature Descendants context UMLClassDiagram D0030

UML Feature Descendants

UML::StructuralFeature metaclass Class C0130

--|> UML::Feature Generalization R0179

UML Feature Descendants

UML::BehavioralFeature metaclass Class C0131

--|> UML::Feature Generalization R0180

UML Feature Descendants

UML::Property metaclass Class C0132

--|> UML::StructuralFeature Generalization R0182

UML Feature Descendants

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 Feature Descendants

UML::LifeLine metaclass Class C0134

--|> UML::NamedElement Generalization R0183

UML Feature Descendants

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 Relationships

UML::Usage metaclass Class C0480

--|> UML::DirectedRelationship Generalization R0800

UML Relationships

UML::Abstraction metaclass Class C0481

--|> UML::DirectedRelationship Generalization R0798

UML Relationships

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

Selected classes of SysML

ConstraintProperty metaclass Class C0191

Context And Scope

Context And Scope context UMLPackageDiagram D0034

Context And Scope

version control system context Package C0165

Context And Scope

requirements engineering context Package C0166

Context And Scope

source code documentation context Package C0167

Context And Scope

user documentation context Package C0168

Context And Scope

high quality layouted documentation context Package C0169

There are good layout engines to create high quality pdf pages, like:
- latex
- docbook

Context And Scope

tests context Package C0170

unit-tests, integration tests, qualification tests, regression tests

Context And Scope

project management context Package C0171

Context And Scope

risk management context Package C0172

Context And Scope

configuration management context Package C0173

+-- version control system Association R0229

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

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.

External Libraries, Solution Strategy

sqlite3 Package C0007

SQL database

External Libraries, Solution Strategy

gtk3/gtk4 Package C0005

Toolkit which provides
- Windows and Widgets
- User Input handling

Solution Strategy

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

··> gtk3/gtk4 Dependency R0245

··> sqlite3 Dependency R0246

Solution Strategy

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.

Development View: Tools

git version control Activity C0022

version control system

manages --> c + doxygen + docbook Association R0054

Development View: Tools

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

Development View: Tools

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

Development View: Tools

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

Development View: Tools

deb, rpm package Activity C0234

sign Operation F0057

Building Block View

Building Block View UMLComponentDiagram D0002

This diagram shows the layering of the main software modules.
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)

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 - to modify the uml-model

uses --> ctrl Association R0009

uses --> data/storage Association R0010

layout/draw -- pencil CommunicationPath R0530

export -- io CommunicationPath R0532

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
- highlights uml-elements as requested by the gui module

pencil_diagram_maker Port F0084

uses --> data/storage Association R0011

ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, 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, 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 objects exist.
- sends notifications on changes

+-- 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

layout/draw -- pencil CommunicationPath R0531

+-- 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, 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 objects exist.
- sends notifications on changes

+-- data/storage Association R0313

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

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, io: Runtime View

data_database _reader 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, 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 objects exist.
- sends notifications on changes

+-- data_database _writer Association R0040

+-- data_database _reader Association R0041

+-- data_database Association R0042

+-- 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

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

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

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

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

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, 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 objects 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

JSON Storage Format

git merge UseCase C0361

JSON Storage Format

git mergetool (manual) UseCase C0362

JSON Storage Format

git blame UseCase C0363

JSON Storage Format

Disambiguation of non-unique IDs Requirement C0368

Disambiguation of non-unique IDs of
- classifiers
- features
- relationships
- diagrams
- diagramelements

··> git merge Refine R0516

JSON Storage Format

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

JSON Storage Format

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. (Implemented in 1.45.0)

··> git merge Refine R0641

data: Runtime View

data: Runtime View UMLInteractionDiagram/sequence D0057

data: Runtime View

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

data: Runtime View

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

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

data: Runtime View

r1 :data_data base_reader Class C0244

get_database_ptr -->> data_database Message R0338

··>> data_database _writer Message R0336

data: Runtime View

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

data: Runtime View

Locks needed here Comment C0425

The data_database_writer can handle only one client-thread at a time.

··> 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, 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/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, 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 objects 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

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: White Box View

ctrl_consistency_checker Class C0041

- checks and repairs a database

ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, 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: White Box View

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: White Box View

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

ctrl: consistency

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, 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

ctrl: consistency

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

ctrl: consistency

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 - to modify the uml-model

update_diagram_type -->> ctrl_ diagram_ controller Message R0757

consistency sequence

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
- highlights uml-elements as requested by the gui module

pencil_diagram_maker Port F0084

uses --> data/storage Association R0011

+-- 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, 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 objects exist.
- sends notifications on changes

pencil: White Box View

pencil: White Box View UMLComponentDiagram D0008

This diagram shows the main classes in the pencil package.

pencil: White Box View

pencil_diagram_maker Class C0032

- coordinates layouting and drawing of a diagram
- implements kind of 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

- layouts multiple elements within the bounds of a diagram
- can convert abstract order-values to x/y coordinates and vice versa

modifies --> pencil_layout_data 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 --> pencil_layout_data Association R0025

use --> pencil.draw Association R0702

pencil: White Box View, pencil detailed structure

data_visible_set Class C0035

- caches data from the database needed to draw a diagram

pencil: White Box View, pencil detailed structure

pencil_layout_data Class C0036

- stores locations of layouted elements (in the current diagram)

references o-- data_visible_set 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
- highlights uml-elements as requested by the gui module

pencil_diagram_maker Port F0084

+-- pencil.draw Association R0282

+-- pencil_diagram_maker Association R0049

+-- pencil_xxx_painter Association R0051

+-- data_visible_set Association R0052

+-- pencil_layout_data Association R0053

+-- pencil_xxx_layouter Association R0056

+-- pencil.layout Association R0265

-- pencil_diagram_maker CommunicationPath R0651

pencil: White Box View, pencil.layout package

pencil.layout Package C0196

pencil: White Box View

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 --> pencil_layout_data Association R0025

pencil: White Box View, pencil detailed structure

pencil_xxx_layouter abstract Package C0033

- layouts multiple elements within the bounds of a diagram
- can convert abstract order-values to x/y coordinates and vice versa

+-- pencil_classifier_layouter Association R0133

+-- pencil_relationship_layouter Association R0135

+-- pencil_layouter Association R0132

+-- pencil_feature_layouter Association R0134

modifies --> pencil_layout_data Association R0022

asks for sizes --> pencil_xxx_painter Association R0034

pencil: White Box View, pencil detailed structure

pencil_layout_data Class C0036

- stores locations of layouted elements (in the current diagram)

references o-- data_visible_set Association R0021

pencil: White Box View, pencil detailed structure

data_visible_set Class C0035

- caches data from the database needed to draw a diagram

pencil detailed structure

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 detailed structure

pencil_classifier_layouter Class C0099

pencil detailed structure

pencil_feature_layouter Class C0100

pencil detailed structure

pencil_relationship_layouter Class C0101

pencil detailed structure

pencil_classifier_composer Class C0102

pencil detailed structure

pencil_diagram_painter Class C0103

o-- pencil_classifier_composer Association R0635

o-- pencil_feature_painter Association R0636

o-- pencil_relationship_painter Association R0637

pencil detailed structure

pencil_feature_painter Class C0104

pencil detailed structure

pencil_relationship_painter Class C0105

pencil.layout package

pencil.layout package UMLComponentDiagram D0047

pencil: White Box View, pencil.layout package

pencil.layout Package C0196

+-- layout_feature Association R0262

+-- layout _visible_classifier Association R0263

+-- layout_diagram Association R0261

+-- layout _relationship Association R0264

pencil.layout package

layout_diagram Class C0200

bounds: rect Property F0044

draw_area: rect Property F0045

pencil.layout package

layout_feature Class C0201

bounds: rect Property F0049

label_box: rect Property F0053

--> features Association R0281

pencil.layout package

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

pencil.layout package

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

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

features Class C0083

id: int64_t Property F0013

main_type: enum Property F0024

key (name) Property F0025

value (type) Property F0026

description Property F0027

from --> classifiers Association R0096

to --> classifiers Association R0097

from --> features Association R0205

to --> features Association R0206

pencil.layout package

visible_classifier Class C0204

--> classifiers Association R0278

pencil: Runtime View

pencil: Runtime View UMLActivityDiagram D0064

This diagram shows the different entry points for layouting and rendering a diagram.

pencil: Runtime View

pencil::start InitialNode C0269

--> gui/io select operations ControlFlow R0371

pencil: Runtime View

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

pencil: Runtime View

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: Runtime View

pencil::finish ActivityFinalNode C0274

pencil: Runtime View

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

Layouting Steps

pencil::classifier_layouter layout_* Activity C0275

--> pencil::feature_layouter do_layout ControlFlow R0384

Layouting Steps

pencil::feature_layouter do_layout Activity C0276

--> pencil::relationship_layouter layout_* ControlFlow R0385

Layouting Steps

pencil::relationship_layouter layout_* Activity C0277

--> pencil::feat_label_layouter do_layout ControlFlow R0389

Layouting Steps

pencil::begin InitialNode C0278

--> pencil::classifier_layouter layout_* ControlFlow R0383

Layouting Steps

pencil::end ActivityFinalNode C0279

Layouting Steps

pencil::rel_label_layouter do_layout Activity C0280

--> pencil::end ControlFlow R0391

Layouting Steps

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.

pencil: Crosscutting Concepts

layouting:start InitialNode C0353

--> propose processing order ControlFlow R0498

pencil: Crosscutting Concepts

layouting:finish ActivityFinalNode C0354

pencil: Crosscutting Concepts

propose processing order Activity C0355

For the list of elements to be layouted, define the processing order.

--> propose solutions ControlFlow R0501

pencil: Crosscutting Concepts

propose solutions Activity C0356

This step creates a set of possible solutions for 1 element to be layouted.

--> select solution ControlFlow R0499

pencil: Crosscutting Concepts

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

pencil: Crosscutting Concepts

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

layout/draw -- pencil CommunicationPath R0531

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
- highlights uml-elements as requested by the gui module

pencil_diagram_maker Port F0084

uses --> data/storage Association R0011

+-- 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, 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 objects 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

+-- documents 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: White Box View

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-- documents Association R0423

io: White Box View

io_importer Class C0268

io: White Box View, io_export components, data_model_traversal

documents Component C0306

documents implements several strategies to traverse the model and diagram trees. For each found element, an element writer is called.

io: White Box View

io_data_file Class C0416

database Property F0101

controller Property F0102

io_export components

io_export components UMLComponentDiagram D0073

io: Runtime View, io_export components, 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.

use --> io_element_writer Association R0527

io: White Box View, io_export components, data_model_traversal

documents Component C0306

documents implements several strategies to traverse the model and diagram trees. For each found element, an element writer is called.

+-- io_export_flat_traversal Association R0642

+-- io_export_diagram_traversal Association R0420

+-- io_export_diagram_traversal Association R0422

+-- io_export_model_traversal Association R0421

io_export components, data_model_traversal

io_export_model_traversal Class C0207

cares about
- selecting the model elements to export

use --> io_element_writer Association R0528

io: Runtime View, io_export components

xhtml_element_writer (and xml/docbook) Class C0209

cares about
- writing output-format specific meta data
- using right "writer" class to encode data

use --> txt_writer Association R0432

use --> md_filter Association R0433

use --> xml_writer Association R0434

--|> io_element_writer Generalization R0526

io: Runtime View, io_export components, data_model_traversal

md/txt/xmi/xml/json writer Package C0282

+-- xmi_element_writer Association R0425

+-- io_element_writer Association R0524

+-- json_element_writer Association R0645

+-- md_filter Association R0430

+-- xml_writer Association R0429

+-- txt_writer Association R0428

+-- xhtml_element_writer (and xml/docbook) Association R0424

io_export components

xmi_element_writer Class C0308

use --> xml_writer Association R0431

--|> io_element_writer Generalization R0525

io_export components

txt_writer Class C0309

io_export components

xml_writer Class C0310

io_export components

md_filter Class C0311

io_export components, data_model_traversal

io_element_writer abstract Class C0373

This is the abstract base class of different writer objects.

io_export components, data_model_traversal

io_export_flat_traversal Component C0421

use --> io_element_writer ControlFlow R0644

io_export components

json_element_writer Component C0422

--|> io_element_writer Generalization R0648

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. (Implemented in 1.45.0)

io_export components, data_model_traversal

io_export_flat_traversal Component C0421

··> Constant order for unchanged parts Trace R0643

use --> io_element_writer ControlFlow R0644

io: White Box View, io_export components, data_model_traversal

documents Component C0306

documents implements several strategies to traverse the model and diagram trees. For each found element, an element writer is called.

+-- io_export_flat_traversal Association R0642

+-- io_export_diagram_traversal Association R0420

+-- io_export_diagram_traversal Association R0422

+-- io_export_model_traversal Association R0421

io_export components, data_model_traversal

io_export_model_traversal Class C0207

cares about
- selecting the model elements to export

use --> io_element_writer Association R0528

io: Runtime View, io_export components, 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.

use --> io_element_writer Association R0527

io_export components, data_model_traversal

io_element_writer abstract Class C0373

This is the abstract base class of different writer objects.

io: Runtime View, io_export components, data_model_traversal

md/txt/xmi/xml/json writer Package C0282

+-- io_element_writer Association R0524

io: Runtime View

io: Runtime View UMLInteractionDiagram/communication D0071

The io_exporter sets up the data pipe

io: Runtime View, io_export components

xhtml_element_writer (and xml/docbook) Class C0209

cares about
- writing output-format specific meta data
- using right "writer" class to encode data

5.) document artifacts --> md/txt/xmi/xml/json Association R0413

io: Runtime View, io_export components, data_model_traversal

md/txt/xmi/xml/json writer Package C0282

6.) character stream --> Output Stream Association R0414

io: Runtime View, u8stream: WhiteBox View, Stream

Output Stream Interface C0305

data: White Box View, io: Runtime View

data_database _reader 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, io_export components, 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 --> xhtml_element_writer (and xml/docbook) 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 - to modify the uml-model

uses --> ctrl Association R0009

layout/draw -- pencil CommunicationPath R0530

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
- highlights uml-elements as requested by the gui module

pencil_diagram_maker Port F0084

ctrl: Black Box View, ctrl: White Box View, gui: Black Box View, ctrl: consistency, 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.

gui: White Box View

gui_main_window Block C0042

- represents an application window

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

gui: White Box View

gui_window_manager Block C0045

- starts and stops application windows

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 - to modify the uml-model

+-- gui_search_request Association R0353

+-- 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

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: 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

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_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: White Box View

gui_simple_message_to_user Component C0419

This class is the controller for the status bar widgets

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

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

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

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

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_area Association R0350

+-- gui_sketch _card Association R0351

+-- gui_sketch_nav_tree Association R0546

gui event notifications

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

gui event notifications

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: Runtime View

gui: Runtime View UMLActivityDiagram D0062

gui: Runtime View

search Activity C0263

gui: Runtime View

navigate Activity C0264

gui: Runtime View

edit Activity C0265

gui: Runtime View

create Activity C0266

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

enter search string --> search_entry Message R0362

search_start_callback --> search_entry Message R0361

gui: White Box View, gui search blocks, gui search sequence, gui event notifications

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

gui: Crosscutting Concepts

gui: Crosscutting Concepts UMLStateMachineDiagram D0075

gui: Crosscutting Concepts

Widget States StateMachine C0321

+-- data available Association R0458

+-- not-yet-layouted Association R0463

+-- uninitialized Association R0457

+-- layouted Association R0459

gui: Crosscutting Concepts

uninitialized StateMachine C0322

load data --> data available Transition R0460

gui: Crosscutting Concepts

data available StateMachine C0323

+-- invalid layout Association R0466

+-- layouted Association R0464

+-- not-yet-layouted Association R0465

invalidate --> uninitialized Transition R0469

gui: Crosscutting Concepts

layouted StateMachine C0324

draw (drawing context) --> layouted Transition R0462

gui: Crosscutting Concepts

not-yet-layouted StateMachine C0325

do layout (drawing context) --> layouted Transition R0468

gui: Crosscutting Concepts

invalid layout InitialNode C0326

--> not-yet-layouted Transition R0467

main: Black Box View

main: Black Box View UMLComponentDiagram D0097

main: Black Box View

main.c Class C0073

calls --> main_commands Association R0630

main: Black Box View

main Package C0021

- starts the software
- evaluates command line parameters

+-- main.c Association R0090

+-- main_commands Association R0629

main: Black Box View

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

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.

u8stream overview

utf8stream Package C0414

readers and writers that stream unicode code points instead of bytes.

u8stream overview

u8dir Package C0423

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

+-- 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

u8stream: WhiteBox View

Utf8 Writer Component C0378

*-- Output Stream Association R0553

u8stream: WhiteBox View

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

u8stream: WhiteBox View

Array List Class C0267

u8stream: WhiteBox View

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

U8 base classes and macros

Begin (function) Class C0069

U8 base classes and macros

Info Class C0071

U8 base classes and macros

Timestamp Class C0072

U8 base classes and macros

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

U8 base classes and macros

Error Class C0052

An error is a condition that leads to an observalbe malfunction.

U8 base classes and macros

Event Class C0055

An event is a signal that is send to or received from external software parts.

U8 base classes and macros

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.

U8 base classes and macros

Warning Class C0053

A warning is issued when a condition may possibly lead to a malfunction.

+-- 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 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

+-- 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

Stream

Memory Output Stream Class C0304

..|> Output Stream Realization R0409

Stream

File Output Stream Class C0303

..|> Output Stream Realization R0410

Stream

File input stream Component C0377

..|> Input Stream Realization R0552

Stream

Memory Input Stream Component C0376

..|> Input Stream Realization R0551

u8stream: WhiteBox View, Stream

Input Stream Component C0375

Stream

Escaping Output Stream Component C0380

..|> Output Stream Realization R0557

Stream

Stream Output Stream Component C0381

Wrapper around posix output streams

..|> 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 const pointer_t Class C0428

The methods of this string take an instance as parameter, which is kind of a pointer to the underlying character array.

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 const pointer_t Class C0430

The methods of this stringview take an instance as parameter, which is kind of a pointer to the underlying character array.

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_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

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, Solution Strategy

gtk3/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

External Libraries, Solution Strategy

sqlite3 Package C0007

SQL database

External Libraries

glib Package C0026

Platform abstraction layer

External Libraries

gdk Package C0027

Drawing library

uses o-- cairo Association R0002

uses o-- pango Association R0003

depends on o-- glib Association R0004

External Libraries

cairo Package C0028

Library providing drawing primitives

External Libraries

pango Package C0029

Font rendering engine

External Libraries

atk Package C0236

Accessibility Toolkit, kind of IPC to make widgets interfaces accessible.

o-- glib Association R0317

External Libraries

gio Package C0237

file system abstraction, distributed as part of glib

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

test_fw: Black Box View

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

test_fw: Black Box View

data/test/unit Component C0059

··> test_fw Dependency R0075

test_fw: Black Box View

ctrl/test/unit Component C0060

··> test_fw Dependency R0072

test_fw: Black Box View

test_main Class C0061

test_fw: Black Box View

pencil/test/* Component C0062

··> test_fw Dependency R0074

test_fw: Black Box View

universal/test/unit Component C0063

··> test_fw Dependency R0073

test_fw: Black Box View

io/test/* Component C0210

··> test_fw Dependency R0291

test_fw: Black Box View

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_fw: White Box View

test_suite Class C0227

test_case: [list] Property F0054

setup() Operation F0055

tear_down() Operation F0056

call --> test_assert Association R0309

test_fw: White Box View

test_runner Class C0228

aggregate o-- test_result Association R0308

run_suite --> test_suite Association R0311

test_fw: White Box View

test_result Class C0229

test_fw: White Box View

test_assert Class C0230

test_fw: White Box View

test_fixture Comment C0231

The set of preconditions and cleanup-routines

··> 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.

Runtime View

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

Runtime View

show GUI, no DB file selected Activity C0065

select DB file --> show GUI, show+alter DB ControlFlow R0082

Runtime View

run test /repair /export / import via CLI Activity C0066

report and finish --> end ControlFlow R0085

Runtime View

end ActivityFinalNode C0067

Runtime View

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.

Runtime View

start InitialNode C0192

--> mode? ControlFlow R0251

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

Runtime View

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

Deployment View

Deployment View UMLComponentDiagram D0035

Deployment View

PC: Hardware Node C0175

The physical or virtual environment within the software runs.

+-- Linux/Win: OS Association R0237

Deployment View

Linux/Win: OS Node C0176

The operating system that allows to run crystal-facet-uml.

+-- JSON Data Exchange Association R0561

+-- Other export formats Association R0564

+-- Database File Association R0559

+-- crystal-facet-uml process Association R0238

Deployment View

crystal-facet-uml process Node C0177

+-- crystal-facet-uml application Association R0243

-- Database File CommunicationPath R0560

im/export -- JSON Data Exchange CommunicationPath R0563

export -- Other export formats CommunicationPath R0565

Deployment View

Database File Artifact C0382

Data models of crystal-facet-uml are stored to and read from sqlite database files.

Deployment View

JSON Data Exchange Artifact C0383

Data models of crystal-facet-uml are stored to and read from json files.

··> Version Control System Deployment R0562

Deployment View

Version Control System Component C0384

Deployment View

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

Crosscutting Concepts Comment C0217

Trace, Log, Assert, Error Propagation, Memory Management

Assert

Assert SysMLRequirementDiagram D0048

Assert

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

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

Assert

Local Assert Requirement C0224

Use "assert(COND);" statements to ensure code+data consistency within one software module, These are executed in DEBUG mode only.

Assert

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.

Assert

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

Log, Trace

Trace-Goal Comment C0223

Trace messages shall be activated for debugging to follow the program flow and visualize the processed data.

··> Trace Dependency R0297

Log, Trace

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, Trace

Log-Goal Comment C0222

Log Messages are written during operation to be able to analyze important events, anomalies and faults.

··> Log Dependency R0296

Log, Trace

Log Requirement C0219

Security:
- Log messages must not contain confidential data

Memory Management

Memory Management SysMLRequirementDiagram D0058

Memory Management

Stack Mem Requirement C0246

On stack, only small data structures (<10kB) shall be stored.

··> Degradation Mode Trace R0471

Memory Management

Heap Requirement C0247

Only the external libraries may use the heap.

Memory Management

Static Allocations Requirement C0248

All data structures of crystal-facet-uml shall be statically allocated.

··> Degradation Mode Trace R0470

Memory Management

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 Propagation

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.

Error Propagation

Bitmask 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.

Top Level Error-Categories

Top Level Error-Categories UMLClassDiagram D0092

Top Level Error-Categories

ERROR Class C0386

Top Level Error-Categories, Logic Errors, Operations Error Categories, User Errors

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

Top Level Error-Categories

CONTINUE Class C0388

--|> ERROR Generalization R0569

Top Level Error-Categories

NO_START Class C0389

--|> ERROR Generalization R0568

Top Level Error-Categories

TERMINATE Class C0390

--|> ERROR Generalization R0570

Top Level Error-Categories, User Errors

USR_ERROR Class C0391

notify user: in statusbar Operation F0097

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

Top Level Error-Categories, Logic Errors

LOGIC_ERROR Class C0394

notify developer Operation F0100

--|> TERMINATE Generalization R0571

Logic Errors

Logic Errors UMLClassDiagram D0094

Top Level Error-Categories, Logic Errors

LOGIC_ERROR Class C0394

notify developer Operation F0100

Top Level Error-Categories, Logic Errors, Operations Error Categories, User Errors

Error-Categories by Reaction Package C0387

+-- LOGIC_ERROR Association R0579

Logic Errors

STATE internal Class C0400

--|> LOGIC_ERROR Generalization R0596

Logic Errors

PARAMS internal Class C0401

--|> LOGIC_ERROR Generalization R0595

Logic Errors

DATA_CORRUPT internal Class C0402

--|> LOGIC_ERROR Generalization R0594

Logic Errors, Operations Error Categories, User Errors

Error-Categories by Cause Package C0399

+-- PARAMS Association R0592

+-- STATE Association R0591

+-- DATA_CORRUPT Association R0593

Operations Error Categories

Operations Error Categories UMLClassDiagram D0095

Top Level Error-Categories, Logic Errors, Operations Error Categories, User Errors

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, Operations Error Categories, User Errors

Error-Categories by Cause Package C0399

+-- ENV_RUN Association R0603

+-- SYSTEM_ACCESS Association R0602

+-- TIME/SYNC Association R0601

+-- ENV_START Association R0604

Operations Error Categories

TIME/SYNC external Class C0403

Timeout of remote calls or cyclic events

--|> OP1_ERROR Generalization R0597

Operations Error Categories

SYSTEM_ACCESS external Class C0404

--|> OP1_ERROR Generalization R0598

Operations Error Categories

ENV_RUN external Class C0405

Runtime Envionment

--|> OP1_ERROR Generalization R0599

Operations Error Categories

ENV_START external Class C0406

Startup Envionment

--|> OP0_ERROR Generalization R0600

User Errors

User Errors UMLClassDiagram D0093

User Errors

INPUT /SOURCE external Class C0395

--|> USR_ERROR Generalization R0584

User Errors

OUTPUT /SINK external Class C0396

--|> USR_ERROR Generalization R0583

User Errors

USER_ACCESS (r/w/x) external Class C0397

--|> USR_ERROR Generalization R0585

User Errors

WRONG_MODE external Class C0398

The request is not valid in the current situation.

--|> USR_ERROR Generalization R0586

Top Level Error-Categories, User Errors

USR_ERROR Class C0391

notify user: in statusbar Operation F0097

Top Level Error-Categories, Logic Errors, Operations Error Categories, User Errors

Error-Categories by Reaction Package C0387

+-- USR_ERROR Association R0576

+-- USR_ERROR Association R0578

Logic Errors, Operations Error Categories, User Errors

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

Architectural Decisions

Architectural Decisions reason_decision UMLClassDiagram D0016

This diagram shows which major design decisions were taken.

Architectural Decisions

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.

Alternatives on UML-Model selection for Diagram, Architectural Decisions

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.

Alternatives on XMI export/model traverse, Architectural Decisions

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.

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

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

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

Alternatives on UML-Model selection for Diagram, Architectural Decisions

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.

Alternatives on UML-Model selection for Diagram, Details on Classifier Selected View

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

Alternatives on UML-Model selection for Diagram, Details on Classifier or Relationship Sel.

Classifier or Relationship selection def. view reason_rejected Package C0092

Depending on the diagram type, either classifiers determine what is visble or relationships determine what is visible.
pro: similar concept for diagrams that show options/alternatives/scenarios to diagrams that show invariants.
con: Bigger extension to existing structure in version 1.0.0 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

Alternatives on UML-Model selection for Diagram, DATA_CLASSIFIER _TYPE_INTERACTION

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.

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

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

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

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

Alternatives on UML-Model selection for Diagram, Details on Classifier or Relationship Sel.

Classifier or Relationship selection def. view reason_rejected Package C0092

Depending on the diagram type, either classifiers determine what is visble or relationships determine what is visible.
pro: similar concept for diagrams that show options/alternatives/scenarios to diagrams that show invariants.
con: Bigger extension to existing structure in version 1.0.0 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.

Alternatives on UML-Model selection for Diagram, Details on Classifier Selected View

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

diagrams Class C0084

id: int64_t Property F0015

diagram_type: enum Property F0028

name Property F0029

description Property F0030

parent --> diagrams Association R0099

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

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

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

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

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

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

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

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

--|> features Generalization R0726

DATA_CLASSIFIER _TYPE_INTERACTION

DATA_CLASSIFIER _TYPE_INTERACTION reason_rejected UMLComponentDiagram D0104

Alternatives on UML-Model selection for Diagram, DATA_CLASSIFIER _TYPE_INTERACTION

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

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

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

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

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

--|> features Generalization R0726

Use Cases to address

Use Cases to address UMLUseCaseDiagram D0105

Use Cases to address

User interaction UseCase C0457

··> Consistency Include R0718

Use Cases to address

XMI Export UseCase C0458

Use Cases to address

Consistency UseCase C0459

Use Cases to address

Classifier selection reason_argument Requirement C0460

Diagramelelements: know the lifelines that they represent Property F0104

··> User interaction Trace R0719

Use Cases to address

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

Use Cases to address

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

Use Cases to address

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

Alternatives on XMI export/model traverse, Architectural Decisions

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

Alternatives on XMI export/model traverse, Interaction Diagrams

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 (since version 1.24.0)

··> sort classifiers by number of parents Dependency R0451

Interaction Diagrams

Interaction Diagrams reason_decision UMLUseCaseDiagram D0074

Alternatives on XMI export/model traverse, Interaction Diagrams

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

Interaction Diagrams

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

Interaction Diagrams

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

Interaction Diagrams

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

Interaction Diagrams

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 Requirements

Quality Tree InteractionUse C0338

Quality Requirements

Quality Scenarios InteractionUse C0339

Quality Requirements

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

Quality Requirements

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)

Quality Tree

Compatibility SW-product-quality InteractionUse C0292

see Compatibility (Replace,Interop.,...).

Quality Tree

Usability SW-product-quality InteractionUse C0290

see Usability (Attactiveness,...).

Quality Tree

Performace Efficiency SW-product-quality InteractionUse C0289

see Performance Efficiency (Time+Resource).

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

Usability (Attactiveness,...)

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

Quality Scenarios, Open a Model Database

Open a Model Database UseCase C0346

Export Use Cases, Quality Scenarios, Export Database Model / Diagrams

Export (Model and/or Diagrams) req UseCase C0347

Quality Scenarios, Navigate and Search and Open multiple Windows

Navigate and Search and Open multiple Windows UseCase C0348

Quality Scenarios

Modify / Create / Delete Diagrams and Elements UseCase C0349

Quality Scenarios, Undo and Redo

Undo and Redo UseCase C0350

Quality Scenarios, Check and Repair Database

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

Quality Scenarios, Open a Model Database

Open a Model Database UseCase C0346

Export Database Model / Diagrams

Export Database Model / Diagrams UMLComponentDiagram D0083

Export Use Cases, Quality Scenarios, Export Database Model / Diagrams

Export (Model and/or Diagrams) req UseCase C0347

Navigate and Search and Open multiple Windows

Navigate and Search and Open multiple Windows UMLComponentDiagram D0084

Quality Scenarios, Navigate and Search and Open multiple Windows

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

Quality Scenarios, Undo and Redo

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

Quality Scenarios, Check and Repair Database

Check and Repair Database UseCase C0351

Risks and Technical Debt

Risks and Technical Debt CFUListDiagram D0037

Risks and Technical Debt

see Todo list Comment C0187

A Todo-list exists in the git repository for things that shall be changed.

Risks and Technical Debt

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

Glossary

GUI Terms InteractionUse C0238

see GUI Terms.

Glossary

Code Terms InteractionUse C0239

see Code Terms.

Glossary

Structure Comment C0240

The glossary is split into sections for contexts
- GUI terms
- Code terms
- Database terms

Glossary

Database Terms InteractionUse C0285

see Database Terms.

GUI Terms

GUI Terms CFUListDiagram D0043

GUI Terms

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.

GUI Terms

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.

GUI Terms

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

Pencil Terms

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.

Pencil Terms

symbol Comment C0330

A symbol is a drawing/picture representing the type of an element

Pencil Terms

envelope Comment C0333

the rectangular outer bounds of symbol, label and space

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)

Pencil Terms

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

GUI/Pencil Terms

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

GUI/Pencil Terms

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

Pencil Modes

Class Metaclass Class C0443

Pencil Modes

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

Pencil Modes

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

Pencil Modes

icon-img standalone-icon Image C0446

Pencil Modes

contour-img contour-and-icon Image C0447

Code Terms

Code Terms CFUListDiagram D0044

Code Terms

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.

Code Terms

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.

Code Terms

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.

Database Terms

Database Terms CFUListDiagram D0066

Database Terms

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.

Database Terms

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.

Database Terms

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.

Stereotypes on Problem Space

Stereotypes on Problem Space req UMLProfileDiagram D0106

Stereotypes on Problem Space

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

Stereotypes on Problem Space

cntx-img context Image C0439

Stereotypes on Problem Space

meta-img metaclass Image C0440

Stereotypes on Problem Space

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 Problem Space

Stereotypes on Context Package C0438

+-- context Association R0684

+-- metaclass Association R0685

+-- meta-img Association R0688

+-- cntx-img Association R0686

Stereotypes on Problem Space

Stereotypes on Requirements Package C0471

+-- req Association R0739

+-- req-img Association R0740

+-- spec Association R0742

+-- spec-img Association R0743

Stereotypes on Problem Space

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

Stereotypes on Problem Space

req-img req Image C0473

Stereotypes on Problem Space

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

Stereotypes on Problem Space

spec-img spec Image C0475

Stereotypes on Solution Space

Stereotypes on Solution Space reason_argument UMLProfileDiagram D0103

Stereotypes on Solution Space

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

Stereotypes on Solution Space

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

Stereotypes on Solution Space

rejected_img reason_rejected Image C0450

Stereotypes on Solution Space

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

Stereotypes on Solution Space

decision_img reason_decision Image C0452

Stereotypes on Solution Space

chosen_img reason_chosen Image C0453

Stereotypes on Solution Space

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

Stereotypes on Solution Space

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

Stereotypes on Solution Space

argument reason_argument Image C0465