private final BindingToNormalizedNodeCodec conversionCodec;
private final EntityOwnershipListener bindingListener;
- DOMEntityOwnershipListenerAdapter(EntityOwnershipListener bindingListener,
- BindingToNormalizedNodeCodec conversionCodec) {
+ DOMEntityOwnershipListenerAdapter(final EntityOwnershipListener bindingListener,
+ final BindingToNormalizedNodeCodec conversionCodec) {
this.bindingListener = Preconditions.checkNotNull(bindingListener);
this.conversionCodec = Preconditions.checkNotNull(conversionCodec);
}
@Override
- public void ownershipChanged(DOMEntityOwnershipChange ownershipChange) {
+ public void ownershipChanged(final DOMEntityOwnershipChange ownershipChange) {
try {
- Entity entity = new Entity(ownershipChange.getEntity().getType(), conversionCodec.toBinding(
+ final Entity entity = new Entity(ownershipChange.getEntity().getType(), conversionCodec.toBinding(
ownershipChange.getEntity().getIdentifier()).get());
- bindingListener.ownershipChanged(new EntityOwnershipChange(entity, ownershipChange.getState()));
- } catch (Exception e) {
+ bindingListener.ownershipChanged(new EntityOwnershipChange(entity, ownershipChange.getState(),
+ ownershipChange.inJeopardy()));
+ } catch (final Exception e) {
BindingDOMEntityOwnershipServiceAdapter.LOG.error("Error converting DOM entity ID {} to binding InstanceIdentifier",
ownershipChange.getEntity().getIdentifier(), e);
}
@Test
public void testRegisterCandidate() throws CandidateAlreadyRegisteredException {
- DOMEntityOwnershipCandidateRegistration mockDOMReg = mock(DOMEntityOwnershipCandidateRegistration.class);
+ final DOMEntityOwnershipCandidateRegistration mockDOMReg = mock(DOMEntityOwnershipCandidateRegistration.class);
doReturn(mockDOMReg).when(mockDOMService).registerCandidate(DOM_ENTITY);
- EntityOwnershipCandidateRegistration reg = adapter.registerCandidate(BINDING_ENTITY);
+ final EntityOwnershipCandidateRegistration reg = adapter.registerCandidate(BINDING_ENTITY);
assertNotNull("registerCandidate returned null", reg);
assertEquals("getInstance", BINDING_ENTITY, reg.getInstance());
@Test
public void testRegisterListener() {
- DOMEntityOwnershipListenerRegistration mockDOMReg = mock(DOMEntityOwnershipListenerRegistration.class);
+ final DOMEntityOwnershipListenerRegistration mockDOMReg = mock(DOMEntityOwnershipListenerRegistration.class);
doReturn(mockDOMReg).when(mockDOMService).registerListener(eq(DOM_ENTITY.getType()),
any(DOMEntityOwnershipListener.class));
- EntityOwnershipListener mockListener = mock(EntityOwnershipListener.class);
+ final EntityOwnershipListener mockListener = mock(EntityOwnershipListener.class);
- EntityOwnershipListenerRegistration reg = adapter.registerListener(BINDING_ENTITY.getType(), mockListener);
+ final EntityOwnershipListenerRegistration reg = adapter.registerListener(BINDING_ENTITY.getType(), mockListener);
assertNotNull("registerListener returned null", reg);
assertEquals("getInstance", mockListener, reg.getInstance());
assertEquals("getEntityType", BINDING_ENTITY.getType(), reg.getEntityType());
- ArgumentCaptor<DOMEntityOwnershipListener> domListenerCaptor = ArgumentCaptor.forClass(DOMEntityOwnershipListener.class);
+ final ArgumentCaptor<DOMEntityOwnershipListener> domListenerCaptor = ArgumentCaptor.forClass(DOMEntityOwnershipListener.class);
verify(mockDOMService).registerListener(eq(DOM_ENTITY.getType()), domListenerCaptor.capture());
- DOMEntityOwnershipChange domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY,
- EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED);
+ final DOMEntityOwnershipChange domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY,
+ EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, true);
domListenerCaptor.getValue().ownershipChanged(domOwnershipChange );
- ArgumentCaptor<EntityOwnershipChange> ownershipChangeCaptor = ArgumentCaptor.forClass(EntityOwnershipChange.class);
+ final ArgumentCaptor<EntityOwnershipChange> ownershipChangeCaptor = ArgumentCaptor.forClass(EntityOwnershipChange.class);
verify(mockListener).ownershipChanged(ownershipChangeCaptor.capture());
- EntityOwnershipChange change = ownershipChangeCaptor.getValue();
+ final EntityOwnershipChange change = ownershipChangeCaptor.getValue();
assertEquals("getEntity", BINDING_ENTITY, change.getEntity());
assertEquals("getState", EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, change.getState());
@Test
public void testGetOwnershipState() {
- Optional<EntityOwnershipState> expectedState = Optional.of(EntityOwnershipState.IS_OWNER);
+ final Optional<EntityOwnershipState> expectedState = Optional.of(EntityOwnershipState.IS_OWNER);
doReturn(expectedState).when(mockDOMService).getOwnershipState(DOM_ENTITY);
- Optional<EntityOwnershipState> actualState = adapter.getOwnershipState(BINDING_ENTITY);
+ final Optional<EntityOwnershipState> actualState = adapter.getOwnershipState(BINDING_ENTITY);
assertSame("getOwnershipState", expectedState, actualState);
}
public class GenericEntityOwnershipChange<P extends Path<P>, E extends GenericEntity<P>> {
private final E entity;
private final EntityOwnershipChangeState state;
+ private final boolean inJeopardy;
- public GenericEntityOwnershipChange(@Nonnull E entity, @Nonnull EntityOwnershipChangeState state) {
+ public GenericEntityOwnershipChange(@Nonnull final E entity, @Nonnull final EntityOwnershipChangeState state) {
+ this(entity, state, false);
+ }
+
+ public GenericEntityOwnershipChange(@Nonnull final E entity, @Nonnull final EntityOwnershipChangeState state,
+ final boolean inJeopardy) {
this.entity = Preconditions.checkNotNull(entity, "entity can't be null");
this.state = Preconditions.checkNotNull(state, "state can't be null");
+ this.inJeopardy = inJeopardy;
}
/**
return state;
}
+ /**
+ * Returns the current jeopardy state. When in a jeopardy state, the values from other methods may potentially
+ * be out of date.
+ *
+ * @return true if the local node is in a jeopardy state. If false, the reported information is accurate.
+ */
+ public boolean inJeopardy() {
+ return inJeopardy;
+ }
+
@Override
public String toString() {
- return getClass().getSimpleName() + " [entity=" + entity + ", state=" + state + "]";
+ return getClass().getSimpleName() + " [entity=" + entity + ", state=" + state + ", inJeopardy=" + inJeopardy + "]";
}
}