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.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +8 -1
- data/CLAUDE.md +26 -19
- data/Gemfile +14 -10
- data/Rakefile +6 -4
- data/lib/lutaml/version.rb +1 -1
- data/lib/lutaml.rb +3 -9
- data/lutaml.gemspec +2 -18
- metadata +5 -892
- data/Makefile +0 -2
- data/config/diagram_styles.yml +0 -200
- data/config/model_transformations.yml +0 -266
- data/config/package_metadata.example.yml +0 -58
- data/config/qea_schema.yml +0 -1024
- data/config/static_site.yml +0 -166
- data/examples/UML_EA.DTD +0 -6856
- data/examples/lur/20251010_current_plateau_v5.1.lur +0 -0
- data/examples/lur/basic.lur +0 -0
- data/examples/lur/test-output.lur +0 -0
- data/examples/lur/test.lur +0 -0
- data/examples/lur_basic_usage.rb +0 -220
- data/examples/lur_cli_workflow.rb +0 -262
- data/examples/lur_statistics.rb +0 -325
- data/examples/qea/20251010_current_plateau_v5.1.qea +0 -0
- data/examples/qea/ArcGISWorkspace_template.qea +0 -0
- data/examples/qea/README_qea_parser.adoc +0 -230
- data/examples/qea/UmlModel_template.qea +0 -0
- data/examples/qea/basic.qea +0 -0
- data/examples/qea/simple.qea +0 -0
- data/examples/qea/simple_example.qea +0 -0
- data/examples/qea/test.qea +0 -0
- data/examples/xmi/20251010_current_plateau_v5.1.xmi +0 -118121
- data/examples/xmi/ArcGISWorkspace_template.xmi +0 -1467
- data/examples/xmi/Images/EAID_0016F797_D055_4717_AF1A_606413D0A166.svg +0 -158
- data/examples/xmi/Images/EAID_00C5C772_5A03_434f_BF30_AC37542A1AAC.svg +0 -659
- data/examples/xmi/Images/EAID_0114FD24_9E58_4664_98CD_71305B59AD11.svg +0 -411
- data/examples/xmi/Images/EAID_01661E1B_31B6_4167_BCCF_A00678FB4EA2.svg +0 -102
- data/examples/xmi/Images/EAID_039FE004_5408_4fc0_89AA_EB319E4F61C7.svg +0 -169
- data/examples/xmi/Images/EAID_04EE9625_17A0_4721_BC71_21756DB21D06.svg +0 -403
- data/examples/xmi/Images/EAID_05FF9417_1619_4170_B0C9_55AA6B988EF1.svg +0 -175
- data/examples/xmi/Images/EAID_09853FB2_AF8A_432f_94C5_6C47461BD937.svg +0 -360
- data/examples/xmi/Images/EAID_09927B7F_A657_4819_99E5_AC9DC99227D9.svg +0 -195
- data/examples/xmi/Images/EAID_09AF6B8A_557C_43bc_BBB0_47C1E9401EF3.svg +0 -218
- data/examples/xmi/Images/EAID_0BE81AC5_031B_4973_A9A0_223CCD92BAA1.svg +0 -471
- data/examples/xmi/Images/EAID_0EDEA6EF_4DC8_4979_BB80_28B1B9EBD1D4.svg +0 -56
- data/examples/xmi/Images/EAID_0F413534_6AD2_48bc_B4AF_8699D530D91D.svg +0 -262
- data/examples/xmi/Images/EAID_1321F39B_AD67_47b5_B5C3_3A42BBFCBDF9.svg +0 -286
- data/examples/xmi/Images/EAID_13E09C71_99E7_40b4_B72D_48AF6379BC2E.svg +0 -164
- data/examples/xmi/Images/EAID_144955D8_CB4E_4b59_BB0C_E549F7F84943.svg +0 -66
- data/examples/xmi/Images/EAID_14E9F5FD_F6CD_4f48_B1CD_F5A40C6D8E83.svg +0 -95
- data/examples/xmi/Images/EAID_157826AA_96A7_4278_89A6_94BD0F31409A.svg +0 -63
- data/examples/xmi/Images/EAID_159E9DA0_7A54_4817_B72A_401C750F675D.svg +0 -306
- data/examples/xmi/Images/EAID_17BC8309_8051_492b_BE87_61CCFE83DB16.svg +0 -45
- data/examples/xmi/Images/EAID_1A10EB6D_E2E5_42a6_A31E_B293D93FD07E.svg +0 -193
- data/examples/xmi/Images/EAID_1A290AFD_CE96_46a2_8351_A986D77CC727.svg +0 -444
- data/examples/xmi/Images/EAID_1B2D9309_C66B_492a_995C_95B2B02E0D7C.svg +0 -168
- data/examples/xmi/Images/EAID_1DE6B973_CE8A_416f_909B_54CEA1E5944E.svg +0 -10
- data/examples/xmi/Images/EAID_204F4ACC_2230_4c8d_9861_EF5A6844B712.svg +0 -60
- data/examples/xmi/Images/EAID_227300E2_4F4B_4955_83B9_FA626CE8680B.svg +0 -188
- data/examples/xmi/Images/EAID_22C24D4C_4894_480a_B113_0CB034CB59E9.svg +0 -426
- data/examples/xmi/Images/EAID_234BC4F5_8100_4969_BDCB_A24E0E641F23.svg +0 -169
- data/examples/xmi/Images/EAID_24446BFC_9FEB_4935_8970_65A4C562A93F.svg +0 -277
- data/examples/xmi/Images/EAID_24E8A45C_C99F_49b7_860A_9CF65FF76C76.svg +0 -575
- data/examples/xmi/Images/EAID_272F3181_4300_48b7_98A0_A8CFD12B1A72.svg +0 -255
- data/examples/xmi/Images/EAID_292E0D94_392C_4da6_A0B5_841501FAE50A.svg +0 -183
- data/examples/xmi/Images/EAID_29DD0967_ADAB_4abb_99C5_544821F5E7DA.svg +0 -10
- data/examples/xmi/Images/EAID_2A339928_E5EF_4ed2_9E5D_CC2CA5CF248B.svg +0 -310
- data/examples/xmi/Images/EAID_2A5E0832_06BE_4381_85D4_9B00E4F95575.svg +0 -155
- data/examples/xmi/Images/EAID_2AAB709F_EFCE_496f_8AFE_92809D66A0A9.svg +0 -81
- data/examples/xmi/Images/EAID_2C8DD882_8DEA_4065_89F8_DDA796AA0C85.svg +0 -520
- data/examples/xmi/Images/EAID_2E98EA19_37D8_4b70_BDCE_CFEE4FA800B0.svg +0 -173
- data/examples/xmi/Images/EAID_30D62231_110F_44e8_9C06_6FCDCBA53A09.svg +0 -722
- data/examples/xmi/Images/EAID_3206D3FD_1FC4_41c7_8D00_36DB908E9319.svg +0 -181
- data/examples/xmi/Images/EAID_3452CC53_9ACB_44eb_9C9D_B90CF862F284.svg +0 -92
- data/examples/xmi/Images/EAID_348EE46E_ABD9_40b0_82A1_0285E75BDC52.svg +0 -187
- data/examples/xmi/Images/EAID_34FF671B_CFDC_47ad_91DF_ECA6D8358180.svg +0 -217
- data/examples/xmi/Images/EAID_359DD694_0100_4bdf_AD5F_712D97E9C69B.svg +0 -157
- data/examples/xmi/Images/EAID_35DE714C_49A8_490e_913A_56F39EF317F9.svg +0 -180
- data/examples/xmi/Images/EAID_360C79F1_8EDF_41db_A069_DECDC55625BC.svg +0 -31
- data/examples/xmi/Images/EAID_36913C58_FF35_4ba2_A04B_9A4824E24609.svg +0 -166
- data/examples/xmi/Images/EAID_372F7F7B_57ED_469a_A640_70DB578B3C56.svg +0 -361
- data/examples/xmi/Images/EAID_37AC19B9_8433_4fee_A326_763170D54D06.svg +0 -32
- data/examples/xmi/Images/EAID_38170608_32B5_4a6f_A68D_A0D7C0C9D019.svg +0 -234
- data/examples/xmi/Images/EAID_3A77A5D0_4E1B_4116_8AAD_407FC422B47F.svg +0 -183
- data/examples/xmi/Images/EAID_3B8BD087_1683_46b1_8D0D_6F839C46C578.svg +0 -42
- data/examples/xmi/Images/EAID_3DC20801_AE8B_4e76_B08C_F574E8A90E13.svg +0 -192
- data/examples/xmi/Images/EAID_3DE28C70_C6D4_406c_B49F_EEF52148C8C1.svg +0 -124
- data/examples/xmi/Images/EAID_458E093C_BA2B_4292_BEC4_37511C163DDC.svg +0 -140
- data/examples/xmi/Images/EAID_45F9B1F7_E568_47c9_B229_953BC2E707E4.svg +0 -266
- data/examples/xmi/Images/EAID_46B3041A_8C23_46e6_8E14_ADE7012274C5.svg +0 -80
- data/examples/xmi/Images/EAID_47E4600F_CEC9_4245_9BF5_EE38007A9DDB.svg +0 -584
- data/examples/xmi/Images/EAID_4881CEEE_792C_4cb0_BEA7_54333B643D0A.svg +0 -155
- data/examples/xmi/Images/EAID_48D364F0_DCA4_41e8_B4D4_509B3023B969.svg +0 -17
- data/examples/xmi/Images/EAID_4DBDAB9E_4C1C_4cb1_A767_06BD743A50A7.svg +0 -78
- data/examples/xmi/Images/EAID_4EB75007_B31D_4f2c_8855_7E9D3A3B17F4.svg +0 -454
- data/examples/xmi/Images/EAID_4F421236_FCF3_4aae_B22A_C7E6A5EFBAC7.svg +0 -81
- data/examples/xmi/Images/EAID_4FC1D352_2102_4b73_BCB0_1410B29C6BD7.svg +0 -379
- data/examples/xmi/Images/EAID_4FE346EA_01E1_4b30_8BE6_BB32EA191E47.svg +0 -126
- data/examples/xmi/Images/EAID_5038EEE3_7DD0_4cca_9829_364E044D37E8.svg +0 -199
- data/examples/xmi/Images/EAID_508A37DC_9378_4f5a_BD96_48F4D24E03A5.svg +0 -162
- data/examples/xmi/Images/EAID_516DA1A2_F0EC_415c_9664_E4CA54E7F05C.svg +0 -136
- data/examples/xmi/Images/EAID_52A1DBD3_D3DA_4b6d_8F96_FC6F39F64242.svg +0 -161
- data/examples/xmi/Images/EAID_575E87BA_32E9_4a84_AA4E_0EFDFC5D4C07.svg +0 -71
- data/examples/xmi/Images/EAID_57E0F1A0_6C72_47ef_B922_B806F9A875E8.svg +0 -209
- data/examples/xmi/Images/EAID_5957C373_3FC1_482f_8F35_D809153A17F5.svg +0 -123
- data/examples/xmi/Images/EAID_59A66AE2_412C_48a6_BFC7_EA56CF11D269.svg +0 -218
- data/examples/xmi/Images/EAID_5A43833E_680B_4a90_8931_0C902304E029.svg +0 -236
- data/examples/xmi/Images/EAID_5D6DB5A0_5047_4bac_9E60_69904A60B56D.svg +0 -353
- data/examples/xmi/Images/EAID_5DA1E7A7_8E59_4803_A831_E9F3EC27328F.svg +0 -242
- data/examples/xmi/Images/EAID_5E2C1E2A_82A8_47f4_B2ED_1398D72BFCFD.svg +0 -246
- data/examples/xmi/Images/EAID_6052620C_4BD5_49f6_A21C_AD7E6DCA2795.svg +0 -290
- data/examples/xmi/Images/EAID_6481E2CC_35A6_43b0_88D4_10A667A2BC2D.svg +0 -60
- data/examples/xmi/Images/EAID_660C7D03_A26C_4977_A7BA_9D0A773DA811.svg +0 -318
- data/examples/xmi/Images/EAID_671F3C3D_35B6_4514_B5B6_DD7E84925493.svg +0 -24
- data/examples/xmi/Images/EAID_676B9C9A_D85F_4d2f_A46B_73F02090DC87.svg +0 -127
- data/examples/xmi/Images/EAID_6797FEFA_5801_48e4_8B9C_3C824C0E165D.svg +0 -412
- data/examples/xmi/Images/EAID_6807F4EE_18EF_4e7e_ACCF_D5BD323AFDE9.svg +0 -130
- data/examples/xmi/Images/EAID_69E81E34_CF28_4c7f_A48F_5941BA85CEE3.svg +0 -96
- data/examples/xmi/Images/EAID_6A3C55E8_3C3C_4f3a_8AAC_0299C5B23070.svg +0 -10
- data/examples/xmi/Images/EAID_6BAC333E_E2C2_42c7_8DDF_6B4FA0FFC03B.svg +0 -143
- data/examples/xmi/Images/EAID_6D0349D5_3F1B_4b28_82D2_910743DEB5E5.svg +0 -114
- data/examples/xmi/Images/EAID_6E95B74E_8A09_4698_9E9E_23BCFD2CE194.svg +0 -37
- data/examples/xmi/Images/EAID_70C77F92_5614_4b22_8C8E_67859F59D8FD.svg +0 -254
- data/examples/xmi/Images/EAID_71F9216B_E7A7_4083_B08E_6C71B57F3A1F.svg +0 -187
- data/examples/xmi/Images/EAID_73025C5A_08FC_47ff_AB2F_C7F79CF54B41.svg +0 -145
- data/examples/xmi/Images/EAID_74C974B6_6D07_425d_B7AC_C8899E3B4967.svg +0 -76
- data/examples/xmi/Images/EAID_7504FCD2_524C_4e7d_BAE4_4E58A8A8A12C.svg +0 -196
- data/examples/xmi/Images/EAID_78030266_3603_4747_9D75_03D16614BE7D.svg +0 -35
- data/examples/xmi/Images/EAID_785226C1_12B1_4104_A4C1_F19B70B9FB71.svg +0 -348
- data/examples/xmi/Images/EAID_7854470F_26B8_4d3c_AFDF_C05BCE6ED0CD.svg +0 -72
- data/examples/xmi/Images/EAID_794F4A8F_18CA_4e9f_8477_A6F0E5ED22D4.svg +0 -187
- data/examples/xmi/Images/EAID_7A24839E_C8AE_424d_B7D2_6DA16DC813E7.svg +0 -114
- data/examples/xmi/Images/EAID_7A3649FD_E960_4ae6_B9B1_A9001C066AE7.svg +0 -181
- data/examples/xmi/Images/EAID_7B2C6765_AB68_439a_87F3_DAC323CB2AF5.svg +0 -196
- data/examples/xmi/Images/EAID_7C44AC09_27C1_47b3_9A85_88EC71C081FF.svg +0 -55
- data/examples/xmi/Images/EAID_7CE102CA_97C1_4cac_BD3B_0500D3712D2A.svg +0 -195
- data/examples/xmi/Images/EAID_7D960BD8_65D8_4934_9C11_4EF860DD8FBA.svg +0 -90
- data/examples/xmi/Images/EAID_80939C98_A456_48c3_BCEA_4B72851F2DF6.svg +0 -174
- data/examples/xmi/Images/EAID_812FE862_76ED_44f0_B678_7A4601B395CF.svg +0 -142
- data/examples/xmi/Images/EAID_81B76F5B_9D64_4bbf_8AC8_34234FB87533.svg +0 -740
- data/examples/xmi/Images/EAID_84352F1A_195B_411b_9552_5BFC40BF90B5.svg +0 -105
- data/examples/xmi/Images/EAID_846DD800_139C_4d47_A1DF_3FB1AC5D130F.svg +0 -554
- data/examples/xmi/Images/EAID_84A9C65B_FD6D_4bb5_818F_E8C35FF5BCD1.svg +0 -228
- data/examples/xmi/Images/EAID_853674F5_7DC9_4aae_809B_5728098B5D5B.svg +0 -154
- data/examples/xmi/Images/EAID_860CBBFB_2F27_408f_9144_751F9D1F487F.svg +0 -273
- data/examples/xmi/Images/EAID_87476527_7B9B_4b92_967E_3D38365470CA.svg +0 -239
- data/examples/xmi/Images/EAID_87DAE930_5069_4c58_AC65_4B0B2C0F32C8.svg +0 -10
- data/examples/xmi/Images/EAID_88AF6BD7_BC34_406f_BB59_47CFAB4A7D5D.svg +0 -116
- data/examples/xmi/Images/EAID_88D0CB44_20D0_44fc_A6E3_B663332EF401.svg +0 -200
- data/examples/xmi/Images/EAID_8BB1CA0C_C003_4678_973B_A1C3308E021D.svg +0 -136
- data/examples/xmi/Images/EAID_8DAB169F_D189_4320_A0F5_4443E3297F0E.svg +0 -181
- data/examples/xmi/Images/EAID_8FD488EF_BAAB_40ec_A7ED_F7CC831D546E.svg +0 -324
- data/examples/xmi/Images/EAID_90BCA409_BB45_42c5_AFA5_45FE3D995904.svg +0 -342
- data/examples/xmi/Images/EAID_926AFE38_01FA_469e_B6AA_ED5F4D62B66F.svg +0 -105
- data/examples/xmi/Images/EAID_92AB0FD0_B0FB_4ceb_8EAE_66B6600D31D7.svg +0 -681
- data/examples/xmi/Images/EAID_92C43670_3057_47f1_A576_C60843FF3D26.svg +0 -136
- data/examples/xmi/Images/EAID_93F63576_BE01_4cd8_8A91_C674FF77FC3D.svg +0 -718
- data/examples/xmi/Images/EAID_9400D9BC_05A5_41fc_83F7_02E5C67F9718.svg +0 -487
- data/examples/xmi/Images/EAID_95246DCF_1C09_4a16_9512_98000F56B3D8.svg +0 -292
- data/examples/xmi/Images/EAID_9994BF62_51E2_42cd_BB35_16C537B6718A.svg +0 -715
- data/examples/xmi/Images/EAID_9AAD6C21_B1E7_4472_B64A_FB5E3569D970.svg +0 -116
- data/examples/xmi/Images/EAID_9BD7189A_877B_4ca9_B42C_817DEF144FB2.svg +0 -284
- data/examples/xmi/Images/EAID_9DA6C553_94FC_4204_83AD_ECC4B45A53EF.svg +0 -159
- data/examples/xmi/Images/EAID_9EE6A41B_5FAA_4c89_B98F_732059778630.svg +0 -10
- data/examples/xmi/Images/EAID_9F1A4B54_46F6_435c_9529_E43E54CF6050.svg +0 -172
- data/examples/xmi/Images/EAID_9FE1EA7B_4CEF_4976_A281_93A94315BD84.svg +0 -153
- data/examples/xmi/Images/EAID_A0695647_6172_4262_8C30_67441399609C.svg +0 -290
- data/examples/xmi/Images/EAID_A081C63E_D6F2_41a7_A99C_307836754AFA.svg +0 -149
- data/examples/xmi/Images/EAID_A24E2778_5AD9_44f2_AB8F_5CD3913477D6.svg +0 -194
- data/examples/xmi/Images/EAID_A264F089_F9B3_406c_A3A8_FF34903797D3.svg +0 -143
- data/examples/xmi/Images/EAID_A282E5D1_2A13_4e7f_BC76_5D086DD4A577.svg +0 -357
- data/examples/xmi/Images/EAID_A3BCE1D6_9DB5_4272_A020_4C0E194B99CC.svg +0 -171
- data/examples/xmi/Images/EAID_A56E3818_D1B8_4b63_B69E_FBAC4A8AF482.svg +0 -218
- data/examples/xmi/Images/EAID_A57215D5_75C5_4532_BCF4_264A77CD62F1.svg +0 -204
- data/examples/xmi/Images/EAID_A59065AF_9669_486c_9582_9693177CFC7F.svg +0 -263
- data/examples/xmi/Images/EAID_A759374D_589A_488c_99EF_537ACB9B1FF9.svg +0 -398
- data/examples/xmi/Images/EAID_A7B25F46_F18A_4373_B16D_8C6AC0B868B0.svg +0 -174
- data/examples/xmi/Images/EAID_A9FE9E6F_A5F4_47e5_A6BA_26E22C7346B6.svg +0 -310
- data/examples/xmi/Images/EAID_AA62CDEB_55EC_498d_B326_4AA2C9AF6A05.svg +0 -144
- data/examples/xmi/Images/EAID_AAF52AF6_F7F9_4005_AE46_8920847BEA03.svg +0 -144
- data/examples/xmi/Images/EAID_AB281AC1_7CB8_404a_8124_34343DDD84E2.svg +0 -198
- data/examples/xmi/Images/EAID_AB7F1FDF_A66B_42a1_B8A3_7F594BAAD508.svg +0 -143
- data/examples/xmi/Images/EAID_AC2191E3_76E3_40b2_9E21_0E0B9B5277D2.svg +0 -114
- data/examples/xmi/Images/EAID_AD451676_A7C8_4c6a_A925_A9B9CA344142.svg +0 -339
- data/examples/xmi/Images/EAID_ADBA40A1_9375_4c1b_9938_0990612EB615.svg +0 -429
- data/examples/xmi/Images/EAID_ADC8773C_1B27_48ac_BAC1_14C1C919FAF6.svg +0 -245
- data/examples/xmi/Images/EAID_AE0718DF_AF69_4ea1_A099_E20028FE40A1.svg +0 -173
- data/examples/xmi/Images/EAID_B0DDB85D_A00C_4a7f_8C06_CCA15E5E4FE5.svg +0 -31
- data/examples/xmi/Images/EAID_B27ED282_D5E5_4f33_8AC1_62802F9E0B35.svg +0 -256
- data/examples/xmi/Images/EAID_B3AFECCB_17DD_44d6_8A44_2C38D9A64C0B.svg +0 -95
- data/examples/xmi/Images/EAID_B3B6C5B1_278E_4714_8244_B6C28B66AB50.svg +0 -176
- data/examples/xmi/Images/EAID_B53E76CD_A0F2_4e2f_B3AB_796D85964EF2.svg +0 -179
- data/examples/xmi/Images/EAID_B55D6E67_0BDD_4163_B359_11A6FBA89C74.svg +0 -207
- data/examples/xmi/Images/EAID_B58D1A53_E860_41a3_8352_11C274093E83.svg +0 -189
- data/examples/xmi/Images/EAID_B62C02B3_69DB_49e9_8089_4EE398BDE666.svg +0 -165
- data/examples/xmi/Images/EAID_BC008774_B539_4150_8174_B675989053D0.svg +0 -22
- data/examples/xmi/Images/EAID_BC1F7E00_082D_4a26_922B_3967A8D66859.svg +0 -266
- data/examples/xmi/Images/EAID_BDA613D8_402A_475a_AA15_683D88FD3D23.svg +0 -183
- data/examples/xmi/Images/EAID_C028B286_4C85_47d8_B6D5_80B28F556E82.svg +0 -303
- data/examples/xmi/Images/EAID_C173A6F4_1D1B_400e_AD8C_64FFF7CD5BE5.svg +0 -178
- data/examples/xmi/Images/EAID_C1834072_CADC_4ce4_B0FC_8284AE5CF4A4.svg +0 -158
- data/examples/xmi/Images/EAID_C1EC985B_5CBD_4e91_8661_EB4EF23781D9.svg +0 -286
- data/examples/xmi/Images/EAID_C31C1314_B679_4413_B8FE_A2CD584FC128.svg +0 -305
- data/examples/xmi/Images/EAID_C37CFBD6_69BA_42fb_9AC7_2D329D931BCF.svg +0 -171
- data/examples/xmi/Images/EAID_C857C934_306F_463a_87D5_257CB225ECFE.svg +0 -174
- data/examples/xmi/Images/EAID_C96797DE_2238_42d3_896A_9F92500270ED.svg +0 -180
- data/examples/xmi/Images/EAID_C96CBC24_B20E_459a_8F9D_75B61CDCB89F.svg +0 -656
- data/examples/xmi/Images/EAID_CACB523D_56A5_4f05_B3C2_51BB18F380FD.svg +0 -158
- data/examples/xmi/Images/EAID_CB34B578_101B_48b4_9271_214FFEA6A83A.svg +0 -409
- data/examples/xmi/Images/EAID_CBBD6CF4_0A1E_4406_9930_89DE43527910.svg +0 -361
- data/examples/xmi/Images/EAID_CC06A828_3750_472f_8DB2_C2E0863FCE17.svg +0 -96
- data/examples/xmi/Images/EAID_CD5CF053_1772_4a0f_962D_B17054D8EEAA.svg +0 -173
- data/examples/xmi/Images/EAID_CE440B5A_9534_4c75_9BA5_50862BB396C2.svg +0 -97
- data/examples/xmi/Images/EAID_CE4734FC_7986_4b3a_807F_A5B2C7EDE9E4.svg +0 -193
- data/examples/xmi/Images/EAID_D14AA320_9D41_4366_8739_9C2C21F96AE1.svg +0 -32
- data/examples/xmi/Images/EAID_D2FA55D3_C733_4a4d_92D0_0BC7AC0BB5BC.svg +0 -108
- data/examples/xmi/Images/EAID_D351FC34_FB03_488d_ADA4_BDB93DA9CB02.svg +0 -49
- data/examples/xmi/Images/EAID_D368FDF3_BDC5_4718_A701_351C8587A376.svg +0 -592
- data/examples/xmi/Images/EAID_D4DA8C48_3998_450d_87C4_9D65C9FECDB4.svg +0 -42
- data/examples/xmi/Images/EAID_D5464ECF_290E_4b2b_A6C4_25BE80F886CB.svg +0 -76
- data/examples/xmi/Images/EAID_D55235B0_61E9_461a_8379_2B8BF2403BE2.svg +0 -147
- data/examples/xmi/Images/EAID_D555ED73_F010_45d7_8A53_45A33C64C249.svg +0 -318
- data/examples/xmi/Images/EAID_D7AAC526_267E_45a0_A853_3207F02363F8.svg +0 -45
- data/examples/xmi/Images/EAID_D998B20D_A875_4ef8_A9CE_996BE56602BD.svg +0 -158
- data/examples/xmi/Images/EAID_DBFA8B39_F5B7_4c0e_9552_19AEAE5BA64E.svg +0 -200
- data/examples/xmi/Images/EAID_DE47A47D_E7BE_4e6f_BA81_F789EE8CFE72.svg +0 -61
- data/examples/xmi/Images/EAID_DFBB1072_8EC5_4384_8241_7EDF4B6B888B.svg +0 -78
- data/examples/xmi/Images/EAID_E325B9D8_E955_4aed_8125_63167BD40320.svg +0 -67
- data/examples/xmi/Images/EAID_E32D9D02_CAE9_4a47_92A8_3290EDCD6E6D.svg +0 -79
- data/examples/xmi/Images/EAID_E3B28611_7857_458a_B0BC_736E777B88EC.svg +0 -194
- data/examples/xmi/Images/EAID_E43C37EC_1176_4d2e_8B98_B6F3DFF6A092.svg +0 -96
- data/examples/xmi/Images/EAID_E591C1CF_7F35_4160_8A72_DFA097AD5811.svg +0 -271
- data/examples/xmi/Images/EAID_E77C66A2_2E94_4196_BFC6_662FE5AEEB6F.svg +0 -332
- data/examples/xmi/Images/EAID_E7AABA98_2450_4986_9736_DCCAF0108C50.svg +0 -639
- data/examples/xmi/Images/EAID_E7D9A2C4_72D6_40b9_8EB8_6B35476246B3.svg +0 -134
- data/examples/xmi/Images/EAID_E9CDAD85_ECF1_43de_819F_30A0D01785E6.svg +0 -193
- data/examples/xmi/Images/EAID_EC8AF507_F441_4e8a_B8A7_C1690F3C7D0B.svg +0 -58
- data/examples/xmi/Images/EAID_ED501058_D540_47ac_8EBC_5921E8C0BF57.svg +0 -384
- data/examples/xmi/Images/EAID_EFBF5F0F_DF74_4944_8791_114F5637C335.svg +0 -590
- data/examples/xmi/Images/EAID_EFFFA027_2A1F_425c_8437_BF89AADC8893.svg +0 -365
- data/examples/xmi/Images/EAID_F07E7718_B2C2_4a65_B5DD_477CB73E971E.svg +0 -165
- data/examples/xmi/Images/EAID_F0F20BDF_C729_47f7_B6FC_25ED2C4609CA.svg +0 -61
- data/examples/xmi/Images/EAID_F32E5AFE_8605_4c77_AE69_D0D0A6E380AC.svg +0 -76
- data/examples/xmi/Images/EAID_F3F00F45_CD37_46fd_B521_D1040EB2FB16.svg +0 -123
- data/examples/xmi/Images/EAID_F46E8F19_D8F1_4a3d_B87B_B0BAB4F50F50.svg +0 -202
- data/examples/xmi/Images/EAID_F48E5F6E_2411_4635_9315_3EAA4CFA29F7.svg +0 -351
- data/examples/xmi/Images/EAID_F4C23F9E_DD74_4fed_B75D_AD3C6448BA24.svg +0 -189
- data/examples/xmi/Images/EAID_F853B3C4_B145_4ef0_B261_C3CC0475B6D2.svg +0 -215
- data/examples/xmi/Images/EAID_F8BE68CA_1F8F_47e5_9454_01A2EB7D388A.svg +0 -124
- data/examples/xmi/Images/EAID_F92A6A28_612E_468e_9E39_D7AE7D24E24D.svg +0 -208
- data/examples/xmi/Images/EAID_F995FA49_B86E_4c94_BE5E_C928FB6B87D0.svg +0 -302
- data/examples/xmi/Images/EAID_FEAE013A_A4E4_4283_A491_1FEB8D0EBA28.svg +0 -524
- data/examples/xmi/Images/EAID_FEBE5726_3751_470b_9023_8C569202E97E.svg +0 -730
- data/examples/xmi/UML_EA.DTD +0 -6856
- data/examples/xmi/UmlModel_template.xmi +0 -23
- data/examples/xmi/basic.xmi +0 -9086
- data/examples/xmi/simple.xmi +0 -655
- data/examples/xmi/simple_example.xmi +0 -23
- data/examples/xmi/test.xmi +0 -1703
- data/exe/lutaml +0 -11
- data/exe/lutaml-sysml +0 -22
- data/exe/lutaml-wsd2uml +0 -63
- data/exe/lutaml-yaml2uml +0 -146
- data/frontend/dist/app.iife.js +0 -24
- data/frontend/dist/style.css +0 -1
- data/frontend/index.html +0 -26
- data/frontend/package-lock.json +0 -2805
- data/frontend/package.json +0 -26
- data/frontend/src/App.vue +0 -59
- data/frontend/src/app.ts +0 -8
- data/frontend/src/components/AppHeader.vue +0 -127
- data/frontend/src/components/AppSidebar.vue +0 -119
- data/frontend/src/components/ClassDetails.vue +0 -247
- data/frontend/src/components/DiagramView.vue +0 -79
- data/frontend/src/components/PackageDetails.vue +0 -92
- data/frontend/src/components/PackageTreeNode.vue +0 -64
- data/frontend/src/components/SearchResults.vue +0 -48
- data/frontend/src/components/WelcomeView.vue +0 -66
- data/frontend/src/shims-vue.d.ts +0 -5
- data/frontend/src/stores/dataStore.ts +0 -79
- data/frontend/src/stores/uiStore.ts +0 -167
- data/frontend/src/styles/main.css +0 -1566
- data/frontend/src/types.ts +0 -221
- data/frontend/tests/e2e/__screenshots__/new-dark-mode.png +0 -0
- data/frontend/tests/e2e/__screenshots__/new-package-details.png +0 -0
- data/frontend/tests/e2e/__screenshots__/new-search-modal.png +0 -0
- data/frontend/tests/e2e/__screenshots__/new-sidebar-collapsed.png +0 -0
- data/frontend/tests/e2e/__screenshots__/new-welcome.png +0 -0
- data/frontend/tests/e2e/render.spec.ts +0 -188
- data/frontend/tsconfig.json +0 -20
- data/frontend/vite.config.ts +0 -26
- data/frontend/vitest.config.ts +0 -8
- data/lib/lutaml/cli/element_identifier.rb +0 -160
- data/lib/lutaml/cli/enhanced_formatter.rb +0 -494
- data/lib/lutaml/cli/interactive_shell/bookmark_commands.rb +0 -85
- data/lib/lutaml/cli/interactive_shell/command_base.rb +0 -32
- data/lib/lutaml/cli/interactive_shell/export_handler.rb +0 -73
- data/lib/lutaml/cli/interactive_shell/help_display.rb +0 -107
- data/lib/lutaml/cli/interactive_shell/navigation_commands.rb +0 -151
- data/lib/lutaml/cli/interactive_shell/query_commands.rb +0 -208
- data/lib/lutaml/cli/interactive_shell.rb +0 -254
- data/lib/lutaml/cli/lml_commands.rb +0 -205
- data/lib/lutaml/cli/output_formatter.rb +0 -348
- data/lib/lutaml/cli/resource_registry.rb +0 -127
- data/lib/lutaml/cli/tree_view_formatter.rb +0 -312
- data/lib/lutaml/cli/uml/build_command.rb +0 -487
- data/lib/lutaml/cli/uml/diagram_command.rb +0 -415
- data/lib/lutaml/cli/uml/export_command.rb +0 -77
- data/lib/lutaml/cli/uml/find_command.rb +0 -119
- data/lib/lutaml/cli/uml/info_command.rb +0 -103
- data/lib/lutaml/cli/uml/inspect_command.rb +0 -85
- data/lib/lutaml/cli/uml/ls_command.rb +0 -102
- data/lib/lutaml/cli/uml/repl_command.rb +0 -49
- data/lib/lutaml/cli/uml/search_command.rb +0 -85
- data/lib/lutaml/cli/uml/serve_command.rb +0 -58
- data/lib/lutaml/cli/uml/shared_helpers.rb +0 -49
- data/lib/lutaml/cli/uml/spa_command.rb +0 -223
- data/lib/lutaml/cli/uml/stats_command.rb +0 -57
- data/lib/lutaml/cli/uml/tree_command.rb +0 -82
- data/lib/lutaml/cli/uml/validate_command.rb +0 -190
- data/lib/lutaml/cli/uml/verify_command.rb +0 -103
- data/lib/lutaml/cli/uml.rb +0 -24
- data/lib/lutaml/cli/uml_commands.rb +0 -145
- data/lib/lutaml/cli.rb +0 -84
- data/lib/lutaml/converter/dsl_to_uml.rb +0 -237
- data/lib/lutaml/converter/xmi_to_uml.rb +0 -329
- data/lib/lutaml/converter/xmi_to_uml_generalization.rb +0 -193
- data/lib/lutaml/converter.rb +0 -10
- data/lib/lutaml/ea/diagram/configuration.rb +0 -379
- data/lib/lutaml/ea/diagram/element_renderers/base_renderer.rb +0 -81
- data/lib/lutaml/ea/diagram/element_renderers/class_renderer.rb +0 -328
- data/lib/lutaml/ea/diagram/element_renderers/connector_renderer.rb +0 -53
- data/lib/lutaml/ea/diagram/element_renderers/package_renderer.rb +0 -67
- data/lib/lutaml/ea/diagram/element_renderers.rb +0 -18
- data/lib/lutaml/ea/diagram/extractor.rb +0 -550
- data/lib/lutaml/ea/diagram/layout_engine.rb +0 -249
- data/lib/lutaml/ea/diagram/path_builder.rb +0 -256
- data/lib/lutaml/ea/diagram/style_parser.rb +0 -315
- data/lib/lutaml/ea/diagram/style_resolver.rb +0 -281
- data/lib/lutaml/ea/diagram/svg_renderer.rb +0 -279
- data/lib/lutaml/ea/diagram/util.rb +0 -69
- data/lib/lutaml/ea/diagram.rb +0 -62
- data/lib/lutaml/ea.rb +0 -7
- data/lib/lutaml/formatter/base.rb +0 -63
- data/lib/lutaml/formatter/graphviz.rb +0 -374
- data/lib/lutaml/formatter.rb +0 -20
- data/lib/lutaml/layout/engine.rb +0 -17
- data/lib/lutaml/layout/graph_viz_engine.rb +0 -19
- data/lib/lutaml/layout.rb +0 -8
- data/lib/lutaml/model_transformations/configuration.rb +0 -333
- data/lib/lutaml/model_transformations/format_registry.rb +0 -392
- data/lib/lutaml/model_transformations/parsers/base_parser.rb +0 -464
- data/lib/lutaml/model_transformations/parsers/qea_parser.rb +0 -450
- data/lib/lutaml/model_transformations/parsers/xmi_parser.rb +0 -289
- data/lib/lutaml/model_transformations/transformation_engine.rb +0 -405
- data/lib/lutaml/model_transformations.rb +0 -143
- data/lib/lutaml/qea/benchmark.rb +0 -210
- data/lib/lutaml/qea/database.rb +0 -270
- data/lib/lutaml/qea/factory/association_builder.rb +0 -203
- data/lib/lutaml/qea/factory/association_transformer.rb +0 -107
- data/lib/lutaml/qea/factory/attribute_tag_transformer.rb +0 -57
- data/lib/lutaml/qea/factory/attribute_transformer.rb +0 -93
- data/lib/lutaml/qea/factory/base_transformer.rb +0 -127
- data/lib/lutaml/qea/factory/class_transformer.rb +0 -164
- data/lib/lutaml/qea/factory/constraint_transformer.rb +0 -75
- data/lib/lutaml/qea/factory/data_type_transformer.rb +0 -133
- data/lib/lutaml/qea/factory/diagram_transformer.rb +0 -157
- data/lib/lutaml/qea/factory/document_builder.rb +0 -273
- data/lib/lutaml/qea/factory/ea_to_uml_factory.rb +0 -243
- data/lib/lutaml/qea/factory/enum_transformer.rb +0 -88
- data/lib/lutaml/qea/factory/generalization_builder.rb +0 -236
- data/lib/lutaml/qea/factory/generalization_transformer.rb +0 -98
- data/lib/lutaml/qea/factory/instance_transformer.rb +0 -84
- data/lib/lutaml/qea/factory/object_property_transformer.rb +0 -58
- data/lib/lutaml/qea/factory/operation_transformer.rb +0 -66
- data/lib/lutaml/qea/factory/package_transformer.rb +0 -208
- data/lib/lutaml/qea/factory/reference_resolver.rb +0 -99
- data/lib/lutaml/qea/factory/stereotype_loader.rb +0 -40
- data/lib/lutaml/qea/factory/tagged_value_transformer.rb +0 -38
- data/lib/lutaml/qea/factory/transformer_registry.rb +0 -77
- data/lib/lutaml/qea/factory.rb +0 -37
- data/lib/lutaml/qea/file_detector.rb +0 -178
- data/lib/lutaml/qea/infrastructure/database_connection.rb +0 -100
- data/lib/lutaml/qea/infrastructure/schema_reader.rb +0 -136
- data/lib/lutaml/qea/infrastructure/table_reader.rb +0 -224
- data/lib/lutaml/qea/infrastructure.rb +0 -12
- data/lib/lutaml/qea/models/base_model.rb +0 -48
- data/lib/lutaml/qea/models/ea_attribute.rb +0 -133
- data/lib/lutaml/qea/models/ea_attribute_tag.rb +0 -107
- data/lib/lutaml/qea/models/ea_complexity_type.rb +0 -79
- data/lib/lutaml/qea/models/ea_connector.rb +0 -160
- data/lib/lutaml/qea/models/ea_connector_type.rb +0 -60
- data/lib/lutaml/qea/models/ea_constraint_type.rb +0 -63
- data/lib/lutaml/qea/models/ea_datatype.rb +0 -104
- data/lib/lutaml/qea/models/ea_diagram.rb +0 -115
- data/lib/lutaml/qea/models/ea_diagram_link.rb +0 -78
- data/lib/lutaml/qea/models/ea_diagram_object.rb +0 -84
- data/lib/lutaml/qea/models/ea_diagram_type.rb +0 -56
- data/lib/lutaml/qea/models/ea_document.rb +0 -66
- data/lib/lutaml/qea/models/ea_object.rb +0 -206
- data/lib/lutaml/qea/models/ea_object_constraint.rb +0 -60
- data/lib/lutaml/qea/models/ea_object_property.rb +0 -94
- data/lib/lutaml/qea/models/ea_object_type.rb +0 -73
- data/lib/lutaml/qea/models/ea_operation.rb +0 -151
- data/lib/lutaml/qea/models/ea_operation_param.rb +0 -71
- data/lib/lutaml/qea/models/ea_package.rb +0 -73
- data/lib/lutaml/qea/models/ea_script.rb +0 -67
- data/lib/lutaml/qea/models/ea_status_type.rb +0 -66
- data/lib/lutaml/qea/models/ea_stereotype.rb +0 -57
- data/lib/lutaml/qea/models/ea_tagged_value.rb +0 -103
- data/lib/lutaml/qea/models/ea_xref.rb +0 -172
- data/lib/lutaml/qea/models.rb +0 -35
- data/lib/lutaml/qea/parser.rb +0 -57
- data/lib/lutaml/qea/repositories/base_repository.rb +0 -215
- data/lib/lutaml/qea/repositories/object_repository.rb +0 -219
- data/lib/lutaml/qea/repositories.rb +0 -10
- data/lib/lutaml/qea/services/configuration.rb +0 -211
- data/lib/lutaml/qea/services/database_loader.rb +0 -186
- data/lib/lutaml/qea/services.rb +0 -10
- data/lib/lutaml/qea/validation/association_validator.rb +0 -73
- data/lib/lutaml/qea/validation/attribute_validator.rb +0 -101
- data/lib/lutaml/qea/validation/base_validator.rb +0 -312
- data/lib/lutaml/qea/validation/class_validator.rb +0 -121
- data/lib/lutaml/qea/validation/database/circular_reference_validator.rb +0 -109
- data/lib/lutaml/qea/validation/database/orphan_validator.rb +0 -153
- data/lib/lutaml/qea/validation/database/referential_integrity_validator.rb +0 -128
- data/lib/lutaml/qea/validation/database.rb +0 -16
- data/lib/lutaml/qea/validation/diagram_validator.rb +0 -112
- data/lib/lutaml/qea/validation/formatters/json_formatter.rb +0 -137
- data/lib/lutaml/qea/validation/formatters/text_formatter.rb +0 -235
- data/lib/lutaml/qea/validation/operation_validator.rb +0 -79
- data/lib/lutaml/qea/validation/package_validator.rb +0 -111
- data/lib/lutaml/qea/validation/validation_engine.rb +0 -477
- data/lib/lutaml/qea/validation/validation_message.rb +0 -144
- data/lib/lutaml/qea/validation/validation_result.rb +0 -210
- data/lib/lutaml/qea/validation/validator_registry.rb +0 -134
- data/lib/lutaml/qea/validation.rb +0 -27
- data/lib/lutaml/qea/verification/comparison_result.rb +0 -264
- data/lib/lutaml/qea/verification/document_normalizer.rb +0 -169
- data/lib/lutaml/qea/verification/document_verifier.rb +0 -323
- data/lib/lutaml/qea/verification/element_comparator.rb +0 -277
- data/lib/lutaml/qea/verification/structure_matcher.rb +0 -287
- data/lib/lutaml/qea/verification.rb +0 -14
- data/lib/lutaml/qea.rb +0 -227
- data/lib/lutaml/uml/abstraction.rb +0 -12
- data/lib/lutaml/uml/action.rb +0 -17
- data/lib/lutaml/uml/activity.rb +0 -12
- data/lib/lutaml/uml/actor.rb +0 -12
- data/lib/lutaml/uml/association.rb +0 -37
- data/lib/lutaml/uml/association_generalization.rb +0 -20
- data/lib/lutaml/uml/behavior.rb +0 -12
- data/lib/lutaml/uml/cardinality.rb +0 -12
- data/lib/lutaml/uml/class.rb +0 -52
- data/lib/lutaml/uml/classifier.rb +0 -19
- data/lib/lutaml/uml/comment.rb +0 -15
- data/lib/lutaml/uml/connector.rb +0 -20
- data/lib/lutaml/uml/connector_end.rb +0 -22
- data/lib/lutaml/uml/constraint.rb +0 -24
- data/lib/lutaml/uml/data_type.rb +0 -56
- data/lib/lutaml/uml/dependency.rb +0 -20
- data/lib/lutaml/uml/diagram.rb +0 -25
- data/lib/lutaml/uml/diagram_link.rb +0 -28
- data/lib/lutaml/uml/diagram_object.rb +0 -32
- data/lib/lutaml/uml/document.rb +0 -64
- data/lib/lutaml/uml/enum.rb +0 -21
- data/lib/lutaml/uml/event.rb +0 -12
- data/lib/lutaml/uml/fidelity.rb +0 -12
- data/lib/lutaml/uml/final_state.rb +0 -12
- data/lib/lutaml/uml/fontname.rb +0 -15
- data/lib/lutaml/uml/general_attribute.rb +0 -24
- data/lib/lutaml/uml/generalization.rb +0 -37
- data/lib/lutaml/uml/group.rb +0 -21
- data/lib/lutaml/uml/has_attributes.rb +0 -14
- data/lib/lutaml/uml/has_members.rb +0 -30
- data/lib/lutaml/uml/inheritance_walker.rb +0 -96
- data/lib/lutaml/uml/instance.rb +0 -17
- data/lib/lutaml/uml/model.rb +0 -15
- data/lib/lutaml/uml/model_helpers.rb +0 -104
- data/lib/lutaml/uml/namespace.rb +0 -12
- data/lib/lutaml/uml/node/attribute.rb +0 -30
- data/lib/lutaml/uml/node/base.rb +0 -19
- data/lib/lutaml/uml/node/class_node.rb +0 -48
- data/lib/lutaml/uml/node/class_relationship.rb +0 -11
- data/lib/lutaml/uml/node/document.rb +0 -15
- data/lib/lutaml/uml/node/has_name.rb +0 -15
- data/lib/lutaml/uml/node/has_type.rb +0 -15
- data/lib/lutaml/uml/node/method_argument.rb +0 -12
- data/lib/lutaml/uml/node/operation.rb +0 -23
- data/lib/lutaml/uml/node/relationship.rb +0 -22
- data/lib/lutaml/uml/opaque_behavior.rb +0 -12
- data/lib/lutaml/uml/operation.rb +0 -23
- data/lib/lutaml/uml/operation_parameter.rb +0 -19
- data/lib/lutaml/uml/package.rb +0 -33
- data/lib/lutaml/uml/package_path.rb +0 -235
- data/lib/lutaml/uml/parsers/attribute.rb +0 -68
- data/lib/lutaml/uml/parsers/dsl.rb +0 -415
- data/lib/lutaml/uml/parsers/dsl_preprocessor.rb +0 -63
- data/lib/lutaml/uml/parsers/dsl_transform.rb +0 -27
- data/lib/lutaml/uml/parsers/yaml.rb +0 -22
- data/lib/lutaml/uml/port.rb +0 -9
- data/lib/lutaml/uml/primitive_type.rb +0 -15
- data/lib/lutaml/uml/property.rb +0 -27
- data/lib/lutaml/uml/pseudostate.rb +0 -12
- data/lib/lutaml/uml/qualified_name.rb +0 -175
- data/lib/lutaml/uml/realization.rb +0 -12
- data/lib/lutaml/uml/region.rb +0 -12
- data/lib/lutaml/uml/state.rb +0 -22
- data/lib/lutaml/uml/state_machine.rb +0 -12
- data/lib/lutaml/uml/tagged_value.rb +0 -23
- data/lib/lutaml/uml/top_element.rb +0 -85
- data/lib/lutaml/uml/top_element_attribute.rb +0 -64
- data/lib/lutaml/uml/transition.rb +0 -24
- data/lib/lutaml/uml/trigger.rb +0 -18
- data/lib/lutaml/uml/validation/document_structure_validator.rb +0 -387
- data/lib/lutaml/uml/value.rb +0 -37
- data/lib/lutaml/uml/vertex.rb +0 -12
- data/lib/lutaml/uml.rb +0 -113
- data/lib/lutaml/uml_repository/class_lookup_index.rb +0 -39
- data/lib/lutaml/uml_repository/error_handler.rb +0 -203
- data/lib/lutaml/uml_repository/exporters/base_exporter.rb +0 -61
- data/lib/lutaml/uml_repository/exporters/json_exporter.rb +0 -343
- data/lib/lutaml/uml_repository/exporters/markdown/class_page_builder.rb +0 -187
- data/lib/lutaml/uml_repository/exporters/markdown/formatting.rb +0 -34
- data/lib/lutaml/uml_repository/exporters/markdown/index_page_builder.rb +0 -81
- data/lib/lutaml/uml_repository/exporters/markdown/link_resolver.rb +0 -40
- data/lib/lutaml/uml_repository/exporters/markdown/package_page_builder.rb +0 -107
- data/lib/lutaml/uml_repository/exporters/markdown.rb +0 -20
- data/lib/lutaml/uml_repository/exporters/markdown_exporter.rb +0 -86
- data/lib/lutaml/uml_repository/index_builder.rb +0 -210
- data/lib/lutaml/uml_repository/index_builders/association_index.rb +0 -155
- data/lib/lutaml/uml_repository/index_builders/class_index.rb +0 -113
- data/lib/lutaml/uml_repository/index_builders/package_index.rb +0 -62
- data/lib/lutaml/uml_repository/index_builders.rb +0 -13
- data/lib/lutaml/uml_repository/lazy_repository.rb +0 -236
- data/lib/lutaml/uml_repository/package_exporter.rb +0 -334
- data/lib/lutaml/uml_repository/package_loader.rb +0 -240
- data/lib/lutaml/uml_repository/package_metadata.rb +0 -77
- data/lib/lutaml/uml_repository/presenters/association_presenter.rb +0 -79
- data/lib/lutaml/uml_repository/presenters/attribute_presenter.rb +0 -94
- data/lib/lutaml/uml_repository/presenters/class_presenter.rb +0 -72
- data/lib/lutaml/uml_repository/presenters/datatype_presenter.rb +0 -97
- data/lib/lutaml/uml_repository/presenters/diagram_presenter.rb +0 -469
- data/lib/lutaml/uml_repository/presenters/element_presenter.rb +0 -91
- data/lib/lutaml/uml_repository/presenters/enum_presenter.rb +0 -78
- data/lib/lutaml/uml_repository/presenters/package_presenter.rb +0 -48
- data/lib/lutaml/uml_repository/presenters/presenter_factory.rb +0 -74
- data/lib/lutaml/uml_repository/queries/association_query.rb +0 -184
- data/lib/lutaml/uml_repository/queries/base_query.rb +0 -45
- data/lib/lutaml/uml_repository/queries/class_query.rb +0 -178
- data/lib/lutaml/uml_repository/queries/diagram_query.rb +0 -108
- data/lib/lutaml/uml_repository/queries/inheritance_query.rb +0 -327
- data/lib/lutaml/uml_repository/queries/package_query.rb +0 -230
- data/lib/lutaml/uml_repository/queries/search_query.rb +0 -236
- data/lib/lutaml/uml_repository/query_dsl/conditions/base_condition.rb +0 -28
- data/lib/lutaml/uml_repository/query_dsl/conditions/block_condition.rb +0 -44
- data/lib/lutaml/uml_repository/query_dsl/conditions/hash_condition.rb +0 -82
- data/lib/lutaml/uml_repository/query_dsl/conditions/package_condition.rb +0 -89
- data/lib/lutaml/uml_repository/query_dsl/order.rb +0 -90
- data/lib/lutaml/uml_repository/query_dsl/query_builder.rb +0 -290
- data/lib/lutaml/uml_repository/repository/deprecated.rb +0 -39
- data/lib/lutaml/uml_repository/repository/loader.rb +0 -117
- data/lib/lutaml/uml_repository/repository.rb +0 -718
- data/lib/lutaml/uml_repository/repository_enhanced.rb +0 -431
- data/lib/lutaml/uml_repository/search_result.rb +0 -86
- data/lib/lutaml/uml_repository/static_site/configuration.rb +0 -377
- data/lib/lutaml/uml_repository/static_site/data_transformer.rb +0 -135
- data/lib/lutaml/uml_repository/static_site/generator.rb +0 -120
- data/lib/lutaml/uml_repository/static_site/id_generator.rb +0 -120
- data/lib/lutaml/uml_repository/static_site/models/spa_association.rb +0 -29
- data/lib/lutaml/uml_repository/static_site/models/spa_association_end.rb +0 -25
- data/lib/lutaml/uml_repository/static_site/models/spa_attribute.rb +0 -58
- data/lib/lutaml/uml_repository/static_site/models/spa_base.rb +0 -12
- data/lib/lutaml/uml_repository/static_site/models/spa_cardinality.rb +0 -28
- data/lib/lutaml/uml_repository/static_site/models/spa_class.rb +0 -60
- data/lib/lutaml/uml_repository/static_site/models/spa_diagram.rb +0 -31
- data/lib/lutaml/uml_repository/static_site/models/spa_document.rb +0 -31
- data/lib/lutaml/uml_repository/static_site/models/spa_inherited_association.rb +0 -25
- data/lib/lutaml/uml_repository/static_site/models/spa_inherited_attribute.rb +0 -25
- data/lib/lutaml/uml_repository/static_site/models/spa_literal.rb +0 -19
- data/lib/lutaml/uml_repository/static_site/models/spa_metadata.rb +0 -39
- data/lib/lutaml/uml_repository/static_site/models/spa_operation.rb +0 -34
- data/lib/lutaml/uml_repository/static_site/models/spa_package.rb +0 -37
- data/lib/lutaml/uml_repository/static_site/models/spa_package_tree_node.rb +0 -32
- data/lib/lutaml/uml_repository/static_site/models/spa_parameter.rb +0 -21
- data/lib/lutaml/uml_repository/static_site/models/spa_search_entry.rb +0 -34
- data/lib/lutaml/uml_repository/static_site/models/spa_search_index.rb +0 -29
- data/lib/lutaml/uml_repository/static_site/models/spa_statistics.rb +0 -25
- data/lib/lutaml/uml_repository/static_site/models/spa_tree_class_ref.rb +0 -22
- data/lib/lutaml/uml_repository/static_site/models.rb +0 -48
- data/lib/lutaml/uml_repository/static_site/output/multi_file_strategy.rb +0 -69
- data/lib/lutaml/uml_repository/static_site/output/strategy.rb +0 -36
- data/lib/lutaml/uml_repository/static_site/output/vue_inlined_strategy.rb +0 -113
- data/lib/lutaml/uml_repository/static_site/output.rb +0 -15
- data/lib/lutaml/uml_repository/static_site/search_index_builder.rb +0 -216
- data/lib/lutaml/uml_repository/static_site/serializers/association_serializer.rb +0 -70
- data/lib/lutaml/uml_repository/static_site/serializers/attribute_serializer.rb +0 -24
- data/lib/lutaml/uml_repository/static_site/serializers/base.rb +0 -66
- data/lib/lutaml/uml_repository/static_site/serializers/class_serializer.rb +0 -97
- data/lib/lutaml/uml_repository/static_site/serializers/diagram_serializer.rb +0 -59
- data/lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb +0 -151
- data/lib/lutaml/uml_repository/static_site/serializers/metadata_builder.rb +0 -102
- data/lib/lutaml/uml_repository/static_site/serializers/operation_serializer.rb +0 -52
- data/lib/lutaml/uml_repository/static_site/serializers/package_serializer.rb +0 -55
- data/lib/lutaml/uml_repository/static_site/serializers/package_tree_builder.rb +0 -77
- data/lib/lutaml/uml_repository/static_site/serializers.rb +0 -30
- data/lib/lutaml/uml_repository/static_site.rb +0 -92
- data/lib/lutaml/uml_repository/statistics_calculator.rb +0 -342
- data/lib/lutaml/uml_repository/validators/repository_validator.rb +0 -402
- data/lib/lutaml/uml_repository/web_ui/app.rb +0 -161
- data/lib/lutaml/uml_repository/web_ui/public/app.js +0 -452
- data/lib/lutaml/uml_repository/web_ui/public/styles.css +0 -381
- data/lib/lutaml/uml_repository/web_ui/views/index.erb +0 -40
- data/lib/lutaml/uml_repository.rb +0 -117
- data/lib/lutaml/xmi/liquid_drops/association_drop.rb +0 -56
- data/lib/lutaml/xmi/liquid_drops/attribute_drop.rb +0 -72
- data/lib/lutaml/xmi/liquid_drops/cardinality_drop.rb +0 -35
- data/lib/lutaml/xmi/liquid_drops/connector_drop.rb +0 -54
- data/lib/lutaml/xmi/liquid_drops/constraint_drop.rb +0 -29
- data/lib/lutaml/xmi/liquid_drops/data_type_drop.rb +0 -63
- data/lib/lutaml/xmi/liquid_drops/dependency_drop.rb +0 -36
- data/lib/lutaml/xmi/liquid_drops/diagram_drop.rb +0 -34
- data/lib/lutaml/xmi/liquid_drops/enum_drop.rb +0 -49
- data/lib/lutaml/xmi/liquid_drops/enum_owned_literal_drop.rb +0 -25
- data/lib/lutaml/xmi/liquid_drops/generalization_attribute_drop.rb +0 -87
- data/lib/lutaml/xmi/liquid_drops/generalization_drop.rb +0 -127
- data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +0 -191
- data/lib/lutaml/xmi/liquid_drops/operation_drop.rb +0 -29
- data/lib/lutaml/xmi/liquid_drops/package_drop.rb +0 -108
- data/lib/lutaml/xmi/liquid_drops/root_drop.rb +0 -34
- data/lib/lutaml/xmi/liquid_drops/source_target_drop.rb +0 -43
- data/lib/lutaml/xmi/parsers/xmi_base.rb +0 -301
- data/lib/lutaml/xmi/parsers/xmi_class_members.rb +0 -45
- data/lib/lutaml/xmi/parsers/xmi_connector.rb +0 -263
- data/lib/lutaml/xmi/parsers/xml.rb +0 -62
- data/lib/lutaml/xmi/xmi_lookup_service.rb +0 -40
- data/lib/lutaml/xmi.rb +0 -47
- data/templates/static_site/assets/images/lutaml-full.svg +0 -1
- data/templates/static_site/assets/images/lutaml-icon.svg +0 -1
- data/templates/static_site/assets/scripts/app.js +0 -45
- data/templates/static_site/assets/scripts/core/state.js +0 -446
- data/templates/static_site/assets/scripts/core/utils.js +0 -133
- data/templates/static_site/assets/scripts/ui/details.js +0 -74
- data/templates/static_site/assets/scripts/ui/diagrams.js +0 -345
- data/templates/static_site/assets/scripts/ui/search.js +0 -187
- data/templates/static_site/assets/scripts/ui/sidebar.js +0 -123
- data/templates/static_site/assets/styles/00-variables.css +0 -144
- data/templates/static_site/assets/styles/01-reset.css +0 -69
- data/templates/static_site/assets/styles/02-base.css +0 -144
- data/templates/static_site/assets/styles/03-layout.css +0 -121
- data/templates/static_site/assets/styles/04-components.css +0 -905
- data/templates/static_site/assets/styles/05-utilities.css +0 -23
- data/templates/static_site/assets/styles/06-diagrams.css +0 -74
- data/templates/static_site/components/class_details.liquid +0 -328
- data/templates/static_site/components/content.liquid +0 -481
- data/templates/static_site/components/diagram_list.liquid +0 -52
- data/templates/static_site/components/diagram_viewer.liquid +0 -71
- data/templates/static_site/components/header.liquid +0 -114
- data/templates/static_site/components/package_details.liquid +0 -119
- data/templates/static_site/components/sidebar.liquid +0 -76
- data/templates/static_site/components/tree_node.liquid +0 -81
- data/templates/static_site/multi_file.liquid +0 -49
- data/templates/static_site/single_file.liquid +0 -57
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Lutaml
|
|
4
|
-
module UmlRepository
|
|
5
|
-
module Queries
|
|
6
|
-
# Query service for inheritance operations.
|
|
7
|
-
#
|
|
8
|
-
# Provides methods to navigate class inheritance hierarchies using the
|
|
9
|
-
# inheritance_graph index, which maps parent qualified names to arrays
|
|
10
|
-
# of child qualified names.
|
|
11
|
-
#
|
|
12
|
-
# @example Getting a class's parent
|
|
13
|
-
# query = InheritanceQuery.new(document, indexes)
|
|
14
|
-
# parent = query.supertype("ModelRoot::Child")
|
|
15
|
-
#
|
|
16
|
-
# @example Getting all ancestors
|
|
17
|
-
# ancestors = query.ancestors("ModelRoot::GrandChild")
|
|
18
|
-
# # => [Parent, GrandParent, ...]
|
|
19
|
-
#
|
|
20
|
-
# @example Getting descendants
|
|
21
|
-
# descendants = query.descendants("ModelRoot::Parent", max_depth: 2)
|
|
22
|
-
class InheritanceQuery < BaseQuery
|
|
23
|
-
# Get the direct parent class (supertype).
|
|
24
|
-
#
|
|
25
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
26
|
-
# or qualified name string
|
|
27
|
-
# @return [Lutaml::Uml::Class, nil] The parent class,
|
|
28
|
-
# or nil if no parent
|
|
29
|
-
# @example
|
|
30
|
-
# parent = query.supertype("ModelRoot::Child")
|
|
31
|
-
# # Or
|
|
32
|
-
# parent = query.supertype(child_class)
|
|
33
|
-
def supertype(class_or_qname)
|
|
34
|
-
klass = resolve_class(class_or_qname)
|
|
35
|
-
return nil unless valid_supertype_target?(klass)
|
|
36
|
-
|
|
37
|
-
parent_name = extract_parent_name(klass.generalization)
|
|
38
|
-
return nil unless parent_name
|
|
39
|
-
return nil if parent_name == klass.name
|
|
40
|
-
|
|
41
|
-
parent_qname = resolve_parent_qname(class_or_qname, parent_name)
|
|
42
|
-
return nil unless parent_qname
|
|
43
|
-
|
|
44
|
-
indexes[:qualified_names][parent_qname]
|
|
45
|
-
end
|
|
46
|
-
alias_method :find_parent, :supertype
|
|
47
|
-
|
|
48
|
-
# Get direct child classes (subtypes).
|
|
49
|
-
#
|
|
50
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
51
|
-
# or qualified name string
|
|
52
|
-
# @param recursive [Boolean] Whether to include all descendants
|
|
53
|
-
# (default: false)
|
|
54
|
-
# @return [Array] Array of child class objects
|
|
55
|
-
# @example Direct children only
|
|
56
|
-
# children = query.subtypes("ModelRoot::Parent", recursive: false)
|
|
57
|
-
#
|
|
58
|
-
# @example All descendants
|
|
59
|
-
# all_descendants = query.subtypes(
|
|
60
|
-
# "ModelRoot::Parent", recursive: true)
|
|
61
|
-
def subtypes(class_or_qname, recursive: false)
|
|
62
|
-
qname_string = resolve_qname(class_or_qname)
|
|
63
|
-
return [] unless qname_string
|
|
64
|
-
|
|
65
|
-
if recursive
|
|
66
|
-
descendants(class_or_qname)
|
|
67
|
-
else
|
|
68
|
-
direct_subtypes(qname_string)
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
alias_method :find_children, :subtypes
|
|
72
|
-
|
|
73
|
-
# Get all ancestor classes up to the root.
|
|
74
|
-
#
|
|
75
|
-
# Returns ancestors in order from immediate parent to root.
|
|
76
|
-
#
|
|
77
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
78
|
-
# or qualified name string
|
|
79
|
-
# @return [Array] Array of ancestor class objects, ordered from nearest
|
|
80
|
-
# to furthest
|
|
81
|
-
# @example
|
|
82
|
-
# ancestors = query.ancestors("ModelRoot::GrandChild")
|
|
83
|
-
# # => [Parent, GrandParent]
|
|
84
|
-
def ancestors(class_or_qname)
|
|
85
|
-
result = []
|
|
86
|
-
current = class_or_qname
|
|
87
|
-
|
|
88
|
-
loop do
|
|
89
|
-
parent = supertype(current)
|
|
90
|
-
break unless parent
|
|
91
|
-
|
|
92
|
-
result << parent
|
|
93
|
-
current = parent
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
result
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Get all ancestor classes up to the root by class XMI ID.
|
|
100
|
-
#
|
|
101
|
-
# @param class_xmi_id [String] The XMI ID of the class
|
|
102
|
-
# @return [Array] Array of ancestor class objects
|
|
103
|
-
def find_ancestors(class_xmi_id)
|
|
104
|
-
qualified_name, _klass = find_class_by_id(class_xmi_id)
|
|
105
|
-
return [] unless qualified_name
|
|
106
|
-
|
|
107
|
-
ancestors(qualified_name)
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
# Get all descendant classes.
|
|
111
|
-
#
|
|
112
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
113
|
-
# or qualified name string
|
|
114
|
-
# @param max_depth [Integer, nil] Maximum depth to traverse (nil for
|
|
115
|
-
# unlimited)
|
|
116
|
-
# @return [Array] Array of descendant class objects
|
|
117
|
-
# @example
|
|
118
|
-
# descendants = query.descendants("ModelRoot::Parent", max_depth: 2)
|
|
119
|
-
def descendants(class_or_qname, max_depth: nil)
|
|
120
|
-
qname_string = resolve_qname(class_or_qname)
|
|
121
|
-
return [] unless qname_string
|
|
122
|
-
|
|
123
|
-
collect_descendants(qname_string, max_depth, 0)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
# Resolve a class or qualified name to a class object.
|
|
127
|
-
#
|
|
128
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
129
|
-
# or qualified name string
|
|
130
|
-
# @return [Lutaml::Uml::Class, nil] The class object,
|
|
131
|
-
# or nil if not found
|
|
132
|
-
def resolve_class(class_or_qname)
|
|
133
|
-
if class_or_qname.is_a?(String)
|
|
134
|
-
indexes[:qualified_names][class_or_qname]
|
|
135
|
-
else
|
|
136
|
-
class_or_qname
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
# Resolve a class or qualified name to a qualified name string.
|
|
141
|
-
#
|
|
142
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
143
|
-
# or qualified name string
|
|
144
|
-
# @return [String, nil] The qualified name string, or nil if not found
|
|
145
|
-
def resolve_qname(class_or_qname)
|
|
146
|
-
if class_or_qname.is_a?(String) &&
|
|
147
|
-
indexes[:qualified_names].key?(class_or_qname)
|
|
148
|
-
return class_or_qname
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
# Search for the class in the index
|
|
152
|
-
qname, _klass = indexes[:qualified_names].find do |_name, entity|
|
|
153
|
-
entity == class_or_qname
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
qname.nil? ? nil : qname
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
# Build inheritance tree for a class.
|
|
160
|
-
#
|
|
161
|
-
# @param class_or_id [Lutaml::Uml::Class, String] The class object,
|
|
162
|
-
# qualified name, or xmi_id
|
|
163
|
-
# @return [Hash, nil] Tree structure with :class and :children keys
|
|
164
|
-
def inheritance_tree(class_or_id)
|
|
165
|
-
klass = resolve_by_id_or_qname(class_or_id)
|
|
166
|
-
return nil unless klass
|
|
167
|
-
|
|
168
|
-
qname = resolve_qname(klass)
|
|
169
|
-
return nil unless qname
|
|
170
|
-
|
|
171
|
-
child_qnames = indexes[:inheritance_graph][qname] || []
|
|
172
|
-
child_trees = child_qnames.filter_map do |child_qname|
|
|
173
|
-
inheritance_tree(child_qname)
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
{
|
|
177
|
-
class: klass,
|
|
178
|
-
children: child_trees,
|
|
179
|
-
}
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
# Check if a class has circular inheritance.
|
|
183
|
-
#
|
|
184
|
-
# @param class_or_id [Lutaml::Uml::Class, String] The class object,
|
|
185
|
-
# qualified name, or xmi_id
|
|
186
|
-
# @return [Boolean] true if circular inheritance detected
|
|
187
|
-
def has_circular_inheritance?(class_or_id, visited: Set.new)
|
|
188
|
-
qname = resolve_to_qname(class_or_id)
|
|
189
|
-
return false unless qname
|
|
190
|
-
return true if visited.include?(qname)
|
|
191
|
-
|
|
192
|
-
visited.add(qname)
|
|
193
|
-
child_qnames = indexes[:inheritance_graph][qname] || []
|
|
194
|
-
child_qnames.any? do |child_qname|
|
|
195
|
-
has_circular_inheritance?(child_qname, visited: visited.dup)
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
private
|
|
200
|
-
|
|
201
|
-
def valid_supertype_target?(klass)
|
|
202
|
-
return false unless klass
|
|
203
|
-
return false unless klass.is_a?(Lutaml::Uml::Class)
|
|
204
|
-
|
|
205
|
-
klass.generalization ? true : false
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
def resolve_parent_qname(class_or_qname, parent_name)
|
|
209
|
-
qname_string = resolve_qname(class_or_qname)
|
|
210
|
-
return nil unless qname_string
|
|
211
|
-
|
|
212
|
-
qname = Lutaml::Uml::QualifiedName.new(qname_string)
|
|
213
|
-
resolve_parent_qualified_name(parent_name, qname.package_path.to_s)
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
# Resolve a class by xmi_id or qualified name
|
|
217
|
-
#
|
|
218
|
-
# @param class_or_id [String] Qualified name or xmi_id
|
|
219
|
-
# @return [Lutaml::Uml::Class, nil] The resolved class
|
|
220
|
-
def resolve_by_id_or_qname(class_or_id)
|
|
221
|
-
# Try as qualified name first
|
|
222
|
-
klass = indexes[:qualified_names][class_or_id]
|
|
223
|
-
return klass if klass
|
|
224
|
-
|
|
225
|
-
# Try as xmi_id - search in qualified_names
|
|
226
|
-
indexes[:qualified_names].each_value do |entity|
|
|
227
|
-
next unless entity.xmi_id
|
|
228
|
-
|
|
229
|
-
return entity if entity.xmi_id == class_or_id
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
nil
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
# Get direct subtypes of a class
|
|
236
|
-
#
|
|
237
|
-
# @param qname_string [String] Qualified name of the parent class
|
|
238
|
-
# @return [Array] Array of child class objects
|
|
239
|
-
def direct_subtypes(qname_string)
|
|
240
|
-
child_qnames = indexes[:inheritance_graph][qname_string]
|
|
241
|
-
return [] unless child_qnames
|
|
242
|
-
|
|
243
|
-
child_qnames.filter_map do |child_qname|
|
|
244
|
-
indexes[:qualified_names][child_qname]
|
|
245
|
-
end
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
# Recursively collect descendants
|
|
249
|
-
#
|
|
250
|
-
# @param qname_string [String] Qualified name of the parent class
|
|
251
|
-
# @param max_depth [Integer, nil] Maximum depth to traverse
|
|
252
|
-
# @param current_depth [Integer] Current depth
|
|
253
|
-
# @return [Array] Array of descendant class objects
|
|
254
|
-
def collect_descendants(qname_string, max_depth, current_depth)
|
|
255
|
-
return [] if max_depth && current_depth >= max_depth
|
|
256
|
-
|
|
257
|
-
children = direct_subtypes(qname_string)
|
|
258
|
-
result = children.dup
|
|
259
|
-
collect_child_descendants(children, max_depth, current_depth, result)
|
|
260
|
-
result
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
def collect_child_descendants(children, max_depth, current_depth,
|
|
264
|
-
result)
|
|
265
|
-
children.each do |child|
|
|
266
|
-
child_qname = resolve_qname(child)
|
|
267
|
-
next unless child_qname
|
|
268
|
-
|
|
269
|
-
result.concat(collect_descendants(child_qname, max_depth,
|
|
270
|
-
current_depth + 1))
|
|
271
|
-
end
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
# Extract parent name from generalization object
|
|
275
|
-
#
|
|
276
|
-
# @param generalization [Lutaml::Uml::Generalization]
|
|
277
|
-
# Generalization object
|
|
278
|
-
# @return [String, nil] Parent class name
|
|
279
|
-
def extract_parent_name(generalization)
|
|
280
|
-
return nil unless generalization
|
|
281
|
-
return nil unless generalization.is_a?(Lutaml::Uml::Generalization)
|
|
282
|
-
|
|
283
|
-
parent = generalization.general
|
|
284
|
-
return extract_name_from_parent(parent) if parent
|
|
285
|
-
|
|
286
|
-
generalization.name if generalization.name
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
def resolve_to_qname(class_or_id)
|
|
290
|
-
if class_or_id.is_a?(String) &&
|
|
291
|
-
indexes[:qualified_names].key?(class_or_id)
|
|
292
|
-
class_or_id
|
|
293
|
-
else
|
|
294
|
-
resolve_qname(class_or_id)
|
|
295
|
-
end
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
def extract_name_from_parent(parent)
|
|
299
|
-
return parent.name if parent.is_a?(Lutaml::Uml::Generalization) && parent.name
|
|
300
|
-
|
|
301
|
-
parent.to_s
|
|
302
|
-
end
|
|
303
|
-
|
|
304
|
-
# Resolve a class name to its qualified name
|
|
305
|
-
#
|
|
306
|
-
# @param name [String] Class name to resolve
|
|
307
|
-
# @param current_package_path [String] Current package context
|
|
308
|
-
# @return [String, nil] Resolved qualified name
|
|
309
|
-
def resolve_parent_qualified_name(name, current_package_path)
|
|
310
|
-
# If name contains "::", it might already be qualified
|
|
311
|
-
return name if indexes[:qualified_names].key?(name)
|
|
312
|
-
|
|
313
|
-
# Try in current package
|
|
314
|
-
local_qname = "#{current_package_path}::#{name}"
|
|
315
|
-
return local_qname if indexes[:qualified_names].key?(local_qname)
|
|
316
|
-
|
|
317
|
-
# Try to find in all qualified names (simple name match)
|
|
318
|
-
indexes[:qualified_names].each_key do |qname|
|
|
319
|
-
return qname if qname.end_with?("::#{name}")
|
|
320
|
-
end
|
|
321
|
-
|
|
322
|
-
nil
|
|
323
|
-
end
|
|
324
|
-
end
|
|
325
|
-
end
|
|
326
|
-
end
|
|
327
|
-
end
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Lutaml
|
|
4
|
-
module UmlRepository
|
|
5
|
-
module Queries
|
|
6
|
-
# Query service for package operations.
|
|
7
|
-
#
|
|
8
|
-
# Provides methods to find, list, and navigate package hierarchies
|
|
9
|
-
# using the package_paths index for efficient lookups.
|
|
10
|
-
#
|
|
11
|
-
# @example Finding a package by path
|
|
12
|
-
# query = PackageQuery.new(document, indexes)
|
|
13
|
-
# package = query.find_by_path("ModelRoot::i-UR::urf")
|
|
14
|
-
#
|
|
15
|
-
# @example Listing child packages
|
|
16
|
-
# packages = query.list("ModelRoot::i-UR", recursive: false)
|
|
17
|
-
#
|
|
18
|
-
# @example Building a package tree
|
|
19
|
-
# tree = query.tree("ModelRoot", max_depth: 2)
|
|
20
|
-
class PackageQuery < BaseQuery
|
|
21
|
-
# Find a single package by its path.
|
|
22
|
-
#
|
|
23
|
-
# Supports multiple search strategies:
|
|
24
|
-
# 1. Exact full path match (e.g., "ModelRoot::i-UR::uro")
|
|
25
|
-
# 2. Simple name match (e.g., "uro")
|
|
26
|
-
# 3. Partial path match (e.g., "i-UR::uro")
|
|
27
|
-
#
|
|
28
|
-
# @param path_string [String] The package path (e.g., "ModelRoot::i-UR")
|
|
29
|
-
# @return [Lutaml::Uml::Package, Lutaml::Uml::Document, nil] The package
|
|
30
|
-
# or document, or nil if not found
|
|
31
|
-
# @example Exact path
|
|
32
|
-
# package = query.find_by_path("ModelRoot::i-UR::urf")
|
|
33
|
-
#
|
|
34
|
-
# @example Simple name
|
|
35
|
-
# package = query.find_by_path("urf")
|
|
36
|
-
#
|
|
37
|
-
# @example Partial path
|
|
38
|
-
# package = query.find_by_path("i-UR::urf")
|
|
39
|
-
def find_by_path(path_string) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
|
40
|
-
return nil if path_string.nil? || path_string.empty?
|
|
41
|
-
|
|
42
|
-
# Strategy 1: Try exact match first (most common case)
|
|
43
|
-
exact_match = indexes[:package_paths][path_string.to_s]
|
|
44
|
-
return exact_match if exact_match
|
|
45
|
-
|
|
46
|
-
# Strategy 2 & 3: Search for simple name or partial path match
|
|
47
|
-
search_segments = path_string.to_s.split("::")
|
|
48
|
-
matches = []
|
|
49
|
-
|
|
50
|
-
indexes[:package_paths].each do |full_path, package|
|
|
51
|
-
full_segments = full_path.to_s.split("::")
|
|
52
|
-
|
|
53
|
-
# Simple name match: last segment matches
|
|
54
|
-
if search_segments.length == 1
|
|
55
|
-
matches << package if full_segments.last == search_segments.first
|
|
56
|
-
# Partial path match: ends with search path
|
|
57
|
-
elsif full_segments.last(search_segments.length) == search_segments
|
|
58
|
-
matches << package
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Return single match, or nil if no match or ambiguous
|
|
63
|
-
matches.length == 1 ? matches.first : nil
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# List packages at a specific path.
|
|
67
|
-
#
|
|
68
|
-
# @param parent_path_string [String] The parent package path
|
|
69
|
-
# @param recursive [Boolean] Whether to include nested packages
|
|
70
|
-
# recursively (default: false)
|
|
71
|
-
# @return [Array<Lutaml::Uml::Package>] Array of packages
|
|
72
|
-
# @example Non-recursive listing
|
|
73
|
-
# packages = query.list("ModelRoot::i-UR", recursive: false)
|
|
74
|
-
# # Returns only direct children of i-UR
|
|
75
|
-
#
|
|
76
|
-
# @example Recursive listing
|
|
77
|
-
# packages = query.list("ModelRoot", recursive: true)
|
|
78
|
-
# # Returns all packages under ModelRoot
|
|
79
|
-
def list(parent_path_string, recursive: false) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
|
80
|
-
return [] if parent_path_string.nil? || parent_path_string.empty?
|
|
81
|
-
|
|
82
|
-
parent_path = Lutaml::Uml::PackagePath.new(parent_path_string.to_s)
|
|
83
|
-
results = []
|
|
84
|
-
|
|
85
|
-
indexes[:package_paths].each do |path_string, package|
|
|
86
|
-
path = Lutaml::Uml::PackagePath.new(path_string)
|
|
87
|
-
|
|
88
|
-
# Skip the parent itself
|
|
89
|
-
next if path == parent_path
|
|
90
|
-
|
|
91
|
-
# Check if this path is under the parent
|
|
92
|
-
next unless path.starts_with?(parent_path)
|
|
93
|
-
|
|
94
|
-
if recursive
|
|
95
|
-
# Include all descendants
|
|
96
|
-
results << package
|
|
97
|
-
elsif path.depth == parent_path.depth + 1
|
|
98
|
-
# Include only direct children (depth = parent_depth + 1)
|
|
99
|
-
results << package
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
results
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Build a hierarchical tree structure of packages.
|
|
107
|
-
#
|
|
108
|
-
# @param root_path_string [String] The root package path to start from
|
|
109
|
-
# @param max_depth [Integer, nil] Maximum depth to traverse (nil for
|
|
110
|
-
# unlimited)
|
|
111
|
-
# @return [Hash, nil] Tree structure with package information, or nil
|
|
112
|
-
# if root not found
|
|
113
|
-
# @example
|
|
114
|
-
# tree = query.tree("ModelRoot::i-UR", max_depth: 2)
|
|
115
|
-
# # => {
|
|
116
|
-
# # name: "i-UR",
|
|
117
|
-
# # path: "ModelRoot::i-UR",
|
|
118
|
-
# # classes_count: 0,
|
|
119
|
-
# # diagrams_count: 0,
|
|
120
|
-
# # children: [
|
|
121
|
-
# # {
|
|
122
|
-
# # name: "urf",
|
|
123
|
-
# # path: "ModelRoot::i-UR::urf",
|
|
124
|
-
# # classes_count: 15,
|
|
125
|
-
# # diagrams_count: 2,
|
|
126
|
-
# # children: []
|
|
127
|
-
# # }
|
|
128
|
-
# # ]
|
|
129
|
-
# # }
|
|
130
|
-
def tree(root_path_string, max_depth: nil)
|
|
131
|
-
return nil if root_path_string.nil? || root_path_string.empty?
|
|
132
|
-
|
|
133
|
-
root_package = find_by_path(root_path_string.to_s)
|
|
134
|
-
return nil unless root_package
|
|
135
|
-
|
|
136
|
-
build_tree_node(root_path_string.to_s, root_package, max_depth, 0)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
private
|
|
140
|
-
|
|
141
|
-
# Build a tree node for a package
|
|
142
|
-
#
|
|
143
|
-
# @param path_string [String] The package path
|
|
144
|
-
# @param package [Lutaml::Uml::Package, Lutaml::Uml::Document] The
|
|
145
|
-
# package or document object
|
|
146
|
-
# @param max_depth [Integer, nil] Maximum depth to traverse
|
|
147
|
-
# @param current_depth [Integer] Current depth in the tree
|
|
148
|
-
# @return [Hash] Tree node structure
|
|
149
|
-
def build_tree_node(path_string, package, max_depth, current_depth) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
|
150
|
-
path = Lutaml::Uml::PackagePath.new(path_string)
|
|
151
|
-
|
|
152
|
-
node = {
|
|
153
|
-
name: path.segments.last,
|
|
154
|
-
path: path_string,
|
|
155
|
-
classes_count: count_classes(package),
|
|
156
|
-
diagrams_count: count_diagrams(package),
|
|
157
|
-
children: [],
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
# Stop if we've reached max depth
|
|
161
|
-
if max_depth.nil? || current_depth < max_depth
|
|
162
|
-
# Find direct children
|
|
163
|
-
children = list(path_string, recursive: false)
|
|
164
|
-
children.each do |child_package|
|
|
165
|
-
child_path = find_package_path(child_package, path_string)
|
|
166
|
-
next unless child_path
|
|
167
|
-
|
|
168
|
-
child_node = build_tree_node(
|
|
169
|
-
child_path,
|
|
170
|
-
child_package,
|
|
171
|
-
max_depth,
|
|
172
|
-
current_depth + 1,
|
|
173
|
-
)
|
|
174
|
-
node[:children] << child_node
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
node
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
# Count classes in a package
|
|
182
|
-
#
|
|
183
|
-
# @param package [Lutaml::Uml::Package, Lutaml::Uml::Document]
|
|
184
|
-
# The package
|
|
185
|
-
# @return [Integer] Number of classes
|
|
186
|
-
def count_classes(package) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength
|
|
187
|
-
count = 0
|
|
188
|
-
count += package.classes&.size
|
|
189
|
-
count += package.data_types&.size
|
|
190
|
-
count += package.enums&.size
|
|
191
|
-
count
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
# Count diagrams in a package
|
|
195
|
-
#
|
|
196
|
-
# @param package [Lutaml::Uml::Package, Lutaml::Uml::Document]
|
|
197
|
-
# The package
|
|
198
|
-
# @return [Integer] Number of diagrams
|
|
199
|
-
def count_diagrams(package)
|
|
200
|
-
return 0 unless package.diagrams
|
|
201
|
-
|
|
202
|
-
package.diagrams.size
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
# Find the path of a package under a parent path
|
|
206
|
-
#
|
|
207
|
-
# @param package [Lutaml::Uml::Package] The package to find
|
|
208
|
-
# @param parent_path_string [String] The parent package path
|
|
209
|
-
# @return [String, nil] The package path, or nil if not found
|
|
210
|
-
def find_package_path(package, parent_path_string) # rubocop:disable Metrics/MethodLength
|
|
211
|
-
parent_path = Lutaml::Uml::PackagePath.new(parent_path_string)
|
|
212
|
-
|
|
213
|
-
# Search for this package in the index
|
|
214
|
-
indexes[:package_paths].each do |path_string, indexed_package|
|
|
215
|
-
next unless indexed_package == package
|
|
216
|
-
|
|
217
|
-
path = Lutaml::Uml::PackagePath.new(path_string)
|
|
218
|
-
# Check if it's a direct child of parent_path
|
|
219
|
-
if path.starts_with?(parent_path) &&
|
|
220
|
-
path.depth == parent_path.depth + 1
|
|
221
|
-
return path_string
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
nil
|
|
226
|
-
end
|
|
227
|
-
end
|
|
228
|
-
end
|
|
229
|
-
end
|
|
230
|
-
end
|