+++ /dev/null
-/*\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.controller.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.controller.yang.common.QName;\r
-import org.opendaylight.controller.yang.data.api.CompositeNode;\r
-import org.opendaylight.controller.yang.data.api.ModifyAction;\r
-import org.opendaylight.controller.yang.data.api.MutableCompositeNode;\r
-import org.opendaylight.controller.yang.data.api.Node;\r
-import org.opendaylight.controller.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_", null);\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
-}
\ No newline at end of file