X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fentityownership%2FEntityOwnersModel.java;h=0be765000f9c295951efb03da1078b0cd87797b7;hp=385bb706491d838084b6fc7e04d4035f0e5449fd;hb=4b2622df4d579e9b1be0b25603e002ce58db4463;hpb=4f2d31367df3b74d326d4a7c69bd20789d020198 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnersModel.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnersModel.java index 385bb70649..0be765000f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnersModel.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnersModel.java @@ -7,12 +7,16 @@ */ package org.opendaylight.controller.cluster.datastore.entityownership; +import java.util.Map.Entry; +import org.opendaylight.controller.md.sal.common.api.clustering.Entity; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.clustering.entity.owners.rev150804.EntityOwners; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.clustering.entity.owners.rev150804.entity.owners.EntityType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.clustering.entity.owners.rev150804.entity.owners.entity.type.entity.Candidate; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; @@ -61,6 +65,15 @@ final class EntityOwnersModel { } + static YangInstanceIdentifier candidatePath(YangInstanceIdentifier entityPath, String candidateName) { + return YangInstanceIdentifier.builder(entityPath).node(Candidate.QNAME).nodeWithKey( + Candidate.QNAME, CANDIDATE_NAME_QNAME, candidateName).build(); + } + + static NodeIdentifierWithPredicates candidateNodeKey(String candidateName) { + return new NodeIdentifierWithPredicates(Candidate.QNAME, CANDIDATE_NAME_QNAME, candidateName); + } + static NormalizedNode entityOwnersWithCandidate(String entityType, YangInstanceIdentifier entityId, String candidateName) { return entityOwnersWithEntityTypeEntry(entityTypeEntryWithEntityEntry(entityType, @@ -86,11 +99,45 @@ final class EntityOwnersModel { static MapNode candidateEntry(String candidateName) { return ImmutableOrderedMapNodeBuilder.create().withNodeIdentifier(new NodeIdentifier(Candidate.QNAME)). - addChild(ImmutableNodes.mapEntry(Candidate.QNAME, CANDIDATE_NAME_QNAME, candidateName)).build(); + addChild(candidateMapEntry(candidateName)).build(); + } + + static MapEntryNode candidateMapEntry(String candidateName) { + return ImmutableNodes.mapEntry(Candidate.QNAME, CANDIDATE_NAME_QNAME, candidateName); } - static NormalizedNode entityEntryWithOwner(YangInstanceIdentifier entityId, String owner) { + static MapEntryNode entityEntryWithOwner(YangInstanceIdentifier entityId, String owner) { return ImmutableNodes.mapEntryBuilder(ENTITY_QNAME, ENTITY_ID_QNAME, entityId).addChild( ImmutableNodes.leafNode(ENTITY_OWNER_QNAME, owner)).build(); } + + static String entityTypeFromEntityPath(YangInstanceIdentifier entityPath){ + YangInstanceIdentifier parent = entityPath; + while(!parent.isEmpty()) { + if (ENTITY_TYPE_QNAME.equals(parent.getLastPathArgument().getNodeType())) { + YangInstanceIdentifier.NodeIdentifierWithPredicates entityTypeLastPathArgument = (YangInstanceIdentifier.NodeIdentifierWithPredicates) parent.getLastPathArgument(); + return (String) entityTypeLastPathArgument.getKeyValues().get(ENTITY_TYPE_QNAME); + } + parent = parent.getParent(); + } + return null; + } + + static Entity createEntity(YangInstanceIdentifier entityPath) { + String entityType = null; + YangInstanceIdentifier entityId = null; + for(PathArgument pathArg: entityPath.getPathArguments()) { + if(pathArg instanceof NodeIdentifierWithPredicates) { + NodeIdentifierWithPredicates nodeKey = (NodeIdentifierWithPredicates) pathArg; + Entry key = nodeKey.getKeyValues().entrySet().iterator().next(); + if(ENTITY_TYPE_QNAME.equals(key.getKey())) { + entityType = key.getValue().toString(); + } else if(ENTITY_ID_QNAME.equals(key.getKey())) { + entityId = (YangInstanceIdentifier) key.getValue(); + } + } + } + + return new Entity(entityType, entityId); + } }