in timescaledb-connector/src/main/java/com/epam/deltix/timebase/connector/util/RecordClassDescriptorUtils.java [131:178]
private static void fillUsedClasses(com.epam.deltix.timebase.messages.schema.RecordClassDescriptorInfo descriptor,
Set<String> usedClasses,
Map<CharSequence, com.epam.deltix.timebase.messages.schema.RecordClassDescriptor> descriptorsMap) {
com.epam.deltix.timebase.messages.schema.RecordClassDescriptorInfo parent = descriptor.getParent();
if (usedClasses.contains(descriptor.getName())) {
return;
}
if (parent != null) {
fillUsedClasses(parent, usedClasses, descriptorsMap);
usedClasses.add(parent.getName().toString());
}
ObjectList<DataFieldInfo> dataFields = descriptor.getDataFields();
if (dataFields == null) {
return;
}
for (int i = 0; i < dataFields.size(); i++) {
DataFieldInfo field = dataFields.get(i);
DataTypeInfo dataType = field.getDataType();
if (dataType instanceof com.epam.deltix.timebase.messages.schema.ClassDataType) {
com.epam.deltix.timebase.messages.schema.ClassDataType type = (com.epam.deltix.timebase.messages.schema.ClassDataType) dataType;
ObjectArrayList<ClassDescriptorRefInfo> classDescriptors = type.getTypeDescriptors();
classDescriptors.forEach(d -> {
fillUsedClasses(descriptorsMap.get(d.getName()), usedClasses, descriptorsMap);
usedClasses.add(d.getName().toString());
});
} else if (dataType instanceof com.epam.deltix.timebase.messages.schema.ArrayDataType) {
com.epam.deltix.timebase.messages.schema.ArrayDataType type = (com.epam.deltix.timebase.messages.schema.ArrayDataType) dataType;
DataTypeInfo elementDataType = type.getElementType();
if (elementDataType instanceof com.epam.deltix.timebase.messages.schema.ClassDataType) {
com.epam.deltix.timebase.messages.schema.ClassDataType classElementType =
(com.epam.deltix.timebase.messages.schema.ClassDataType) elementDataType;
ObjectArrayList<ClassDescriptorRefInfo> descriptors = classElementType.getTypeDescriptors();
descriptors.forEach(d -> {
fillUsedClasses(descriptorsMap.get(d.getName()), usedClasses, descriptorsMap);
usedClasses.add(d.getName().toString());
});
}
}
}
}