in pkg/document/model/feature.go [111:204]
func GetFeatureDocumentModel(taskServer *inspection.InspectionTaskServer) (*FeatureDocumentModel, error) {
result := FeatureDocumentModel{}
features := task.Subset(taskServer.RootTaskSet, filter.NewEnabledFilter(inspection_task.LabelKeyInspectionFeatureFlag, false))
for _, feature := range features.GetAll() {
indirectQueryDependencyElement := []FeatureIndirectDependentQueryElement{}
targetQueryDependencyElement := FeatureDependentTargetQueryElement{}
targetLogTypeKey := typedmap.GetOrDefault(feature.Labels(), inspection_task.LabelKeyFeatureTaskTargetLogType, enum.LogTypeUnknown)
// Get query related tasks in the dependency of this feature.
queryTasksInDependency, err := getDependentQueryTasks(taskServer, feature)
if err != nil {
return nil, err
}
for _, queryTask := range queryTasksInDependency {
logTypeKey := typedmap.GetOrDefault(queryTask.Labels(), label.TaskLabelKeyQueryTaskTargetLogType, enum.LogTypeUnknown)
if targetLogTypeKey != logTypeKey {
logType := enum.LogTypes[logTypeKey]
indirectQueryDependencyElement = append(indirectQueryDependencyElement, FeatureIndirectDependentQueryElement{
ID: queryTask.UntypedID().String(),
LogTypeLabel: logType.Label,
LogTypeColorCode: strings.TrimLeft(logType.LabelBackgroundColor, "#"),
})
} else {
targetQueryDependencyElement = FeatureDependentTargetQueryElement{
ID: queryTask.UntypedID().String(),
LogTypeLabel: enum.LogTypes[targetLogTypeKey].Label,
LogTypeColorCode: strings.TrimLeft(enum.LogTypes[targetLogTypeKey].LabelBackgroundColor, "#"),
SampleQuery: typedmap.GetOrDefault(queryTask.Labels(), label.TaskLabelKeyQueryTaskSampleQuery, ""),
}
}
}
formElements := []FeatureDependentFormElement{}
formTasks, err := getDependentFormTasks(taskServer, feature)
if err != nil {
return nil, err
}
for _, formTask := range formTasks {
formElements = append(formElements, FeatureDependentFormElement{
ID: formTask.UntypedID().String(),
Label: typedmap.GetOrDefault(formTask.Labels(), label.TaskLabelKeyFormFieldLabel, ""),
Description: typedmap.GetOrDefault(formTask.Labels(), label.TaskLabelKeyFormFieldDescription, ""),
})
}
outputTimelines := []FeatureOutputTimelineElement{}
for i := 0; i < enum.EnumParentRelationshipLength; i++ {
relationshipKey := enum.ParentRelationship(i)
relationship := enum.ParentRelationships[relationshipKey]
isRelated := false
for _, event := range relationship.GeneratableEvents {
if event.SourceLogType == targetLogTypeKey {
isRelated = true
break
}
}
for _, revision := range relationship.GeneratableRevisions {
if revision.SourceLogType == targetLogTypeKey {
isRelated = true
break
}
}
for _, alias := range relationship.GeneratableAliasTimelineInfo {
if alias.SourceLogType == targetLogTypeKey {
isRelated = true
break
}
}
if isRelated {
outputTimelines = append(outputTimelines, FeatureOutputTimelineElement{
RelationshipID: relationship.EnumKeyName,
RelationshipColorCode: strings.TrimLeft(relationship.LabelBackgroundColor, "#"),
LongName: relationship.LongName,
Label: relationship.Label,
Description: relationship.Description,
})
}
}
result.Features = append(result.Features, FeatureDocumentElement{
ID: feature.UntypedID().String(),
Name: typedmap.GetOrDefault(feature.Labels(), inspection_task.LabelKeyFeatureTaskTitle, ""),
Description: typedmap.GetOrDefault(feature.Labels(), inspection_task.LabelKeyFeatureTaskDescription, ""),
IndirectQueryDependency: indirectQueryDependencyElement,
TargetQueryDependency: targetQueryDependencyElement,
Forms: formElements,
OutputTimelines: outputTimelines,
AvailableInspectionTypes: getAvailableInspectionTypes(taskServer, feature),
})
}
return &result, nil
}