public void expandTermCategories(Map<String, TermData> data) { Set<String> result = new LinkedHashSet<>(); Queue<String> front = new LinkedList<>(); if (this.get(TERM_CATEGORY_FIELD_NAME) == null) { this.put(TERM_CATEGORY_FIELD_NAME, super.getEmptyCollection()); } result.add(this.id); front.addAll(this.get(TERM_CATEGORY_FIELD_NAME)); String nextTermId; while ((nextTermId = front.poll()) != null) { result.add(nextTermId); if (data.get(nextTermId).get(PARENT_FIELD_NAME) == null) { continue; } for (String parentTermId : data.get(nextTermId).get(PARENT_FIELD_NAME)) { parentTermId = parentTermId.replaceAll(PARENT_ID_REGEX, "$1"); if (!result.contains(parentTermId) && !front.contains(parentTermId)) { front.add(parentTermId); } } } this.put(TERM_CATEGORY_FIELD_NAME, result); } }
public void expandTermCategories(Map<String, TermData> data) { Set<String> result = new LinkedHashSet<>(); Queue<String> front = new LinkedList<>(); if (this.get(TERM_CATEGORY_FIELD_NAME) == null) { this.put(TERM_CATEGORY_FIELD_NAME, super.getEmptyCollection()); } result.add(this.id); front.addAll(this.get(TERM_CATEGORY_FIELD_NAME)); String nextTermId; while ((nextTermId = front.poll()) != null) { result.add(nextTermId); if (data.get(nextTermId).get(PARENT_FIELD_NAME) == null) { continue; } for (String parentTermId : data.get(nextTermId).get(PARENT_FIELD_NAME)) { parentTermId = parentTermId.replaceAll(PARENT_ID_REGEX, "$1"); if (!result.contains(parentTermId) && !front.contains(parentTermId)) { front.add(parentTermId); } } } this.put(TERM_CATEGORY_FIELD_NAME, result); } }