X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?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=4dbd7db03e64992e3ae566fe9c6d7fb52fddb346;hb=refs%2Fchanges%2F02%2F83802%2F42;hp=e2a1d551daa0a6e94c9341ca0b5b462348b03147;hpb=12fcdfe39aa26dcba7fd3bb4d4c68e3d02e65c51;p=controller.git 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 e2a1d551da..4dbd7db03e 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 @@ -8,9 +8,9 @@ package org.opendaylight.controller.md.sal.common.impl.util.compat; import com.google.common.base.Optional; -import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collections; import java.util.HashSet; @@ -19,6 +19,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import org.eclipse.jdt.annotation.Nullable; +import org.gaul.modernizer_maven_annotations.SuppressModernizer; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; @@ -29,7 +31,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationTarget; @@ -49,7 +51,7 @@ import org.opendaylight.yangtools.yang.model.util.EffectiveAugmentationSchema; public abstract class DataNormalizationOperation implements Identifiable { private final T identifier; - private final Optional dataSchemaNode; + private final DataSchemaNode dataSchemaNode; @Override public T getIdentifier() { @@ -58,11 +60,7 @@ public abstract class DataNormalizationOperation impleme protected DataNormalizationOperation(final T identifier, final SchemaNode schema) { this.identifier = identifier; - if (schema instanceof DataSchemaNode) { - this.dataSchemaNode = Optional.of((DataSchemaNode) schema); - } else { - this.dataSchemaNode = Optional.absent(); - } + dataSchemaNode = schema instanceof DataSchemaNode ? (DataSchemaNode)schema : null; } public boolean isMixin() { @@ -82,18 +80,16 @@ public abstract class DataNormalizationOperation impleme public abstract DataNormalizationOperation getChild(QName child) throws DataNormalizationException; - public abstract boolean isLeaf(); + @SuppressModernizer public Optional getDataSchemaNode() { - // FIXME - return dataSchemaNode; + return Optional.fromNullable(dataSchemaNode); } private abstract static class SimpleTypeNormalization extends DataNormalizationOperation { - - protected SimpleTypeNormalization(final T identifier, final DataSchemaNode potential) { + SimpleTypeNormalization(final T identifier, final DataSchemaNode potential) { super(identifier,potential); } @@ -119,15 +115,12 @@ public abstract class DataNormalizationOperation impleme } private static final class LeafNormalization extends SimpleTypeNormalization { - - protected LeafNormalization(final LeafSchemaNode potential) { + LeafNormalization(final LeafSchemaNode potential) { super(new NodeIdentifier(potential.getQName()),potential); } - } private static final class LeafListEntryNormalization extends SimpleTypeNormalization { - LeafListEntryNormalization(final LeafListSchemaNode potential) { super(new NodeWithValue(potential.getQName(), null),potential); } @@ -140,8 +133,7 @@ public abstract class DataNormalizationOperation impleme private abstract static class CompositeNodeNormalizationOperation extends DataNormalizationOperation { - - protected CompositeNodeNormalizationOperation(final T identifier, final DataSchemaNode schema) { + CompositeNodeNormalizationOperation(final T identifier, final DataSchemaNode schema) { super(identifier,schema); } @@ -149,18 +141,15 @@ public abstract class DataNormalizationOperation impleme public boolean isLeaf() { return false; } - - } private abstract static class DataContainerNormalizationOperation extends CompositeNodeNormalizationOperation { - private final DataNodeContainer schema; private final Map> byQName; private final Map> byArg; - protected DataContainerNormalizationOperation(final T identifier, final DataNodeContainer schema, + DataContainerNormalizationOperation(final T identifier, final DataNodeContainer schema, final DataSchemaNode node) { super(identifier,node); this.schema = schema; @@ -212,22 +201,36 @@ public abstract class DataNormalizationOperation impleme return potential; } + private static DataNormalizationOperation fromSchemaAndQNameChecked(final DataNodeContainer schema, + final QName child) throws DataNormalizationException { + + final DataSchemaNode result = findChildSchemaNode(schema, child); + if (result == null) { + throw new DataNormalizationException(String.format( + "Supplied QName %s is not valid according to schema %s, potential children nodes: %s", child, + schema,schema.getChildNodes())); + } + + // We try to look up if this node was added by augmentation + if (schema instanceof DataSchemaNode && result.isAugmenting()) { + return fromAugmentation(schema, (AugmentationTarget) schema, result); + } + return fromDataSchemaNode(result); + } } private static final class ListItemNormalization extends DataContainerNormalizationOperation { - - protected ListItemNormalization(final NodeIdentifierWithPredicates identifier, final ListSchemaNode schema) { + ListItemNormalization(final NodeIdentifierWithPredicates identifier, final ListSchemaNode schema) { super(identifier, schema, schema); } @Override @SuppressFBWarnings("BC_UNCONFIRMED_CAST") public NormalizedNode createDefault(final PathArgument currentArg) { - final DataContainerNodeAttrBuilder builder = Builders + final DataContainerNodeBuilder builder = Builders .mapEntryBuilder().withNodeIdentifier((NodeIdentifierWithPredicates) currentArg); - for (final Entry keyValue : - ((NodeIdentifierWithPredicates) currentArg).getKeyValues().entrySet()) { + for (final Entry keyValue : ((NodeIdentifierWithPredicates) currentArg).entrySet()) { builder.addChild(Builders.leafBuilder() // .withNodeIdentifier(new NodeIdentifier(keyValue.getKey())).withValue(keyValue.getValue()) @@ -236,7 +239,6 @@ public abstract class DataNormalizationOperation impleme return builder.build(); } - @Override public boolean isKeyedEntry() { return true; @@ -245,8 +247,7 @@ public abstract class DataNormalizationOperation impleme private static final class UnkeyedListItemNormalization extends DataContainerNormalizationOperation { - - protected UnkeyedListItemNormalization(final ListSchemaNode schema) { + UnkeyedListItemNormalization(final ListSchemaNode schema) { super(new NodeIdentifier(schema.getQName()), schema,schema); } @@ -255,12 +256,10 @@ public abstract class DataNormalizationOperation impleme public NormalizedNode createDefault(final PathArgument currentArg) { return Builders.unkeyedListEntryBuilder().withNodeIdentifier((NodeIdentifier) currentArg).build(); } - } private static final class ContainerNormalization extends DataContainerNormalizationOperation { - - protected ContainerNormalization(final ContainerSchemaNode schema) { + ContainerNormalization(final ContainerSchemaNode schema) { super(new NodeIdentifier(schema.getQName()),schema, schema); } @@ -269,13 +268,12 @@ public abstract class DataNormalizationOperation impleme public NormalizedNode createDefault(final PathArgument currentArg) { return Builders.containerBuilder().withNodeIdentifier((NodeIdentifier) currentArg).build(); } - } private abstract static class MixinNormalizationOp extends CompositeNodeNormalizationOperation { - protected MixinNormalizationOp(final T identifier, final DataSchemaNode schema) { + MixinNormalizationOp(final T identifier, final DataSchemaNode schema) { super(identifier,schema); } @@ -283,10 +281,8 @@ public abstract class DataNormalizationOperation impleme public final boolean isMixin() { return true; } - } - private static final class OrderedLeafListMixinNormalization extends UnorderedLeafListMixinNormalization { OrderedLeafListMixinNormalization(final LeafListSchemaNode potential) { super(potential); @@ -336,22 +332,28 @@ public abstract class DataNormalizationOperation impleme super(augmentationIdentifierFrom(augmentation), augmentationProxy(augmentation,schema),null); } + private static DataNodeContainer augmentationProxy(final AugmentationSchemaNode augmentation, + final DataNodeContainer schema) { + final Set children = new HashSet<>(); + for (final DataSchemaNode augNode : augmentation.getChildNodes()) { + children.add(schema.getDataChildByName(augNode.getQName())); + } + return new EffectiveAugmentationSchema(augmentation, children); + } + @Override public boolean isMixin() { return true; } - - @Override protected DataNormalizationOperation fromLocalSchemaAndQName(final DataNodeContainer schema, final QName child) { - final Optional potential = findChildSchemaNode(schema, child); - if (!potential.isPresent()) { + final DataSchemaNode result = findChildSchemaNode(schema, child); + if (result == null) { return null; } - final DataSchemaNode result = potential.get(); // We try to look up if this node was added by augmentation if (schema instanceof DataSchemaNode && result.isAugmenting()) { return fromAugmentation(schema, (AugmentationTarget) schema, result); @@ -368,16 +370,14 @@ public abstract class DataNormalizationOperation impleme public NormalizedNode createDefault(final PathArgument currentArg) { return Builders.augmentationBuilder().withNodeIdentifier(getIdentifier()).build(); } - } private static class UnorderedMapMixinNormalization extends MixinNormalizationOp { - private final ListItemNormalization innerNode; UnorderedMapMixinNormalization(final ListSchemaNode list) { super(new NodeIdentifier(list.getQName()),list); - this.innerNode = new ListItemNormalization(new NodeIdentifierWithPredicates(list.getQName(), + this.innerNode = new ListItemNormalization(NodeIdentifierWithPredicates.of(list.getQName(), Collections.emptyMap()), list); } @@ -401,12 +401,9 @@ public abstract class DataNormalizationOperation impleme } return null; } - } - private static class UnkeyedListMixinNormalization extends MixinNormalizationOp { - private final UnkeyedListItemNormalization innerNode; UnkeyedListMixinNormalization(final ListSchemaNode list) { @@ -434,11 +431,9 @@ public abstract class DataNormalizationOperation impleme } return null; } - } private static final class OrderedMapMixinNormalization extends UnorderedMapMixinNormalization { - OrderedMapMixinNormalization(final ListSchemaNode list) { super(list); } @@ -447,15 +442,13 @@ public abstract class DataNormalizationOperation impleme public NormalizedNode createDefault(final PathArgument currentArg) { return Builders.orderedMapBuilder().withNodeIdentifier(getIdentifier()).build(); } - } private static class ChoiceNodeNormalization extends MixinNormalizationOp { - private final ImmutableMap> byQName; private final ImmutableMap> byArg; - protected ChoiceNodeNormalization(final ChoiceSchemaNode schema) { + ChoiceNodeNormalization(final ChoiceSchemaNode schema) { super(new NodeIdentifier(schema.getQName()),schema); final ImmutableMap.Builder> byQNameBuilder = ImmutableMap.builder(); final ImmutableMap.Builder> byArgBuilder = @@ -491,8 +484,7 @@ public abstract class DataNormalizationOperation impleme } private static class AnyXmlNormalization extends DataNormalizationOperation { - - protected AnyXmlNormalization(final AnyXmlSchemaNode schema) { + AnyXmlNormalization(final AnyXmlSchemaNode schema) { super(new NodeIdentifier(schema.getQName()), schema); } @@ -517,46 +509,20 @@ public abstract class DataNormalizationOperation impleme } } - private static Optional findChildSchemaNode(final DataNodeContainer parent, - final QName child) { - DataSchemaNode potential = parent.getDataChildByName(child); - if (potential == null) { - final Iterable choices = FluentIterable.from(parent.getChildNodes()) - .filter(ChoiceSchemaNode.class); - potential = findChoice(choices, child); - } - return Optional.fromNullable(potential); + private static @Nullable DataSchemaNode findChildSchemaNode(final DataNodeContainer parent, final QName child) { + final DataSchemaNode potential = parent.getDataChildByName(child); + return potential != null ? potential : findChoice(parent, child); } - private static DataNormalizationOperation fromSchemaAndQNameChecked(final DataNodeContainer schema, - final QName child) throws DataNormalizationException { - - final Optional potential = findChildSchemaNode(schema, child); - if (!potential.isPresent()) { - throw new DataNormalizationException(String.format( - "Supplied QName %s is not valid according to schema %s, potential children nodes: %s", child, - schema,schema.getChildNodes())); - } - - final DataSchemaNode result = potential.get(); - // We try to look up if this node was added by augmentation - if (schema instanceof DataSchemaNode && result.isAugmenting()) { - return fromAugmentation(schema, (AugmentationTarget) schema, result); - } - return fromDataSchemaNode(result); - } - - private static ChoiceSchemaNode findChoice(final Iterable choices, final QName child) { - ChoiceSchemaNode foundChoice = null; - choiceLoop: for (final ChoiceSchemaNode choice : choices) { + private static @Nullable ChoiceSchemaNode findChoice(final DataNodeContainer parent, final QName child) { + for (final ChoiceSchemaNode choice : Iterables.filter(parent.getChildNodes(), ChoiceSchemaNode.class)) { for (final CaseSchemaNode caze : choice.getCases().values()) { - if (findChildSchemaNode(caze, child).isPresent()) { - foundChoice = choice; - break choiceLoop; + if (findChildSchemaNode(caze, child) != null) { + return choice; } } } - return foundChoice; + return null; } public static AugmentationIdentifier augmentationIdentifierFrom(final AugmentationSchemaNode augmentation) { @@ -567,15 +533,6 @@ public abstract class DataNormalizationOperation impleme return new AugmentationIdentifier(potentialChildren.build()); } - private static DataNodeContainer augmentationProxy(final AugmentationSchemaNode augmentation, - final DataNodeContainer schema) { - final Set children = new HashSet<>(); - for (final DataSchemaNode augNode : augmentation.getChildNodes()) { - children.add(schema.getDataChildByName(augNode.getQName())); - } - return new EffectiveAugmentationSchema(augmentation, children); - } - /** * Returns a DataNormalizationOperation for provided child node. * @@ -585,6 +542,8 @@ public abstract class DataNormalizationOperation impleme * otherwise returns a DataNormalizationOperation for child as * call for {@link #fromDataSchemaNode(DataSchemaNode)}. */ + @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", + justification = "https://github.com/spotbugs/spotbugs/issues/811") private static DataNormalizationOperation fromAugmentation(final DataNodeContainer parent, final AugmentationTarget parentAug, final DataSchemaNode child) { AugmentationSchemaNode augmentation = null;