Corrects some bug in building the sequence filter

This commit is contained in:
2022-02-25 10:36:01 +01:00
parent 011898bd9d
commit 62cd1c44dc

View File

@ -32,6 +32,7 @@ var _IdList = ""
var _Taxdump = "" var _Taxdump = ""
var _Taxonomy = (*obitax.Taxonomy)(nil) var _Taxonomy = (*obitax.Taxonomy)(nil)
var _RequiredAttributes = make([]string, 0) var _RequiredAttributes = make([]string, 0)
var _AttributePatterns = make(map[string]string, 0) var _AttributePatterns = make(map[string]string, 0)
@ -224,7 +225,7 @@ func CLIRestrictTaxonomyPredicate() obiseq.SequencePredicate {
p := obitax.IsSubCladeOf(*taxonomy, _BelongTaxa[0]) p := obitax.IsSubCladeOf(*taxonomy, _BelongTaxa[0])
for _, taxid := range _BelongTaxa[1:] { for _, taxid := range _BelongTaxa[1:] {
p.Or(obitax.IsSubCladeOf(*taxonomy, taxid)) p = p.Or(obitax.IsSubCladeOf(*taxonomy, taxid))
} }
return p return p
@ -240,7 +241,7 @@ func CLIAvoidTaxonomyPredicate() obiseq.SequencePredicate {
p := obitax.IsSubCladeOf(*taxonomy, _NotBelongTaxa[0]) p := obitax.IsSubCladeOf(*taxonomy, _NotBelongTaxa[0])
for _, taxid := range _NotBelongTaxa[1:] { for _, taxid := range _NotBelongTaxa[1:] {
p.Or(obitax.IsSubCladeOf(*taxonomy, taxid)) p = p.Or(obitax.IsSubCladeOf(*taxonomy, taxid))
} }
return p.Not() return p.Not()
@ -256,7 +257,7 @@ func CLIHasRankDefinedPredicate() obiseq.SequencePredicate {
p := obitax.HasRankDefined(*taxonomy, _RequiredRanks[0]) p := obitax.HasRankDefined(*taxonomy, _RequiredRanks[0])
for _, rank := range _RequiredRanks[1:] { for _, rank := range _RequiredRanks[1:] {
p.And(obitax.HasRankDefined(*taxonomy, rank)) p = p.And(obitax.HasRankDefined(*taxonomy, rank))
} }
return p return p
@ -275,7 +276,7 @@ func CLIPredicatesPredicate() obiseq.SequencePredicate {
p := obiseq.ExpressionPredicat(_Predicats[0]) p := obiseq.ExpressionPredicat(_Predicats[0])
for _, expression := range _Predicats[1:] { for _, expression := range _Predicats[1:] {
p.And(obiseq.ExpressionPredicat(expression)) p = p.And(obiseq.ExpressionPredicat(expression))
} }
return p return p
@ -290,7 +291,7 @@ func CLISequencePatternPredicate() obiseq.SequencePredicate {
p := obiseq.IsSequenceMatch(_SequencePatterns[0]) p := obiseq.IsSequenceMatch(_SequencePatterns[0])
for _, pattern := range _SequencePatterns[1:] { for _, pattern := range _SequencePatterns[1:] {
p.And(obiseq.IsSequenceMatch(pattern)) p = p.And(obiseq.IsSequenceMatch(pattern))
} }
return p return p
@ -305,7 +306,7 @@ func CLIDefinitionPatternPredicate() obiseq.SequencePredicate {
p := obiseq.IsDefinitionMatch(_DefinitionPatterns[0]) p := obiseq.IsDefinitionMatch(_DefinitionPatterns[0])
for _, pattern := range _DefinitionPatterns[1:] { for _, pattern := range _DefinitionPatterns[1:] {
p.And(obiseq.IsDefinitionMatch(pattern)) p = p.And(obiseq.IsDefinitionMatch(pattern))
} }
return p return p
@ -320,7 +321,7 @@ func CLIIdPatternPredicate() obiseq.SequencePredicate {
p := obiseq.IsIdMatch(_IdPatterns[0]) p := obiseq.IsIdMatch(_IdPatterns[0])
for _, pattern := range _IdPatterns[1:] { for _, pattern := range _IdPatterns[1:] {
p.And(obiseq.IsIdMatch(pattern)) p = p.And(obiseq.IsIdMatch(pattern))
} }
return p return p
@ -349,6 +350,37 @@ func CLIIdListPredicate() obiseq.SequencePredicate {
return nil return nil
} }
func CLIHasAttibutePredicate() obiseq.SequencePredicate {
if len(_RequiredAttributes) > 0 {
p := obiseq.HasAttribute(_RequiredAttributes[0])
for _, rank := range _RequiredAttributes[1:] {
p = p.And(obiseq.HasAttribute(rank))
}
return p
}
return nil
}
func CLIIsAttibuteMatchPredicate() obiseq.SequencePredicate {
if len(_AttributePatterns) > 0 {
p := obiseq.SequencePredicate(nil)
for key, pattern := range _AttributePatterns {
log.Println(key, pattern)
p = p.And(obiseq.IsAttributeMatch(key, pattern))
}
return p
}
return nil
}
func CLISequenceSelectionPredicate() obiseq.SequencePredicate { func CLISequenceSelectionPredicate() obiseq.SequencePredicate {
p := CLISequenceSizePredicate() p := CLISequenceSizePredicate()
p = p.And(CLISequenceCountPredicate()) p = p.And(CLISequenceCountPredicate())
@ -358,6 +390,8 @@ func CLISequenceSelectionPredicate() obiseq.SequencePredicate {
p = p.And(CLIDefinitionPatternPredicate()) p = p.And(CLIDefinitionPatternPredicate())
p = p.And(CLIIdPatternPredicate()) p = p.And(CLIIdPatternPredicate())
p = p.And(CLIIdListPredicate()) p = p.And(CLIIdListPredicate())
p = p.And(CLIHasAttibutePredicate())
p = p.And(CLIIsAttibuteMatchPredicate())
if _InvertMatch { if _InvertMatch {
p = p.Not() p = p.Not()