X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-common-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fcommon%2Fimpl%2Futil%2Fcompat%2FDataNormalizationOperation.java;h=ae9b17bde4c413c0fee567193c84ff72dca06913;hp=de90f48b35d7506351afb26373a60b9a4c773442;hb=481d8d9e4d9a12754eea1f3271d424cb6bb45fa2;hpb=59cb3e27630fb1fd965152f9e1584213e89fa62f diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java index de90f48b35..ae9b17bde4 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2014 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.controller.md.sal.common.impl.util.compat; import static com.google.common.base.Preconditions.checkArgument; @@ -61,13 +68,18 @@ public abstract class DataNormalizationOperation impleme return false; } + + public boolean isKeyedEntry() { + return false; + } + protected Set getQNameIdentifiers() { return Collections.singleton(identifier.getNodeType()); } - public abstract DataNormalizationOperation getChild(final PathArgument child); + public abstract DataNormalizationOperation getChild(final PathArgument child) throws DataNormalizationException; - public abstract DataNormalizationOperation getChild(QName child); + public abstract DataNormalizationOperation getChild(QName child) throws DataNormalizationException; public abstract NormalizedNode normalize(Node legacyData); @@ -129,6 +141,11 @@ public abstract class DataNormalizationOperation impleme return Builders.leafSetEntryBuilder().withNodeIdentifier(nodeId).withValue(node.getValue()).build(); } + + @Override + public boolean isKeyedEntry() { + return true; + } } private static abstract class CompositeNodeNormalizationOpertation extends @@ -152,7 +169,13 @@ public abstract class DataNormalizationOperation impleme Set> usedMixins = new HashSet<>(); for (Node childLegacy : compositeNode.getValue()) { - DataNormalizationOperation childOp = getChild(childLegacy.getNodeType()); + final DataNormalizationOperation childOp; + + try { + childOp = getChild(childLegacy.getNodeType()); + } catch (DataNormalizationException e) { + throw new IllegalArgumentException(String.format("Failed to normalize data %s", compositeNode.getValue()), e); + } // We skip unknown nodes if this node is mixin since // it's nodes and parent nodes are interleaved @@ -165,8 +188,7 @@ public abstract class DataNormalizationOperation impleme if (childOp.isMixin()) { if (usedMixins.contains(childOp)) { // We already run / processed that mixin, so to avoid - // dupliciry we are - // skiping next nodes. + // duplicity we are skipping next nodes. continue; } builder.addChild(childOp.normalize(compositeNode)); @@ -198,7 +220,7 @@ public abstract class DataNormalizationOperation impleme } @Override - public DataNormalizationOperation getChild(final PathArgument child) { + public DataNormalizationOperation getChild(final PathArgument child) throws DataNormalizationException { DataNormalizationOperation potential = byArg.get(child); if (potential != null) { return potential; @@ -208,7 +230,7 @@ public abstract class DataNormalizationOperation impleme } @Override - public DataNormalizationOperation getChild(final QName child) { + public DataNormalizationOperation getChild(final QName child) throws DataNormalizationException { DataNormalizationOperation potential = byQName.get(child); if (potential != null) { return potential; @@ -243,7 +265,9 @@ public abstract class DataNormalizationOperation impleme protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { ImmutableMap.Builder keys = ImmutableMap.builder(); for (QName key : keyDefinition) { - SimpleNode valueNode = checkNotNull(compositeNode.getFirstSimpleByName(key),"List node %s MUST contain leaf %s with value.",getIdentifier().getNodeType(),key); + + SimpleNode valueNode = checkNotNull(compositeNode.getFirstSimpleByName(key), + "List node %s MUST contain leaf %s with value.", getIdentifier().getNodeType(), key); keys.put(key, valueNode.getValue()); } @@ -263,6 +287,12 @@ public abstract class DataNormalizationOperation impleme } return builder.build(); } + + + @Override + public boolean isKeyedEntry() { + return true; + } } private static final class ContainerNormalization extends DataContainerNormalizationOperation { @@ -468,15 +498,19 @@ public abstract class DataNormalizationOperation impleme } } - public static DataNormalizationOperation fromSchemaAndPathArgument(final DataNodeContainer schema, - final QName child) { + private static DataNormalizationOperation fromSchemaAndPathArgument(final DataNodeContainer schema, + final QName child) throws DataNormalizationException { DataSchemaNode potential = schema.getDataChildByName(child); if (potential == null) { Iterable choices = FluentIterable.from( schema.getChildNodes()).filter(org.opendaylight.yangtools.yang.model.api.ChoiceNode.class); potential = findChoice(choices, child); } - checkArgument(potential != null, "Supplied QName %s is not valid according to schema %s", child, schema); + + if (potential == null) { + throw new DataNormalizationException(String.format("Supplied QName %s is not valid according to schema %s, potential children nodes: %s", child, schema,schema.getChildNodes())); + } + if ((schema instanceof DataSchemaNode) && !((DataSchemaNode) schema).isAugmenting() && potential.isAugmenting()) { return fromAugmentation(schema, (AugmentationTarget) schema, potential); } @@ -523,7 +557,7 @@ public abstract class DataNormalizationOperation impleme } } - private static DataNormalizationOperation fromSchema(final DataNodeContainer schema, final PathArgument child) { + private static DataNormalizationOperation fromSchema(final DataNodeContainer schema, final PathArgument child) throws DataNormalizationException { if (child instanceof AugmentationIdentifier) { return fromSchemaAndPathArgument(schema, ((AugmentationIdentifier) child).getPossibleChildNames() .iterator().next());