X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fforwardingrules-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Ffrm%2Fgroup%2FGroupChangeListener.java;h=9b03eaad8ccfd1373467dbf85353ef8b558dd9c3;hb=51e91f6bdcc88c5aa96f956e516d31dbb5e5d5e0;hp=1260f0ec530ebd3daecfbfa43fbe9fb4b3efc791;hpb=e159106bc148e76fc1e3e3c780bdd740d99e74ed;p=controller.git diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupChangeListener.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupChangeListener.java index 1260f0ec53..9b03eaad8c 100644 --- a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupChangeListener.java +++ b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupChangeListener.java @@ -1,6 +1,6 @@ /** * 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 @@ -8,17 +8,12 @@ package org.opendaylight.controller.frm.group; import org.opendaylight.controller.frm.AbstractChangeListener; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.OriginalGroup; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.OriginalGroupBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroup; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroupBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; @@ -29,85 +24,88 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Preconditions; + /** - * + * Group Change Listener + * add, update and remove {@link Group} processing from {@link org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent}. + * * @author Vaclav Demcak * */ public class GroupChangeListener extends AbstractChangeListener { - private final static Logger LOG = LoggerFactory.getLogger(GroupChangeListener.class); + private static final Logger LOG = LoggerFactory.getLogger(GroupChangeListener.class); - private final SalGroupService salGroupService; + private final GroupProvider provider; - public SalGroupService getSalGroupService() { - return this.salGroupService; - } - - public GroupChangeListener(final SalGroupService manager) { - this.salGroupService = manager; + public GroupChangeListener(final GroupProvider provider) { + this.provider = Preconditions.checkNotNull(provider, "GroupProvider can not be null !"); } @Override - protected void validate() throws IllegalStateException { - GroupTransactionValidator.validate(this); + protected void remove(final InstanceIdentifier identifier, + final DataObject removeDataObj) { + + final Group group = ((Group) removeDataObj); + final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); + final RemoveGroupInputBuilder builder = new RemoveGroupInputBuilder(group); + + builder.setNode(new NodeRef(nodeInstanceId)); + builder.setGroupRef(new GroupRef(identifier)); + + Uri uri = new Uri(this.getTransactionId()); + builder.setTransactionUri(uri); + this.provider.getSalGroupService().removeGroup(builder.build()); + LOG.debug("Transaction {} - Remove Group has removed group: {}", new Object[]{uri, removeDataObj}); } @Override - protected void remove(InstanceIdentifier identifier, DataObject removeDataObj) { - if ((removeDataObj instanceof Group)) { - - final Group group = ((Group) removeDataObj); - final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); - final RemoveGroupInputBuilder builder = new RemoveGroupInputBuilder(group); - - builder.setNode(new NodeRef(nodeInstanceId)); - builder.setGroupRef(new GroupRef(identifier)); - - Uri uri = new Uri(this.getTransactionId()); - builder.setTransactionUri(uri); - this.salGroupService.removeGroup((RemoveGroupInput) builder.build()); - LOG.debug("Transaction {} - Remove Group has removed group: {}", new Object[]{uri, removeDataObj}); - } + protected void update(final InstanceIdentifier identifier, + final DataObject original, final DataObject update) { + + final Group originalGroup = ((Group) original); + final Group updatedGroup = ((Group) update); + final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); + final UpdateGroupInputBuilder builder = new UpdateGroupInputBuilder(); + + builder.setNode(new NodeRef(nodeInstanceId)); + builder.setGroupRef(new GroupRef(identifier)); + + Uri uri = new Uri(this.getTransactionId()); + builder.setTransactionUri(uri); + + builder.setUpdatedGroup((new UpdatedGroupBuilder(updatedGroup)).build()); + builder.setOriginalGroup((new OriginalGroupBuilder(originalGroup)).build()); + + this.provider.getSalGroupService().updateGroup(builder.build()); + LOG.debug("Transaction {} - Update Group has updated group {} with group {}", new Object[]{uri, original, update}); } @Override - protected void update(InstanceIdentifier identifier, DataObject original, DataObject update) { - if (original instanceof Group && update instanceof Group) { - - final Group originalGroup = ((Group) original); - final Group updatedGroup = ((Group) update); - final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); - final UpdateGroupInputBuilder builder = new UpdateGroupInputBuilder(); - - builder.setNode(new NodeRef(nodeInstanceId)); - builder.setGroupRef(new GroupRef(identifier)); - - Uri uri = new Uri(this.getTransactionId()); - builder.setTransactionUri(uri); - - builder.setUpdatedGroup((UpdatedGroup) (new UpdatedGroupBuilder(updatedGroup)).build()); - builder.setOriginalGroup((OriginalGroup) (new OriginalGroupBuilder(originalGroup)).build()); - - this.salGroupService.updateGroup((UpdateGroupInput) builder.build()); - LOG.debug("Transaction {} - Update Group has updated group {} with group {}", new Object[]{uri, original, update}); - } + protected void add(final InstanceIdentifier identifier, + final DataObject addDataObj) { + + final Group group = ((Group) addDataObj); + final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); + final AddGroupInputBuilder builder = new AddGroupInputBuilder(group); + + builder.setNode(new NodeRef(nodeInstanceId)); + builder.setGroupRef(new GroupRef(identifier)); + + Uri uri = new Uri(this.getTransactionId()); + builder.setTransactionUri(uri); + this.provider.getSalGroupService().addGroup(builder.build()); + LOG.debug("Transaction {} - Add Group has added group: {}", new Object[]{uri, addDataObj}); } @Override - protected void add(InstanceIdentifier identifier, DataObject addDataObj) { - if ((addDataObj instanceof Group)) { - final Group group = ((Group) addDataObj); - final InstanceIdentifier nodeInstanceId = identifier. firstIdentifierOf(Node.class); - final AddGroupInputBuilder builder = new AddGroupInputBuilder(group); - - builder.setNode(new NodeRef(nodeInstanceId)); - builder.setGroupRef(new GroupRef(identifier)); - - Uri uri = new Uri(this.getTransactionId()); - builder.setTransactionUri(uri); - this.salGroupService.addGroup((AddGroupInput) builder.build()); - LOG.debug("Transaction {} - Add Group has added group: {}", new Object[]{uri, addDataObj}); - } + protected boolean preconditionForChange(final InstanceIdentifier identifier, + final DataObject dataObj, final DataObject update) { + + final ReadOnlyTransaction trans = this.provider.getDataService().newReadOnlyTransaction(); + return update != null + ? (dataObj instanceof Group && update instanceof Group && isNodeAvailable(identifier, trans)) + : (dataObj instanceof Group && isNodeAvailable(identifier, trans)); } }