+\r
+ /**\r
+ * add given node to it's parent's list of children\r
+ * @param newNode\r
+ */\r
+ public static void fixParentRelation(Node<?> newNode) {\r
+ if (newNode.getParent() != null) {\r
+ List<Node<?>> siblings = newNode.getParent().getChildren();\r
+ if (!siblings.contains(newNode)) {\r
+ siblings.add(newNode);\r
+ }\r
+ }\r
+ }\r
+ \r
+ /**\r
+ * crawl all children of given node and assign it as their parent\r
+ * @param parentNode\r
+ */\r
+ public static void fixChildrenRelation(CompositeNode parentNode) {\r
+ if (parentNode.getChildren() != null) {\r
+ for (Node<?> child : parentNode.getChildren()) {\r
+ if (child instanceof AbstractNodeTO<?>) {\r
+ ((AbstractNodeTO<?>) child).setParent(parentNode);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ /**\r
+ * @param keys\r
+ * @param dataMap\r
+ * @return list of values of map, found by given keys \r
+ */\r
+ public static <T, K> List<K> collectMapValues(List<T> keys,\r
+ Map<T, K> dataMap) {\r
+ List<K> valueSubList = new ArrayList<>();\r
+ for (T key : keys) {\r
+ valueSubList.add(dataMap.get(key));\r
+ }\r
+ \r
+ return valueSubList;\r
+ }\r
+ \r
+ /**\r
+ * @param nodes\r
+ * @return list of children in list of appropriate type\r
+ */\r
+ public static List<Node<?>> buildChildrenList(Node<?>...nodes) {\r
+ return Lists.newArrayList(nodes);\r
+ }\r
+\r