/** * Creates and returns the TagModel in a graph as per given Tag; * recursively creates the designated ("contained") tags. * <p> * If the Tag was already processed exists, returns the corresponding TagModel. * Doesn't check if the TagModel for given tag name already exists, assuming this method is only called once. */ private TagModel feedTagStructureToGraph(Tag tag, Set<Tag> visited, int level) { if (visited.contains(tag)) return this.getUniqueByProperty(TagModel.PROP_NAME, tag.getName(), true); visited.add(tag); LOG.fine(String.format("Creating TagModel for Tag: %s%s(%d) '%s' traits: %s", StringUtils.repeat(' ', level*2), tag.getName(), tag.getContainedTags().size(), tag.getTitle(), tag.getTraits())); TagModel tagModel = this.create(); tagModel.setName(tag.getName()); tagModel.setTitle(tag.getTitle()); tagModel.setColor(tag.getColor()); tagModel.setRoot(tag.isPrime()); tagModel.setPseudo(tag.isPseudo()); if (null != tag.getTraits()) tagModel.putAllTraits(tag.getTraits()); tag.getContainedTags().forEach(tag2 -> { TagModel tag2model = feedTagStructureToGraph(tag2, visited, level+1); tagModel.addDesignatedTag(tag2model); }); return tagModel; }
/** * Creates and returns the TagModel in a graph as per given Tag; * recursively creates the designated ("contained") tags. * <p> * If the Tag was already processed exists, returns the corresponding TagModel. * Doesn't check if the TagModel for given tag name already exists, assuming this method is only called once. */ private TagModel feedTagStructureToGraph(Tag tag, Set<Tag> visited, int level) { if (visited.contains(tag)) return this.getUniqueByProperty(TagModel.PROP_NAME, tag.getName(), true); visited.add(tag); LOG.fine(String.format("Creating TagModel for Tag: %s%s(%d) '%s' traits: %s", StringUtils.repeat(' ', level*2), tag.getName(), tag.getContainedTags().size(), tag.getTitle(), tag.getTraits())); TagModel tagModel = this.create(); tagModel.setName(tag.getName()); tagModel.setTitle(tag.getTitle()); tagModel.setColor(tag.getColor()); tagModel.setRoot(tag.isPrime()); tagModel.setPseudo(tag.isPseudo()); if (null != tag.getTraits()) tagModel.putAllTraits(tag.getTraits()); tag.getContainedTags().forEach(tag2 -> { TagModel tag2model = feedTagStructureToGraph(tag2, visited, level+1); tagModel.addDesignatedTag(tag2model); }); return tagModel; }