-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.yangtools.yang.data.impl;\r
-\r
-import groovy.util.BuilderSupport;\r
-\r
-import java.net.URI;\r
-import java.net.URISyntaxException;\r
-import java.util.Date;\r
-import java.util.Map;\r
-import java.util.Map.Entry;\r
-\r
-import org.opendaylight.yangtools.yang.common.QName;\r
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;\r
-import org.opendaylight.yangtools.yang.data.api.ModifyAction;\r
-import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;\r
-import org.opendaylight.yangtools.yang.data.api.Node;\r
-import org.opendaylight.yangtools.yang.data.api.SimpleNode;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-/**\r
- * @author michal.rehak\r
- *\r
- */\r
-public class MyNodeBuilder extends BuilderSupport {\r
-\r
- private static final Logger LOG = LoggerFactory\r
- .getLogger(MyNodeBuilder.class);\r
-\r
- private URI qnNamespace;\r
- private String qnPrefix;\r
- private Date qnRevision;\r
-\r
- private CompositeNode rootNode;\r
-\r
- /**\r
- * @param baseQName\r
- */\r
- private MyNodeBuilder(QName baseQName) {\r
- qnNamespace = baseQName.getNamespace();\r
- qnPrefix = baseQName.getPrefix();\r
- qnRevision = baseQName.getRevision();\r
- }\r
-\r
- /**\r
- * @return initialized singleton instance\r
- */\r
- public static MyNodeBuilder newInstance() {\r
- QName qName = null;\r
- try {\r
- qName = new QName(\r
- new URI("urn:opendaylight:controller:network"),\r
- new Date(42), "yang-data-impl-groovyTest_", "node");\r
- } catch (URISyntaxException e) {\r
- LOG.error(e.getMessage(), e);\r
- }\r
- return new MyNodeBuilder(qName);\r
- }\r
-\r
- @Override\r
- protected void setParent(Object parent, Object child) {\r
- // do nothing\r
- if (child instanceof AbstractNodeTO<?>) {\r
- ((AbstractNodeTO<?>) child).setParent((CompositeNode) parent);\r
- } else {\r
- LOG.error("PARENTING FAILED: "+parent + " -> " + child);\r
- }\r
- }\r
-\r
- @Override\r
- protected Object createNode(Object name) {\r
- MutableCompositeNode newNode = NodeFactory.createMutableCompositeNode(\r
- createQName(name), getCurrentNode(), null, null, null);\r
- NodeUtils.fixParentRelation(newNode);\r
- return newNode;\r
- }\r
-\r
- @Override\r
- protected Object createNode(Object name, @SuppressWarnings("rawtypes") Map attributes) {\r
- ModifyAction modifyAction = processAttributes(attributes);\r
- MutableCompositeNode newNode = NodeFactory.createMutableCompositeNode(\r
- createQName(name), getCurrentNode(), null, modifyAction, null);\r
- NodeUtils.fixParentRelation(newNode);\r
- return newNode;\r
- }\r
-\r
-\r
- @Override\r
- protected Object createNode(Object name, @SuppressWarnings("rawtypes") Map attributes, Object value) {\r
- ModifyAction modifyAction = processAttributes(attributes);\r
- SimpleNode<Object> newNode = NodeFactory.createImmutableSimpleNode(\r
- createQName(name), (CompositeNode) getCurrent(), value, modifyAction);\r
- NodeUtils.fixParentRelation(newNode);\r
- return newNode;\r
- }\r
-\r
- /**\r
- * @param attributes\r
- * @return\r
- */\r
- private ModifyAction processAttributes(@SuppressWarnings("rawtypes") Map attributes) {\r
- LOG.debug("attributes:" + attributes);\r
- ModifyAction modAction = null;\r
-\r
- @SuppressWarnings("unchecked")\r
- Map<String, String> attributesSane = attributes;\r
- for (Entry<String, String> attr : attributesSane.entrySet()) {\r
- switch (attr.getKey()) {\r
- case "xmlns":\r
- try {\r
- qnNamespace = new URI(attr.getValue());\r
- } catch (URISyntaxException e) {\r
- LOG.error(e.getMessage(), e);\r
- }\r
- break;\r
- case "modifyAction":\r
- modAction = ModifyAction.valueOf(attr.getValue());\r
- break;\r
-\r
- default:\r
- throw new IllegalArgumentException("Attribute not supported: "+attr.getKey());\r
- }\r
- }\r
- return modAction;\r
- }\r
-\r
- @Override\r
- protected Object createNode(Object name, Object value) {\r
- SimpleNode<Object> newNode = NodeFactory.createImmutableSimpleNode(createQName(name), (CompositeNode) getCurrent(), value);\r
- NodeUtils.fixParentRelation(newNode);\r
- return newNode;\r
- }\r
-\r
- private QName createQName(Object localName) {\r
- LOG.debug("qname for: "+localName);\r
- return new QName(qnNamespace, qnRevision, qnPrefix, (String) localName);\r
- }\r
-\r
- protected CompositeNode getCurrentNode() {\r
- if (getCurrent() != null) {\r
- if (getCurrent() instanceof CompositeNode) {\r
- return (CompositeNode) getCurrent();\r
-\r
- } else {\r
- throw new IllegalAccessError("current node is not of type CompositeNode, but: "\r
- +getCurrent().getClass().getSimpleName());\r
- }\r
- }\r
-\r
- return null;\r
- }\r
-\r
- @Override\r
- protected Object postNodeCompletion(Object parent, Object node) {\r
- Node<?> nodeRevisited = (Node<?>) node;\r
- LOG.debug("postNodeCompletion at: \n "+ nodeRevisited+"\n "+parent);\r
- if (nodeRevisited instanceof MutableCompositeNode) {\r
- MutableCompositeNode mutant = (MutableCompositeNode) nodeRevisited;\r
- if (mutant.getValue().isEmpty()) {\r
- LOG.error("why is it having empty value? -- " + mutant);\r
- }\r
- nodeRevisited = NodeFactory.createImmutableCompositeNode(\r
- mutant.getNodeType(), mutant.getParent(), mutant.getValue(), mutant.getModificationAction());\r
- NodeUtils.fixChildrenRelation((CompositeNode) nodeRevisited);\r
-\r
- if (parent == null) {\r
- rootNode = (CompositeNode) nodeRevisited;\r
- } else {\r
- NodeUtils.fixParentRelation(nodeRevisited);\r
- nodeRevisited.getParent().getChildren().remove(mutant);\r
- }\r
- }\r
-\r
-\r
- return nodeRevisited;\r
- }\r
-\r
- /**\r
- * @return tree root\r
- */\r
- public CompositeNode getRootNode() {\r
- return rootNode;\r
- }\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.data.impl;
+
+import groovy.util.BuilderSupport;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Date;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.CompositeNode;
+import org.opendaylight.yangtools.yang.data.api.ModifyAction;
+import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;
+import org.opendaylight.yangtools.yang.data.api.Node;
+import org.opendaylight.yangtools.yang.data.api.SimpleNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author michal.rehak
+ */
+@Deprecated
+public class MyNodeBuilder extends BuilderSupport {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MyNodeBuilder.class);
+
+ private URI qnNamespace;
+ private final String qnPrefix;
+ private final Date qnRevision;
+
+ private CompositeNode rootNode;
+
+ /**
+ * @param baseQName
+ */
+ private MyNodeBuilder(final QName baseQName) {
+ qnNamespace = baseQName.getNamespace();
+ qnPrefix = baseQName.getPrefix();
+ qnRevision = baseQName.getRevision();
+ }
+
+ /**
+ * @return initialized singleton instance
+ */
+ public static MyNodeBuilder newInstance() {
+ QName qName = null;
+ try {
+ qName = new QName(
+ new URI("urn:opendaylight:controller:network"),
+ new Date(42), "yang-data-impl-groovyTest_", "node");
+ } catch (URISyntaxException e) {
+ LOG.error(e.getMessage(), e);
+ }
+ return new MyNodeBuilder(qName);
+ }
+
+ @Override
+ protected void setParent(final Object parent, final Object child) {
+ // do nothing
+ if (child instanceof AbstractNodeTO<?>) {
+ ((AbstractNodeTO<?>) child).setParent((CompositeNode) parent);
+ } else {
+ LOG.error("PARENTING FAILED: "+parent + " -> " + child);
+ }
+ }
+
+ @Override
+ protected Object createNode(final Object name) {
+ MutableCompositeNode newNode = NodeFactory.createMutableCompositeNode(
+ createQName(name), getCurrentNode(), null, null, null);
+ NodeUtils.fixParentRelation(newNode);
+ return newNode;
+ }
+
+ @Override
+ protected Object createNode(final Object name, @SuppressWarnings("rawtypes") final Map attributes) {
+ ModifyAction modifyAction = processAttributes(attributes);
+ MutableCompositeNode newNode = NodeFactory.createMutableCompositeNode(
+ createQName(name), getCurrentNode(), null, modifyAction, null);
+ NodeUtils.fixParentRelation(newNode);
+ return newNode;
+ }
+
+
+ @Override
+ protected Object createNode(final Object name, @SuppressWarnings("rawtypes") final Map attributes, final Object value) {
+ ModifyAction modifyAction = processAttributes(attributes);
+ SimpleNode<Object> newNode = NodeFactory.createImmutableSimpleNode(
+ createQName(name), (CompositeNode) getCurrent(), value, modifyAction);
+ NodeUtils.fixParentRelation(newNode);
+ return newNode;
+ }
+
+ /**
+ * @param attributes
+ * @return
+ */
+ private ModifyAction processAttributes(@SuppressWarnings("rawtypes") final Map attributes) {
+ LOG.debug("attributes:" + attributes);
+ ModifyAction modAction = null;
+
+ @SuppressWarnings("unchecked")
+ Map<String, String> attributesSane = attributes;
+ for (Entry<String, String> attr : attributesSane.entrySet()) {
+ switch (attr.getKey()) {
+ case "xmlns":
+ try {
+ qnNamespace = new URI(attr.getValue());
+ } catch (URISyntaxException e) {
+ LOG.error(e.getMessage(), e);
+ }
+ break;
+ case "modifyAction":
+ modAction = ModifyAction.valueOf(attr.getValue());
+ break;
+
+ default:
+ throw new IllegalArgumentException("Attribute not supported: "+attr.getKey());
+ }
+ }
+ return modAction;
+ }
+
+ @Override
+ protected Object createNode(final Object name, final Object value) {
+ SimpleNode<Object> newNode = NodeFactory.createImmutableSimpleNode(createQName(name), (CompositeNode) getCurrent(), value);
+ NodeUtils.fixParentRelation(newNode);
+ return newNode;
+ }
+
+ private QName createQName(final Object localName) {
+ LOG.debug("qname for: "+localName);
+ return new QName(qnNamespace, qnRevision, qnPrefix, (String) localName);
+ }
+
+ protected CompositeNode getCurrentNode() {
+ if (getCurrent() != null) {
+ if (getCurrent() instanceof CompositeNode) {
+ return (CompositeNode) getCurrent();
+
+ } else {
+ throw new IllegalAccessError("current node is not of type CompositeNode, but: "
+ +getCurrent().getClass().getSimpleName());
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ protected Object postNodeCompletion(final Object parent, final Object node) {
+ Node<?> nodeRevisited = (Node<?>) node;
+ LOG.debug("postNodeCompletion at: \n "+ nodeRevisited+"\n "+parent);
+ if (nodeRevisited instanceof MutableCompositeNode) {
+ MutableCompositeNode mutant = (MutableCompositeNode) nodeRevisited;
+ if (mutant.getValue().isEmpty()) {
+ LOG.error("why is it having empty value? -- " + mutant);
+ }
+ nodeRevisited = NodeFactory.createImmutableCompositeNode(
+ mutant.getNodeType(), mutant.getParent(), mutant.getValue(), mutant.getModificationAction());
+ NodeUtils.fixChildrenRelation((CompositeNode) nodeRevisited);
+
+ if (parent == null) {
+ rootNode = (CompositeNode) nodeRevisited;
+ } else {
+ NodeUtils.fixParentRelation(nodeRevisited);
+ nodeRevisited.getParent().getValue().remove(mutant);
+ }
+ }
+
+
+ return nodeRevisited;
+ }
+
+ /**
+ * @return tree root
+ */
+ public CompositeNode getRootNode() {
+ return rootNode;
+ }
}
\ No newline at end of file