📄 node.java
字号:
// Update the modification date to reflect the last time when the node's configuration // was modified modificationDate = new Date(); // Notify subscribers that the node configuration has changed nodeConfigurationChanged(); } // Store the new or updated node in the backend store saveToDB(); // Check if we need to subscribe or unsubscribe from affiliate presences if (wasPresenceBased != isPresenceBasedDelivery()) { if (isPresenceBasedDelivery()) { addPresenceSubscriptions(); } else { cancelPresenceSubscriptions(); } } } /** * Configures the node with the completed form field. Fields that are common to leaf * and collection nodes are handled in {@link #configure(org.xmpp.forms.DataForm)}. * Subclasses should implement this method in order to configure the node with form * fields specific to the node type. * * @param field the form field specific to the node type. */ abstract void configure(FormField field); /** * Node configuration was changed based on the completed form. Subclasses may implement * this method to finsh node configuration based on the completed form. * * @param completedForm the form completed by the node owner. */ abstract void postConfigure(DataForm completedForm); /** * The node configuration has changed. If this is the first time the node is configured * after it was created (i.e. is not yet persistent) then do nothing. Otherwise, send * a notification to the node subscribers informing that the configuration has changed. */ private void nodeConfigurationChanged() { if (!isNotifiedOfConfigChanges() || !savedToDB) { // Do nothing if node was just created and configure or if notification // of config changes is disabled return; } // Build packet to broadcast to subscribers Message message = new Message(); Element event = message.addChildElement("event", "http://jabber.org/protocol/pubsub#event"); Element items = event.addElement("items"); items.addAttribute("node", nodeID); Element item = items.addElement("item"); item.addAttribute("id", "configuration"); if (deliverPayloads) { item.add(getConfigurationChangeForm().getElement()); } // Send notification that the node configuration has changed broadcastNodeEvent(message, false); } /** * Returns the data form to be included in the authorization request to be sent to * node owners when a new subscription needs to be approved. * * @param subscription the new subscription that needs to be approved. * @return the data form to be included in the authorization request. */ DataForm getAuthRequestForm(NodeSubscription subscription) { DataForm form = new DataForm(DataForm.Type.form); form.setTitle(LocaleUtils.getLocalizedString("pubsub.form.authorization.title")); form.addInstruction( LocaleUtils.getLocalizedString("pubsub.form.authorization.instruction")); FormField formField = form.addField(); formField.setVariable("FORM_TYPE"); formField.setType(FormField.Type.hidden); formField.addValue("http://jabber.org/protocol/pubsub#subscribe_authorization"); formField = form.addField(); formField.setVariable("pubsub#subid"); formField.setType(FormField.Type.hidden); formField.addValue(subscription.getID()); formField = form.addField(); formField.setVariable("pubsub#node"); formField.setType(FormField.Type.text_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.authorization.node")); formField.addValue(getNodeID()); formField = form.addField(); formField.setVariable("pusub#subscriber_jid"); formField.setType(FormField.Type.jid_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.authorization.subscriber")); formField.addValue(subscription.getJID().toString()); formField = form.addField(); formField.setVariable("pubsub#allow"); formField.setType(FormField.Type.boolean_type); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.authorization.allow")); formField.addValue(Boolean.FALSE); return form; } /** * Returns a data form used by the owner to edit the node configuration. * * @return data form used by the owner to edit the node configuration. */ public DataForm getConfigurationForm() { DataForm form = new DataForm(DataForm.Type.form); form.setTitle(LocaleUtils.getLocalizedString("pubsub.form.conf.title")); List<String> params = new ArrayList<String>(); params.add(getNodeID()); form.addInstruction(LocaleUtils.getLocalizedString("pubsub.form.conf.instruction", params)); FormField formField = form.addField(); formField.setVariable("FORM_TYPE"); formField.setType(FormField.Type.hidden); formField.addValue("http://jabber.org/protocol/pubsub#node_config"); // Add the form fields and configure them for edition addFormFields(form, true); return form; } /** * Adds the required form fields to the specified form. When editing is true the field type * and a label is included in each fields. The form being completed will contain the current * node configuration. This information can be used for editing the node or for notifing that * the node configuration has changed. * * @param form the form containing the node configuration. * @param isEditing true when the form will be used to edit the node configuration. */ protected void addFormFields(DataForm form, boolean isEditing) { FormField formField = form.addField(); formField.setVariable("pubsub#title"); if (isEditing) { formField.setType(FormField.Type.text_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.short_name")); } formField.addValue(name); formField = form.addField(); formField.setVariable("pubsub#description"); if (isEditing) { formField.setType(FormField.Type.text_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.description")); } formField.addValue(description); formField = form.addField(); formField.setVariable("pubsub#subscribe"); if (isEditing) { formField.setType(FormField.Type.boolean_type); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.subscribe")); } formField.addValue(subscriptionEnabled); formField = form.addField(); formField.setVariable("pubsub#subscription_required"); // TODO Replace this variable for the one defined in the JEP (once one is defined) if (isEditing) { formField.setType(FormField.Type.boolean_type); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.subscription_required")); } formField.addValue(subscriptionConfigurationRequired); formField = form.addField(); formField.setVariable("pubsub#deliver_payloads"); if (isEditing) { formField.setType(FormField.Type.boolean_type); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.deliver_payloads")); } formField.addValue(deliverPayloads); formField = form.addField(); formField.setVariable("pubsub#notify_config"); if (isEditing) { formField.setType(FormField.Type.boolean_type); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.notify_config")); } formField.addValue(notifyConfigChanges); formField = form.addField(); formField.setVariable("pubsub#notify_delete"); if (isEditing) { formField.setType(FormField.Type.boolean_type); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.notify_delete")); } formField.addValue(notifyDelete); formField = form.addField(); formField.setVariable("pubsub#notify_retract"); if (isEditing) { formField.setType(FormField.Type.boolean_type); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.notify_retract")); } formField.addValue(notifyRetract); formField = form.addField(); formField.setVariable("pubsub#presence_based_delivery"); if (isEditing) { formField.setType(FormField.Type.boolean_type); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.presence_based")); } formField.addValue(presenceBasedDelivery); formField = form.addField(); formField.setVariable("pubsub#type"); if (isEditing) { formField.setType(FormField.Type.text_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.type")); } formField.addValue(payloadType); formField = form.addField(); formField.setVariable("pubsub#body_xslt"); if (isEditing) { formField.setType(FormField.Type.text_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.body_xslt")); } formField.addValue(bodyXSLT); formField = form.addField(); formField.setVariable("pubsub#dataform_xslt"); if (isEditing) { formField.setType(FormField.Type.text_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.dataform_xslt")); } formField.addValue(dataformXSLT); formField = form.addField(); formField.setVariable("pubsub#access_model"); if (isEditing) { formField.setType(FormField.Type.list_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.access_model")); formField.addOption(null, AccessModel.authorize.getName()); formField.addOption(null, AccessModel.open.getName()); formField.addOption(null, AccessModel.presence.getName()); formField.addOption(null, AccessModel.roster.getName()); formField.addOption(null, AccessModel.whitelist.getName()); } formField.addValue(accessModel.getName()); formField = form.addField(); formField.setVariable("pubsub#publish_model"); if (isEditing) { formField.setType(FormField.Type.list_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.publish_model")); formField.addOption(null, PublisherModel.publishers.getName()); formField.addOption(null, PublisherModel.subscribers.getName()); formField.addOption(null, PublisherModel.open.getName()); } formField.addValue(publisherModel.getName()); formField = form.addField(); formField.setVariable("pubsub#roster_groups_allowed"); if (isEditing) { formField.setType(FormField.Type.list_multi); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.roster_allowed")); } for (String group : rosterGroupsAllowed) { formField.addValue(group); } formField = form.addField(); formField.setVariable("pubsub#contact"); if (isEditing) { formField.setType(FormField.Type.jid_multi); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.contact")); } for (JID contact : contacts) { formField.addValue(contact.toString()); } formField = form.addField(); formField.setVariable("pubsub#language"); if (isEditing) { formField.setType(FormField.Type.text_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.language")); } formField.addValue(language); formField = form.addField(); formField.setVariable("pubsub#owner"); if (isEditing) { formField.setType(FormField.Type.jid_multi); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.owner")); } for (JID owner : getOwners()) { formField.addValue(owner.toString()); } formField = form.addField(); formField.setVariable("pubsub#publisher"); if (isEditing) { formField.setType(FormField.Type.jid_multi); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.publisher")); } for (JID owner : getPublishers()) { formField.addValue(owner.toString()); } formField = form.addField(); formField.setVariable("pubsub#itemreply"); if (isEditing) { formField.setType(FormField.Type.list_single); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.itemreply")); } if (replyPolicy != null) { formField.addValue(replyPolicy.name()); } formField = form.addField(); formField.setVariable("pubsub#replyroom"); if (isEditing) { formField.setType(FormField.Type.jid_multi); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.replyroom")); } for (JID owner : getReplyRooms()) { formField.addValue(owner.toString()); } formField = form.addField(); formField.setVariable("pubsub#replyto"); if (isEditing) { formField.setType(FormField.Type.jid_multi); formField.setLabel(LocaleUtils.getLocalizedString("pubsub.form.conf.replyto")); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -