Skip to content

Commit 2e6c80a

Browse files
authored
Merge pull request #152 from 1c-syntax/feature/mdorefmod
Добавлен метод получения типов модулей и ссылок на файл по mdoref
2 parents 51e29e9 + 0735624 commit 2e6c80a

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

src/main/java/com/github/_1c_syntax/mdclasses/metadata/Configuration.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import java.nio.file.Path;
5656
import java.util.ArrayList;
5757
import java.util.Collections;
58+
import java.util.EnumMap;
5859
import java.util.HashMap;
5960
import java.util.HashSet;
6061
import 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
}

src/test/java/com/github/_1c_syntax/mdclasses/metadata/ConfigurationTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ void testEDT() {
141141
checkFillPath(configuration.getChildren());
142142
checkFormData(configuration.getChildren());
143143

144+
var modulesByType = configuration.getModulesByMDORef("Document.ДОкумент1");
145+
assertThat(modulesByType).hasSize(2)
146+
.containsKey(ModuleType.ManagerModule)
147+
.containsKey(ModuleType.ObjectModule);
148+
149+
modulesByType = configuration.getModulesByMDORef("WSReference.WSСсылка");
150+
assertThat(modulesByType).isEmpty();
151+
144152
}
145153

146154
@Test
@@ -372,6 +380,18 @@ void testDesigner() {
372380

373381
checkFillPath(configuration.getChildren());
374382
checkFormData(configuration.getChildren());
383+
384+
var modulesByType = configuration.getModulesByMDORef("CommonModule.ГлобальныйОбщийМодуль");
385+
assertThat(modulesByType).hasSize(1)
386+
.containsKey(ModuleType.CommonModule);
387+
388+
modulesByType = configuration.getModulesByMDORef("WSReference.WSСсылка");
389+
assertThat(modulesByType).isEmpty();
390+
391+
modulesByType = configuration.getModulesByMDORef(configuration.getCommonModule("ГлобальныйОбщийМодуль")
392+
.get().getMdoReference());
393+
assertThat(modulesByType).hasSize(1)
394+
.containsKey(ModuleType.CommonModule);
375395
}
376396

377397
@Test

0 commit comments

Comments
 (0)