X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=core%2Forg.argeo.suite.core%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fcore%2FSuiteTypology.java;h=d9d6673c55955e895d4b7c388f537a37e53629d5;hp=d192ed7aef14a77509d9651632d8bd82c4f7cdd8;hb=95506a338057334877f18cd61253b1fa379caf0f;hpb=228b95119e16b3e88078842b68e3983b999208b1 diff --git a/core/org.argeo.suite.core/src/org/argeo/suite/core/SuiteTypology.java b/core/org.argeo.suite.core/src/org/argeo/suite/core/SuiteTypology.java index d192ed7..d9d6673 100644 --- a/core/org.argeo.suite.core/src/org/argeo/suite/core/SuiteTypology.java +++ b/core/org.argeo.suite.core/src/org/argeo/suite/core/SuiteTypology.java @@ -63,6 +63,28 @@ class SuiteTypology implements Typology { } } + public Term findTermByName(String name) { + List collected = new ArrayList<>(); + for (SuiteTerm subTerm : subTerms) { + collectTermsByName(subTerm, name, collected); + } + if (collected.isEmpty()) + return null; + if (collected.size() == 1) + return collected.get(0); + throw new IllegalArgumentException( + "There are " + collected.size() + " terms with name " + name + " in typology " + getId()); + } + + private void collectTermsByName(SuiteTerm term, String name, List collected) { + if (term.getName().equals(name)) { + collected.add(term); + } + for (SuiteTerm subTerm : term.getSubTerms()) { + collectTermsByName(subTerm, name, collected); + } + } + private void collectSubTerms(List terms, SuiteTerm term) { for (SuiteTerm subTerm : term.getSubTerms()) { terms.add(subTerm);