<mxfile host="65bd71144e">
    <diagram id="xmas-architecture" name="XMAS Architecture">
        <mxGraphModel dx="976" dy="560" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1654" pageHeight="1169" math="0" shadow="0">
            <root>
                <mxCell id="0"/>
                <mxCell id="1" parent="0"/>
                <mxCell id="2" value="QGIS Desktop" style="swimlane;fontStyle=1;align=center;startSize=30;fillColor=#dbeafe;strokeColor=#3b82f6;fontColor=#1e3a5f;fontSize=14;rounded=1;container=0;" parent="1" vertex="1">
                    <mxGeometry x="20" y="20" width="720" height="930" as="geometry"/>
                </mxCell>
                <mxCell id="3" value="Map Canvas, Layer Tree etc." style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#3b82f6;fontColor=#1e3a5f;fontStyle=1;" parent="2" vertex="1">
                    <mxGeometry x="20" y="50" width="200" height="50" as="geometry"/>
                </mxCell>
                <mxCell id="4" value="XMAS-Plugin" style="swimlane;fontStyle=1;align=center;startSize=30;fillColor=#eff6ff;strokeColor=#3b82f6;fontColor=#1e3a5f;fontSize=12;rounded=1;container=0;" parent="2" vertex="1">
                    <mxGeometry x="20" y="130" width="680" height="780" as="geometry">
                        <mxRectangle x="20" y="130" width="110" height="30" as="alternateBounds"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="6" value="PlanManager&#xa;(layer lifecycle)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#3b82f6;fontColor=#1e3a5f;" parent="4" vertex="1">
                    <mxGeometry x="180" y="59" width="190" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="9" value="XMASPanel/Dock&#xa;QWebEngineView + QWebChannel" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#3b82f6;fontColor=#1e3a5f;" parent="4" vertex="1">
                    <mxGeometry x="439" y="166" width="220" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="7" value="XMASPluginVectorDataProvider&lt;br&gt;(wraps Postgres Provider)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#3b82f6;fontColor=#1e3a5f;" parent="4" vertex="1">
                    <mxGeometry x="415" y="620" width="240" height="70" as="geometry"/>
                </mxCell>
                <mxCell id="34" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;startArrow=block;startFill=1;endArrow=block;endFill=1;" parent="4" source="8" target="7" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <mxPoint x="460" y="570" as="sourcePoint"/>
                        <mxPoint x="565" y="110" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="5" value="ServerManager&#xa;(webapp lifecycle)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#3b82f6;fontColor=#1e3a5f;" parent="4" vertex="1">
                    <mxGeometry x="440" y="59" width="190" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="35" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;startArrow=block;startFill=1;endArrow=block;endFill=1;" parent="4" source="9" target="8" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <mxPoint x="590" y="350" as="sourcePoint"/>
                        <mxPoint x="580" y="690" as="targetPoint"/>
                        <Array as="points">
                            <mxPoint x="550" y="300"/>
                            <mxPoint x="550" y="300"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="8" value="XMASPluginEditorWidgetWrapper&#xa;(wraps QWebEngineView)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dbeafe;strokeColor=#3b82f6;fontColor=#1e3a5f;" parent="4" vertex="1">
                    <mxGeometry x="415" y="330" width="240" height="70" as="geometry"/>
                </mxCell>
                <mxCell id="45" value="" style="endArrow=classic;startArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;jumpStyle=arc;jumpSize=10;entryX=0;entryY=0.5;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;" parent="4" source="6" target="9" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="800" y="230" as="sourcePoint"/>
                        <mxPoint x="850" y="180" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="46" value="plans data from/to webapp" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="45" vertex="1" connectable="0">
                    <mxGeometry x="0.0062" y="1" relative="1" as="geometry">
                        <mxPoint x="31" y="1" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="19" value="feature request" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;jumpStyle=arc;jumpSize=10;" parent="2" source="3" target="7" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <Array as="points">
                            <mxPoint x="70" y="768"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="10" value="XMAS-App Server&#xa;(NiceGUI/FastAPI/XPlan-Tools)" style="swimlane;fontStyle=1;align=center;startSize=40;fillColor=#dcfce7;strokeColor=#22c55e;fontColor=#14532d;fontSize=12;rounded=1;container=0;" parent="1" vertex="1">
                    <mxGeometry x="888" y="206" width="320" height="460" as="geometry"/>
                </mxCell>
                <mxCell id="11" value="Web UI&#xa;/plans" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#22c55e;fontColor=#14532d;" parent="10" vertex="1">
                    <mxGeometry x="50" y="110" width="220" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="12" value="Web UI /feature/{id}" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#22c55e;fontColor=#14532d;" parent="10" vertex="1">
                    <mxGeometry x="50" y="200" width="220" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="13" value="POST /insert-features" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#22c55e;fontColor=#14532d;" parent="10" vertex="1">
                    <mxGeometry x="50" y="290" width="220" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="14" value="POST /update-features" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dcfce7;strokeColor=#22c55e;fontColor=#14532d;" parent="10" vertex="1">
                    <mxGeometry x="50" y="380" width="220" height="60" as="geometry"/>
                </mxCell>
                <mxCell id="15" value="PostgreSQL Database" style="swimlane;fontStyle=1;align=center;startSize=30;fillColor=#fef9c3;strokeColor=#eab308;fontColor=#713f12;fontSize=12;rounded=1;container=0;" parent="1" vertex="1">
                    <mxGeometry x="1260" y="690" width="320" height="260" as="geometry">
                        <mxRectangle x="1270" y="230" width="160" height="30" as="alternateBounds"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="16" value="coretable" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef9c3;strokeColor=#eab308;fontColor=#713f12;" parent="15" vertex="1">
                    <mxGeometry x="50" y="50" width="220" height="50" as="geometry"/>
                </mxCell>
                <mxCell id="17" value="refs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef9c3;strokeColor=#eab308;fontColor=#713f12;" parent="15" vertex="1">
                    <mxGeometry x="50" y="120" width="220" height="50" as="geometry"/>
                </mxCell>
                <mxCell id="18" value="geometrytype-specific Views" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef9c3;strokeColor=#eab308;fontColor=#713f12;" parent="15" vertex="1">
                    <mxGeometry x="50" y="190" width="220" height="50" as="geometry"/>
                </mxCell>
                <mxCell id="20" value="identify feature /&#xa;attribute table" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;jumpStyle=arc;jumpSize=10;" parent="1" source="3" target="8" edge="1">
                    <mxGeometry x="-0.2381" relative="1" as="geometry">
                        <mxPoint as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="21" value="READ - SQL SELECT" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="7" target="18" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <mxPoint x="780" y="860" as="sourcePoint"/>
                        <mxPoint x="1320" y="860" as="targetPoint"/>
                        <Array as="points">
                            <mxPoint x="575" y="905"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="22" value="DELETE - SQL DELETE" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="7" target="18" edge="1">
                    <mxGeometry x="0.0852" relative="1" as="geometry">
                        <Array as="points">
                            <mxPoint x="575" y="970"/>
                            <mxPoint x="1420" y="970"/>
                        </Array>
                        <mxPoint as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="24" value="WRITE - HTTP POST" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="7" target="13" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <Array as="points">
                            <mxPoint x="840" y="805"/>
                            <mxPoint x="840" y="526"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="26" value="SQL INSERT" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="13" target="17" edge="1">
                    <mxGeometry x="-0.1591" relative="1" as="geometry">
                        <Array as="points">
                            <mxPoint x="1620" y="526"/>
                            <mxPoint x="1620" y="835"/>
                        </Array>
                        <mxPoint as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="28" value="SQL UPDATE" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;strokeColor=default;endArrow=classicThin;endFill=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="14" target="17" edge="1">
                    <mxGeometry x="-0.6768" y="-3" relative="1" as="geometry">
                        <mxPoint x="1240" y="440" as="targetPoint"/>
                        <Array as="points">
                            <mxPoint x="1103" y="835"/>
                        </Array>
                        <mxPoint as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="29" value="HTTP GET&lt;br&gt;QWebChannel" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=classic;startFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="9" target="11" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <Array as="points">
                            <mxPoint x="700" y="346"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="31" value="HTTP GET&lt;br&gt;QWebChannel" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;startArrow=block;startFill=1;endArrow=block;endFill=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="8" target="12" edge="1">
                    <mxGeometry relative="1" as="geometry">
                        <Array as="points">
                            <mxPoint x="820" y="515"/>
                            <mxPoint x="820" y="436"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="32" value="add/remove layers" style="edgeStyle=orthogonalEdgeStyle;html=1;fontSize=11;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="6" target="3" edge="1">
                    <mxGeometry x="-0.1171" relative="1" as="geometry">
                        <mxPoint as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="33" value="health check&#xa;start/stop" style="html=1;fontSize=11;entryX=0.006;entryY=0.072;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="5" target="10" edge="1">
                    <mxGeometry x="0.1823" relative="1" as="geometry">
                        <mxPoint x="910" y="130" as="targetPoint"/>
                        <mxPoint as="offset"/>
                        <mxPoint x="690" y="250" as="sourcePoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="38" value="" style="endArrow=classic;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="16" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="1620" y="740" as="sourcePoint"/>
                        <mxPoint x="1320" y="710" as="targetPoint"/>
                        <Array as="points">
                            <mxPoint x="1620" y="765"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="40" value="" style="endArrow=classicThin;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;endFill=1;" parent="1" target="16" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="1103" y="730" as="sourcePoint"/>
                        <mxPoint x="1360" y="670" as="targetPoint"/>
                        <Array as="points">
                            <mxPoint x="1103" y="765"/>
                        </Array>
                    </mxGeometry>
                </mxCell>
                <mxCell id="47" style="edgeStyle=orthogonalEdgeStyle;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;jumpStyle=arc;jumpSize=12;" parent="1" source="11" target="16" edge="1">
                    <mxGeometry relative="1" as="geometry"/>
                </mxCell>
                <mxCell id="48" value="SQL SELECT" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="47" vertex="1" connectable="0">
                    <mxGeometry x="-0.6238" y="-3" relative="1" as="geometry">
                        <mxPoint x="148" y="267" as="offset"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="49" value="" style="endArrow=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="12" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="1060" y="650" as="sourcePoint"/>
                        <mxPoint x="1420" y="436" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
                <mxCell id="50" value="" style="endArrow=classic;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="14" edge="1">
                    <mxGeometry width="50" height="50" relative="1" as="geometry">
                        <mxPoint x="840" y="616" as="sourcePoint"/>
                        <mxPoint x="1170" y="480" as="targetPoint"/>
                    </mxGeometry>
                </mxCell>
            </root>
        </mxGraphModel>
    </diagram>
</mxfile>
