X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fstore%2Fimpl%2FStoreUtils.java;h=02c2a4fa06042e2984745183262a7d053411157a;hp=0692497b890c29f6d17316fd2b39fef3a95b25c5;hb=08217531fbe76dbcc429c71d593894fc211e50aa;hpb=bcd020ecbeeacc97df1717a238d93bacd87bcbfc diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/StoreUtils.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/StoreUtils.java index 0692497b89..02c2a4fa06 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/StoreUtils.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/StoreUtils.java @@ -1,15 +1,134 @@ package org.opendaylight.controller.md.sal.dom.store.impl; +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; +import org.opendaylight.controller.md.sal.dom.store.impl.tree.StoreMetadataNode; +import org.opendaylight.yangtools.concepts.Identifiable; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.AugmentationIdentifier; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; + +import com.google.common.base.Function; +import com.google.common.base.Strings; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.primitives.UnsignedLong; public final class StoreUtils { + private final static Function, Object> EXTRACT_IDENTIFIER = new Function, Object>() { + + @Override + public Object apply(final Identifiable input) { + return input.getIdentifier(); + } + }; public static final UnsignedLong increase(final UnsignedLong original) { return original.plus(UnsignedLong.ONE); } + public static final InstanceIdentifier append(final InstanceIdentifier parent, final PathArgument arg) { + + return new InstanceIdentifier(ImmutableList. builder().addAll(parent.getPath()).add(arg).build()); + } + + public static AsyncDataChangeEvent> initialChangeEvent( + final InstanceIdentifier path, final StoreMetadataNode data) { + return new InitialDataChangeEvent(path, data.getData()); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static Function, V> identifierExtractor() { + return (Function) EXTRACT_IDENTIFIER; + } + + private static final class InitialDataChangeEvent implements + AsyncDataChangeEvent> { + + private final ImmutableMap> payload; + private final NormalizedNode data; + + public InitialDataChangeEvent(final InstanceIdentifier path, final NormalizedNode data) { + payload = ImmutableMap.> of(path, data); + this.data = data; + } + + @Override + public Map> getCreatedData() { + return payload; + } + + @Override + public Map> getOriginalData() { + return Collections.emptyMap(); + } + + @Override + public NormalizedNode getOriginalSubtree() { + return null; + } + + @Override + public Set getRemovedPaths() { + return Collections.emptySet(); + } + + @Override + public Map> getUpdatedData() { + return payload; + } + + @Override + public NormalizedNode getUpdatedSubtree() { + return data; + } + + } + + public static Set toIdentifierSet(final Iterable> children) { + return FluentIterable.from(children).transform(StoreUtils. identifierExtractor()).toSet(); + } + + public static String toStringTree(final StoreMetadataNode metaNode) { + StringBuilder builder = new StringBuilder(); + toStringTree(builder, metaNode, 0); + return builder.toString(); + } + private static void toStringTree(final StringBuilder builder, final StoreMetadataNode metaNode, final int offset) { + String prefix = Strings.repeat(" ", offset); + builder.append(prefix).append(toStringTree(metaNode.getIdentifier())); + NormalizedNode dataNode = metaNode.getData(); + if (dataNode instanceof NormalizedNodeContainer) { + builder.append(" {").append("\n"); + for (StoreMetadataNode child : metaNode.getChildren()) { + toStringTree(builder, child, offset + 4); + } + builder.append(prefix).append("}"); + } else { + builder.append(" ").append(dataNode.getValue()); + } + builder.append("\n"); + } + private static String toStringTree(final PathArgument identifier) { + if (identifier instanceof NodeIdentifierWithPredicates) { + StringBuilder builder = new StringBuilder(); + builder.append(identifier.getNodeType().getLocalName()); + builder.append(((NodeIdentifierWithPredicates) identifier).getKeyValues().values()); + return builder.toString(); + } else if (identifier instanceof AugmentationIdentifier) { + return "augmentation"; + } + return identifier.getNodeType().getLocalName(); + } }