2 * Copyright (c) 2015 Brocade Communications Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.cluster.datastore.entityownership;
10 import static java.util.Objects.requireNonNull;
12 import akka.actor.Props;
13 import akka.japi.Creator;
14 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
15 import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor;
16 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
17 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
20 * An actor which is responsible for notifying an EntityOwnershipListener of changes.
22 * @author Thomas Pantelis
24 final class EntityOwnershipListenerActor extends AbstractUntypedActor {
25 private final DOMEntityOwnershipListener listener;
27 private EntityOwnershipListenerActor(final DOMEntityOwnershipListener listener) {
28 this.listener = listener;
32 protected void handleReceive(final Object message) {
33 if (message instanceof DOMEntityOwnershipChange) {
34 onEntityOwnershipChanged((DOMEntityOwnershipChange)message);
36 unknownMessage(message);
40 @SuppressWarnings("checkstyle:IllegalCatch")
41 private void onEntityOwnershipChanged(final DOMEntityOwnershipChange change) {
42 LOG.debug("Notifying EntityOwnershipListener {}: {}", listener, change);
45 listener.ownershipChanged(change);
46 } catch (Exception e) {
47 LOG.error("Error notifying listener {}", listener, e);
51 static Props props(final DOMEntityOwnershipListener listener) {
52 return Props.create(new EntityOwnershipListenerCreator(listener));
55 private static final class EntityOwnershipListenerCreator implements Creator<EntityOwnershipListenerActor> {
56 private static final long serialVersionUID = 1L;
58 @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but we don't "
59 + "create remote instances of this actor and thus don't need it to be Serializable.")
60 private final DOMEntityOwnershipListener listener;
62 EntityOwnershipListenerCreator(final DOMEntityOwnershipListener listener) {
63 this.listener = requireNonNull(listener);
67 public EntityOwnershipListenerActor create() {
68 return new EntityOwnershipListenerActor(listener);