import org.opendaylight.controller.yang.model.api.SchemaContext;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
-import org.w3c.dom.Document;\r
import org.w3c.dom.Element;\r
\r
import com.google.common.base.Joiner;\r
+import com.google.common.collect.Lists;\r
\r
\r
/**\r
*/\r
public abstract class NodeUtils {\r
\r
+ private static final Logger LOG = LoggerFactory.getLogger(NodeUtils.class);\r
+ \r
/**\r
* \r
*/\r
private static final String USER_KEY_NODE = "node";\r
- private static final Logger LOG = LoggerFactory.getLogger(NodeUtils.class);\r
\r
/**\r
* @param node\r
* @return dom tree, containing same node structure, yang nodes are associated \r
* to dom nodes as user data\r
*/\r
- public static Document buildShadowDomTree(CompositeNode treeRootNode) {\r
+ public static org.w3c.dom.Document buildShadowDomTree(CompositeNode treeRootNode) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();\r
- Document doc = null;\r
+ org.w3c.dom.Document doc = null;\r
try {\r
DocumentBuilder bob = dbf.newDocumentBuilder();\r
doc = bob.newDocument();\r
return null;\r
}\r
\r
+ \r
Stack<SimpleEntry<org.w3c.dom.Node, Node<?>>> jobQueue = new Stack<>();\r
jobQueue.push(new SimpleEntry<org.w3c.dom.Node, Node<?>>(doc, treeRootNode));\r
\r
SimpleEntry<org.w3c.dom.Node, Node<?>> job = jobQueue.pop();\r
org.w3c.dom.Node jointPlace = job.getKey();\r
Node<?> item = job.getValue();\r
- Element itemEl = doc.createElement(item.getNodeType().getLocalName());\r
+ QName nodeType = item.getNodeType();\r
+ Element itemEl = doc.createElementNS(nodeType.getNamespace().toString(), \r
+ item.getNodeType().getLocalName());\r
itemEl.setUserData(USER_KEY_NODE, item, null);\r
if (item instanceof SimpleNode<?>) {\r
Object value = ((SimpleNode<?>) item).getValue();\r
itemEl.setTextContent(String.valueOf(value));\r
- itemEl.setAttribute("type", value.getClass().getSimpleName());\r
+ //itemEl.setAttribute("type", value.getClass().getSimpleName());\r
}\r
if (item instanceof NodeModification) {\r
ModifyAction modificationAction = ((NodeModification) item).getModificationAction();\r
* @throws XPathExpressionException\r
*/\r
@SuppressWarnings("unchecked")\r
- public static <T> T findNodeByXpath(Document doc, String xpathEx) \r
+ public static <T> T findNodeByXpath(org.w3c.dom.Document doc, String xpathEx) \r
throws XPathExpressionException {\r
T userNode = null;\r
XPathFactory xPathfactory = XPathFactory.newInstance();\r
\r
return mapOfLists;\r
}\r
-\r
-\r
+ \r
/**\r
* @param path\r
* @return\r
}\r
return Joiner.on(".").join(pathSeed);\r
}\r
+\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
}\r