Skip to content

Commit c49d836

Browse files
committed
Finish v0.17.3
2 parents ee488f2 + ecb937d commit c49d836

26 files changed

Lines changed: 179 additions & 15 deletions

build.gradle.kts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ dependencies {
5959

6060
// прочее
6161
implementation("commons-io", "commons-io", "2.18.0")
62-
implementation("io.github.1c-syntax", "bsl-common-library", "0.9.1")
63-
implementation("io.github.1c-syntax", "utils", "0.6.4")
62+
63+
implementation("io.github.1c-syntax", "bsl-common-library", "0.9.2")
64+
implementation("io.github.1c-syntax", "utils", "0.6.8")
6465
implementation("io.github.1c-syntax", "supportconf", "0.15.0") {
6566
exclude("io.github.1c-syntax", "bsl-common-library")
6667
}

src/main/java/com/github/_1c_syntax/bsl/mdo/CommonModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,9 @@ public class CommonModule implements MDObject, Module, ModuleOwner {
120120
*/
121121
@Default
122122
ReturnValueReuse returnValuesReuse = ReturnValueReuse.DONT_USE;
123+
124+
@Override
125+
public MdoReference getOwner() {
126+
return mdoReference; // сам модуль является владельцем
127+
}
123128
}

src/main/java/com/github/_1c_syntax/bsl/mdo/Module.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
package com.github._1c_syntax.bsl.mdo;
2323

2424
import com.github._1c_syntax.bsl.support.SupportVariant;
25+
import com.github._1c_syntax.bsl.types.MdoReference;
2526
import com.github._1c_syntax.bsl.types.ModuleType;
2627

2728
import java.net.URI;
@@ -49,4 +50,9 @@ public interface Module {
4950
* Признак "защищенности" модуля, т.е. наличия пароля и отсутствие исходного кода
5051
*/
5152
boolean isProtected();
53+
54+
/**
55+
* Ссылка на владельца модуля
56+
*/
57+
MdoReference getOwner();
5258
}

src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/RoleDataConverter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class RoleDataConverter implements ReadConverter {
3838

3939
private static final String OBJECT_NODE_NAME = "object";
4040
private static final String RIGHT_NODE_NAME = "right";
41+
private static final String RESTRICTION_TEMPLATE_NODE_NAME = "restrictionTemplate";
4142

4243
@Override
4344
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
@@ -53,6 +54,10 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co
5354
if (OBJECT_NODE_NAME.equals(name)) {
5455
var objectRight = readObjectRight(reader, context);
5556
builder.objectRight(objectRight);
57+
} else if (RESTRICTION_TEMPLATE_NODE_NAME.equals(name)) {
58+
// пропускаем
59+
reader.moveUp();
60+
continue;
5661
} else {
5762
var fieldClass = (Class<?>) TransformationUtils.fieldType(builder, name);
5863
Objects.requireNonNull(fieldClass, "Field type not found for: " + name);
@@ -76,7 +81,7 @@ private static RoleData.ObjectRight readObjectRight(HierarchicalStreamReader rea
7681
builder.right(right);
7782
} else {
7883
var fieldClass = (Class<?>) TransformationUtils.fieldType(builder, name);
79-
if(fieldClass == null) {
84+
if (fieldClass == null) {
8085
continue;
8186
}
8287
var value = ExtendXStream.readValue(context, fieldClass);

src/main/java/com/github/_1c_syntax/bsl/reader/common/converter/ValueTypeQualifierConverter.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ public class ValueTypeQualifierConverter implements ReadConverter {
4343
private static final String DATE_QUALIFIERS_NODE_NAME = "DateQualifiers";
4444
private static final String NUMBER_QUALIFIERS_NODE_NAME = "NumberQualifiers";
4545
private static final String BINARY_DATA_QUALIFIERS_NODE_NAME = "BinaryDataQualifiers";
46+
private static final String BINARY_QUALIFIERS_NODE_NAME = "BinaryQualifiers";
4647
private static final String LENGTH_NODE_NAME = "length";
4748
private static final String ALLOWED_LENGTH_NODE_NAME = "allowedLength";
49+
private static final String FIXED_NODE_NAME = "fixed";
4850
private static final String DATE_FRACTIONS_NODE_NAME = "dateFractions";
4951
private static final String SCALE_NODE_NAME = "scale";
5052
private static final String PRECISION_NODE_NAME = "precision";
@@ -71,6 +73,9 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co
7173
length = Integer.parseInt(reader.getValue());
7274
} else if (ALLOWED_LENGTH_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
7375
allowedLength = AllowedLength.valueByName(reader.getValue());
76+
} else if (FIXED_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
77+
var value = Boolean.parseBoolean(reader.getValue());
78+
allowedLength = value ? AllowedLength.FIXED : AllowedLength.VARIABLE;
7479
} else if (DATE_FRACTIONS_NODE_NAME.equalsIgnoreCase(reader.getNodeName())) {
7580
dateFractions = DateFractions.valueByName(reader.getValue());
7681
} else if (SCALE_NODE_NAME.equalsIgnoreCase(reader.getNodeName())
@@ -93,7 +98,8 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co
9398
return DateQualifiers.create(dateFractions);
9499
} else if (NUMBER_QUALIFIERS_NODE_NAME.equalsIgnoreCase(nodeName)) {
95100
return NumberQualifiers.create(precision, scale, nonNegative);
96-
} else if (BINARY_DATA_QUALIFIERS_NODE_NAME.equalsIgnoreCase(nodeName)) {
101+
} else if (BINARY_DATA_QUALIFIERS_NODE_NAME.equalsIgnoreCase(nodeName)
102+
|| BINARY_QUALIFIERS_NODE_NAME.equalsIgnoreCase(nodeName)) {
97103
return BinaryDataQualifiers.create(length, allowedLength);
98104
} else { // квалификаторы пока не обрабатываются
99105
LOGGER.warn("Unknown qualifiers {}", nodeName);

src/main/java/com/github/_1c_syntax/bsl/reader/common/xstream/ExtendXStream.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,13 @@ public Object fromXML(File file) {
123123
try {
124124
result = super.fromXML(file);
125125
} catch (ConversionException e) {
126-
LOGGER.error("Can't read file '{}' - it's broken (skipped) \n", file, e);
126+
LOGGER.warn("Can't read file '{}' - it's broken (skipped) \n", file, e);
127127
} catch (CannotResolveClassException e) {
128128
LOGGER.debug("Can't read file '{}' - unknown class (skipped) \n", file, e);
129129
} catch (StreamException e) {
130-
LOGGER.error("Can't read file '{}' - it's broken (skipped): {}", file, e.getCause().getMessage());
130+
LOGGER.warn("Can't read file '{}' - it's broken (skipped)", file, e);
131+
} catch (Exception e) {
132+
LOGGER.warn("Can't read file '{}' - unexpected error (skipped): {}", file, e.getMessage(), e);
131133
}
132134
}
133135
return result;

src/main/java/com/github/_1c_syntax/bsl/reader/designer/converter/RoleConverter.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,33 @@
3131
import java.nio.file.Path;
3232
import java.nio.file.Paths;
3333

34+
/**
35+
* Конвертер для чтения ролей из формата конфигуратора
36+
*/
3437
@DesignerConverter
3538
public class RoleConverter extends AbstractReadConverter {
3639

3740
private static final String DATA_FIELD = "data";
3841

42+
/**
43+
* Выполняет чтение роли из XML, включая данные прав доступа из файла Rights.xml
44+
*
45+
* @param reader Ридер XML потока
46+
* @param context Контекст десериализации
47+
* @return Прочитанный объект роли с данными прав доступа
48+
*/
3949
@Override
4050
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
4151
var readerContext = super.read(reader, context);
4252
RoleData data;
4353
try {
44-
data = (RoleData) ExtendXStream.read(reader, dataPath(readerContext.getCurrentPath(), readerContext.getName()));
54+
var readResult = ExtendXStream.read(reader, dataPath(readerContext.getCurrentPath(), readerContext.getName()));
55+
if (readResult instanceof RoleData roleData) {
56+
data = roleData;
57+
} else {
58+
// файл не прочитан или прочитан некорректно
59+
data = RoleData.EMPTY;
60+
}
4561
} catch (Exception e) {
4662
// ничего не делаем, считаем файл битым
4763
data = RoleData.EMPTY;
@@ -51,11 +67,24 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co
5167
return readerContext.build();
5268
}
5369

70+
/**
71+
* Проверяет, может ли конвертер обработать указанный тип
72+
*
73+
* @param type Тип класса для проверки
74+
* @return true, если тип является Role или его подклассом
75+
*/
5476
@Override
5577
public boolean canConvert(Class type) {
5678
return Role.class.isAssignableFrom(type);
5779
}
5880

81+
/**
82+
* Формирует путь к файлу Rights.xml для роли
83+
*
84+
* @param path Путь к файлу описания роли
85+
* @param name Имя роли
86+
* @return Путь к файлу Rights.xml
87+
*/
5988
private static Path dataPath(Path path, String name) {
6089
return Paths.get(path.getParent().toString(), name, "Ext", "Rights.xml");
6190
}

src/main/java/com/github/_1c_syntax/bsl/reader/edt/converter/RoleConverter.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,33 @@
3030

3131
import java.nio.file.Path;
3232

33+
/**
34+
* Конвертер для чтения ролей из формата ЕДТ
35+
*/
3336
@EDTConverter
3437
public class RoleConverter extends AbstractReadConverter {
3538

3639
private static final String DATA_FIELD = "data";
3740

41+
/**
42+
* Выполняет чтение роли из XML, включая данные прав доступа из файла Rights.rights
43+
*
44+
* @param reader Ридер XML потока
45+
* @param context Контекст десериализации
46+
* @return Прочитанный объект роли с данными прав доступа
47+
*/
3848
@Override
3949
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
4050
var readerContext = super.read(reader, context);
4151
RoleData data;
4252
try {
43-
data = (RoleData) ExtendXStream.read(reader, dataPath(readerContext.getCurrentPath()));
53+
var readResult = ExtendXStream.read(reader, dataPath(readerContext.getCurrentPath()));
54+
if (readResult instanceof RoleData roleData) {
55+
data = roleData;
56+
} else {
57+
// файл не прочитан или прочитан некорректно
58+
data = RoleData.EMPTY;
59+
}
4460
} catch (Exception e) {
4561
// ничего не делаем, считаем файл битым
4662
data = RoleData.EMPTY;
@@ -50,11 +66,23 @@ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext co
5066
return readerContext.build();
5167
}
5268

69+
/**
70+
* Проверяет, может ли конвертер обработать указанный тип
71+
*
72+
* @param type Тип класса для проверки
73+
* @return true, если тип является Role или его подклассом
74+
*/
5375
@Override
5476
public boolean canConvert(Class type) {
5577
return Role.class.isAssignableFrom(type);
5678
}
5779

80+
/**
81+
* Формирует путь к файлу Rights.rights для роли
82+
*
83+
* @param path Путь к файлу описания роли
84+
* @return Путь к файлу Rights.rights
85+
*/
5886
private static Path dataPath(Path path) {
5987
return Path.of(path.getParent().toString(), "Rights.rights");
6088
}

src/test/resources/ext/designer/mdclasses/src/cf/Roles/Роль1/Ext/Rights.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,17 @@
220220
<value>true</value>
221221
</right>
222222
</object>
223+
<restrictionTemplate>
224+
<name>ДляОбъекта(ПолеОбъекта)</name>
225+
<condition>// ДляОбъекта(ПолеОбъекта = "")
226+
#Если &amp;СпискиСОтключеннымОграничениемЧтения = "Неопределено" #Тогда
227+
// Информационная база заблокирована для обновления.
228+
ГДЕ ЛОЖЬ
229+
#Иначе
230+
ТекущаяТаблица ГДЕ ИСТИНА В
231+
(
232+
ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
233+
)
234+
</condition>
235+
</restrictionTemplate>
223236
</Rights>

src/test/resources/ext/edt/mdclasses/configuration/src/Documents/Документ1/Документ1.mdo

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,14 @@
3232
<name>Реквизит1</name>
3333
<type>
3434
<types>String</types>
35+
<types>BinaryData</types>
3536
<stringQualifiers>
3637
<length>10</length>
3738
</stringQualifiers>
39+
<binaryQualifiers>
40+
<length>16</length>
41+
<fixed>true</fixed>
42+
</binaryQualifiers>
3843
</type>
3944
<minValue xsi:type="core:UndefinedValue"/>
4045
<maxValue xsi:type="core:UndefinedValue"/>

0 commit comments

Comments
 (0)