lutaml 0.10.19 → 0.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +8 -1
  3. data/CLAUDE.md +26 -19
  4. data/Gemfile +14 -10
  5. data/Rakefile +6 -4
  6. data/lib/lutaml/version.rb +1 -1
  7. data/lib/lutaml.rb +3 -9
  8. data/lutaml.gemspec +2 -18
  9. metadata +5 -892
  10. data/Makefile +0 -2
  11. data/config/diagram_styles.yml +0 -200
  12. data/config/model_transformations.yml +0 -266
  13. data/config/package_metadata.example.yml +0 -58
  14. data/config/qea_schema.yml +0 -1024
  15. data/config/static_site.yml +0 -166
  16. data/examples/UML_EA.DTD +0 -6856
  17. data/examples/lur/20251010_current_plateau_v5.1.lur +0 -0
  18. data/examples/lur/basic.lur +0 -0
  19. data/examples/lur/test-output.lur +0 -0
  20. data/examples/lur/test.lur +0 -0
  21. data/examples/lur_basic_usage.rb +0 -220
  22. data/examples/lur_cli_workflow.rb +0 -262
  23. data/examples/lur_statistics.rb +0 -325
  24. data/examples/qea/20251010_current_plateau_v5.1.qea +0 -0
  25. data/examples/qea/ArcGISWorkspace_template.qea +0 -0
  26. data/examples/qea/README_qea_parser.adoc +0 -230
  27. data/examples/qea/UmlModel_template.qea +0 -0
  28. data/examples/qea/basic.qea +0 -0
  29. data/examples/qea/simple.qea +0 -0
  30. data/examples/qea/simple_example.qea +0 -0
  31. data/examples/qea/test.qea +0 -0
  32. data/examples/xmi/20251010_current_plateau_v5.1.xmi +0 -118121
  33. data/examples/xmi/ArcGISWorkspace_template.xmi +0 -1467
  34. data/examples/xmi/Images/EAID_0016F797_D055_4717_AF1A_606413D0A166.svg +0 -158
  35. data/examples/xmi/Images/EAID_00C5C772_5A03_434f_BF30_AC37542A1AAC.svg +0 -659
  36. data/examples/xmi/Images/EAID_0114FD24_9E58_4664_98CD_71305B59AD11.svg +0 -411
  37. data/examples/xmi/Images/EAID_01661E1B_31B6_4167_BCCF_A00678FB4EA2.svg +0 -102
  38. data/examples/xmi/Images/EAID_039FE004_5408_4fc0_89AA_EB319E4F61C7.svg +0 -169
  39. data/examples/xmi/Images/EAID_04EE9625_17A0_4721_BC71_21756DB21D06.svg +0 -403
  40. data/examples/xmi/Images/EAID_05FF9417_1619_4170_B0C9_55AA6B988EF1.svg +0 -175
  41. data/examples/xmi/Images/EAID_09853FB2_AF8A_432f_94C5_6C47461BD937.svg +0 -360
  42. data/examples/xmi/Images/EAID_09927B7F_A657_4819_99E5_AC9DC99227D9.svg +0 -195
  43. data/examples/xmi/Images/EAID_09AF6B8A_557C_43bc_BBB0_47C1E9401EF3.svg +0 -218
  44. data/examples/xmi/Images/EAID_0BE81AC5_031B_4973_A9A0_223CCD92BAA1.svg +0 -471
  45. data/examples/xmi/Images/EAID_0EDEA6EF_4DC8_4979_BB80_28B1B9EBD1D4.svg +0 -56
  46. data/examples/xmi/Images/EAID_0F413534_6AD2_48bc_B4AF_8699D530D91D.svg +0 -262
  47. data/examples/xmi/Images/EAID_1321F39B_AD67_47b5_B5C3_3A42BBFCBDF9.svg +0 -286
  48. data/examples/xmi/Images/EAID_13E09C71_99E7_40b4_B72D_48AF6379BC2E.svg +0 -164
  49. data/examples/xmi/Images/EAID_144955D8_CB4E_4b59_BB0C_E549F7F84943.svg +0 -66
  50. data/examples/xmi/Images/EAID_14E9F5FD_F6CD_4f48_B1CD_F5A40C6D8E83.svg +0 -95
  51. data/examples/xmi/Images/EAID_157826AA_96A7_4278_89A6_94BD0F31409A.svg +0 -63
  52. data/examples/xmi/Images/EAID_159E9DA0_7A54_4817_B72A_401C750F675D.svg +0 -306
  53. data/examples/xmi/Images/EAID_17BC8309_8051_492b_BE87_61CCFE83DB16.svg +0 -45
  54. data/examples/xmi/Images/EAID_1A10EB6D_E2E5_42a6_A31E_B293D93FD07E.svg +0 -193
  55. data/examples/xmi/Images/EAID_1A290AFD_CE96_46a2_8351_A986D77CC727.svg +0 -444
  56. data/examples/xmi/Images/EAID_1B2D9309_C66B_492a_995C_95B2B02E0D7C.svg +0 -168
  57. data/examples/xmi/Images/EAID_1DE6B973_CE8A_416f_909B_54CEA1E5944E.svg +0 -10
  58. data/examples/xmi/Images/EAID_204F4ACC_2230_4c8d_9861_EF5A6844B712.svg +0 -60
  59. data/examples/xmi/Images/EAID_227300E2_4F4B_4955_83B9_FA626CE8680B.svg +0 -188
  60. data/examples/xmi/Images/EAID_22C24D4C_4894_480a_B113_0CB034CB59E9.svg +0 -426
  61. data/examples/xmi/Images/EAID_234BC4F5_8100_4969_BDCB_A24E0E641F23.svg +0 -169
  62. data/examples/xmi/Images/EAID_24446BFC_9FEB_4935_8970_65A4C562A93F.svg +0 -277
  63. data/examples/xmi/Images/EAID_24E8A45C_C99F_49b7_860A_9CF65FF76C76.svg +0 -575
  64. data/examples/xmi/Images/EAID_272F3181_4300_48b7_98A0_A8CFD12B1A72.svg +0 -255
  65. data/examples/xmi/Images/EAID_292E0D94_392C_4da6_A0B5_841501FAE50A.svg +0 -183
  66. data/examples/xmi/Images/EAID_29DD0967_ADAB_4abb_99C5_544821F5E7DA.svg +0 -10
  67. data/examples/xmi/Images/EAID_2A339928_E5EF_4ed2_9E5D_CC2CA5CF248B.svg +0 -310
  68. data/examples/xmi/Images/EAID_2A5E0832_06BE_4381_85D4_9B00E4F95575.svg +0 -155
  69. data/examples/xmi/Images/EAID_2AAB709F_EFCE_496f_8AFE_92809D66A0A9.svg +0 -81
  70. data/examples/xmi/Images/EAID_2C8DD882_8DEA_4065_89F8_DDA796AA0C85.svg +0 -520
  71. data/examples/xmi/Images/EAID_2E98EA19_37D8_4b70_BDCE_CFEE4FA800B0.svg +0 -173
  72. data/examples/xmi/Images/EAID_30D62231_110F_44e8_9C06_6FCDCBA53A09.svg +0 -722
  73. data/examples/xmi/Images/EAID_3206D3FD_1FC4_41c7_8D00_36DB908E9319.svg +0 -181
  74. data/examples/xmi/Images/EAID_3452CC53_9ACB_44eb_9C9D_B90CF862F284.svg +0 -92
  75. data/examples/xmi/Images/EAID_348EE46E_ABD9_40b0_82A1_0285E75BDC52.svg +0 -187
  76. data/examples/xmi/Images/EAID_34FF671B_CFDC_47ad_91DF_ECA6D8358180.svg +0 -217
  77. data/examples/xmi/Images/EAID_359DD694_0100_4bdf_AD5F_712D97E9C69B.svg +0 -157
  78. data/examples/xmi/Images/EAID_35DE714C_49A8_490e_913A_56F39EF317F9.svg +0 -180
  79. data/examples/xmi/Images/EAID_360C79F1_8EDF_41db_A069_DECDC55625BC.svg +0 -31
  80. data/examples/xmi/Images/EAID_36913C58_FF35_4ba2_A04B_9A4824E24609.svg +0 -166
  81. data/examples/xmi/Images/EAID_372F7F7B_57ED_469a_A640_70DB578B3C56.svg +0 -361
  82. data/examples/xmi/Images/EAID_37AC19B9_8433_4fee_A326_763170D54D06.svg +0 -32
  83. data/examples/xmi/Images/EAID_38170608_32B5_4a6f_A68D_A0D7C0C9D019.svg +0 -234
  84. data/examples/xmi/Images/EAID_3A77A5D0_4E1B_4116_8AAD_407FC422B47F.svg +0 -183
  85. data/examples/xmi/Images/EAID_3B8BD087_1683_46b1_8D0D_6F839C46C578.svg +0 -42
  86. data/examples/xmi/Images/EAID_3DC20801_AE8B_4e76_B08C_F574E8A90E13.svg +0 -192
  87. data/examples/xmi/Images/EAID_3DE28C70_C6D4_406c_B49F_EEF52148C8C1.svg +0 -124
  88. data/examples/xmi/Images/EAID_458E093C_BA2B_4292_BEC4_37511C163DDC.svg +0 -140
  89. data/examples/xmi/Images/EAID_45F9B1F7_E568_47c9_B229_953BC2E707E4.svg +0 -266
  90. data/examples/xmi/Images/EAID_46B3041A_8C23_46e6_8E14_ADE7012274C5.svg +0 -80
  91. data/examples/xmi/Images/EAID_47E4600F_CEC9_4245_9BF5_EE38007A9DDB.svg +0 -584
  92. data/examples/xmi/Images/EAID_4881CEEE_792C_4cb0_BEA7_54333B643D0A.svg +0 -155
  93. data/examples/xmi/Images/EAID_48D364F0_DCA4_41e8_B4D4_509B3023B969.svg +0 -17
  94. data/examples/xmi/Images/EAID_4DBDAB9E_4C1C_4cb1_A767_06BD743A50A7.svg +0 -78
  95. data/examples/xmi/Images/EAID_4EB75007_B31D_4f2c_8855_7E9D3A3B17F4.svg +0 -454
  96. data/examples/xmi/Images/EAID_4F421236_FCF3_4aae_B22A_C7E6A5EFBAC7.svg +0 -81
  97. data/examples/xmi/Images/EAID_4FC1D352_2102_4b73_BCB0_1410B29C6BD7.svg +0 -379
  98. data/examples/xmi/Images/EAID_4FE346EA_01E1_4b30_8BE6_BB32EA191E47.svg +0 -126
  99. data/examples/xmi/Images/EAID_5038EEE3_7DD0_4cca_9829_364E044D37E8.svg +0 -199
  100. data/examples/xmi/Images/EAID_508A37DC_9378_4f5a_BD96_48F4D24E03A5.svg +0 -162
  101. data/examples/xmi/Images/EAID_516DA1A2_F0EC_415c_9664_E4CA54E7F05C.svg +0 -136
  102. data/examples/xmi/Images/EAID_52A1DBD3_D3DA_4b6d_8F96_FC6F39F64242.svg +0 -161
  103. data/examples/xmi/Images/EAID_575E87BA_32E9_4a84_AA4E_0EFDFC5D4C07.svg +0 -71
  104. data/examples/xmi/Images/EAID_57E0F1A0_6C72_47ef_B922_B806F9A875E8.svg +0 -209
  105. data/examples/xmi/Images/EAID_5957C373_3FC1_482f_8F35_D809153A17F5.svg +0 -123
  106. data/examples/xmi/Images/EAID_59A66AE2_412C_48a6_BFC7_EA56CF11D269.svg +0 -218
  107. data/examples/xmi/Images/EAID_5A43833E_680B_4a90_8931_0C902304E029.svg +0 -236
  108. data/examples/xmi/Images/EAID_5D6DB5A0_5047_4bac_9E60_69904A60B56D.svg +0 -353
  109. data/examples/xmi/Images/EAID_5DA1E7A7_8E59_4803_A831_E9F3EC27328F.svg +0 -242
  110. data/examples/xmi/Images/EAID_5E2C1E2A_82A8_47f4_B2ED_1398D72BFCFD.svg +0 -246
  111. data/examples/xmi/Images/EAID_6052620C_4BD5_49f6_A21C_AD7E6DCA2795.svg +0 -290
  112. data/examples/xmi/Images/EAID_6481E2CC_35A6_43b0_88D4_10A667A2BC2D.svg +0 -60
  113. data/examples/xmi/Images/EAID_660C7D03_A26C_4977_A7BA_9D0A773DA811.svg +0 -318
  114. data/examples/xmi/Images/EAID_671F3C3D_35B6_4514_B5B6_DD7E84925493.svg +0 -24
  115. data/examples/xmi/Images/EAID_676B9C9A_D85F_4d2f_A46B_73F02090DC87.svg +0 -127
  116. data/examples/xmi/Images/EAID_6797FEFA_5801_48e4_8B9C_3C824C0E165D.svg +0 -412
  117. data/examples/xmi/Images/EAID_6807F4EE_18EF_4e7e_ACCF_D5BD323AFDE9.svg +0 -130
  118. data/examples/xmi/Images/EAID_69E81E34_CF28_4c7f_A48F_5941BA85CEE3.svg +0 -96
  119. data/examples/xmi/Images/EAID_6A3C55E8_3C3C_4f3a_8AAC_0299C5B23070.svg +0 -10
  120. data/examples/xmi/Images/EAID_6BAC333E_E2C2_42c7_8DDF_6B4FA0FFC03B.svg +0 -143
  121. data/examples/xmi/Images/EAID_6D0349D5_3F1B_4b28_82D2_910743DEB5E5.svg +0 -114
  122. data/examples/xmi/Images/EAID_6E95B74E_8A09_4698_9E9E_23BCFD2CE194.svg +0 -37
  123. data/examples/xmi/Images/EAID_70C77F92_5614_4b22_8C8E_67859F59D8FD.svg +0 -254
  124. data/examples/xmi/Images/EAID_71F9216B_E7A7_4083_B08E_6C71B57F3A1F.svg +0 -187
  125. data/examples/xmi/Images/EAID_73025C5A_08FC_47ff_AB2F_C7F79CF54B41.svg +0 -145
  126. data/examples/xmi/Images/EAID_74C974B6_6D07_425d_B7AC_C8899E3B4967.svg +0 -76
  127. data/examples/xmi/Images/EAID_7504FCD2_524C_4e7d_BAE4_4E58A8A8A12C.svg +0 -196
  128. data/examples/xmi/Images/EAID_78030266_3603_4747_9D75_03D16614BE7D.svg +0 -35
  129. data/examples/xmi/Images/EAID_785226C1_12B1_4104_A4C1_F19B70B9FB71.svg +0 -348
  130. data/examples/xmi/Images/EAID_7854470F_26B8_4d3c_AFDF_C05BCE6ED0CD.svg +0 -72
  131. data/examples/xmi/Images/EAID_794F4A8F_18CA_4e9f_8477_A6F0E5ED22D4.svg +0 -187
  132. data/examples/xmi/Images/EAID_7A24839E_C8AE_424d_B7D2_6DA16DC813E7.svg +0 -114
  133. data/examples/xmi/Images/EAID_7A3649FD_E960_4ae6_B9B1_A9001C066AE7.svg +0 -181
  134. data/examples/xmi/Images/EAID_7B2C6765_AB68_439a_87F3_DAC323CB2AF5.svg +0 -196
  135. data/examples/xmi/Images/EAID_7C44AC09_27C1_47b3_9A85_88EC71C081FF.svg +0 -55
  136. data/examples/xmi/Images/EAID_7CE102CA_97C1_4cac_BD3B_0500D3712D2A.svg +0 -195
  137. data/examples/xmi/Images/EAID_7D960BD8_65D8_4934_9C11_4EF860DD8FBA.svg +0 -90
  138. data/examples/xmi/Images/EAID_80939C98_A456_48c3_BCEA_4B72851F2DF6.svg +0 -174
  139. data/examples/xmi/Images/EAID_812FE862_76ED_44f0_B678_7A4601B395CF.svg +0 -142
  140. data/examples/xmi/Images/EAID_81B76F5B_9D64_4bbf_8AC8_34234FB87533.svg +0 -740
  141. data/examples/xmi/Images/EAID_84352F1A_195B_411b_9552_5BFC40BF90B5.svg +0 -105
  142. data/examples/xmi/Images/EAID_846DD800_139C_4d47_A1DF_3FB1AC5D130F.svg +0 -554
  143. data/examples/xmi/Images/EAID_84A9C65B_FD6D_4bb5_818F_E8C35FF5BCD1.svg +0 -228
  144. data/examples/xmi/Images/EAID_853674F5_7DC9_4aae_809B_5728098B5D5B.svg +0 -154
  145. data/examples/xmi/Images/EAID_860CBBFB_2F27_408f_9144_751F9D1F487F.svg +0 -273
  146. data/examples/xmi/Images/EAID_87476527_7B9B_4b92_967E_3D38365470CA.svg +0 -239
  147. data/examples/xmi/Images/EAID_87DAE930_5069_4c58_AC65_4B0B2C0F32C8.svg +0 -10
  148. data/examples/xmi/Images/EAID_88AF6BD7_BC34_406f_BB59_47CFAB4A7D5D.svg +0 -116
  149. data/examples/xmi/Images/EAID_88D0CB44_20D0_44fc_A6E3_B663332EF401.svg +0 -200
  150. data/examples/xmi/Images/EAID_8BB1CA0C_C003_4678_973B_A1C3308E021D.svg +0 -136
  151. data/examples/xmi/Images/EAID_8DAB169F_D189_4320_A0F5_4443E3297F0E.svg +0 -181
  152. data/examples/xmi/Images/EAID_8FD488EF_BAAB_40ec_A7ED_F7CC831D546E.svg +0 -324
  153. data/examples/xmi/Images/EAID_90BCA409_BB45_42c5_AFA5_45FE3D995904.svg +0 -342
  154. data/examples/xmi/Images/EAID_926AFE38_01FA_469e_B6AA_ED5F4D62B66F.svg +0 -105
  155. data/examples/xmi/Images/EAID_92AB0FD0_B0FB_4ceb_8EAE_66B6600D31D7.svg +0 -681
  156. data/examples/xmi/Images/EAID_92C43670_3057_47f1_A576_C60843FF3D26.svg +0 -136
  157. data/examples/xmi/Images/EAID_93F63576_BE01_4cd8_8A91_C674FF77FC3D.svg +0 -718
  158. data/examples/xmi/Images/EAID_9400D9BC_05A5_41fc_83F7_02E5C67F9718.svg +0 -487
  159. data/examples/xmi/Images/EAID_95246DCF_1C09_4a16_9512_98000F56B3D8.svg +0 -292
  160. data/examples/xmi/Images/EAID_9994BF62_51E2_42cd_BB35_16C537B6718A.svg +0 -715
  161. data/examples/xmi/Images/EAID_9AAD6C21_B1E7_4472_B64A_FB5E3569D970.svg +0 -116
  162. data/examples/xmi/Images/EAID_9BD7189A_877B_4ca9_B42C_817DEF144FB2.svg +0 -284
  163. data/examples/xmi/Images/EAID_9DA6C553_94FC_4204_83AD_ECC4B45A53EF.svg +0 -159
  164. data/examples/xmi/Images/EAID_9EE6A41B_5FAA_4c89_B98F_732059778630.svg +0 -10
  165. data/examples/xmi/Images/EAID_9F1A4B54_46F6_435c_9529_E43E54CF6050.svg +0 -172
  166. data/examples/xmi/Images/EAID_9FE1EA7B_4CEF_4976_A281_93A94315BD84.svg +0 -153
  167. data/examples/xmi/Images/EAID_A0695647_6172_4262_8C30_67441399609C.svg +0 -290
  168. data/examples/xmi/Images/EAID_A081C63E_D6F2_41a7_A99C_307836754AFA.svg +0 -149
  169. data/examples/xmi/Images/EAID_A24E2778_5AD9_44f2_AB8F_5CD3913477D6.svg +0 -194
  170. data/examples/xmi/Images/EAID_A264F089_F9B3_406c_A3A8_FF34903797D3.svg +0 -143
  171. data/examples/xmi/Images/EAID_A282E5D1_2A13_4e7f_BC76_5D086DD4A577.svg +0 -357
  172. data/examples/xmi/Images/EAID_A3BCE1D6_9DB5_4272_A020_4C0E194B99CC.svg +0 -171
  173. data/examples/xmi/Images/EAID_A56E3818_D1B8_4b63_B69E_FBAC4A8AF482.svg +0 -218
  174. data/examples/xmi/Images/EAID_A57215D5_75C5_4532_BCF4_264A77CD62F1.svg +0 -204
  175. data/examples/xmi/Images/EAID_A59065AF_9669_486c_9582_9693177CFC7F.svg +0 -263
  176. data/examples/xmi/Images/EAID_A759374D_589A_488c_99EF_537ACB9B1FF9.svg +0 -398
  177. data/examples/xmi/Images/EAID_A7B25F46_F18A_4373_B16D_8C6AC0B868B0.svg +0 -174
  178. data/examples/xmi/Images/EAID_A9FE9E6F_A5F4_47e5_A6BA_26E22C7346B6.svg +0 -310
  179. data/examples/xmi/Images/EAID_AA62CDEB_55EC_498d_B326_4AA2C9AF6A05.svg +0 -144
  180. data/examples/xmi/Images/EAID_AAF52AF6_F7F9_4005_AE46_8920847BEA03.svg +0 -144
  181. data/examples/xmi/Images/EAID_AB281AC1_7CB8_404a_8124_34343DDD84E2.svg +0 -198
  182. data/examples/xmi/Images/EAID_AB7F1FDF_A66B_42a1_B8A3_7F594BAAD508.svg +0 -143
  183. data/examples/xmi/Images/EAID_AC2191E3_76E3_40b2_9E21_0E0B9B5277D2.svg +0 -114
  184. data/examples/xmi/Images/EAID_AD451676_A7C8_4c6a_A925_A9B9CA344142.svg +0 -339
  185. data/examples/xmi/Images/EAID_ADBA40A1_9375_4c1b_9938_0990612EB615.svg +0 -429
  186. data/examples/xmi/Images/EAID_ADC8773C_1B27_48ac_BAC1_14C1C919FAF6.svg +0 -245
  187. data/examples/xmi/Images/EAID_AE0718DF_AF69_4ea1_A099_E20028FE40A1.svg +0 -173
  188. data/examples/xmi/Images/EAID_B0DDB85D_A00C_4a7f_8C06_CCA15E5E4FE5.svg +0 -31
  189. data/examples/xmi/Images/EAID_B27ED282_D5E5_4f33_8AC1_62802F9E0B35.svg +0 -256
  190. data/examples/xmi/Images/EAID_B3AFECCB_17DD_44d6_8A44_2C38D9A64C0B.svg +0 -95
  191. data/examples/xmi/Images/EAID_B3B6C5B1_278E_4714_8244_B6C28B66AB50.svg +0 -176
  192. data/examples/xmi/Images/EAID_B53E76CD_A0F2_4e2f_B3AB_796D85964EF2.svg +0 -179
  193. data/examples/xmi/Images/EAID_B55D6E67_0BDD_4163_B359_11A6FBA89C74.svg +0 -207
  194. data/examples/xmi/Images/EAID_B58D1A53_E860_41a3_8352_11C274093E83.svg +0 -189
  195. data/examples/xmi/Images/EAID_B62C02B3_69DB_49e9_8089_4EE398BDE666.svg +0 -165
  196. data/examples/xmi/Images/EAID_BC008774_B539_4150_8174_B675989053D0.svg +0 -22
  197. data/examples/xmi/Images/EAID_BC1F7E00_082D_4a26_922B_3967A8D66859.svg +0 -266
  198. data/examples/xmi/Images/EAID_BDA613D8_402A_475a_AA15_683D88FD3D23.svg +0 -183
  199. data/examples/xmi/Images/EAID_C028B286_4C85_47d8_B6D5_80B28F556E82.svg +0 -303
  200. data/examples/xmi/Images/EAID_C173A6F4_1D1B_400e_AD8C_64FFF7CD5BE5.svg +0 -178
  201. data/examples/xmi/Images/EAID_C1834072_CADC_4ce4_B0FC_8284AE5CF4A4.svg +0 -158
  202. data/examples/xmi/Images/EAID_C1EC985B_5CBD_4e91_8661_EB4EF23781D9.svg +0 -286
  203. data/examples/xmi/Images/EAID_C31C1314_B679_4413_B8FE_A2CD584FC128.svg +0 -305
  204. data/examples/xmi/Images/EAID_C37CFBD6_69BA_42fb_9AC7_2D329D931BCF.svg +0 -171
  205. data/examples/xmi/Images/EAID_C857C934_306F_463a_87D5_257CB225ECFE.svg +0 -174
  206. data/examples/xmi/Images/EAID_C96797DE_2238_42d3_896A_9F92500270ED.svg +0 -180
  207. data/examples/xmi/Images/EAID_C96CBC24_B20E_459a_8F9D_75B61CDCB89F.svg +0 -656
  208. data/examples/xmi/Images/EAID_CACB523D_56A5_4f05_B3C2_51BB18F380FD.svg +0 -158
  209. data/examples/xmi/Images/EAID_CB34B578_101B_48b4_9271_214FFEA6A83A.svg +0 -409
  210. data/examples/xmi/Images/EAID_CBBD6CF4_0A1E_4406_9930_89DE43527910.svg +0 -361
  211. data/examples/xmi/Images/EAID_CC06A828_3750_472f_8DB2_C2E0863FCE17.svg +0 -96
  212. data/examples/xmi/Images/EAID_CD5CF053_1772_4a0f_962D_B17054D8EEAA.svg +0 -173
  213. data/examples/xmi/Images/EAID_CE440B5A_9534_4c75_9BA5_50862BB396C2.svg +0 -97
  214. data/examples/xmi/Images/EAID_CE4734FC_7986_4b3a_807F_A5B2C7EDE9E4.svg +0 -193
  215. data/examples/xmi/Images/EAID_D14AA320_9D41_4366_8739_9C2C21F96AE1.svg +0 -32
  216. data/examples/xmi/Images/EAID_D2FA55D3_C733_4a4d_92D0_0BC7AC0BB5BC.svg +0 -108
  217. data/examples/xmi/Images/EAID_D351FC34_FB03_488d_ADA4_BDB93DA9CB02.svg +0 -49
  218. data/examples/xmi/Images/EAID_D368FDF3_BDC5_4718_A701_351C8587A376.svg +0 -592
  219. data/examples/xmi/Images/EAID_D4DA8C48_3998_450d_87C4_9D65C9FECDB4.svg +0 -42
  220. data/examples/xmi/Images/EAID_D5464ECF_290E_4b2b_A6C4_25BE80F886CB.svg +0 -76
  221. data/examples/xmi/Images/EAID_D55235B0_61E9_461a_8379_2B8BF2403BE2.svg +0 -147
  222. data/examples/xmi/Images/EAID_D555ED73_F010_45d7_8A53_45A33C64C249.svg +0 -318
  223. data/examples/xmi/Images/EAID_D7AAC526_267E_45a0_A853_3207F02363F8.svg +0 -45
  224. data/examples/xmi/Images/EAID_D998B20D_A875_4ef8_A9CE_996BE56602BD.svg +0 -158
  225. data/examples/xmi/Images/EAID_DBFA8B39_F5B7_4c0e_9552_19AEAE5BA64E.svg +0 -200
  226. data/examples/xmi/Images/EAID_DE47A47D_E7BE_4e6f_BA81_F789EE8CFE72.svg +0 -61
  227. data/examples/xmi/Images/EAID_DFBB1072_8EC5_4384_8241_7EDF4B6B888B.svg +0 -78
  228. data/examples/xmi/Images/EAID_E325B9D8_E955_4aed_8125_63167BD40320.svg +0 -67
  229. data/examples/xmi/Images/EAID_E32D9D02_CAE9_4a47_92A8_3290EDCD6E6D.svg +0 -79
  230. data/examples/xmi/Images/EAID_E3B28611_7857_458a_B0BC_736E777B88EC.svg +0 -194
  231. data/examples/xmi/Images/EAID_E43C37EC_1176_4d2e_8B98_B6F3DFF6A092.svg +0 -96
  232. data/examples/xmi/Images/EAID_E591C1CF_7F35_4160_8A72_DFA097AD5811.svg +0 -271
  233. data/examples/xmi/Images/EAID_E77C66A2_2E94_4196_BFC6_662FE5AEEB6F.svg +0 -332
  234. data/examples/xmi/Images/EAID_E7AABA98_2450_4986_9736_DCCAF0108C50.svg +0 -639
  235. data/examples/xmi/Images/EAID_E7D9A2C4_72D6_40b9_8EB8_6B35476246B3.svg +0 -134
  236. data/examples/xmi/Images/EAID_E9CDAD85_ECF1_43de_819F_30A0D01785E6.svg +0 -193
  237. data/examples/xmi/Images/EAID_EC8AF507_F441_4e8a_B8A7_C1690F3C7D0B.svg +0 -58
  238. data/examples/xmi/Images/EAID_ED501058_D540_47ac_8EBC_5921E8C0BF57.svg +0 -384
  239. data/examples/xmi/Images/EAID_EFBF5F0F_DF74_4944_8791_114F5637C335.svg +0 -590
  240. data/examples/xmi/Images/EAID_EFFFA027_2A1F_425c_8437_BF89AADC8893.svg +0 -365
  241. data/examples/xmi/Images/EAID_F07E7718_B2C2_4a65_B5DD_477CB73E971E.svg +0 -165
  242. data/examples/xmi/Images/EAID_F0F20BDF_C729_47f7_B6FC_25ED2C4609CA.svg +0 -61
  243. data/examples/xmi/Images/EAID_F32E5AFE_8605_4c77_AE69_D0D0A6E380AC.svg +0 -76
  244. data/examples/xmi/Images/EAID_F3F00F45_CD37_46fd_B521_D1040EB2FB16.svg +0 -123
  245. data/examples/xmi/Images/EAID_F46E8F19_D8F1_4a3d_B87B_B0BAB4F50F50.svg +0 -202
  246. data/examples/xmi/Images/EAID_F48E5F6E_2411_4635_9315_3EAA4CFA29F7.svg +0 -351
  247. data/examples/xmi/Images/EAID_F4C23F9E_DD74_4fed_B75D_AD3C6448BA24.svg +0 -189
  248. data/examples/xmi/Images/EAID_F853B3C4_B145_4ef0_B261_C3CC0475B6D2.svg +0 -215
  249. data/examples/xmi/Images/EAID_F8BE68CA_1F8F_47e5_9454_01A2EB7D388A.svg +0 -124
  250. data/examples/xmi/Images/EAID_F92A6A28_612E_468e_9E39_D7AE7D24E24D.svg +0 -208
  251. data/examples/xmi/Images/EAID_F995FA49_B86E_4c94_BE5E_C928FB6B87D0.svg +0 -302
  252. data/examples/xmi/Images/EAID_FEAE013A_A4E4_4283_A491_1FEB8D0EBA28.svg +0 -524
  253. data/examples/xmi/Images/EAID_FEBE5726_3751_470b_9023_8C569202E97E.svg +0 -730
  254. data/examples/xmi/UML_EA.DTD +0 -6856
  255. data/examples/xmi/UmlModel_template.xmi +0 -23
  256. data/examples/xmi/basic.xmi +0 -9086
  257. data/examples/xmi/simple.xmi +0 -655
  258. data/examples/xmi/simple_example.xmi +0 -23
  259. data/examples/xmi/test.xmi +0 -1703
  260. data/exe/lutaml +0 -11
  261. data/exe/lutaml-sysml +0 -22
  262. data/exe/lutaml-wsd2uml +0 -63
  263. data/exe/lutaml-yaml2uml +0 -146
  264. data/frontend/dist/app.iife.js +0 -24
  265. data/frontend/dist/style.css +0 -1
  266. data/frontend/index.html +0 -26
  267. data/frontend/package-lock.json +0 -2805
  268. data/frontend/package.json +0 -26
  269. data/frontend/src/App.vue +0 -59
  270. data/frontend/src/app.ts +0 -8
  271. data/frontend/src/components/AppHeader.vue +0 -127
  272. data/frontend/src/components/AppSidebar.vue +0 -119
  273. data/frontend/src/components/ClassDetails.vue +0 -247
  274. data/frontend/src/components/DiagramView.vue +0 -79
  275. data/frontend/src/components/PackageDetails.vue +0 -92
  276. data/frontend/src/components/PackageTreeNode.vue +0 -64
  277. data/frontend/src/components/SearchResults.vue +0 -48
  278. data/frontend/src/components/WelcomeView.vue +0 -66
  279. data/frontend/src/shims-vue.d.ts +0 -5
  280. data/frontend/src/stores/dataStore.ts +0 -79
  281. data/frontend/src/stores/uiStore.ts +0 -167
  282. data/frontend/src/styles/main.css +0 -1566
  283. data/frontend/src/types.ts +0 -221
  284. data/frontend/tests/e2e/__screenshots__/new-dark-mode.png +0 -0
  285. data/frontend/tests/e2e/__screenshots__/new-package-details.png +0 -0
  286. data/frontend/tests/e2e/__screenshots__/new-search-modal.png +0 -0
  287. data/frontend/tests/e2e/__screenshots__/new-sidebar-collapsed.png +0 -0
  288. data/frontend/tests/e2e/__screenshots__/new-welcome.png +0 -0
  289. data/frontend/tests/e2e/render.spec.ts +0 -188
  290. data/frontend/tsconfig.json +0 -20
  291. data/frontend/vite.config.ts +0 -26
  292. data/frontend/vitest.config.ts +0 -8
  293. data/lib/lutaml/cli/element_identifier.rb +0 -160
  294. data/lib/lutaml/cli/enhanced_formatter.rb +0 -494
  295. data/lib/lutaml/cli/interactive_shell/bookmark_commands.rb +0 -85
  296. data/lib/lutaml/cli/interactive_shell/command_base.rb +0 -32
  297. data/lib/lutaml/cli/interactive_shell/export_handler.rb +0 -73
  298. data/lib/lutaml/cli/interactive_shell/help_display.rb +0 -107
  299. data/lib/lutaml/cli/interactive_shell/navigation_commands.rb +0 -151
  300. data/lib/lutaml/cli/interactive_shell/query_commands.rb +0 -208
  301. data/lib/lutaml/cli/interactive_shell.rb +0 -254
  302. data/lib/lutaml/cli/lml_commands.rb +0 -205
  303. data/lib/lutaml/cli/output_formatter.rb +0 -348
  304. data/lib/lutaml/cli/resource_registry.rb +0 -127
  305. data/lib/lutaml/cli/tree_view_formatter.rb +0 -312
  306. data/lib/lutaml/cli/uml/build_command.rb +0 -487
  307. data/lib/lutaml/cli/uml/diagram_command.rb +0 -415
  308. data/lib/lutaml/cli/uml/export_command.rb +0 -77
  309. data/lib/lutaml/cli/uml/find_command.rb +0 -119
  310. data/lib/lutaml/cli/uml/info_command.rb +0 -103
  311. data/lib/lutaml/cli/uml/inspect_command.rb +0 -85
  312. data/lib/lutaml/cli/uml/ls_command.rb +0 -102
  313. data/lib/lutaml/cli/uml/repl_command.rb +0 -49
  314. data/lib/lutaml/cli/uml/search_command.rb +0 -85
  315. data/lib/lutaml/cli/uml/serve_command.rb +0 -58
  316. data/lib/lutaml/cli/uml/shared_helpers.rb +0 -49
  317. data/lib/lutaml/cli/uml/spa_command.rb +0 -223
  318. data/lib/lutaml/cli/uml/stats_command.rb +0 -57
  319. data/lib/lutaml/cli/uml/tree_command.rb +0 -82
  320. data/lib/lutaml/cli/uml/validate_command.rb +0 -190
  321. data/lib/lutaml/cli/uml/verify_command.rb +0 -103
  322. data/lib/lutaml/cli/uml.rb +0 -24
  323. data/lib/lutaml/cli/uml_commands.rb +0 -145
  324. data/lib/lutaml/cli.rb +0 -84
  325. data/lib/lutaml/converter/dsl_to_uml.rb +0 -237
  326. data/lib/lutaml/converter/xmi_to_uml.rb +0 -329
  327. data/lib/lutaml/converter/xmi_to_uml_generalization.rb +0 -193
  328. data/lib/lutaml/converter.rb +0 -10
  329. data/lib/lutaml/ea/diagram/configuration.rb +0 -379
  330. data/lib/lutaml/ea/diagram/element_renderers/base_renderer.rb +0 -81
  331. data/lib/lutaml/ea/diagram/element_renderers/class_renderer.rb +0 -328
  332. data/lib/lutaml/ea/diagram/element_renderers/connector_renderer.rb +0 -53
  333. data/lib/lutaml/ea/diagram/element_renderers/package_renderer.rb +0 -67
  334. data/lib/lutaml/ea/diagram/element_renderers.rb +0 -18
  335. data/lib/lutaml/ea/diagram/extractor.rb +0 -550
  336. data/lib/lutaml/ea/diagram/layout_engine.rb +0 -249
  337. data/lib/lutaml/ea/diagram/path_builder.rb +0 -256
  338. data/lib/lutaml/ea/diagram/style_parser.rb +0 -315
  339. data/lib/lutaml/ea/diagram/style_resolver.rb +0 -281
  340. data/lib/lutaml/ea/diagram/svg_renderer.rb +0 -279
  341. data/lib/lutaml/ea/diagram/util.rb +0 -69
  342. data/lib/lutaml/ea/diagram.rb +0 -62
  343. data/lib/lutaml/ea.rb +0 -7
  344. data/lib/lutaml/formatter/base.rb +0 -63
  345. data/lib/lutaml/formatter/graphviz.rb +0 -374
  346. data/lib/lutaml/formatter.rb +0 -20
  347. data/lib/lutaml/layout/engine.rb +0 -17
  348. data/lib/lutaml/layout/graph_viz_engine.rb +0 -19
  349. data/lib/lutaml/layout.rb +0 -8
  350. data/lib/lutaml/model_transformations/configuration.rb +0 -333
  351. data/lib/lutaml/model_transformations/format_registry.rb +0 -392
  352. data/lib/lutaml/model_transformations/parsers/base_parser.rb +0 -464
  353. data/lib/lutaml/model_transformations/parsers/qea_parser.rb +0 -450
  354. data/lib/lutaml/model_transformations/parsers/xmi_parser.rb +0 -289
  355. data/lib/lutaml/model_transformations/transformation_engine.rb +0 -405
  356. data/lib/lutaml/model_transformations.rb +0 -143
  357. data/lib/lutaml/qea/benchmark.rb +0 -210
  358. data/lib/lutaml/qea/database.rb +0 -270
  359. data/lib/lutaml/qea/factory/association_builder.rb +0 -203
  360. data/lib/lutaml/qea/factory/association_transformer.rb +0 -107
  361. data/lib/lutaml/qea/factory/attribute_tag_transformer.rb +0 -57
  362. data/lib/lutaml/qea/factory/attribute_transformer.rb +0 -93
  363. data/lib/lutaml/qea/factory/base_transformer.rb +0 -127
  364. data/lib/lutaml/qea/factory/class_transformer.rb +0 -164
  365. data/lib/lutaml/qea/factory/constraint_transformer.rb +0 -75
  366. data/lib/lutaml/qea/factory/data_type_transformer.rb +0 -133
  367. data/lib/lutaml/qea/factory/diagram_transformer.rb +0 -157
  368. data/lib/lutaml/qea/factory/document_builder.rb +0 -273
  369. data/lib/lutaml/qea/factory/ea_to_uml_factory.rb +0 -243
  370. data/lib/lutaml/qea/factory/enum_transformer.rb +0 -88
  371. data/lib/lutaml/qea/factory/generalization_builder.rb +0 -236
  372. data/lib/lutaml/qea/factory/generalization_transformer.rb +0 -98
  373. data/lib/lutaml/qea/factory/instance_transformer.rb +0 -84
  374. data/lib/lutaml/qea/factory/object_property_transformer.rb +0 -58
  375. data/lib/lutaml/qea/factory/operation_transformer.rb +0 -66
  376. data/lib/lutaml/qea/factory/package_transformer.rb +0 -208
  377. data/lib/lutaml/qea/factory/reference_resolver.rb +0 -99
  378. data/lib/lutaml/qea/factory/stereotype_loader.rb +0 -40
  379. data/lib/lutaml/qea/factory/tagged_value_transformer.rb +0 -38
  380. data/lib/lutaml/qea/factory/transformer_registry.rb +0 -77
  381. data/lib/lutaml/qea/factory.rb +0 -37
  382. data/lib/lutaml/qea/file_detector.rb +0 -178
  383. data/lib/lutaml/qea/infrastructure/database_connection.rb +0 -100
  384. data/lib/lutaml/qea/infrastructure/schema_reader.rb +0 -136
  385. data/lib/lutaml/qea/infrastructure/table_reader.rb +0 -224
  386. data/lib/lutaml/qea/infrastructure.rb +0 -12
  387. data/lib/lutaml/qea/models/base_model.rb +0 -48
  388. data/lib/lutaml/qea/models/ea_attribute.rb +0 -133
  389. data/lib/lutaml/qea/models/ea_attribute_tag.rb +0 -107
  390. data/lib/lutaml/qea/models/ea_complexity_type.rb +0 -79
  391. data/lib/lutaml/qea/models/ea_connector.rb +0 -160
  392. data/lib/lutaml/qea/models/ea_connector_type.rb +0 -60
  393. data/lib/lutaml/qea/models/ea_constraint_type.rb +0 -63
  394. data/lib/lutaml/qea/models/ea_datatype.rb +0 -104
  395. data/lib/lutaml/qea/models/ea_diagram.rb +0 -115
  396. data/lib/lutaml/qea/models/ea_diagram_link.rb +0 -78
  397. data/lib/lutaml/qea/models/ea_diagram_object.rb +0 -84
  398. data/lib/lutaml/qea/models/ea_diagram_type.rb +0 -56
  399. data/lib/lutaml/qea/models/ea_document.rb +0 -66
  400. data/lib/lutaml/qea/models/ea_object.rb +0 -206
  401. data/lib/lutaml/qea/models/ea_object_constraint.rb +0 -60
  402. data/lib/lutaml/qea/models/ea_object_property.rb +0 -94
  403. data/lib/lutaml/qea/models/ea_object_type.rb +0 -73
  404. data/lib/lutaml/qea/models/ea_operation.rb +0 -151
  405. data/lib/lutaml/qea/models/ea_operation_param.rb +0 -71
  406. data/lib/lutaml/qea/models/ea_package.rb +0 -73
  407. data/lib/lutaml/qea/models/ea_script.rb +0 -67
  408. data/lib/lutaml/qea/models/ea_status_type.rb +0 -66
  409. data/lib/lutaml/qea/models/ea_stereotype.rb +0 -57
  410. data/lib/lutaml/qea/models/ea_tagged_value.rb +0 -103
  411. data/lib/lutaml/qea/models/ea_xref.rb +0 -172
  412. data/lib/lutaml/qea/models.rb +0 -35
  413. data/lib/lutaml/qea/parser.rb +0 -57
  414. data/lib/lutaml/qea/repositories/base_repository.rb +0 -215
  415. data/lib/lutaml/qea/repositories/object_repository.rb +0 -219
  416. data/lib/lutaml/qea/repositories.rb +0 -10
  417. data/lib/lutaml/qea/services/configuration.rb +0 -211
  418. data/lib/lutaml/qea/services/database_loader.rb +0 -186
  419. data/lib/lutaml/qea/services.rb +0 -10
  420. data/lib/lutaml/qea/validation/association_validator.rb +0 -73
  421. data/lib/lutaml/qea/validation/attribute_validator.rb +0 -101
  422. data/lib/lutaml/qea/validation/base_validator.rb +0 -312
  423. data/lib/lutaml/qea/validation/class_validator.rb +0 -121
  424. data/lib/lutaml/qea/validation/database/circular_reference_validator.rb +0 -109
  425. data/lib/lutaml/qea/validation/database/orphan_validator.rb +0 -153
  426. data/lib/lutaml/qea/validation/database/referential_integrity_validator.rb +0 -128
  427. data/lib/lutaml/qea/validation/database.rb +0 -16
  428. data/lib/lutaml/qea/validation/diagram_validator.rb +0 -112
  429. data/lib/lutaml/qea/validation/formatters/json_formatter.rb +0 -137
  430. data/lib/lutaml/qea/validation/formatters/text_formatter.rb +0 -235
  431. data/lib/lutaml/qea/validation/operation_validator.rb +0 -79
  432. data/lib/lutaml/qea/validation/package_validator.rb +0 -111
  433. data/lib/lutaml/qea/validation/validation_engine.rb +0 -477
  434. data/lib/lutaml/qea/validation/validation_message.rb +0 -144
  435. data/lib/lutaml/qea/validation/validation_result.rb +0 -210
  436. data/lib/lutaml/qea/validation/validator_registry.rb +0 -134
  437. data/lib/lutaml/qea/validation.rb +0 -27
  438. data/lib/lutaml/qea/verification/comparison_result.rb +0 -264
  439. data/lib/lutaml/qea/verification/document_normalizer.rb +0 -169
  440. data/lib/lutaml/qea/verification/document_verifier.rb +0 -323
  441. data/lib/lutaml/qea/verification/element_comparator.rb +0 -277
  442. data/lib/lutaml/qea/verification/structure_matcher.rb +0 -287
  443. data/lib/lutaml/qea/verification.rb +0 -14
  444. data/lib/lutaml/qea.rb +0 -227
  445. data/lib/lutaml/uml/abstraction.rb +0 -12
  446. data/lib/lutaml/uml/action.rb +0 -17
  447. data/lib/lutaml/uml/activity.rb +0 -12
  448. data/lib/lutaml/uml/actor.rb +0 -12
  449. data/lib/lutaml/uml/association.rb +0 -37
  450. data/lib/lutaml/uml/association_generalization.rb +0 -20
  451. data/lib/lutaml/uml/behavior.rb +0 -12
  452. data/lib/lutaml/uml/cardinality.rb +0 -12
  453. data/lib/lutaml/uml/class.rb +0 -52
  454. data/lib/lutaml/uml/classifier.rb +0 -19
  455. data/lib/lutaml/uml/comment.rb +0 -15
  456. data/lib/lutaml/uml/connector.rb +0 -20
  457. data/lib/lutaml/uml/connector_end.rb +0 -22
  458. data/lib/lutaml/uml/constraint.rb +0 -24
  459. data/lib/lutaml/uml/data_type.rb +0 -56
  460. data/lib/lutaml/uml/dependency.rb +0 -20
  461. data/lib/lutaml/uml/diagram.rb +0 -25
  462. data/lib/lutaml/uml/diagram_link.rb +0 -28
  463. data/lib/lutaml/uml/diagram_object.rb +0 -32
  464. data/lib/lutaml/uml/document.rb +0 -64
  465. data/lib/lutaml/uml/enum.rb +0 -21
  466. data/lib/lutaml/uml/event.rb +0 -12
  467. data/lib/lutaml/uml/fidelity.rb +0 -12
  468. data/lib/lutaml/uml/final_state.rb +0 -12
  469. data/lib/lutaml/uml/fontname.rb +0 -15
  470. data/lib/lutaml/uml/general_attribute.rb +0 -24
  471. data/lib/lutaml/uml/generalization.rb +0 -37
  472. data/lib/lutaml/uml/group.rb +0 -21
  473. data/lib/lutaml/uml/has_attributes.rb +0 -14
  474. data/lib/lutaml/uml/has_members.rb +0 -30
  475. data/lib/lutaml/uml/inheritance_walker.rb +0 -96
  476. data/lib/lutaml/uml/instance.rb +0 -17
  477. data/lib/lutaml/uml/model.rb +0 -15
  478. data/lib/lutaml/uml/model_helpers.rb +0 -104
  479. data/lib/lutaml/uml/namespace.rb +0 -12
  480. data/lib/lutaml/uml/node/attribute.rb +0 -30
  481. data/lib/lutaml/uml/node/base.rb +0 -19
  482. data/lib/lutaml/uml/node/class_node.rb +0 -48
  483. data/lib/lutaml/uml/node/class_relationship.rb +0 -11
  484. data/lib/lutaml/uml/node/document.rb +0 -15
  485. data/lib/lutaml/uml/node/has_name.rb +0 -15
  486. data/lib/lutaml/uml/node/has_type.rb +0 -15
  487. data/lib/lutaml/uml/node/method_argument.rb +0 -12
  488. data/lib/lutaml/uml/node/operation.rb +0 -23
  489. data/lib/lutaml/uml/node/relationship.rb +0 -22
  490. data/lib/lutaml/uml/opaque_behavior.rb +0 -12
  491. data/lib/lutaml/uml/operation.rb +0 -23
  492. data/lib/lutaml/uml/operation_parameter.rb +0 -19
  493. data/lib/lutaml/uml/package.rb +0 -33
  494. data/lib/lutaml/uml/package_path.rb +0 -235
  495. data/lib/lutaml/uml/parsers/attribute.rb +0 -68
  496. data/lib/lutaml/uml/parsers/dsl.rb +0 -415
  497. data/lib/lutaml/uml/parsers/dsl_preprocessor.rb +0 -63
  498. data/lib/lutaml/uml/parsers/dsl_transform.rb +0 -27
  499. data/lib/lutaml/uml/parsers/yaml.rb +0 -22
  500. data/lib/lutaml/uml/port.rb +0 -9
  501. data/lib/lutaml/uml/primitive_type.rb +0 -15
  502. data/lib/lutaml/uml/property.rb +0 -27
  503. data/lib/lutaml/uml/pseudostate.rb +0 -12
  504. data/lib/lutaml/uml/qualified_name.rb +0 -175
  505. data/lib/lutaml/uml/realization.rb +0 -12
  506. data/lib/lutaml/uml/region.rb +0 -12
  507. data/lib/lutaml/uml/state.rb +0 -22
  508. data/lib/lutaml/uml/state_machine.rb +0 -12
  509. data/lib/lutaml/uml/tagged_value.rb +0 -23
  510. data/lib/lutaml/uml/top_element.rb +0 -85
  511. data/lib/lutaml/uml/top_element_attribute.rb +0 -64
  512. data/lib/lutaml/uml/transition.rb +0 -24
  513. data/lib/lutaml/uml/trigger.rb +0 -18
  514. data/lib/lutaml/uml/validation/document_structure_validator.rb +0 -387
  515. data/lib/lutaml/uml/value.rb +0 -37
  516. data/lib/lutaml/uml/vertex.rb +0 -12
  517. data/lib/lutaml/uml.rb +0 -113
  518. data/lib/lutaml/uml_repository/class_lookup_index.rb +0 -39
  519. data/lib/lutaml/uml_repository/error_handler.rb +0 -203
  520. data/lib/lutaml/uml_repository/exporters/base_exporter.rb +0 -61
  521. data/lib/lutaml/uml_repository/exporters/json_exporter.rb +0 -343
  522. data/lib/lutaml/uml_repository/exporters/markdown/class_page_builder.rb +0 -187
  523. data/lib/lutaml/uml_repository/exporters/markdown/formatting.rb +0 -34
  524. data/lib/lutaml/uml_repository/exporters/markdown/index_page_builder.rb +0 -81
  525. data/lib/lutaml/uml_repository/exporters/markdown/link_resolver.rb +0 -40
  526. data/lib/lutaml/uml_repository/exporters/markdown/package_page_builder.rb +0 -107
  527. data/lib/lutaml/uml_repository/exporters/markdown.rb +0 -20
  528. data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +0 -86
  529. data/lib/lutaml/uml_repository/index_builder.rb +0 -210
  530. data/lib/lutaml/uml_repository/index_builders/association_index.rb +0 -155
  531. data/lib/lutaml/uml_repository/index_builders/class_index.rb +0 -113
  532. data/lib/lutaml/uml_repository/index_builders/package_index.rb +0 -62
  533. data/lib/lutaml/uml_repository/index_builders.rb +0 -13
  534. data/lib/lutaml/uml_repository/lazy_repository.rb +0 -236
  535. data/lib/lutaml/uml_repository/package_exporter.rb +0 -334
  536. data/lib/lutaml/uml_repository/package_loader.rb +0 -240
  537. data/lib/lutaml/uml_repository/package_metadata.rb +0 -77
  538. data/lib/lutaml/uml_repository/presenters/association_presenter.rb +0 -79
  539. data/lib/lutaml/uml_repository/presenters/attribute_presenter.rb +0 -94
  540. data/lib/lutaml/uml_repository/presenters/class_presenter.rb +0 -72
  541. data/lib/lutaml/uml_repository/presenters/datatype_presenter.rb +0 -97
  542. data/lib/lutaml/uml_repository/presenters/diagram_presenter.rb +0 -469
  543. data/lib/lutaml/uml_repository/presenters/element_presenter.rb +0 -91
  544. data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +0 -78
  545. data/lib/lutaml/uml_repository/presenters/package_presenter.rb +0 -48
  546. data/lib/lutaml/uml_repository/presenters/presenter_factory.rb +0 -74
  547. data/lib/lutaml/uml_repository/queries/association_query.rb +0 -184
  548. data/lib/lutaml/uml_repository/queries/base_query.rb +0 -45
  549. data/lib/lutaml/uml_repository/queries/class_query.rb +0 -178
  550. data/lib/lutaml/uml_repository/queries/diagram_query.rb +0 -108
  551. data/lib/lutaml/uml_repository/queries/inheritance_query.rb +0 -327
  552. data/lib/lutaml/uml_repository/queries/package_query.rb +0 -230
  553. data/lib/lutaml/uml_repository/queries/search_query.rb +0 -236
  554. data/lib/lutaml/uml_repository/query_dsl/conditions/base_condition.rb +0 -28
  555. data/lib/lutaml/uml_repository/query_dsl/conditions/block_condition.rb +0 -44
  556. data/lib/lutaml/uml_repository/query_dsl/conditions/hash_condition.rb +0 -82
  557. data/lib/lutaml/uml_repository/query_dsl/conditions/package_condition.rb +0 -89
  558. data/lib/lutaml/uml_repository/query_dsl/order.rb +0 -90
  559. data/lib/lutaml/uml_repository/query_dsl/query_builder.rb +0 -290
  560. data/lib/lutaml/uml_repository/repository/deprecated.rb +0 -39
  561. data/lib/lutaml/uml_repository/repository/loader.rb +0 -117
  562. data/lib/lutaml/uml_repository/repository.rb +0 -718
  563. data/lib/lutaml/uml_repository/repository_enhanced.rb +0 -431
  564. data/lib/lutaml/uml_repository/search_result.rb +0 -86
  565. data/lib/lutaml/uml_repository/static_site/configuration.rb +0 -377
  566. data/lib/lutaml/uml_repository/static_site/data_transformer.rb +0 -135
  567. data/lib/lutaml/uml_repository/static_site/generator.rb +0 -120
  568. data/lib/lutaml/uml_repository/static_site/id_generator.rb +0 -120
  569. data/lib/lutaml/uml_repository/static_site/models/spa_association.rb +0 -29
  570. data/lib/lutaml/uml_repository/static_site/models/spa_association_end.rb +0 -25
  571. data/lib/lutaml/uml_repository/static_site/models/spa_attribute.rb +0 -58
  572. data/lib/lutaml/uml_repository/static_site/models/spa_base.rb +0 -12
  573. data/lib/lutaml/uml_repository/static_site/models/spa_cardinality.rb +0 -28
  574. data/lib/lutaml/uml_repository/static_site/models/spa_class.rb +0 -60
  575. data/lib/lutaml/uml_repository/static_site/models/spa_diagram.rb +0 -31
  576. data/lib/lutaml/uml_repository/static_site/models/spa_document.rb +0 -31
  577. data/lib/lutaml/uml_repository/static_site/models/spa_inherited_association.rb +0 -25
  578. data/lib/lutaml/uml_repository/static_site/models/spa_inherited_attribute.rb +0 -25
  579. data/lib/lutaml/uml_repository/static_site/models/spa_literal.rb +0 -19
  580. data/lib/lutaml/uml_repository/static_site/models/spa_metadata.rb +0 -39
  581. data/lib/lutaml/uml_repository/static_site/models/spa_operation.rb +0 -34
  582. data/lib/lutaml/uml_repository/static_site/models/spa_package.rb +0 -37
  583. data/lib/lutaml/uml_repository/static_site/models/spa_package_tree_node.rb +0 -32
  584. data/lib/lutaml/uml_repository/static_site/models/spa_parameter.rb +0 -21
  585. data/lib/lutaml/uml_repository/static_site/models/spa_search_entry.rb +0 -34
  586. data/lib/lutaml/uml_repository/static_site/models/spa_search_index.rb +0 -29
  587. data/lib/lutaml/uml_repository/static_site/models/spa_statistics.rb +0 -25
  588. data/lib/lutaml/uml_repository/static_site/models/spa_tree_class_ref.rb +0 -22
  589. data/lib/lutaml/uml_repository/static_site/models.rb +0 -48
  590. data/lib/lutaml/uml_repository/static_site/output/multi_file_strategy.rb +0 -69
  591. data/lib/lutaml/uml_repository/static_site/output/strategy.rb +0 -36
  592. data/lib/lutaml/uml_repository/static_site/output/vue_inlined_strategy.rb +0 -113
  593. data/lib/lutaml/uml_repository/static_site/output.rb +0 -15
  594. data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +0 -216
  595. data/lib/lutaml/uml_repository/static_site/serializers/association_serializer.rb +0 -70
  596. data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +0 -24
  597. data/lib/lutaml/uml_repository/static_site/serializers/base.rb +0 -66
  598. data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +0 -97
  599. data/lib/lutaml/uml_repository/static_site/serializers/diagram_serializer.rb +0 -59
  600. data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +0 -151
  601. data/lib/lutaml/uml_repository/static_site/serializers/metadata_builder.rb +0 -102
  602. data/lib/lutaml/uml_repository/static_site/serializers/operation_serializer.rb +0 -52
  603. data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +0 -55
  604. data/lib/lutaml/uml_repository/static_site/serializers/package_tree_builder.rb +0 -77
  605. data/lib/lutaml/uml_repository/static_site/serializers.rb +0 -30
  606. data/lib/lutaml/uml_repository/static_site.rb +0 -92
  607. data/lib/lutaml/uml_repository/statistics_calculator.rb +0 -342
  608. data/lib/lutaml/uml_repository/validators/repository_validator.rb +0 -402
  609. data/lib/lutaml/uml_repository/web_ui/app.rb +0 -161
  610. data/lib/lutaml/uml_repository/web_ui/public/app.js +0 -452
  611. data/lib/lutaml/uml_repository/web_ui/public/styles.css +0 -381
  612. data/lib/lutaml/uml_repository/web_ui/views/index.erb +0 -40
  613. data/lib/lutaml/uml_repository.rb +0 -117
  614. data/lib/lutaml/xmi/liquid_drops/association_drop.rb +0 -56
  615. data/lib/lutaml/xmi/liquid_drops/attribute_drop.rb +0 -72
  616. data/lib/lutaml/xmi/liquid_drops/cardinality_drop.rb +0 -35
  617. data/lib/lutaml/xmi/liquid_drops/connector_drop.rb +0 -54
  618. data/lib/lutaml/xmi/liquid_drops/constraint_drop.rb +0 -29
  619. data/lib/lutaml/xmi/liquid_drops/data_type_drop.rb +0 -63
  620. data/lib/lutaml/xmi/liquid_drops/dependency_drop.rb +0 -36
  621. data/lib/lutaml/xmi/liquid_drops/diagram_drop.rb +0 -34
  622. data/lib/lutaml/xmi/liquid_drops/enum_drop.rb +0 -49
  623. data/lib/lutaml/xmi/liquid_drops/enum_owned_literal_drop.rb +0 -25
  624. data/lib/lutaml/xmi/liquid_drops/generalization_attribute_drop.rb +0 -87
  625. data/lib/lutaml/xmi/liquid_drops/generalization_drop.rb +0 -127
  626. data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +0 -191
  627. data/lib/lutaml/xmi/liquid_drops/operation_drop.rb +0 -29
  628. data/lib/lutaml/xmi/liquid_drops/package_drop.rb +0 -108
  629. data/lib/lutaml/xmi/liquid_drops/root_drop.rb +0 -34
  630. data/lib/lutaml/xmi/liquid_drops/source_target_drop.rb +0 -43
  631. data/lib/lutaml/xmi/parsers/xmi_base.rb +0 -301
  632. data/lib/lutaml/xmi/parsers/xmi_class_members.rb +0 -45
  633. data/lib/lutaml/xmi/parsers/xmi_connector.rb +0 -263
  634. data/lib/lutaml/xmi/parsers/xml.rb +0 -62
  635. data/lib/lutaml/xmi/xmi_lookup_service.rb +0 -40
  636. data/lib/lutaml/xmi.rb +0 -47
  637. data/templates/static_site/assets/images/lutaml-full.svg +0 -1
  638. data/templates/static_site/assets/images/lutaml-icon.svg +0 -1
  639. data/templates/static_site/assets/scripts/app.js +0 -45
  640. data/templates/static_site/assets/scripts/core/state.js +0 -446
  641. data/templates/static_site/assets/scripts/core/utils.js +0 -133
  642. data/templates/static_site/assets/scripts/ui/details.js +0 -74
  643. data/templates/static_site/assets/scripts/ui/diagrams.js +0 -345
  644. data/templates/static_site/assets/scripts/ui/search.js +0 -187
  645. data/templates/static_site/assets/scripts/ui/sidebar.js +0 -123
  646. data/templates/static_site/assets/styles/00-variables.css +0 -144
  647. data/templates/static_site/assets/styles/01-reset.css +0 -69
  648. data/templates/static_site/assets/styles/02-base.css +0 -144
  649. data/templates/static_site/assets/styles/03-layout.css +0 -121
  650. data/templates/static_site/assets/styles/04-components.css +0 -905
  651. data/templates/static_site/assets/styles/05-utilities.css +0 -23
  652. data/templates/static_site/assets/styles/06-diagrams.css +0 -74
  653. data/templates/static_site/components/class_details.liquid +0 -328
  654. data/templates/static_site/components/content.liquid +0 -481
  655. data/templates/static_site/components/diagram_list.liquid +0 -52
  656. data/templates/static_site/components/diagram_viewer.liquid +0 -71
  657. data/templates/static_site/components/header.liquid +0 -114
  658. data/templates/static_site/components/package_details.liquid +0 -119
  659. data/templates/static_site/components/sidebar.liquid +0 -76
  660. data/templates/static_site/components/tree_node.liquid +0 -81
  661. data/templates/static_site/multi_file.liquid +0 -49
  662. data/templates/static_site/single_file.liquid +0 -57
@@ -1,402 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Lutaml
4
- module UmlRepository
5
- module Validators
6
- # RepositoryValidator validates the consistency and integrity of a
7
- # UML repository
8
- #
9
- # Performs comprehensive validation checks including:
10
- # - Type reference validation (checking all attribute types exist)
11
- # - Generalization reference validation (checking parent classes exist)
12
- # - Circular inheritance detection
13
- # - Association reference validation
14
- # - Multiplicity validation
15
- #
16
- # @example Validating a repository
17
- # validator = RepositoryValidator.new(document, indexes)
18
- # result = validator.validate
19
- # if result.valid?
20
- # puts "Model is valid"
21
- # else
22
- # result.errors.each { |error| puts "ERROR: #{error}" }
23
- # end
24
- class RepositoryValidator
25
- include Lutaml::Uml::ModelHelpers
26
-
27
- # Primitive types that don't need to be resolved
28
- PRIMITIVE_TYPES = %w[
29
- String Integer Boolean Date DateTime Float Double
30
- Long Short Byte Char Time Decimal
31
- UnlimitedNatural Real
32
- ].freeze
33
-
34
- # @param document [Lutaml::Uml::Document] The UML document
35
- # @param indexes [Hash] The repository indexes
36
- def initialize(document, indexes)
37
- @document = document
38
- @indexes = indexes
39
- @errors = []
40
- @warnings = []
41
- end
42
-
43
- # Validate the repository and return results
44
- #
45
- # @param verbose [Boolean] Collect detailed validation information
46
- # @return [ValidationResult] Validation results with errors and warnings
47
- def validate(verbose: false) # rubocop:disable Metrics/MethodLength
48
- @verbose = verbose
49
- @validation_details = [] if verbose
50
-
51
- check_type_references
52
- check_generalization_references
53
- check_circular_inheritance
54
- check_association_references
55
- check_multiplicities
56
-
57
- ValidationResult.new(
58
- valid: @errors.empty?,
59
- errors: @errors,
60
- warnings: @warnings,
61
- external_references: @external_references || [],
62
- validation_details: @validation_details,
63
- )
64
- end
65
-
66
- private
67
-
68
- # Check that all attribute types reference existing classes or are
69
- # primitives
70
- def check_type_references # rubocop:disable Metrics/CyclomaticComplexity
71
- @external_references = []
72
-
73
- @indexes[:qualified_names].each do |qname, klass|
74
- next unless klass.is_a?(Lutaml::Uml::Class) && klass.attributes
75
-
76
- package_path = extract_package_path(qname, default: "ModelRoot")
77
- class_details = { class_name: qname, attributes: [] } if @verbose
78
- validate_class_attributes(klass, qname, package_path, class_details)
79
-
80
- if @verbose && class_details[:attributes].any?
81
- @validation_details << class_details
82
- end
83
- end
84
- end
85
-
86
- def validate_class_attributes(klass, qname, package_path, class_details)
87
- klass.attributes.each do |attr|
88
- next unless attr.type
89
-
90
- validate_single_attribute(attr, qname, package_path, class_details)
91
- end
92
- end
93
-
94
- def validate_single_attribute(attr, qname, package_path, class_details)
95
- is_primitive = primitive_type?(attr.type)
96
- unless is_primitive
97
- resolved_type = resolve_type_name(attr.type,
98
- package_path)
99
- end
100
- is_valid = is_primitive || !resolved_type.nil?
101
-
102
- if @verbose
103
- add_verbose_detail(class_details, attr, resolved_type, is_valid,
104
- is_primitive)
105
- end
106
- return if is_valid
107
-
108
- record_unresolved_type(attr, qname)
109
- end
110
-
111
- def add_verbose_detail(class_details, attr, resolved_type, is_valid,
112
- is_primitive)
113
- class_details[:attributes] << {
114
- attribute_name: attr.name,
115
- type_value: attr.type,
116
- resolved_to: resolved_type,
117
- valid: is_valid,
118
- is_primitive: is_primitive,
119
- }
120
- end
121
-
122
- def record_unresolved_type(attr, qname)
123
- @external_references << {
124
- class_name: qname,
125
- attribute_name: attr.name,
126
- referenced_type: attr.type,
127
- context: "attribute type",
128
- }
129
- @errors << "Unresolved type reference: '#{attr.type}' in " \
130
- "#{qname}.#{attr.name}"
131
- end
132
-
133
- # Check that all generalization references point to existing classes
134
- def check_generalization_references
135
- @indexes[:inheritance_graph].each do |parent_qname, children|
136
- # Check if parent exists
137
- unless @indexes[:qualified_names].key?(parent_qname)
138
- children.each do |child_qname|
139
- @errors << "Generalization references non-existent parent: " \
140
- "#{parent_qname} from #{child_qname}"
141
- end
142
- end
143
- end
144
- end
145
-
146
- # Detect circular inheritance relationships
147
- def check_circular_inheritance
148
- visited = {}
149
-
150
- @indexes[:inheritance_graph].each_key do |parent_qname|
151
- cycle = find_cycle(parent_qname, visited, [])
152
- if cycle
153
- @errors << "Circular inheritance detected: #{cycle.join(' -> ')}"
154
- end
155
- end
156
- end
157
-
158
- # Check that all association ends reference existing classes
159
- def check_association_references # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
160
- @indexes[:qualified_names].each do |qname, klass|
161
- next unless klass.is_a?(Lutaml::Uml::Class)
162
- next unless klass.associations
163
-
164
- klass.associations.each do |assoc|
165
- # Check member_end references
166
- if assoc.member_end
167
- check_association_end_type(assoc.member_end, qname)
168
- end
169
-
170
- # Check owner_end references
171
- if assoc.owner_end
172
- check_association_end_type(assoc.owner_end, qname)
173
- end
174
- end
175
- end
176
- end
177
-
178
- # Check association end type references
179
- #
180
- # @param ends [Array, Object] Association ends to check
181
- # @param source_qname [String] Source class qualified name
182
- def check_association_end_type(ends, source_qname) # rubocop:disable Metrics/CyclomaticComplexity
183
- ends_array = ends.is_a?(Array) ? ends : [ends]
184
-
185
- ends_array.each do |end_obj|
186
- next unless end_obj.is_a?(Lutaml::Uml::TopElementAttribute)
187
- next unless end_obj.type
188
-
189
- type_name = end_obj.type
190
- type_name = type_name.name if type_name.is_a?(Lutaml::Uml::TopElement)
191
-
192
- next if @indexes[:qualified_names].key?(type_name)
193
-
194
- @warnings << "Association end references potentially " \
195
- "unresolved type: '#{type_name}' from #{source_qname}"
196
- end
197
- end
198
-
199
- # Check multiplicity values are valid
200
- def check_multiplicities # rubocop:disable Metrics/CyclomaticComplexity
201
- @indexes[:qualified_names].each do |qname, klass|
202
- next unless klass.is_a?(Lutaml::Uml::Class)
203
- next unless klass.attributes
204
-
205
- klass.attributes.each do |attr|
206
- next unless attr.cardinality
207
- next unless attr.cardinality
208
-
209
- cardinality = attr.cardinality
210
- check_cardinality_value(cardinality, qname, attr.name)
211
- end
212
- end
213
- end
214
-
215
- # Check a cardinality value is valid
216
- #
217
- # @param cardinality [Object] Cardinality object
218
- # @param class_qname [String] Class qualified name
219
- # @param attr_name [String] Attribute name
220
- def check_cardinality_value(cardinality, class_qname, attr_name) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
221
- min_val = extract_min_value(cardinality)
222
- max_val = extract_max_value(cardinality)
223
-
224
- return unless min_val || max_val
225
-
226
- # Check min is not negative
227
- if min_val.is_a?(Integer) && min_val.negative?
228
- @errors << "Invalid multiplicity: min value #{min_val} is " \
229
- "negative in #{class_qname}.#{attr_name}"
230
- end
231
-
232
- # Check max is not less than min (unless it's unlimited)
233
- if min_val && max_val.is_a?(Integer) && (max_val < min_val)
234
- @errors << "Invalid multiplicity: max (#{max_val}) < min " \
235
- "(#{min_val}) in #{class_qname}.#{attr_name}"
236
- end
237
- end
238
-
239
- # Extract min value from cardinality
240
- #
241
- # @param cardinality [Object] Cardinality object
242
- # @return [Integer, nil] Min value
243
- def extract_min_value(cardinality)
244
- return nil unless cardinality.min
245
-
246
- min_val = cardinality.min
247
- return nil unless min_val
248
-
249
- min_val.is_a?(Hash) ? min_val["value"] : min_val
250
- end
251
-
252
- # Extract max value from cardinality
253
- #
254
- # @param cardinality [Object] Cardinality object
255
- # @return [Integer, String, nil] Max value (could be "*" for unlimited)
256
- def extract_max_value(cardinality)
257
- return nil unless cardinality.max
258
-
259
- max_val = cardinality.max
260
- return nil unless max_val
261
-
262
- max_val.is_a?(Hash) ? max_val["value"] : max_val
263
- end
264
-
265
- # Find a cycle in the inheritance graph starting from a node
266
- #
267
- # @param qname [String] Starting qualified name
268
- # @param visited [Hash] Visited nodes state
269
- # @param path [Array] Current path
270
- # @return [Array, nil] Cycle path if found, nil otherwise
271
- def find_cycle(qname, visited, path) # rubocop:disable Metrics/MethodLength
272
- return nil if visited[qname] == :permanent
273
- return path + [qname] if path.include?(qname)
274
-
275
- visited[qname] = :temporary
276
- path.push(qname)
277
-
278
- children = @indexes[:inheritance_graph][qname] || []
279
- children.each do |child_qname|
280
- cycle = find_cycle(child_qname, visited, path)
281
- return cycle if cycle
282
- end
283
-
284
- path.pop
285
- visited[qname] = :permanent
286
- nil
287
- end
288
-
289
- # Resolve a type name to its fully qualified name
290
- #
291
- # @param type_name [String] Type name to resolve
292
- # @param current_package_path [String] Current package context
293
- # @return [String, nil] Resolved qualified name or nil if not found
294
- def resolve_type_name(type_name, current_package_path)
295
- # Already qualified and exists?
296
- return type_name if @indexes[:qualified_names].key?(type_name)
297
-
298
- # Try in current package
299
- local_qname = "#{current_package_path}::#{type_name}"
300
- return local_qname if @indexes[:qualified_names].key?(local_qname)
301
-
302
- # Try to find in all qualified names (simple name match)
303
- @indexes[:qualified_names].each_key do |qname|
304
- return qname if qname.end_with?("::#{type_name}")
305
- end
306
-
307
- nil
308
- end
309
-
310
- # Check if a type is a primitive type
311
- #
312
- # @param type [String] Type name
313
- # @return [Boolean] True if primitive type
314
- def primitive_type?(type)
315
- PRIMITIVE_TYPES.include?(type)
316
- end
317
- end
318
-
319
- # ValidationResult encapsulates the results of repository validation
320
- #
321
- # @example Checking validation results
322
- # result = validator.validate
323
- # puts "Valid: #{result.valid?}"
324
- # puts "Errors: #{result.errors.size}"
325
- # puts "Warnings: #{result.warnings.size}"
326
- # puts "External refs: #{result.external_references.size}"
327
- class ValidationResult
328
- # @return [Array<String>] Validation errors
329
- attr_reader :errors
330
-
331
- # @return [Array<String>] Validation warnings
332
- attr_reader :warnings
333
-
334
- # @return [Array<Hash>] External type references
335
- attr_reader :external_references
336
-
337
- # @return [Array<Hash>] Detailed validation information
338
- attr_reader :validation_details
339
-
340
- # @param valid [Boolean] Whether validation passed
341
- # @param errors [Array<String>] Validation errors
342
- # @param warnings [Array<String>] Validation warnings
343
- # @param external_references [Array<Hash>] External type references
344
- # @param validation_details [Array<Hash>, nil] Detailed validation
345
- # information
346
- def initialize(
347
- valid:, errors:, warnings:, external_references: [],
348
- validation_details: nil
349
- )
350
- @valid = valid
351
- @errors = errors.freeze
352
- @warnings = warnings.freeze
353
- @external_references = external_references.freeze
354
- @validation_details = validation_details&.freeze
355
- freeze
356
- end
357
-
358
- # Check if validation passed (no errors)
359
- #
360
- # @return [Boolean] True if no errors
361
- def valid?
362
- @valid
363
- end
364
-
365
- # Check if there are any warnings
366
- #
367
- # @return [Boolean] True if warnings present
368
- def has_warnings?
369
- !@warnings.empty?
370
- end
371
-
372
- # Check if there are any external references
373
- #
374
- # @return [Boolean] True if external references found
375
- def has_external_references?
376
- !@external_references.empty?
377
- end
378
-
379
- # Get total issue count (errors + warnings)
380
- #
381
- # @return [Integer] Total number of issues
382
- def issue_count
383
- @errors.size + @warnings.size
384
- end
385
-
386
- # Get a summary of validation results
387
- #
388
- # @return [String] Summary string
389
- def summary
390
- if valid? && !has_warnings?
391
- "Validation passed: no issues found"
392
- elsif valid?
393
- "Validation passed with #{@warnings.size} warning(s)"
394
- else
395
- "Validation failed with #{@errors.size} error(s) and " \
396
- "#{@warnings.size} warning(s)"
397
- end
398
- end
399
- end
400
- end
401
- end
402
- end
@@ -1,161 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "sinatra/base"
4
- require "json"
5
- require "liquid"
6
-
7
- module Lutaml
8
- module Xmi
9
- module WebUi
10
- # Sinatra web application for browsing UML models.
11
- #
12
- # Serves the modern SPA interface with JSON API endpoints and lunr.js
13
- # search.
14
- # Uses shared Liquid templates with the static site generator.
15
- #
16
- # @example Starting the server
17
- # Lutaml::Xmi::WebUi::App.serve("model.lur", port: 3000)
18
- class App < Sinatra::Base
19
- enable :logging
20
-
21
- # Serve the SPA (using shared Liquid template)
22
- get "/" do # rubocop:disable Metrics/BlockLength
23
- content_type :html
24
-
25
- # Use the same multi_file.liquid template as static generator
26
- # but with apiMode: true to use JSON endpoints
27
- template_path = File.expand_path(
28
- File.join(
29
- __dir__,
30
- "..", "..", "..", "..", "templates", "static_site"
31
- ),
32
- )
33
-
34
- Liquid::Template.file_system = Liquid::LocalFileSystem.new(template_path)
35
-
36
- template_content = File.read(File.join(template_path,
37
- "multi_file.liquid"))
38
- template = Liquid::Template.parse(template_content)
39
-
40
- context = {
41
- "config" => {
42
- "mode" => "multi_file",
43
- "title" => "UML Repository Explorer (Live)",
44
- "description" => "Live browser for UML models",
45
- "apiMode" => true, # KEY: Use API endpoints instead of static JSON
46
- "theme" => "light",
47
- },
48
- "buildInfo" => {
49
- "timestamp" => Time.now.utc.iso8601,
50
- "generator" => "LutaML Live Web UI v2.0",
51
- },
52
- }
53
-
54
- template.render(context)
55
- end
56
-
57
- # API: Full data model (replaces data/model.json in static mode)
58
- get "/api/data" do
59
- content_type :json
60
-
61
- # Use shared DataTransformer
62
- transformer = UmlRepository::StaticSite::DataTransformer.new(repository)
63
- transformer.transform.to_json
64
- end
65
-
66
- # API: Search index (replaces data/search.json in static mode)
67
- get "/api/search/index" do
68
- content_type :json
69
-
70
- # Use shared SearchIndexBuilder
71
- builder = UmlRepository::StaticSite::SearchIndexBuilder.new(repository)
72
- builder.build.to_json
73
- end
74
-
75
- # API: Package details (on-demand, optional optimization)
76
- get "/api/packages/:id" do
77
- content_type :json
78
- requested_id = params[:id]
79
-
80
- id_gen = UmlRepository::StaticSite::IdGenerator.new
81
-
82
- # Search for package by matching generated ID
83
- found_package = nil
84
- repository.indexes[:package_paths].each_value do |package|
85
- next unless package.is_a?(Lutaml::Uml::Package)
86
-
87
- if id_gen.package_id(package) == requested_id
88
- found_package = package
89
- break
90
- end
91
- end
92
-
93
- unless found_package
94
- halt 404, { error: "Package not found: #{requested_id}" }.to_json
95
- end
96
-
97
- # Build package response
98
- {
99
- id: requested_id,
100
- name: found_package.name,
101
- xmi_id: found_package.xmi_id,
102
- }.to_json
103
- end
104
-
105
- # API: Class details (on-demand, optional optimization)
106
- get "/api/classes/:id" do
107
- content_type :json
108
- params[:id]
109
-
110
- # Find class by generated ID
111
- # This would require reverse lookup from ID to class
112
- # For now, use the full data endpoint
113
- halt 501, { error: "On-demand class loading not yet implemented. " \
114
- "Use /api/data" }.to_json
115
- end
116
-
117
- # Start the web server
118
- def self.serve(lur_path, port: 3000, host: "localhost") # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
119
- repo = if File.extname(lur_path) == ".lur"
120
- UmlRepository::Repository.from_package(lur_path)
121
- else
122
- UmlRepository::Repository.from_xmi(lur_path)
123
- end
124
-
125
- set :repository, repo
126
- set :port, port
127
- set :bind, host
128
-
129
- puts ""
130
- puts "╔═══════════════════════════════════════════════════════════╗"
131
- puts "║ LutaML UML Browser - Web Server ║"
132
- puts "╚═══════════════════════════════════════════════════════════╝"
133
- puts ""
134
- puts " Loading: #{File.basename(lur_path)}"
135
- puts " Server: http://#{host}:#{port}"
136
- puts ""
137
- puts " Features:"
138
- puts " • Modern SPA interface"
139
- puts " • Live data via JSON API"
140
- puts " • Full-text search with lunr.js"
141
- puts " • Dark/light themes"
142
- puts " • Responsive design"
143
- puts ""
144
- puts " Press Ctrl+C to stop"
145
- puts ""
146
- puts "─" * 60
147
- puts ""
148
-
149
- run!
150
- end
151
-
152
- private
153
-
154
- # Get the repository from settings
155
- def repository
156
- settings.repository
157
- end
158
- end
159
- end
160
- end
161
- end