+ String getLogId() {
+ return logId;
+ }
+
+ boolean hasCandidateForEntity(Entity entity) {
+ return entitiesWithCandidateSet.contains(entity);
+ }
+
+ void setHasCandidateForEntity(Entity entity) {
+ entitiesWithCandidateSet.add(entity);
+ }
+
+ void unsetHasCandidateForEntity(Entity entity) {
+ entitiesWithCandidateSet.remove(entity);
+ }
+
+ void addEntityOwnershipListener(String entityType, EntityOwnershipListener listener) {
+ LOG.debug("{}: Adding EntityOwnershipListener {} for entity type {}", logId, listener, entityType);
+
+ addListener(listener, entityType, entityTypeListenerMap);
+ }
+
+ void removeEntityOwnershipListener(String entityType, EntityOwnershipListener listener) {
+ LOG.debug("{}: Removing EntityOwnershipListener {} for entity type {}", logId, listener, entityType);
+
+ removeListener(listener, entityType, entityTypeListenerMap);
+ }
+
+ void notifyEntityOwnershipListeners(Entity entity, boolean wasOwner, boolean isOwner, boolean hasOwner) {
+ notifyListeners(entity, entity.getType(), wasOwner, isOwner, hasOwner, entityTypeListenerMap);
+ }
+
+ void notifyEntityOwnershipListener(Entity entity, boolean wasOwner, boolean isOwner, boolean hasOwner,
+ EntityOwnershipListener listener) {
+ notifyListeners(entity, wasOwner, isOwner, hasOwner, Arrays.asList(listener));
+ }
+
+ private <T> void notifyListeners(Entity entity, T mapKey, boolean wasOwner, boolean isOwner, boolean hasOwner,
+ Multimap<T, EntityOwnershipListener> listenerMap) {
+ Collection<EntityOwnershipListener> listeners = listenerMap.get(mapKey);
+ if(!listeners.isEmpty()) {
+ notifyListeners(entity, wasOwner, isOwner, hasOwner, listeners);
+ }
+ }