@SpecCompliant(spec = "xep-0060", section = "8.4.2", status = SpecCompliant.ComplianceStatus.FINISHED, coverage = SpecCompliant.ComplianceCoverage.COMPLETE),
@SpecCompliant(spec = "xep-0060", section = "8.4.3.1", status = SpecCompliant.ComplianceStatus.FINISHED, coverage = SpecCompliant.ComplianceCoverage.COMPLETE),
@SpecCompliant(spec = "xep-0060", section = "8.4.3.2", status = SpecCompliant.ComplianceStatus.FINISHED, coverage = SpecCompliant.ComplianceCoverage.COMPLETE) })
protected Stanza handleSet(IQStanza stanza, ServerRuntimeContext serverRuntimeContext, SessionContext sessionContext) {
Entity serverJID = serviceConfiguration.getDomainJID();
CollectionNode root = serviceConfiguration.getRootNode();
Entity sender = extractSenderJID(stanza, sessionContext);
StanzaBuilder sb = StanzaBuilder.createDirectReply(stanza, false, IQStanzaType.RESULT);
String nodeName = extractNodeName(stanza);
LeafNode node = root.find(nodeName);
if (node == null) {
return errorStanzaGenerator.generateNoNodeErrorStanza(sender, serverJID, stanza);
}
if (!node.isAuthorized(sender, PubSubPrivilege.DELETE)) {
return errorStanzaGenerator.generateInsufficientPrivilegesErrorStanza(sender, serverJID, stanza);
}
sendDeleteNotifications(serverRuntimeContext, sender, nodeName, node);
root.deleteNode(nodeName);
return new IQStanza(sb.build());
}