Skip to content

Commit a0f4303

Browse files
authored
Merge pull request #57 from 1c-syntax/feature/forms
Первая часть по формам
2 parents 3eb537a + e70f4ef commit a0f4303

File tree

9 files changed

+149
-23
lines changed

9 files changed

+149
-23
lines changed

src/main/java/com/github/_1c_syntax/mdclasses/mdo/MDObjectBase.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import lombok.experimental.SuperBuilder;
1212

1313
import java.net.URI;
14+
import java.util.ArrayList;
15+
import java.util.List;
1416
import java.util.Map;
1517

1618
import static com.github._1c_syntax.mdclasses.metadata.utils.MapExtension.getOrEmptyString;
@@ -28,6 +30,8 @@ public class MDObjectBase {
2830
protected URI mdoURI;
2931
protected Map<URI, ModuleType> modulesByType;
3032

33+
protected List<Form> forms;
34+
3135
public abstract static class MDObjectBaseBuilder
3236
<C extends MDObjectBase, B extends MDObjectBase.MDObjectBaseBuilder<C, B>> {
3337

@@ -40,6 +44,23 @@ protected MDObjectBaseBuilder<C, B> properties(Map<String, Object> properties) {
4044

4145
return this.self();
4246
}
47+
48+
@JsonProperty("forms")
49+
protected MDObjectBaseBuilder<C, B> forms(Map<String, Object> properties) {
50+
51+
if (forms == null) {
52+
forms = new ArrayList<>();
53+
}
54+
forms.add(
55+
Form.builder()
56+
.comment(getOrEmptyString(properties, "comment"))
57+
.uuid(getOrEmptyString(properties, "uuid"))
58+
.name(getOrEmptyString(properties, "name"))
59+
.build());
60+
61+
return this.self();
62+
}
63+
4364
}
4465

4566
public void setMdoURI(URI uri) {
@@ -51,6 +72,13 @@ public void setMdoURI(URI uri) {
5172
public void setModulesByType(Map<URI, ModuleType> modulesByType) {
5273
if (this.modulesByType == null) {
5374
this.modulesByType = modulesByType;
75+
// todo реализовать заполнение для форм
76+
}
77+
}
78+
79+
public void setForms(List<Form> forms) {
80+
if (this.forms == null) {
81+
this.forms = forms;
5482
}
5583
}
5684

src/main/java/com/github/_1c_syntax/mdclasses/metadata/utils/Common.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ public static Map<URI, Map<SupportConfiguration, SupportVariant>> getModuleSuppo
5151
if (!mdoModuleSupport.isEmpty()) {
5252
modulesBySupport.putAll(mdoModuleSupport);
5353
}
54+
if (mdObject.getForms() != null) {
55+
mdObject.getForms().forEach(form -> {
56+
var formSupport = getMDObjectSupport(supportMap, form);
57+
if (!formSupport.isEmpty()) {
58+
modulesBySupport.putAll(formSupport);
59+
}
60+
});
61+
}
5462
})
5563
);
5664
}

src/main/java/com/github/_1c_syntax/mdclasses/metadata/utils/MDOUtils.java

Lines changed: 77 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github._1c_syntax.mdclasses.metadata.utils;
22

3+
import com.github._1c_syntax.mdclasses.mdo.Form;
34
import com.github._1c_syntax.mdclasses.mdo.MDObjectBase;
45
import com.github._1c_syntax.mdclasses.mdo.MetaDataObject;
56
import com.github._1c_syntax.mdclasses.metadata.additional.ConfigurationSource;
@@ -321,12 +322,14 @@ public static MDObjectBase getMDObject(ConfigurationSource configurationSource,
321322
}
322323

323324
if (mdo != null) {
325+
var mdoFolder = getMDOTypeFolderByMDOPath(configurationSource, mdoPath);
324326
mdo.setMdoURI(mdoPath.toUri());
325327
mdo.setModulesByType(getModuleTypesByMDOPath(
326328
configurationSource,
327329
mdoPath,
328-
getMDOTypeFolderByMDOPath(configurationSource, mdoPath),
330+
mdoFolder,
329331
type));
332+
updateMDOForms(configurationSource, mdo, type, mdoFolder);
330333
}
331334

332335
return mdo;
@@ -349,10 +352,6 @@ public static Map<URI, ModuleType> getModuleTypesByMDOPath(ConfigurationSource c
349352
}
350353
});
351354

352-
if (mdoType.isMayHaveForm()) {
353-
modulesByType.putAll(getFormsMDOModuleTypes(configurationSource, folder, mdoName));
354-
}
355-
356355
if (mdoType.isMayHaveCommand()) {
357356
modulesByType.putAll(getCommandsMDOModuleTypes(configurationSource, folder, mdoName));
358357
}
@@ -382,29 +381,37 @@ public static Map<URI, ModuleType> getModuleTypesByPath(ConfigurationSource conf
382381
}
383382

384383
getMDOFilesInFolder(configurationSource, folder)
385-
.forEach(mdoPath -> modulesByType.putAll(
386-
getModuleTypesByMDOPath(configurationSource, mdoPath, folder, mdoType)));
384+
.forEach(mdoPath -> {
385+
modulesByType.putAll(
386+
getModuleTypesByMDOPath(configurationSource, mdoPath, folder, mdoType));
387+
modulesByType.putAll(
388+
getFormsMDOModuleTypes(configurationSource,
389+
folder,
390+
FilenameUtils.getBaseName(mdoPath.toString())));
391+
}
392+
);
387393
}
388394

389395
return modulesByType;
390396
}
391397

398+
/**
399+
* MDOModuleTypes
400+
*/
401+
392402
@SneakyThrows
393403
private static Map<URI, ModuleType> getChildrenMDOModuleTypes(ConfigurationSource configurationSource,
394-
Path folder,
395-
String name,
396-
String subDir,
404+
Path rootPath,
397405
ModuleType moduleType) {
398406
Map<URI, ModuleType> modulesByType = new HashMap<>();
399407

400-
var rootPath = Paths.get(folder.toString(), name, subDir);
401408
if (rootPath.toFile().exists()) {
402409
try (Stream<Path> files = Files.walk(rootPath, 1)) {
403410
files
404411
.filter((Path f) -> Files.isDirectory(f))
405412
.forEach(mdoPath -> {
406-
var formName = FilenameUtils.getBaseName(mdoPath.toString());
407-
var modulePath = getModulePath(configurationSource, rootPath, formName, moduleType);
413+
var name = FilenameUtils.getBaseName(mdoPath.toString());
414+
var modulePath = getModulePath(configurationSource, rootPath, name, moduleType);
408415
if (modulePath != null && modulePath.toFile().exists()) {
409416
modulesByType.put(modulePath.toUri(), moduleType);
410417
}
@@ -415,21 +422,27 @@ private static Map<URI, ModuleType> getChildrenMDOModuleTypes(ConfigurationSourc
415422
return modulesByType;
416423
}
417424

418-
419425
private static Map<URI, ModuleType> getFormsMDOModuleTypes(ConfigurationSource configurationSource,
420426
Path folder,
421427
String name) {
422-
return getChildrenMDOModuleTypes(configurationSource, folder, name, "Forms", ModuleType.FormModule);
428+
return getChildrenMDOModuleTypes(configurationSource,
429+
Paths.get(folder.toString(), name, "Forms"),
430+
ModuleType.FormModule);
423431
}
424432

425433
private static Map<URI, ModuleType> getCommandsMDOModuleTypes(ConfigurationSource configurationSource,
426434
Path folder,
427435
String name) {
428436

429-
return getChildrenMDOModuleTypes(configurationSource, folder, name,
430-
"Commands", ModuleType.CommandModule);
437+
return getChildrenMDOModuleTypes(configurationSource,
438+
Paths.get(folder.toString(), name, "Commands"),
439+
ModuleType.CommandModule);
431440
}
432441

442+
/**
443+
* Children
444+
*/
445+
433446
public static Map<String, MDObjectBase> getChildren(ConfigurationSource configurationSource,
434447
Path rootPath,
435448
MDOType type) {
@@ -494,6 +507,53 @@ private List<String> getChildrenNamesInFolder(ConfigurationSource configurationS
494507
return childrenNames;
495508
}
496509

510+
private void updateMDOForms(ConfigurationSource configurationSource, MDObjectBase mdo, MDOType type, Path folder) {
511+
if (!type.isMayHaveForm() || folder == null) {
512+
return;
513+
}
514+
var formFolder = Paths.get(folder.toString(), mdo.getName(), "Forms");
515+
if (!formFolder.toFile().exists()) {
516+
return;
517+
}
518+
519+
// для EDT пока ничего не делаем, MDO для формы нету
520+
if (configurationSource != ConfigurationSource.EDT) {
521+
List<Form> mdoForms = new ArrayList<>();
522+
getMDOFilesInFolder(configurationSource, formFolder)
523+
.forEach(mdoFile -> {
524+
Form mdoForm = null;
525+
var xmlMapper = ObjectMapperFactory.createXmlMapper();
526+
try {
527+
MetaDataObject metaDataObject = xmlMapper.readValue(mdoFile.toFile(), MetaDataObject.class);
528+
mdoForm = metaDataObject.getForm();
529+
} catch (IOException e) {
530+
LOGGER.error(e.getMessage(), e);
531+
}
532+
if (mdoForm != null) {
533+
mdoForms.add(mdoForm);
534+
}
535+
});
536+
537+
mdo.setForms(mdoForms);
538+
}
539+
540+
if (mdo.getForms() != null) {
541+
mdo.getForms().forEach(form -> {
542+
Map<URI, ModuleType> modulesByType = new HashMap<>();
543+
var modulePath = getModulePath(configurationSource, formFolder, form.getName(), ModuleType.FormModule);
544+
if (modulePath != null && modulePath.toFile().exists()) {
545+
modulesByType.put(modulePath.toUri(), ModuleType.FormModule);
546+
}
547+
548+
form.setModulesByType(modulesByType);
549+
});
550+
}
551+
}
552+
553+
/**
554+
* Other
555+
*/
556+
497557
@SneakyThrows
498558
private List<Path> getMDOFilesInFolder(ConfigurationSource configurationSource, Path folder) {
499559
List<Path> childrenNames = new ArrayList<>();

src/test/java/com/github/_1c_syntax/mdclasses/ConfigurationEDTTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,14 @@ void testBuilder() {
3030
assertThat(configuration.getSynchronousExtensionAndAddInCallUseMode()).isEqualTo(UseMode.USE_WITH_WARNINGS);
3131
assertThat(configuration.getSynchronousPlatformExtensionAndAddInCallUseMode()).isEqualTo(UseMode.DONT_USE);
3232
assertThat(CompatibilityMode.compareTo(configuration.getCompatibilityMode(), new CompatibilityMode(3, 10))).isEqualTo(0);
33-
assertThat(configuration.getModulesByType().size() > 0).isTrue();
33+
assertThat(configuration.getModulesByType()).hasSize(34);
3434

3535
File file = new File("src/test/resources/metadata/edt/src/Constants/Константа1/ValueManagerModule.bsl");
3636
assertThat(configuration.getModuleType(Common.getAbsoluteUri(file))).isEqualTo(ModuleType.ValueManagerModule);
3737

3838
file = new File("src/test/resources/metadata/edt/src/CommonModules/ПростойОбщийМодуль/Module.bsl");
3939
assertThat(configuration.getModuleType(Common.getAbsoluteUri(file))).isEqualTo(ModuleType.CommonModule);
4040

41-
4241
file = new File("src/test/resources/metadata/edt/src/Catalogs/Справочник1/Forms/ФормаЭлемента/Module.bsl");
4342
assertThat(configuration.getModuleType(Common.getAbsoluteUri(file))).isEqualTo(ModuleType.FormModule);
4443

@@ -77,7 +76,7 @@ void testBuilderEn() {
7776
assertThat(configuration.getSynchronousExtensionAndAddInCallUseMode()).isEqualTo(UseMode.USE);
7877
assertThat(configuration.getSynchronousPlatformExtensionAndAddInCallUseMode()).isEqualTo(UseMode.DONT_USE);
7978
assertThat(CompatibilityMode.compareTo(configuration.getCompatibilityMode(), new CompatibilityMode(3, 14))).isEqualTo(0);
80-
assertThat(configuration.getModulesByType().size() > 0).isTrue();
79+
assertThat(configuration.getModulesByType()).hasSize(2);
8180

8281
File file = new File("src/test/resources/metadata/edt_en/src/CommonModules/CommonModule/Module.bsl");
8382
assertThat(configuration.getModuleType(Common.getAbsoluteUri(file))).isEqualTo(ModuleType.CommonModule);

src/test/java/com/github/_1c_syntax/mdclasses/ConfigurationOriginTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ void testBuilder() {
3333
assertThat(configuration.getSynchronousExtensionAndAddInCallUseMode()).isEqualTo(UseMode.USE);
3434
assertThat(configuration.getSynchronousPlatformExtensionAndAddInCallUseMode()).isEqualTo(UseMode.DONT_USE);
3535
assertThat(CompatibilityMode.compareTo(configuration.getCompatibilityMode(), new CompatibilityMode(3, 10))).isEqualTo(0);
36-
assertThat(configuration.getModulesByType().size() > 0).isTrue();
36+
assertThat(configuration.getModulesByType()).hasSize(22);
3737

3838
File file = new File("src/test/resources/metadata/original/Documents/ПоступлениеТоваровУслуг/Ext/ManagerModule.bsl");
3939
assertThat(configuration.getModuleType(Common.getAbsoluteUri(file))).isEqualTo(ModuleType.ManagerModule);

src/test/java/com/github/_1c_syntax/mdclasses/ParseSupportDataTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.github._1c_syntax.mdclasses;
22

33
import com.github._1c_syntax.mdclasses.metadata.Configuration;
4-
import com.github._1c_syntax.mdclasses.metadata.utils.ParseSupportData;
54
import com.github._1c_syntax.mdclasses.metadata.additional.SupportVariant;
5+
import com.github._1c_syntax.mdclasses.metadata.utils.ParseSupportData;
66
import org.junit.jupiter.api.Test;
77

88
import java.io.File;
@@ -38,6 +38,9 @@ void testConfigurationSupportEDT() {
3838
path = Paths.get(PATH_TO_SUPPORT, "src/Documents/ПервыйДокумент/ObjectModule.bsl").toAbsolutePath();
3939
assertThat(configuration.getModuleSupport(path.toUri()).containsValue(SupportVariant.NOT_SUPPORTED)).isTrue();
4040

41+
path = Paths.get(PATH_TO_SUPPORT, "src/Catalogs/ПервыйСправочник/Forms/ФормаЭлемента/Module.bsl").toAbsolutePath();
42+
assertThat(configuration.getModuleSupport(path.toUri()).containsValue(SupportVariant.NOT_EDITABLE)).isTrue();
43+
4144
}
4245

4346
@Test
@@ -58,7 +61,8 @@ void testConfigurationSupportDesigner() {
5861

5962
path = Paths.get(PATH_TO_SUPPORT, "Documents/ПервыйДокумент/Ext/ObjectModule.bsl").toAbsolutePath();
6063
assertThat(configuration.getModuleSupport(path.toUri()).containsValue(SupportVariant.NOT_SUPPORTED)).isTrue();
61-
64+
path = Paths.get(PATH_TO_SUPPORT, "Catalogs/ПервыйСправочник/Forms/ФормаЭлемента/Ext/Form/Module.bsl").toAbsolutePath();
65+
assertThat(configuration.getModuleSupport(path.toUri()).containsValue(SupportVariant.NOT_EDITABLE)).isTrue();
6266
}
6367

6468
}

src/test/java/com/github/_1c_syntax/mdclasses/mdo/MetaDataObjectTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ void metaDataObjectTestEDT() {
4747
assertThat(mdo instanceof Catalog).isTrue();
4848
assertThat(mdo.getName()).isEqualTo("Справочник1");
4949
assertThat(mdo.getUuid()).isEqualTo("eeef463d-d5e7-42f2-ae53-10279661f59d");
50+
assertThat(mdo.getForms()).isNotEmpty();
51+
assertThat(mdo.getForms()).hasSize(3);
52+
assertThat(mdo.getForms().stream().anyMatch(form -> form.getName().equals("ФормаЭлемента"))).isTrue();
5053

5154
mdo = MDOUtils.getMDObject(ConfigurationSource.EDT, MDOType.CHART_OF_ACCOUNTS, getMDOPathEDT("ChartsOfAccounts/ПланСчетов1/ПланСчетов1.mdo"));
5255
assertThat(mdo).isNotNull();
@@ -143,6 +146,11 @@ void metaDataObjectTestEDT() {
143146
assertThat(mdo instanceof Document).isTrue();
144147
assertThat(mdo.getName()).isEqualTo("Документ1");
145148
assertThat(mdo.getUuid()).isEqualTo("ce4fb46b-4af7-493e-9fcb-76ad8c4f8acd");
149+
assertThat(mdo.getForms()).isNotNull();
150+
var forms = mdo.getForms();
151+
assertThat(forms).hasSize(3);
152+
assertThat(forms.stream().anyMatch(form -> form.getName().equals("ФормаДокумента"))).isTrue();
153+
assertThat(forms.stream().anyMatch(form -> !form.getModulesByType().isEmpty())).isTrue();
146154

147155
mdo = MDOUtils.getMDObject(ConfigurationSource.EDT, MDOType.ENUM, getMDOPathEDT("Enums/Перечисление1/Перечисление1.mdo"));
148156
assertThat(mdo).isNotNull();
@@ -303,6 +311,9 @@ void metaDataObjectTestDesigner() {
303311
assertThat(mdo instanceof Catalog).isTrue();
304312
assertThat(mdo.getName()).isEqualTo("Справочник1");
305313
assertThat(mdo.getUuid()).isEqualTo("eeef463d-d5e7-42f2-ae53-10279661f59d");
314+
assertThat(mdo.getForms()).isNotEmpty();
315+
assertThat(mdo.getForms()).hasSize(3);
316+
assertThat(mdo.getForms().stream().anyMatch(form -> form.getName().equals("ФормаЭлемента"))).isTrue();
306317

307318
mdo = MDOUtils.getMDObject(ConfigurationSource.DESIGNER, MDOType.CHART_OF_ACCOUNTS, getMDOPathDesigner("ChartsOfAccounts/ПланСчетов1.xml"));
308319
assertThat(mdo).isNotNull();
@@ -400,6 +411,15 @@ void metaDataObjectTestDesigner() {
400411
assertThat(mdo.getName()).isEqualTo("Документ1");
401412
assertThat(mdo.getUuid()).isEqualTo("ce4fb46b-4af7-493e-9fcb-76ad8c4f8acd");
402413

414+
mdo = MDOUtils.getMDObject(ConfigurationSource.DESIGNER, MDOType.DOCUMENT, getMDOPathDesigner("Documents/ПоступлениеТоваровУслуг.xml"));
415+
assertThat(mdo).isNotNull();
416+
assertThat(mdo instanceof Document).isTrue();
417+
assertThat(mdo.getForms()).isNotNull();
418+
var forms = mdo.getForms();
419+
assertThat(forms).hasSize(6);
420+
assertThat(forms.stream().anyMatch(form -> form.getName().equals("ФормаПодбораТоваровИзЗаказа"))).isTrue();
421+
assertThat(forms.stream().anyMatch(form -> !form.getModulesByType().isEmpty())).isTrue();
422+
403423
mdo = MDOUtils.getMDObject(ConfigurationSource.DESIGNER, MDOType.ENUM, getMDOPathDesigner("Enums/Перечисление1.xml"));
404424
assertThat(mdo).isNotNull();
405425
assertThat(mdo instanceof MDOEnum).isTrue();

src/test/java/com/github/_1c_syntax/mdclasses/metadata/utils/MDOUtilsTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ private static Map<URI, ModuleType> correctFilesAndTypesDESIGNER(String srcPath)
6666
correct.put(Paths.get(srcPath, "Documents", "ПоступлениеТоваровУслуг", "Commands", "ДокументыПоступления", "Ext", "CommandModule.bsl").toUri(), ModuleType.CommandModule);
6767
correct.put(Paths.get(srcPath, "CommonCommands", "ОбщаяКоманда1", "Ext", "CommandModule.bsl").toUri(), ModuleType.CommandModule);
6868
correct.put(Paths.get(srcPath, "Catalogs", "Справочник1", "Commands", "Команда1", "Ext", "CommandModule.bsl").toUri(), ModuleType.CommandModule);
69+
correct.put(Paths.get(srcPath, "Catalogs", "Справочник1", "Forms", "ФормаВыбора", "Ext", "Form", "Module.bsl").toUri(), ModuleType.FormModule);
6970
correct.put(Paths.get(srcPath, "Documents", "ПоступлениеТоваровУслуг", "Ext", "ManagerModule.bsl").toUri(), ModuleType.ManagerModule);
7071
correct.put(Paths.get(srcPath, "Documents", "ПоступлениеТоваровУслуг", "Forms", "ФормаСпискаДокументов", "Ext", "Form", "Module.bsl").toUri(), ModuleType.FormModule);
7172
correct.put(Paths.get(srcPath, "Documents", "ПоступлениеТоваровУслуг", "Forms", "ФормаСписка", "Ext", "Form", "Module.bsl").toUri(), ModuleType.FormModule);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
3+
&НаКлиенте
4+
Процедура ВнешнееСобытие(Источник, Событие, Данные)
5+
//TODO: Вставить содержимое обработчика
6+
КонецПроцедуры

0 commit comments

Comments
 (0)