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,236 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Lutaml
|
|
4
|
-
module UmlRepository
|
|
5
|
-
# LazyRepository provides lazy loading optimization for very large
|
|
6
|
-
# UML models
|
|
7
|
-
#
|
|
8
|
-
# For extremely large models (1000+ classes), LazyRepository optimizes
|
|
9
|
-
# memory usage and initial load time by building indexes on-demand rather
|
|
10
|
-
# than upfront. Indexes are built only when first accessed, reducing the
|
|
11
|
-
# initial load time significantly.
|
|
12
|
-
#
|
|
13
|
-
# @example Using lazy loading from XMI
|
|
14
|
-
# repo = Lutaml::Xmi::Repository.from_xmi_lazy('large-model.xmi')
|
|
15
|
-
# # Only metadata loaded at this point
|
|
16
|
-
#
|
|
17
|
-
# klass = repo.find_class("ModelRoot::MyClass")
|
|
18
|
-
# # Now qualified_names index is built
|
|
19
|
-
#
|
|
20
|
-
# @example Building all indexes manually
|
|
21
|
-
# repo = Lutaml::Xmi::Repository.from_xmi_lazy('model.xmi')
|
|
22
|
-
# repo.build_all_indexes
|
|
23
|
-
# # All indexes are now available
|
|
24
|
-
class LazyRepository < Repository
|
|
25
|
-
# Initialize a new LazyRepository with lazy index building.
|
|
26
|
-
#
|
|
27
|
-
# @param document [Lutaml::Uml::Document] The UML document to wrap
|
|
28
|
-
# @param indexes [Hash, nil] Pre-built indexes, or nil to build lazily
|
|
29
|
-
# @param lazy [Boolean] Whether to enable lazy loading (default: true)
|
|
30
|
-
# @return [LazyRepository] A new repository instance (not frozen)
|
|
31
|
-
def initialize(document:, indexes: nil, lazy: true) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
|
32
|
-
@document = document
|
|
33
|
-
@indexes = indexes || {}
|
|
34
|
-
@lazy_mode = lazy
|
|
35
|
-
@index_builders_pending = Set.new(%i[
|
|
36
|
-
package_paths
|
|
37
|
-
qualified_names
|
|
38
|
-
stereotypes
|
|
39
|
-
inheritance_graph
|
|
40
|
-
diagram_index
|
|
41
|
-
])
|
|
42
|
-
|
|
43
|
-
# Initialize runtime query services (not serialized to LUR)
|
|
44
|
-
# These are lightweight wrappers that operate on @document and @indexes
|
|
45
|
-
@package_query = Queries::PackageQuery.new(@document, @indexes)
|
|
46
|
-
@class_query = Queries::ClassQuery.new(@document, @indexes)
|
|
47
|
-
@inheritance_query = Queries::InheritanceQuery.new(@document, @indexes)
|
|
48
|
-
@association_query = Queries::AssociationQuery.new(@document, @indexes)
|
|
49
|
-
@diagram_query = Queries::DiagramQuery.new(@document, @indexes)
|
|
50
|
-
@search_query = Queries::SearchQuery.new(@document, @indexes)
|
|
51
|
-
|
|
52
|
-
# Initialize statistics calculator (lazily computed)
|
|
53
|
-
@statistics_calculator = StatisticsCalculator.new(@document, @indexes)
|
|
54
|
-
|
|
55
|
-
# Initialize error handler for helpful error messages
|
|
56
|
-
@error_handler = ErrorHandler.new(self)
|
|
57
|
-
|
|
58
|
-
# Don't freeze - we build indexes on demand
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Find a class by its qualified name.
|
|
62
|
-
#
|
|
63
|
-
# Ensures the qualified_names index is built before querying.
|
|
64
|
-
#
|
|
65
|
-
# @param qualified_name [String] The qualified name
|
|
66
|
-
# @param raise_on_error [Boolean] Whether to raise an error if not found
|
|
67
|
-
# @return [Lutaml::Uml::Class, Lutaml::Uml::DataType,
|
|
68
|
-
# Lutaml::Uml::Enum, nil]
|
|
69
|
-
def find_class(qualified_name, raise_on_error: false)
|
|
70
|
-
ensure_index(:qualified_names)
|
|
71
|
-
super
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# Find a package by its path.
|
|
75
|
-
#
|
|
76
|
-
# Ensures the package_paths index is built before querying.
|
|
77
|
-
#
|
|
78
|
-
# @param path [String] The package path
|
|
79
|
-
# @param raise_on_error [Boolean] Whether to raise an error if not found
|
|
80
|
-
# @return [Lutaml::Uml::Package, Lutaml::Uml::Document, nil]
|
|
81
|
-
def find_package(path, raise_on_error: false)
|
|
82
|
-
ensure_index(:package_paths)
|
|
83
|
-
super
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# Find all classes with a specific stereotype.
|
|
87
|
-
#
|
|
88
|
-
# Ensures the stereotypes index is built before querying.
|
|
89
|
-
#
|
|
90
|
-
# @param stereotype [String] The stereotype to search for
|
|
91
|
-
# @return [Array] Array of class objects with the stereotype
|
|
92
|
-
def find_classes_by_stereotype(stereotype)
|
|
93
|
-
ensure_index(:stereotypes)
|
|
94
|
-
super
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Get the direct parent class (supertype).
|
|
98
|
-
#
|
|
99
|
-
# Ensures the qualified_names and inheritance_graph indexes are built.
|
|
100
|
-
#
|
|
101
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
102
|
-
# or qualified name string
|
|
103
|
-
# @return [Lutaml::Uml::Class, nil] The parent class, or nil if no parent
|
|
104
|
-
def supertype_of(class_or_qname)
|
|
105
|
-
ensure_index(:qualified_names)
|
|
106
|
-
ensure_index(:inheritance_graph)
|
|
107
|
-
super
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
# Get direct child classes (subtypes).
|
|
111
|
-
#
|
|
112
|
-
# Ensures the inheritance_graph index is built before querying.
|
|
113
|
-
#
|
|
114
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
115
|
-
# or qualified name string
|
|
116
|
-
# @param recursive [Boolean] Whether to include all descendants
|
|
117
|
-
# @return [Array] Array of child class objects
|
|
118
|
-
def subtypes_of(class_or_qname, recursive: false)
|
|
119
|
-
ensure_index(:inheritance_graph)
|
|
120
|
-
super
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
# Get all ancestor classes up to the root.
|
|
124
|
-
#
|
|
125
|
-
# Ensures the qualified_names and inheritance_graph indexes are built.
|
|
126
|
-
#
|
|
127
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
128
|
-
# or qualified name string
|
|
129
|
-
# @return [Array] Array of ancestor class objects
|
|
130
|
-
def ancestors_of(class_or_qname)
|
|
131
|
-
ensure_index(:qualified_names)
|
|
132
|
-
ensure_index(:inheritance_graph)
|
|
133
|
-
super
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# Get all descendant classes.
|
|
137
|
-
#
|
|
138
|
-
# Ensures the inheritance_graph index is built before querying.
|
|
139
|
-
#
|
|
140
|
-
# @param class_or_qname [Lutaml::Uml::Class, String] The class object
|
|
141
|
-
# or qualified name string
|
|
142
|
-
# @param max_depth [Integer, nil] Maximum depth to traverse
|
|
143
|
-
# @return [Array] Array of descendant class objects
|
|
144
|
-
def descendants_of(class_or_qname, max_depth: nil)
|
|
145
|
-
ensure_index(:inheritance_graph)
|
|
146
|
-
super
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
# Get diagrams in a specific package.
|
|
150
|
-
#
|
|
151
|
-
# Ensures the diagram_index is built before querying.
|
|
152
|
-
#
|
|
153
|
-
# @param package_path [String] The package path or package ID
|
|
154
|
-
# @return [Array<Lutaml::Uml::Diagram>] Array of diagram objects
|
|
155
|
-
def diagrams_in_package(package_path)
|
|
156
|
-
ensure_index(:diagram_index)
|
|
157
|
-
super
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
# Manually build all remaining indexes.
|
|
161
|
-
#
|
|
162
|
-
# This method can be called to force building all indexes at once,
|
|
163
|
-
# rather than waiting for them to be built on-demand.
|
|
164
|
-
#
|
|
165
|
-
# @return [LazyRepository] Returns self for method chaining
|
|
166
|
-
# @example
|
|
167
|
-
# repo = Repository.from_xmi_lazy('model.xmi')
|
|
168
|
-
# repo.build_all_indexes
|
|
169
|
-
# # All indexes are now built
|
|
170
|
-
def build_all_indexes
|
|
171
|
-
@index_builders_pending.each { |index_name| ensure_index(index_name) }
|
|
172
|
-
self
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
# Check if an index is built.
|
|
176
|
-
#
|
|
177
|
-
# @param index_name [Symbol] The name of the index to check
|
|
178
|
-
# @return [Boolean] True if the index is built, false otherwise
|
|
179
|
-
# @example
|
|
180
|
-
# repo.index_built?(:qualified_names) # => false
|
|
181
|
-
# repo.find_class("ModelRoot::MyClass")
|
|
182
|
-
# repo.index_built?(:qualified_names) # => true
|
|
183
|
-
def index_built?(index_name)
|
|
184
|
-
@indexes.key?(index_name) && !@indexes[index_name].nil?
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
# Get list of pending indexes.
|
|
188
|
-
#
|
|
189
|
-
# Returns the names of indexes that have not yet been built.
|
|
190
|
-
#
|
|
191
|
-
# @return [Array<Symbol>] Array of pending index names
|
|
192
|
-
# @example
|
|
193
|
-
# repo.pending_indexes # => [:package_paths, :qualified_names, ...]
|
|
194
|
-
def pending_indexes
|
|
195
|
-
@index_builders_pending.to_a
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
private
|
|
199
|
-
|
|
200
|
-
# Ensure an index is built.
|
|
201
|
-
#
|
|
202
|
-
# If the index is already built, this method returns immediately.
|
|
203
|
-
# Otherwise, it builds the index and removes it from the pending list.
|
|
204
|
-
#
|
|
205
|
-
# @param index_name [Symbol] The name of the index to ensure
|
|
206
|
-
# @return [void]
|
|
207
|
-
def ensure_index(index_name) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength
|
|
208
|
-
return if index_built?(index_name)
|
|
209
|
-
|
|
210
|
-
puts "Building #{index_name} index..." if $VERBOSE
|
|
211
|
-
|
|
212
|
-
case index_name
|
|
213
|
-
when :package_paths
|
|
214
|
-
@indexes[:package_paths] = IndexBuilder.build_package_paths(@document)
|
|
215
|
-
when :qualified_names
|
|
216
|
-
@indexes[:qualified_names] =
|
|
217
|
-
IndexBuilder.build_qualified_names(@document)
|
|
218
|
-
when :stereotypes
|
|
219
|
-
@indexes[:stereotypes] = IndexBuilder.build_stereotypes(@document)
|
|
220
|
-
when :inheritance_graph
|
|
221
|
-
# Requires qualified_names first
|
|
222
|
-
ensure_index(:qualified_names)
|
|
223
|
-
@indexes[:inheritance_graph] =
|
|
224
|
-
IndexBuilder.build_inheritance_graph(@document, @indexes)
|
|
225
|
-
when :diagram_index
|
|
226
|
-
# Requires package_paths first
|
|
227
|
-
ensure_index(:package_paths)
|
|
228
|
-
@indexes[:diagram_index] =
|
|
229
|
-
IndexBuilder.build_diagram_index(@document, @indexes)
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
@index_builders_pending.delete(index_name)
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
end
|
|
@@ -1,334 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "zip"
|
|
4
|
-
require "yaml"
|
|
5
|
-
require "time"
|
|
6
|
-
|
|
7
|
-
module Lutaml
|
|
8
|
-
module UmlRepository
|
|
9
|
-
# PackageExporter handles exporting UmlRepository instances to LUR
|
|
10
|
-
# (LutaML UML Repository) package files.
|
|
11
|
-
#
|
|
12
|
-
# LUR packages are ZIP archives containing:
|
|
13
|
-
# - Serialized Document model
|
|
14
|
-
# - Serialized indexes for fast loading
|
|
15
|
-
# - Metadata about the package
|
|
16
|
-
# - Statistics about the model
|
|
17
|
-
#
|
|
18
|
-
# @example Export with defaults
|
|
19
|
-
# exporter = PackageExporter.new(repository)
|
|
20
|
-
# exporter.export("model.lur")
|
|
21
|
-
#
|
|
22
|
-
# @example Export with PackageMetadata
|
|
23
|
-
# metadata = PackageMetadata.new(
|
|
24
|
-
# name: "Urban Model",
|
|
25
|
-
# version: "2.0",
|
|
26
|
-
# publisher: "City Planning",
|
|
27
|
-
# license: "CC-BY-4.0"
|
|
28
|
-
# )
|
|
29
|
-
# exporter = PackageExporter.new(repository, metadata: metadata)
|
|
30
|
-
# exporter.export("model.lur")
|
|
31
|
-
#
|
|
32
|
-
# @example Export with metadata hash (backward compatible)
|
|
33
|
-
# exporter = PackageExporter.new(repository,
|
|
34
|
-
# name: "My Model",
|
|
35
|
-
# version: "2.0",
|
|
36
|
-
# serialization_format: :yaml
|
|
37
|
-
# )
|
|
38
|
-
# exporter.export("model.lur")
|
|
39
|
-
class PackageExporter
|
|
40
|
-
# @return [UmlRepository] The repository being exported
|
|
41
|
-
attr_reader :repository
|
|
42
|
-
|
|
43
|
-
# @return [Hash] Export options
|
|
44
|
-
attr_reader :options
|
|
45
|
-
|
|
46
|
-
# @return [PackageMetadata] The package metadata
|
|
47
|
-
attr_reader :metadata
|
|
48
|
-
|
|
49
|
-
# Initialize a new PackageExporter.
|
|
50
|
-
#
|
|
51
|
-
# @param repository [UmlRepository] The repository to export
|
|
52
|
-
# @param options [Hash] Export options
|
|
53
|
-
# @option options [PackageMetadata, Hash] :metadata Package metadata
|
|
54
|
-
# (can be PackageMetadata object or Hash)
|
|
55
|
-
# @option options [Symbol] :serialization_format (:yaml) Format for
|
|
56
|
-
# Document serialization (:yaml)
|
|
57
|
-
# @option options [Boolean] :include_xmi (false) Include source XMI
|
|
58
|
-
# in package
|
|
59
|
-
# @option options [Integer] :compression_level (6) ZIP compression level
|
|
60
|
-
# (0-9)
|
|
61
|
-
# @option options [String] :name ("UML Model") Package name
|
|
62
|
-
# (deprecated, use :metadata)
|
|
63
|
-
# @option options [String] :version ("1.0") Package version
|
|
64
|
-
# (deprecated, use :metadata)
|
|
65
|
-
def initialize(repository, options = {})
|
|
66
|
-
@repository = repository
|
|
67
|
-
@options = default_options.merge(options)
|
|
68
|
-
@metadata = build_metadata(@options)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# Export the repository to a LUR package file.
|
|
72
|
-
#
|
|
73
|
-
# @param output_path [String] Path for the output .lur file
|
|
74
|
-
# @return [void]
|
|
75
|
-
# @raise [ArgumentError] If serialization format is invalid
|
|
76
|
-
# @example
|
|
77
|
-
# exporter.export("model.lur")
|
|
78
|
-
def export(output_path) # rubocop:disable Metrics/MethodLength
|
|
79
|
-
validate_options!
|
|
80
|
-
|
|
81
|
-
retries = 0
|
|
82
|
-
begin
|
|
83
|
-
write_lur_package(output_path)
|
|
84
|
-
rescue Errno::EACCES
|
|
85
|
-
retries += 1
|
|
86
|
-
retry if retries < 3
|
|
87
|
-
raise
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
private
|
|
92
|
-
|
|
93
|
-
def write_lur_package(output_path)
|
|
94
|
-
Zip::File.open(output_path, create: true) do |zip|
|
|
95
|
-
write_metadata(zip)
|
|
96
|
-
write_document(zip)
|
|
97
|
-
write_indexes(zip)
|
|
98
|
-
write_index_tree(zip)
|
|
99
|
-
write_statistics(zip)
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
# Get default export options.
|
|
104
|
-
#
|
|
105
|
-
# @return [Hash] Default options
|
|
106
|
-
def default_options
|
|
107
|
-
{
|
|
108
|
-
serialization_format: :yaml,
|
|
109
|
-
include_xmi: false,
|
|
110
|
-
compression_level: 6,
|
|
111
|
-
name: "UML Model",
|
|
112
|
-
version: "1.0",
|
|
113
|
-
}
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
# Build PackageMetadata from options.
|
|
117
|
-
#
|
|
118
|
-
# Handles three cases:
|
|
119
|
-
# 1. :metadata is a PackageMetadata object - use directly
|
|
120
|
-
# 2. :metadata is a Hash - build from hash
|
|
121
|
-
# 3. Old-style :name/:version options - build from those
|
|
122
|
-
#
|
|
123
|
-
# @param options [Hash] Export options
|
|
124
|
-
# @return [PackageMetadata] Package metadata
|
|
125
|
-
def build_metadata(options) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
|
126
|
-
# Case 1: metadata is already a PackageMetadata object
|
|
127
|
-
if options[:metadata].is_a?(PackageMetadata)
|
|
128
|
-
return options[:metadata]
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
# Case 2: metadata is a Hash
|
|
132
|
-
if options[:metadata].is_a?(Hash)
|
|
133
|
-
metadata_hash = options[:metadata].dup
|
|
134
|
-
# Ensure serialization_format is set
|
|
135
|
-
metadata_hash[:serialization_format] ||=
|
|
136
|
-
options[:serialization_format]
|
|
137
|
-
# Normalize keys to symbols and create directly
|
|
138
|
-
normalized = metadata_hash.transform_keys(&:to_sym)
|
|
139
|
-
return PackageMetadata.new(**normalized)
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
# Case 3: Old-style options (backward compatibility)
|
|
143
|
-
PackageMetadata.new(
|
|
144
|
-
name: options[:name],
|
|
145
|
-
version: options[:version],
|
|
146
|
-
serialization_format: options[:serialization_format].to_s,
|
|
147
|
-
)
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
# Validate export options.
|
|
151
|
-
#
|
|
152
|
-
# @return [void]
|
|
153
|
-
# @raise [ArgumentError] If options are invalid
|
|
154
|
-
def validate_options!
|
|
155
|
-
format = @options[:serialization_format]
|
|
156
|
-
unless format == :yaml
|
|
157
|
-
raise ArgumentError,
|
|
158
|
-
"Invalid serialization format: #{format}. Must be :yaml"
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
# Write metadata.yaml to the package.
|
|
163
|
-
#
|
|
164
|
-
# Converts PackageMetadata to YAML hash, then adds operational
|
|
165
|
-
# metadata (created_at, created_by, etc.).
|
|
166
|
-
#
|
|
167
|
-
# @param zip [Zip::File] The ZIP archive
|
|
168
|
-
# @return [void]
|
|
169
|
-
def write_metadata(zip) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
|
170
|
-
# Convert PackageMetadata to hash via YAML round-trip
|
|
171
|
-
metadata_hash = YAML.safe_load(@metadata.to_yaml)
|
|
172
|
-
|
|
173
|
-
# Add operational metadata (not in PackageMetadata model)
|
|
174
|
-
metadata_hash["created_at"] = Time.now.utc.iso8601
|
|
175
|
-
metadata_hash["created_by"] = "lutaml-xmi v#{Lutaml::VERSION}"
|
|
176
|
-
metadata_hash["lutaml_version"] = Lutaml::VERSION
|
|
177
|
-
metadata_hash["statistics"] = @repository.statistics
|
|
178
|
-
|
|
179
|
-
# Ensure serialization_format is set
|
|
180
|
-
metadata_hash["serialization_format"] ||=
|
|
181
|
-
@options[:serialization_format].to_s
|
|
182
|
-
|
|
183
|
-
zip.get_output_stream("metadata.yaml") do |io|
|
|
184
|
-
io.write(YAML.dump(metadata_hash))
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
# Write the Document to the package.
|
|
189
|
-
#
|
|
190
|
-
# @param zip [Zip::File] The ZIP archive
|
|
191
|
-
# @return [void]
|
|
192
|
-
def write_document(zip)
|
|
193
|
-
zip.get_output_stream("repository.yaml") do |io|
|
|
194
|
-
io.write(@repository.document.to_yaml)
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
# Write indexes to the package.
|
|
199
|
-
#
|
|
200
|
-
# @param zip [Zip::File] The ZIP archive
|
|
201
|
-
# @return [void]
|
|
202
|
-
def write_indexes(zip)
|
|
203
|
-
zip.get_output_stream("indexes/all.yaml") do |io|
|
|
204
|
-
io.write(YAML.dump(@repository.indexes))
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
# Write index tree (searchable list of all model elements) to the package.
|
|
209
|
-
#
|
|
210
|
-
# @param zip [Zip::File] The ZIP archive
|
|
211
|
-
# @return [void]
|
|
212
|
-
def write_index_tree(zip)
|
|
213
|
-
tree = build_index_tree
|
|
214
|
-
|
|
215
|
-
zip.get_output_stream("index_tree.yaml") do |io|
|
|
216
|
-
io.write(YAML.dump(tree))
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
# Build a complete index tree of all model elements
|
|
221
|
-
#
|
|
222
|
-
# @return [Hash] Index tree structure
|
|
223
|
-
def build_index_tree # rubocop:disable Metrics/MethodLength
|
|
224
|
-
{
|
|
225
|
-
"format" => "lutaml_index_tree_v1",
|
|
226
|
-
"generated_at" => Time.now.utc.iso8601,
|
|
227
|
-
"packages" => build_packages_index,
|
|
228
|
-
"classes" => build_classes_index,
|
|
229
|
-
"summary" => {
|
|
230
|
-
"total_packages" => @repository.indexes[:package_paths].size,
|
|
231
|
-
"total_classes" => @repository.indexes[:qualified_names].size,
|
|
232
|
-
"total_attributes" => count_all_attributes,
|
|
233
|
-
},
|
|
234
|
-
}
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
# Build packages index
|
|
238
|
-
#
|
|
239
|
-
# @return [Hash] Packages indexed by path
|
|
240
|
-
def build_packages_index # rubocop:disable Metrics/MethodLength
|
|
241
|
-
packages = {}
|
|
242
|
-
@repository.indexes[:package_paths].each do |path, package|
|
|
243
|
-
next unless package.is_a?(Lutaml::Uml::Package)
|
|
244
|
-
|
|
245
|
-
packages[path] = {
|
|
246
|
-
"name" => package.name,
|
|
247
|
-
"xmi_id" => package.xmi_id,
|
|
248
|
-
"classes_count" => @repository
|
|
249
|
-
.classes_in_package(path, recursive: false).size,
|
|
250
|
-
"diagrams_count" => package.diagrams&.size || 0,
|
|
251
|
-
}
|
|
252
|
-
end
|
|
253
|
-
packages
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
# Build classes index
|
|
257
|
-
#
|
|
258
|
-
# @return [Hash] Classes indexed by qualified name
|
|
259
|
-
def build_classes_index # rubocop:disable Metrics/MethodLength
|
|
260
|
-
classes = {}
|
|
261
|
-
@repository.indexes[:qualified_names].each do |qname, klass|
|
|
262
|
-
classes[qname] = {
|
|
263
|
-
"name" => klass.name,
|
|
264
|
-
"xmi_id" => klass.xmi_id,
|
|
265
|
-
"type" => klass.class.name.split("::").last, # Class, DataType, Enum
|
|
266
|
-
"stereotype" => format_stereotype(klass.stereotype),
|
|
267
|
-
"attributes" => build_attributes_list(klass),
|
|
268
|
-
"package_path" => extract_package_path(qname),
|
|
269
|
-
}
|
|
270
|
-
end
|
|
271
|
-
classes
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
# Build attributes list for a class
|
|
275
|
-
#
|
|
276
|
-
# @param klass [Object] The class object
|
|
277
|
-
# @return [Array<Hash>] List of attributes
|
|
278
|
-
def build_attributes_list(klass)
|
|
279
|
-
return [] unless klass.is_a?(Lutaml::Uml::Classifier) && klass.attributes
|
|
280
|
-
|
|
281
|
-
klass.attributes.map do |attr|
|
|
282
|
-
{
|
|
283
|
-
"name" => attr.name,
|
|
284
|
-
"type" => attr.type,
|
|
285
|
-
"visibility" => attr.visibility,
|
|
286
|
-
}.compact
|
|
287
|
-
end
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
# Format stereotype for consistent output
|
|
291
|
-
#
|
|
292
|
-
# @param stereotype [String, Array, nil] Stereotype value
|
|
293
|
-
# @return [String, Array, nil] Formatted stereotype
|
|
294
|
-
def format_stereotype(stereotype)
|
|
295
|
-
return nil if stereotype.nil?
|
|
296
|
-
return stereotype if stereotype.is_a?(String)
|
|
297
|
-
|
|
298
|
-
stereotype.is_a?(Array) && stereotype.empty? ? nil : stereotype
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
# Extract package path from qualified name
|
|
302
|
-
#
|
|
303
|
-
# @param qname [String] Qualified name
|
|
304
|
-
# @return [String] Package path
|
|
305
|
-
def extract_package_path(qname)
|
|
306
|
-
parts = qname.split("::")
|
|
307
|
-
parts.size > 1 ? parts[0..-2].join("::") : "ModelRoot"
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
# Count all attributes across all classes
|
|
311
|
-
#
|
|
312
|
-
# @return [Integer] Total attribute count
|
|
313
|
-
def count_all_attributes
|
|
314
|
-
total = 0
|
|
315
|
-
@repository.indexes[:qualified_names].each_value do |klass|
|
|
316
|
-
if klass.is_a?(Lutaml::Uml::Classifier) && klass.attributes
|
|
317
|
-
total += klass.attributes.size
|
|
318
|
-
end
|
|
319
|
-
end
|
|
320
|
-
total
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
# Write statistics to the package.
|
|
324
|
-
#
|
|
325
|
-
# @param zip [Zip::File] The ZIP archive
|
|
326
|
-
# @return [void]
|
|
327
|
-
def write_statistics(zip)
|
|
328
|
-
zip.get_output_stream("statistics.yaml") do |io|
|
|
329
|
-
io.write(YAML.dump(@repository.statistics))
|
|
330
|
-
end
|
|
331
|
-
end
|
|
332
|
-
end
|
|
333
|
-
end
|
|
334
|
-
end
|