5555import java .nio .file .Path ;
5656import java .util .ArrayList ;
5757import java .util .Collections ;
58+ import java .util .EnumMap ;
5859import java .util .HashMap ;
5960import java .util .HashSet ;
6061import java .util .List ;
@@ -137,6 +138,10 @@ public class Configuration {
137138 * Модули объектов конфигурации в связке со ссылкой на файлы
138139 */
139140 private Map <URI , ModuleType > modulesByType ;
141+ /**
142+ * Модули объектов конфигурации в связке со ссылкой на файлы, сгруппированные по представлению mdoRef
143+ */
144+ private Map <String , Map <ModuleType , URI >> modulesByMDORef ;
140145 /**
141146 * Объекты конфигурации в связке со ссылкой на файлы
142147 */
@@ -180,6 +185,7 @@ protected Configuration() {
180185 modules = Collections .emptyList ();
181186 commonModules = Collections .emptyMap ();
182187 languages = Collections .emptyMap ();
188+ modulesByMDORef = Collections .emptyMap ();
183189
184190 rootPath = null ;
185191 name = "" ;
@@ -250,6 +256,7 @@ protected Configuration(MDOConfiguration mdoConfiguration, ConfigurationSource s
250256 Map <URI , ModuleType > modulesType = new HashMap <>();
251257 Map <URI , Map <SupportConfiguration , SupportVariant >> modulesSupport = new HashMap <>();
252258 Map <URI , MDObjectBSL > modulesObject = new HashMap <>();
259+ Map <String , Map <ModuleType , URI >> modulesMDORef = new CaseInsensitiveMap <>();
253260 List <MDOModule > modulesList = new ArrayList <>();
254261 final Map <String , Map <SupportConfiguration , SupportVariant >> supportMap = getSupportMap ();
255262
@@ -259,14 +266,15 @@ protected Configuration(MDOConfiguration mdoConfiguration, ConfigurationSource s
259266 // todo возможно надо будет добавить ссылку на mdo файл
260267
261268 if (mdo instanceof MDObjectBSL ) {
262- computeModules (modulesType , modulesSupport , modulesObject , modulesList , (MDObjectBSL ) mdo , supports );
269+ computeModules (modulesType , modulesSupport , modulesObject , modulesList , modulesMDORef , (MDObjectBSL ) mdo , supports );
263270 }
264271 });
265272
266273 modulesBySupport = modulesSupport ;
267274 modulesByType = modulesType ;
268275 modulesByObject = modulesObject ;
269276 modules = modulesList ;
277+ modulesByMDORef = modulesMDORef ;
270278 }
271279
272280 /**
@@ -368,6 +376,26 @@ public Optional<CommonModule> getCommonModule(String name) {
368376 return Optional .ofNullable (commonModules .get (name ));
369377 }
370378
379+ /**
380+ * Модули объектов конфигурации в связке со ссылкой на файлы по ссылке mdoRef
381+ *
382+ * @param mdoRef Строковая ссылка на объект
383+ * @return Соответствие ссылки на файл и его тип
384+ */
385+ public Map <ModuleType , URI > getModulesByMDORef (String mdoRef ) {
386+ return modulesByMDORef .getOrDefault (mdoRef , Collections .emptyMap ());
387+ }
388+
389+ /**
390+ * Модули объектов конфигурации в связке со ссылкой на файлы по ссылке mdoRef
391+ *
392+ * @param mdoRef Ссылка на объект
393+ * @return Соответствие ссылки на файл и его тип
394+ */
395+ public Map <ModuleType , URI > getModulesByMDORef (MDOReference mdoRef ) {
396+ return getModulesByMDORef (mdoRef .getMdoRef ());
397+ }
398+
371399 private Map <String , Map <SupportConfiguration , SupportVariant >> getSupportMap () {
372400 var fileParentConfiguration = MDOPathUtils .getParentConfigurationsPath (configurationSource , rootPath );
373401 if (fileParentConfiguration .isPresent () && fileParentConfiguration .get ().toFile ().exists ()) {
@@ -377,21 +405,25 @@ private Map<String, Map<SupportConfiguration, SupportVariant>> getSupportMap() {
377405 return Collections .emptyMap ();
378406 }
379407
408+ // todo надо рефакторить!!!!
380409 private static void computeModules (Map <URI , ModuleType > modulesType ,
381410 Map <URI , Map <SupportConfiguration , SupportVariant >> modulesSupport ,
382411 Map <URI , MDObjectBSL > modulesObject ,
383412 List <MDOModule > modulesList ,
384- MDObjectBSL mdo ,
413+ Map < String , Map < ModuleType , URI >> modulesMDORef , MDObjectBSL mdo ,
385414 Map <SupportConfiguration , SupportVariant > supports ) {
415+ Map <ModuleType , URI > modulesTypesAndURIs = new EnumMap <>(ModuleType .class );
386416 mdo .getModules ().forEach ((MDOModule module ) -> {
387417 var uri = module .getUri ();
388418 modulesType .put (uri , module .getModuleType ());
419+ modulesTypesAndURIs .put (module .getModuleType (), uri );
389420 modulesObject .put (uri , mdo );
390421 if (!supports .isEmpty ()) {
391422 modulesSupport .put (uri , supports );
392423 }
393424 modulesList .add (module );
394425 });
426+ modulesMDORef .put (mdo .getMdoReference ().getMdoRef (), modulesTypesAndURIs );
395427 }
396428
397429}
0 commit comments