X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-common-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fcommon%2Fimpl%2Futil%2Fcompat%2FDataNormalizationOperation.java;h=617697710449b32602682802d10dd2022f551ee2;hb=c95dcd50df1b77775ad14d811b178c5574a67f48;hp=663493adcc55c92ef0dbadb0923d132b77eb2a61;hpb=9bcddde7fb7e277d315499bcbda79484c3e49f2e;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 663493adcc..6176977104 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 @@ -28,12 +28,15 @@ import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeWithValue import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.Node; import org.opendaylight.yangtools.yang.data.api.SimpleNode; +import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; 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.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeAttrBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; +import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.AugmentationTarget; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; @@ -44,6 +47,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.SchemaNode; import com.google.common.base.Optional; import com.google.common.collect.FluentIterable; @@ -53,15 +57,21 @@ import com.google.common.collect.ImmutableSet; public abstract class DataNormalizationOperation implements Identifiable { private final T identifier; + private final Optional dataSchemaNode; @Override public T getIdentifier() { return identifier; }; - protected DataNormalizationOperation(final T identifier) { + protected DataNormalizationOperation(final T identifier, final SchemaNode schema) { super(); this.identifier = identifier; + if(schema instanceof DataSchemaNode) { + this.dataSchemaNode = Optional.of((DataSchemaNode) schema); + } else { + this.dataSchemaNode = Optional.absent(); + } } public boolean isMixin() { @@ -83,10 +93,17 @@ public abstract class DataNormalizationOperation impleme public abstract NormalizedNode normalize(Node legacyData); + public abstract boolean isLeaf(); + + public Optional getDataSchemaNode() { + // FIXME + return dataSchemaNode; + } + private static abstract class SimpleTypeNormalization extends DataNormalizationOperation { - protected SimpleTypeNormalization(final T identifier) { - super(identifier); + protected SimpleTypeNormalization(final T identifier, final DataSchemaNode potential) { + super(identifier,potential); } @Override @@ -113,12 +130,17 @@ public abstract class DataNormalizationOperation impleme return null; } + @Override + public boolean isLeaf() { + return true; + } + } private static final class LeafNormalization extends SimpleTypeNormalization { - protected LeafNormalization(final NodeIdentifier identifier) { - super(identifier); + protected LeafNormalization(final LeafSchemaNode potential) { + super(new NodeIdentifier(potential.getQName()),potential); } @Override @@ -131,7 +153,7 @@ public abstract class DataNormalizationOperation impleme private static final class LeafListEntryNormalization extends SimpleTypeNormalization { public LeafListEntryNormalization(final LeafListSchemaNode potential) { - super(new NodeWithValue(potential.getQName(), null)); + super(new NodeWithValue(potential.getQName(), null),potential); } @Override @@ -148,10 +170,10 @@ public abstract class DataNormalizationOperation impleme } private static abstract class CompositeNodeNormalizationOperation extends - DataNormalizationOperation { + DataNormalizationOperation { - protected CompositeNodeNormalizationOperation(final T identifier) { - super(identifier); + protected CompositeNodeNormalizationOperation(final T identifier, final DataSchemaNode schema) { + super(identifier,schema); } @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -199,20 +221,25 @@ public abstract class DataNormalizationOperation impleme return builder.build(); } + @Override + public boolean isLeaf() { + return false; + } + @SuppressWarnings("rawtypes") protected abstract NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode); } private static abstract class DataContainerNormalizationOperation extends - CompositeNodeNormalizationOperation { + CompositeNodeNormalizationOperation { private final DataNodeContainer schema; private final Map> byQName; private final Map> byArg; - protected DataContainerNormalizationOperation(final T identifier, final DataNodeContainer schema) { - super(identifier); + protected DataContainerNormalizationOperation(final T identifier, final DataNodeContainer schema, final DataSchemaNode node) { + super(identifier,node); this.schema = schema; this.byArg = new ConcurrentHashMap<>(); this.byQName = new ConcurrentHashMap<>(); @@ -263,17 +290,17 @@ public abstract class DataNormalizationOperation impleme } private static final class ListItemNormalization extends - DataContainerNormalizationOperation { + DataContainerNormalizationOperation { private final List keyDefinition; protected ListItemNormalization(final NodeIdentifierWithPredicates identifier, final ListSchemaNode schema) { - super(identifier, schema); + super(identifier, schema,schema); keyDefinition = schema.getKeyDefinition(); } @Override - protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { + protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { ImmutableMap.Builder keys = ImmutableMap.builder(); for (QName key : keyDefinition) { @@ -309,11 +336,11 @@ public abstract class DataNormalizationOperation impleme private static final class UnkeyedListItemNormalization extends DataContainerNormalizationOperation { protected UnkeyedListItemNormalization(final ListSchemaNode schema) { - super(new NodeIdentifier(schema.getQName()), schema); + super(new NodeIdentifier(schema.getQName()), schema,schema); } @Override - protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { + protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { return Builders.unkeyedListEntryBuilder().withNodeIdentifier(getIdentifier()); } @@ -327,11 +354,11 @@ public abstract class DataNormalizationOperation impleme private static final class ContainerNormalization extends DataContainerNormalizationOperation { protected ContainerNormalization(final ContainerSchemaNode schema) { - super(new NodeIdentifier(schema.getQName()), schema); + super(new NodeIdentifier(schema.getQName()),schema, schema); } @Override - protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { + protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { return Builders.containerBuilder().withNodeIdentifier(getIdentifier()); } @@ -343,10 +370,10 @@ public abstract class DataNormalizationOperation impleme } private static abstract class MixinNormalizationOp extends - CompositeNodeNormalizationOperation { + CompositeNodeNormalizationOperation { - protected MixinNormalizationOp(final T identifier) { - super(identifier); + protected MixinNormalizationOp(final T identifier, final DataSchemaNode schema) { + super(identifier,schema); } @Override @@ -365,7 +392,7 @@ public abstract class DataNormalizationOperation impleme } @Override - protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { + protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { return Builders.orderedLeafSetBuilder().withNodeIdentifier(getIdentifier()); } @@ -380,12 +407,12 @@ public abstract class DataNormalizationOperation impleme private final DataNormalizationOperation innerOp; public UnorderedLeafListMixinNormalization(final LeafListSchemaNode potential) { - super(new NodeIdentifier(potential.getQName())); + super(new NodeIdentifier(potential.getQName()),potential); innerOp = new LeafListEntryNormalization(potential); } @Override - protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { + protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { return Builders.leafSetBuilder().withNodeIdentifier(getIdentifier()); } @@ -415,7 +442,7 @@ public abstract class DataNormalizationOperation impleme public AugmentationNormalization(final AugmentationSchema augmentation, final DataNodeContainer schema) { //super(); - super(augmentationIdentifierFrom(augmentation), augmentationProxy(augmentation,schema)); + super(augmentationIdentifierFrom(augmentation), augmentationProxy(augmentation,schema),null); } @Override @@ -464,7 +491,7 @@ public abstract class DataNormalizationOperation impleme private final ListItemNormalization innerNode; public UnorderedMapMixinNormalization(final ListSchemaNode list) { - super(new NodeIdentifier(list.getQName())); + super(new NodeIdentifier(list.getQName()),list); this.innerNode = new ListItemNormalization(new NodeIdentifierWithPredicates(list.getQName(), Collections. emptyMap()), list); } @@ -504,7 +531,7 @@ public abstract class DataNormalizationOperation impleme private final UnkeyedListItemNormalization innerNode; public UnkeyedListMixinNormalization(final ListSchemaNode list) { - super(new NodeIdentifier(list.getQName())); + super(new NodeIdentifier(list.getQName()),list); this.innerNode = new UnkeyedListItemNormalization(list); } @@ -562,7 +589,7 @@ public abstract class DataNormalizationOperation impleme private final ImmutableMap> byArg; protected ChoiceNodeNormalization(final org.opendaylight.yangtools.yang.model.api.ChoiceNode schema) { - super(new NodeIdentifier(schema.getQName())); + super(new NodeIdentifier(schema.getQName()),schema); ImmutableMap.Builder> byQNameBuilder = ImmutableMap.builder(); ImmutableMap.Builder> byArgBuilder = ImmutableMap.builder(); @@ -590,7 +617,7 @@ public abstract class DataNormalizationOperation impleme } @Override - protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { + protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) { return Builders.choiceBuilder().withNodeIdentifier(getIdentifier()); } @@ -600,6 +627,42 @@ public abstract class DataNormalizationOperation impleme } } + private static class AnyXmlNormalization extends DataNormalizationOperation { + + protected AnyXmlNormalization( final AnyXmlSchemaNode schema) { + super( new NodeIdentifier(schema.getQName()), schema); + } + + @Override + public DataNormalizationOperation getChild( final PathArgument child ) throws DataNormalizationException { + return null; + } + + @Override + public DataNormalizationOperation getChild( final QName child ) throws DataNormalizationException { + return null; + } + + @Override + public NormalizedNode normalize( final Node legacyData ) { + NormalizedNodeAttrBuilder, AnyXmlNode> builder = + Builders.anyXmlBuilder().withNodeIdentifier( + new NodeIdentifier( legacyData.getNodeType() ) ); + builder.withValue(legacyData); + return builder.build(); + } + + @Override + public boolean isLeaf() { + return false; + } + + @Override + public NormalizedNode createDefault( final PathArgument currentArg ) { + return null; + } + } + private static final Optional findChildSchemaNode(final DataNodeContainer parent,final QName child) { DataSchemaNode potential = parent.getDataChildByName(child); if (potential == null) { @@ -645,7 +708,7 @@ public abstract class DataNormalizationOperation impleme for (DataSchemaNode child : augmentation.getChildNodes()) { potentialChildren.add(child.getQName()); } - return new AugmentationIdentifier(null, potentialChildren.build()); + return new AugmentationIdentifier(potentialChildren.build()); } private static DataNodeContainer augmentationProxy(final AugmentationSchema augmentation, final DataNodeContainer schema) { @@ -695,11 +758,13 @@ public abstract class DataNormalizationOperation impleme return fromListSchemaNode((ListSchemaNode) potential); } else if (potential instanceof LeafSchemaNode) { - return new LeafNormalization(new NodeIdentifier(potential.getQName())); + return new LeafNormalization((LeafSchemaNode) potential); } else if (potential instanceof org.opendaylight.yangtools.yang.model.api.ChoiceNode) { return new ChoiceNodeNormalization((org.opendaylight.yangtools.yang.model.api.ChoiceNode) potential); } else if (potential instanceof LeafListSchemaNode) { return fromLeafListSchemaNode((LeafListSchemaNode) potential); + } else if (potential instanceof AnyXmlSchemaNode) { + return new AnyXmlNormalization( (AnyXmlSchemaNode) potential); } return null; }