From 95506a338057334877f18cd61253b1fa379caf0f Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 7 Jul 2021 10:56:20 +0200 Subject: [PATCH] Introduce find term by name. --- .../src/org/argeo/entity/Typology.java | 1 + .../org/argeo/suite/core/SuiteTypology.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/core/org.argeo.entity.api/src/org/argeo/entity/Typology.java b/core/org.argeo.entity.api/src/org/argeo/entity/Typology.java index 43431a0..5be27e3 100644 --- a/core/org.argeo.entity.api/src/org/argeo/entity/Typology.java +++ b/core/org.argeo.entity.api/src/org/argeo/entity/Typology.java @@ -11,4 +11,5 @@ public interface Typology { List getSubTerms(); + Term findTermByName(String name); } 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); -- 2.30.2