2424from ..abstract_base import AbstractBase
2525from ..base_model import BaseModel
2626from ..mixin import ViewSetRefMixin
27- from ..model import Element , SoftwareSystem , SoftwareSystemIO
27+ from ..model import Element , SoftwareSystem
2828from .automatic_layout import AutomaticLayout , AutomaticLayoutIO
2929from .element_view import ElementView , ElementViewIO
3030from .paper_size import PaperSize
@@ -46,17 +46,22 @@ class ViewIO(BaseModel, ABC):
4646
4747 key : str
4848 description : str
49- software_system : Optional [SoftwareSystemIO ] = Field (None , alias = "softwareSystem" )
50- software_system_id : str = Field ("" , alias = "softwareSystemId" )
51- paper_size : Optional [PaperSize ] = Field (None , alias = "paperSize" )
52- automatic_layout : Optional [AutomaticLayoutIO ] = Field (None , alias = "automaticLayout" )
49+ software_system_id : str = Field (default = "" , alias = "softwareSystemId" )
50+ paper_size : Optional [PaperSize ] = Field (default = None , alias = "paperSize" )
51+ automatic_layout : Optional [AutomaticLayoutIO ] = Field (
52+ default = None , alias = "automaticLayout"
53+ )
5354 title : str = ""
5455
55- element_views : List [ElementViewIO ] = Field ([], alias = "elementViews" )
56- relationship_views : List [RelationshipViewIO ] = Field ([], alias = "relationshipViews" )
56+ element_views : List [ElementViewIO ] = Field (default = (), alias = "elementViews" )
57+ relationship_views : List [RelationshipViewIO ] = Field (
58+ default = (), alias = "relationshipViews"
59+ )
5760
5861 # TODO
59- layout_merge_strategy : Optional [Any ] = Field (None , alias = "layoutMergeStrategy" )
62+ layout_merge_strategy : Optional [Any ] = Field (
63+ default = None , alias = "layoutMergeStrategy"
64+ )
6065
6166
6267class View (ViewSetRefMixin , AbstractBase , ABC ):
@@ -72,32 +77,36 @@ class View(ViewSetRefMixin, AbstractBase, ABC):
7277 def __init__ (
7378 self ,
7479 * ,
75- software_system : SoftwareSystem ,
76- key : str ,
80+ software_system : Optional [ SoftwareSystem ] = None ,
81+ key : str = None ,
7782 description : str ,
7883 paper_size : Optional [PaperSize ] = None ,
7984 automatic_layout : Optional [AutomaticLayout ] = None ,
8085 title : str = "" ,
81- element_views : Optional [Iterable [ElementView ]] = None ,
82- relationship_views : Optional [Iterable [RelationshipView ]] = None ,
86+ element_views : Optional [Iterable [ElementView ]] = () ,
87+ relationship_views : Optional [Iterable [RelationshipView ]] = () ,
8388 layout_merge_strategy : Optional [Any ] = None ,
8489 ** kwargs ,
8590 ):
8691 """Initialize a view with a 'private' view set."""
8792 super ().__init__ (** kwargs )
8893 self .software_system = software_system
94+ self .software_system_id = software_system .id if software_system else None
8995 self .key = key
9096 self .description = description
9197 self .paper_size = paper_size
9298 self .automatic_layout = automatic_layout
9399 self .title = title
94- self .element_views = set () if element_views is None else set (element_views )
95- self .relationship_views = (
96- set () if relationship_views is None else set (relationship_views )
97- )
100+ self .element_views = set (element_views )
101+ self .relationship_views = set (relationship_views )
102+
98103 # TODO
99104 self .layout_merge_strategy = layout_merge_strategy
100105
106+ @property
107+ def model (self ):
108+ return self .software_system .get_model ()
109+
101110 def _add_element (self , element : Element , add_relationships : bool ) -> None :
102111 """
103112 Add the given element to this view.
@@ -108,12 +117,13 @@ def _add_element(self, element: Element, add_relationships: bool) -> None:
108117 relationships with other elements.
109118
110119 """
111- if element not in self .software_system . get_model () :
120+ if element not in self .model :
112121 raise RuntimeError (
113122 f"The element { element } does not exist in the model associated with "
114123 f"this view."
115124 )
116- self .element_views .add (ElementView (element = element ))
125+ # TODO: finish x,y coordinates , x=0, y=0
126+ self .element_views .add (ElementView (id = element .id ))
117127 if add_relationships :
118128 self ._add_relationships (element )
119129
@@ -125,10 +135,14 @@ def _add_relationships(self, element: Element) -> None:
125135 element (Element): The model element.
126136
127137 """
128- elements : Set [Element ] = {v .element for v in self .element_views }
138+ elements : Set [str ] = {v .id for v in self .element_views }
139+
129140 for relationship in element .get_efferent_relationships ():
130- if relationship .destination in elements :
131- self .relationship_views .add (RelationshipView (relationship = relationship ))
141+ if relationship .destination .id in elements :
142+ # TODO: finish relationshipview construction
143+ self .relationship_views .add (RelationshipView (id = relationship .id ))
144+
132145 for relationship in element .get_afferent_relationships ():
133- if relationship .source in elements :
134- self .relationship_views .add (RelationshipView (relationship = relationship ))
146+ if relationship .source .id in elements :
147+ # TODO: finish relationshipview construction
148+ self .relationship_views .add (RelationshipView (id = relationship .id ))
0 commit comments