aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2022-06-13 11:06:49 +0200
committerWojtek Kosior <koszko@koszko.org>2022-07-16 16:31:44 +0200
commit52d12a4fa124daa1595529e3e7008276a7986d95 (patch)
tree9b56fe2d28ff0242f8511aca570be455112ad3df /doc
parent9dcbfdfe8620cc417438d1727aa1e0c89846e9bf (diff)
downloadhaketilo-hydrilla-52d12a4fa124daa1595529e3e7008276a7986d95.tar.gz
haketilo-hydrilla-52d12a4fa124daa1595529e3e7008276a7986d95.zip
unfinished partial work
Diffstat (limited to 'doc')
-rw-r--r--doc/man/man1/hydrilla-builder.194
-rw-r--r--doc/uml/classes.uxf759
2 files changed, 853 insertions, 0 deletions
diff --git a/doc/man/man1/hydrilla-builder.1 b/doc/man/man1/hydrilla-builder.1
new file mode 100644
index 0000000..f58ab97
--- /dev/null
+++ b/doc/man/man1/hydrilla-builder.1
@@ -0,0 +1,94 @@
+.\" SPDX-License-Identifier: CC0-1.0
+.\"
+.\" Man page for Hydrilla builder.
+.\"
+.\" Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+.\"
+.\" Available under the terms of Creative Commons Zero v1.0 Universal.
+
+.TH HYDRILLA-BUILDER 1 2022-04-22 "Hydrilla 1.0" "Hydrilla Manual"
+
+.SH NAME
+hydrilla-builder \- Generate packages to be served by Hydrilla
+
+.SH SYNOPSIS
+.B "hydrilla\-builder \-\-help"
+.br
+.B "hydrilla\-builder [\-s \fISOURCE\/\fP] [\-i\ \fIINDEX_PATH\/\fP]"
+.B "\-d \fIDESTINATION\/\fP"
+.br
+(See the OPTIONS section for alternate option syntax with long option
+names.)
+
+.SH DESCRIPTION
+.I hydrilla-builder
+is a tool which takes a Hydrilla source package and generates files of a
+built package, suitable for serving by the Hydrilla server.
+
+As of Hydrilla version 1.0
+.I hydrilla-builder
+does not yet perform nor trigger actions like compilation, minification or
+bundling of source code files. Its main function is to automate the process
+of computing SHA256 cryptographic sums of package files and including them
+in JSON definitions.
+
+In addition,
+.B hydrilla\-builder
+can generate an SPDX report from source package if the
+\*(lqreuse_generate_spdx_report\*(rq property is set to true in index.json.
+
+.SH OPTIONS
+.TP
+.B \-\^\-help
+Output a usage message and exit.
+
+.TP
+.BI \-s " SOURCE" "\fR,\fP \-\^\-srcdir=" SOURCE
+Use
+.I SOURCE
+as source package directory to build from.
+If not specified, current directory is used.
+
+.TP
+.BI \-i " INDEX_PATH" "\fR,\fP \-\^\-index\-json=" INDEX_PATH
+Process the JSON file under
+.I INDEX_PATH
+instead of index.json inside source directory.
+.I INDEX_PATH
+may be either absolute or relative.
+In the latter case it is resolved with respect to the source directory.
+
+File provided as
+.I INDEX_PATH
+will also be included in the generated source archive as
+\*(lqindex.json\*(rq, substituting any file with such name that could be
+present in the source directory.
+
+.TP
+.BI \-d " DESTINATION" "\fR,\fP \-\^\-dstdir=" DESTINATION
+Write generated files under
+.IR DESTINATION .
+Files are written in such way that
+.I DESTINATION
+is valid for being passed to Hydrilla to serve packages from.
+
+.TP
+.B \-\^\-version
+Show version information for this instance of
+.I hydrilla-builder
+on the standard output and exit successfully.
+
+.SH "EXIT STATUS"
+The exit status is 0 if build was performed successfully or if the
+.B \-\^\-help
+option was passed. It is a number different from 0 in all other cases.
+
+.SH "SEE ALSO"
+.SS "Manual Pages"
+.BR hydrilla (1).
+
+.SS "Full Documentation"
+.UR https://hydrillabugs.koszko.org/projects/hydrilla/wiki
+Online documentation
+.UE
+is available on Hydrilla issue tracker.
diff --git a/doc/uml/classes.uxf b/doc/uml/classes.uxf
new file mode 100644
index 0000000..1dcbb56
--- /dev/null
+++ b/doc/uml/classes.uxf
@@ -0,0 +1,759 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<diagram program="umlet" version="13.3">
+ <zoom_level>8</zoom_level>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>248</x>
+ <y>80</y>
+ <w>128</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.addon.
+HaketiloAddon
+</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>384</x>
+ <y>320</y>
+ <w>184</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.pattern_tree.
+PatternTree[Policy]
+</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>288</x>
+ <y>200</y>
+ <w>176</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.state.
+HaketiloState</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>336</x>
+ <y>104</y>
+ <w>24</w>
+ <h>112</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m1=1
+m2=1</panel_attributes>
+ <additional_attributes>10.0;10.0;10.0;120.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>424</x>
+ <y>224</y>
+ <w>24</w>
+ <h>112</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m1=1
+m2=1
+</panel_attributes>
+ <additional_attributes>10.0;10.0;10.0;120.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>560</x>
+ <y>384</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>/hydrilla.proxy.policies./
+/Policy/
+</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>536</x>
+ <y>320</y>
+ <w>112</w>
+ <h>80</h>
+ </coordinates>
+ <panel_attributes>lt=[URL pattern]-&gt;
+m2=1..*
+
+</panel_attributes>
+ <additional_attributes>40.0;20.0;100.0;20.0;100.0;80.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLNote</id>
+ <coordinates>
+ <x>400</x>
+ <y>32</y>
+ <w>152</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>Receives&amp;processes events from mitmproxy.</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>368</x>
+ <y>56</y>
+ <w>48</w>
+ <h>40</h>
+ </coordinates>
+ <panel_attributes>lt=.</panel_attributes>
+ <additional_attributes>10.0;30.0;40.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLNote</id>
+ <coordinates>
+ <x>624</x>
+ <y>88</y>
+ <w>136</w>
+ <h>48</h>
+ </coordinates>
+ <panel_attributes>Keeps track of all rules, mappings and resources.</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>456</x>
+ <y>120</y>
+ <w>184</w>
+ <h>96</h>
+ </coordinates>
+ <panel_attributes>lt=.</panel_attributes>
+ <additional_attributes>10.0;100.0;210.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>416</x>
+ <y>768</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.policies.
+PayloadPolicy</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>416</x>
+ <y>528</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>/hydrilla.proxy.policies./
+/BlockPolicy/</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>416</x>
+ <y>672</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>/hydrilla.proxy.policies./
+/AllowPolicy/</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>416</x>
+ <y>720</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.policies.
+MetaResourcePolicy</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>544</x>
+ <y>408</y>
+ <w>120</w>
+ <h>392</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>130.0;10.0;130.0;470.0;10.0;470.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>544</x>
+ <y>408</y>
+ <w>104</w>
+ <h>344</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>110.0;10.0;110.0;410.0;10.0;410.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>544</x>
+ <y>408</y>
+ <w>88</w>
+ <h>296</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>90.0;10.0;90.0;350.0;10.0;350.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>544</x>
+ <y>408</y>
+ <w>72</w>
+ <h>152</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>70.0;10.0;70.0;170.0;10.0;170.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>328</x>
+ <y>728</y>
+ <w>104</w>
+ <h>24</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;&lt;&lt;-</panel_attributes>
+ <additional_attributes>10.0;10.0;110.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>168</x>
+ <y>720</y>
+ <w>168</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.flow_handlers.
+FlowHandlerMetaResource</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>488</x>
+ <y>352</y>
+ <w>256</w>
+ <h>504</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;&lt;&lt;-
+m1=1
+m2=1</panel_attributes>
+ <additional_attributes>10.0;560.0;10.0;610.0;300.0;610.0;300.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>648</x>
+ <y>328</y>
+ <w>192</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.item_infos.
+MappingInfo</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>576</x>
+ <y>176</y>
+ <w>232</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.item_infos.
+VersionedItemInfo[MappingInfo]</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>432</x>
+ <y>208</y>
+ <w>160</w>
+ <h>56</h>
+ </coordinates>
+ <panel_attributes>lt=[repository]-&gt;
+m2=1..*
+
+</panel_attributes>
+ <additional_attributes>40.0;10.0;100.0;10.0;100.0;40.0;180.0;40.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>576</x>
+ <y>224</y>
+ <w>232</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.item_infos.
+VersionedItemInfo[ResourceInfo]</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>504</x>
+ <y>184</y>
+ <w>88</w>
+ <h>48</h>
+ </coordinates>
+ <panel_attributes>lt=-&gt;
+m2=1..*
+
+</panel_attributes>
+ <additional_attributes>10.0;40.0;10.0;10.0;90.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>648</x>
+ <y>280</y>
+ <w>192</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.item_infos.
+ResourceInfo</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>784</x>
+ <y>184</y>
+ <w>160</w>
+ <h>184</h>
+ </coordinates>
+ <panel_attributes>lt=[version]-&gt;
+m2=1..*</panel_attributes>
+ <additional_attributes>30.0;10.0;180.0;10.0;180.0;200.0;70.0;200.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>784</x>
+ <y>232</y>
+ <w>128</w>
+ <h>88</h>
+ </coordinates>
+ <panel_attributes>lt=[version]-&gt;
+m2=1..*
+
+</panel_attributes>
+ <additional_attributes>30.0;10.0;140.0;10.0;140.0;80.0;70.0;80.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>336</x>
+ <y>536</y>
+ <w>96</w>
+ <h>24</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;&lt;&lt;-</panel_attributes>
+ <additional_attributes>10.0;10.0;100.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>176</x>
+ <y>528</y>
+ <w>168</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.flow_handlers.
+FlowHandlerBlockScripts</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>328</x>
+ <y>680</y>
+ <w>104</w>
+ <h>24</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;&lt;&lt;-</panel_attributes>
+ <additional_attributes>10.0;10.0;110.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>168</x>
+ <y>672</y>
+ <w>168</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.flow_handlers.
+FlowHandlerAllowScripts</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>328</x>
+ <y>776</y>
+ <w>104</w>
+ <h>24</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;&lt;&lt;-</panel_attributes>
+ <additional_attributes>10.0;10.0;110.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>168</x>
+ <y>768</y>
+ <w>168</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.flow_handlers.
+FlowHandlerInjectPayload</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>8</x>
+ <y>304</y>
+ <w>168</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>/hydrilla.proxy.flow_handlers./
+/FlowHandler/</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>104</x>
+ <y>328</y>
+ <w>88</w>
+ <h>232</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>10.0;10.0;10.0;270.0;90.0;270.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>88</x>
+ <y>328</y>
+ <w>96</w>
+ <h>376</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>10.0;10.0;10.0;450.0;100.0;450.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>72</x>
+ <y>328</y>
+ <w>112</w>
+ <h>424</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>10.0;10.0;10.0;510.0;120.0;510.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>56</x>
+ <y>328</y>
+ <w>128</w>
+ <h>472</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>10.0;10.0;10.0;570.0;140.0;570.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>48</x>
+ <y>80</y>
+ <w>216</w>
+ <h>240</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;.
+&lt;&lt;instantiates&gt;&gt;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</panel_attributes>
+ <additional_attributes>10.0;280.0;10.0;10.0;250.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>296</x>
+ <y>432</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.policies.
+FallbackBlockPolicy</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>480</x>
+ <y>456</y>
+ <w>24</w>
+ <h>88</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>10.0;90.0;10.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>152</x>
+ <y>432</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.policies.
+ErrorBlockPolicy</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>360</x>
+ <y>456</y>
+ <w>144</w>
+ <h>56</h>
+ </coordinates>
+ <panel_attributes>lt=.</panel_attributes>
+ <additional_attributes>160.0;50.0;10.0;50.0;10.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>440</x>
+ <y>432</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.policies.
+RuleBlockPolicy</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>216</x>
+ <y>456</y>
+ <w>168</w>
+ <h>56</h>
+ </coordinates>
+ <panel_attributes>lt=.</panel_attributes>
+ <additional_attributes>190.0;50.0;10.0;50.0;10.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>296</x>
+ <y>576</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.policies.
+FallbackAllowPolicy</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>360</x>
+ <y>600</y>
+ <w>144</w>
+ <h>56</h>
+ </coordinates>
+ <panel_attributes>lt=.</panel_attributes>
+ <additional_attributes>160.0;50.0;10.0;50.0;10.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>440</x>
+ <y>576</y>
+ <w>136</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.policies.
+RuleAllowPolicy</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>480</x>
+ <y>600</y>
+ <w>24</w>
+ <h>88</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;.</panel_attributes>
+ <additional_attributes>10.0;90.0;10.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLNote</id>
+ <coordinates>
+ <x>616</x>
+ <y>40</y>
+ <w>144</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>Facilitates storing and modifying data on-disk.</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>584</x>
+ <y>48</y>
+ <w>48</w>
+ <h>48</h>
+ </coordinates>
+ <panel_attributes>lt=.</panel_attributes>
+ <additional_attributes>10.0;40.0;40.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>432</x>
+ <y>80</y>
+ <w>160</w>
+ <h>32</h>
+ </coordinates>
+ <panel_attributes>hydrilla.proxy.store.
+HaketiloStore</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>440</x>
+ <y>104</y>
+ <w>24</w>
+ <h>112</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;&lt;-</panel_attributes>
+ <additional_attributes>10.0;10.0;10.0;120.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLClass</id>
+ <coordinates>
+ <x>248</x>
+ <y>272</y>
+ <w>88</w>
+ <h>24</h>
+ </coordinates>
+ <panel_attributes>lt=.
+StateUpdater</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>136</x>
+ <y>264</y>
+ <w>128</w>
+ <h>56</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;.
+&lt;&lt;produces&gt;&gt;</panel_attributes>
+ <additional_attributes>140.0;20.0;10.0;20.0;10.0;50.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>312</x>
+ <y>224</y>
+ <w>64</w>
+ <h>64</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;.
+&lt;&lt;uses&gt;&gt;</panel_attributes>
+ <additional_attributes>10.0;10.0;10.0;60.0</additional_attributes>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>256</x>
+ <y>104</y>
+ <w>64</w>
+ <h>184</h>
+ </coordinates>
+ <panel_attributes>lt=&lt;.
+&lt;&lt;uses&gt;&gt;
+
+
+
+
+
+</panel_attributes>
+ <additional_attributes>10.0;210.0;10.0;10.0</additional_attributes>
+ </element>
+ <element>
+ <id>UMLNote</id>
+ <coordinates>
+ <x>136</x>
+ <y>176</y>
+ <w>96</w>
+ <h>24</h>
+ </coordinates>
+ <panel_attributes>Function type</panel_attributes>
+ <additional_attributes/>
+ </element>
+ <element>
+ <id>Relation</id>
+ <coordinates>
+ <x>184</x>
+ <y>192</y>
+ <w>80</w>
+ <h>96</h>
+ </coordinates>
+ <panel_attributes>lt=.</panel_attributes>
+ <additional_attributes>80.0;100.0;10.0;10.0</additional_attributes>
+ </element>
+</diagram>