I have seen How to get a list of all fields in a project and tried to make the same in java:
List<CustomField> customFields = ComponentAccessor.getCustomFieldManager().getCustomFieldObjects(projectId, ConstantsManager.ALL_ISSUE_TYPES);
Map<String, String> filteredCustomFields = new HashMap<>();
for (CustomField field : customFields) {
String key = field.getCustomFieldType().getKey();
if (!UNSUPPORTED_ML_FIELD_TYPES.contains(key) && key.contains(SYSTEM_CF_TYPES)) {
filteredCustomFields.put(field.getId(), field.getName());
}
}
Project currentProject = ComponentAccessor.getProjectManager().getProjectObj(projectId);
IssueTypeScreenScheme issueTypeScreenScheme = ComponentAccessor.getIssueTypeScreenSchemeManager().getIssueTypeScreenScheme(currentProject);
for (IssueTypeScreenSchemeEntity issueTypeScreenSchemeEntity: issueTypeScreenScheme.getEntities()) {
for (FieldScreenSchemeItem fieldScreenSchemeItem: issueTypeScreenSchemeEntity.getFieldScreenScheme().getFieldScreenSchemeItems()) {
for (FieldScreenTab fieldScreenTab: fieldScreenSchemeItem.getFieldScreen().getTabs()) {
for (FieldScreenLayoutItem fieldScreenLayoutItem: fieldScreenTab.getFieldScreenLayoutItems()) {
String fieldId = fieldScreenLayoutItem.getFieldId();
if (filteredCustomFields.containsKey(fieldId)) {
fieldsMap.put(fieldId, filteredCustomFields.get(fieldId));
}
}
}
}
}
And I'm wondering is there a way to make it simpler, without 3 inner loops?