logger.debug("NODE {}: All association groups acquired.", this.getNode().getNodeId());
updateAssociationsNode = 0;
// This is used for network management, so send a network event
this.getController().notifyEventListeners(new ZWaveNetworkEvent(ZWaveNetworkEvent.Type.AssociationUpdate, this.getNode().getNodeId(),
ZWaveNetworkEvent.State.Success));
}
return;
}
logger.debug("NODE {}: association group {} has max associations " + maxAssociations, this.getNode()
.getNodeId(), group);
// Are we waiting to synchronise the start of a new group?
if(pendingAssociation == null) {
pendingAssociation = new AssociationGroup(group);
}
if (serialMessage.getMessagePayload().length > (offset + 4)) {
logger.debug("NODE {}: association group {} includes the following nodes:", this.getNode().getNodeId(),
group);
int numAssociations = serialMessage.getMessagePayload().length - (offset + 4);
for (int cnt = 0; cnt < numAssociations; cnt++) {
int node = serialMessage.getMessagePayloadByte(offset + 4 + cnt);
logger.debug("Node {}", node);
// Add the node to the group
pendingAssociation.addNode(node);
}
}
// If this is the end of the group, update the list then let the listeners know
if(following == 0) {
// Clear the current information for this group
configAssociations.remove(group);
// Update the group in the list
configAssociations.put(group, pendingAssociation);
pendingAssociation = null;
// Send an event to the users
ZWaveAssociationEvent zEvent = new ZWaveAssociationEvent(this.getNode().getNodeId(), group);
List<Integer> members = getGroupMembers(group);
if(members != null) {
for(int node : members) {
zEvent.addMember(node);
}
}
this.getController().notifyEventListeners(zEvent);
}
// Is this the end of the list
if (following == 0 && group == updateAssociationsNode) {
// This is the end of this group and the current 'get all groups' node
// so we need to request the next group
if(updateAssociationsNode < maxGroups){
updateAssociationsNode++;
SerialMessage outputMessage = getAssociationMessage(updateAssociationsNode);
if(outputMessage != null)
this.getController().sendData(outputMessage);
} else {
logger.debug("NODE {}: All association groups acquired.", this.getNode().getNodeId());
//we have reached our maxNodes, notify listeners we are done.
updateAssociationsNode = 0;
// This is used for network management, so send a network event
this.getController().notifyEventListeners(new ZWaveNetworkEvent(ZWaveNetworkEvent.Type.AssociationUpdate, this.getNode().getNodeId(),
ZWaveNetworkEvent.State.Success));
}
}
}