📄 pubsubmodule.java
字号:
public Iterator<String> getFeatures(String name, String node, JID senderJID) { ArrayList<String> features = new ArrayList<String>(); if (name == null && node == null) { // Answer the features of the PubSub service features.add("http://jabber.org/protocol/pubsub"); if (isCollectionNodesSupported()) { // Collection nodes are supported features.add("http://jabber.org/protocol/pubsub#collections"); } // Configuration of node options is supported features.add("http://jabber.org/protocol/pubsub#config-node"); // Simultaneous creation and configuration of nodes is supported features.add("http://jabber.org/protocol/pubsub#create-and-configure"); // Creation of nodes is supported features.add("http://jabber.org/protocol/pubsub#create-nodes"); // Deletion of nodes is supported features.add("http://jabber.org/protocol/pubsub#delete-nodes"); // Retrieval of pending subscription approvals is supported features.add("http://jabber.org/protocol/pubsub#get-pending"); if (isInstantNodeSupported()) { // Creation of instant nodes is supported features.add("http://jabber.org/protocol/pubsub#instant-nodes"); } // Publishers may specify item identifiers features.add("http://jabber.org/protocol/pubsub#item-ids"); // TODO Time-based subscriptions are supported (clean up thread missing, rest is supported) //features.add("http://jabber.org/protocol/pubsub#leased-subscription"); // Node meta-data is supported features.add("http://jabber.org/protocol/pubsub#meta-data"); // Node owners may modify affiliations features.add("http://jabber.org/protocol/pubsub#modify-affiliations"); // Node owners may manage subscriptions. features.add("http://jabber.org/protocol/pubsub#manage-subscriptions"); // A single entity may subscribe to a node multiple times features.add("http://jabber.org/protocol/pubsub#multi-subscribe"); // The outcast affiliation is supported features.add("http://jabber.org/protocol/pubsub#outcast-affiliation"); // Persistent items are supported features.add("http://jabber.org/protocol/pubsub#persistent-items"); // Presence-based delivery of event notifications is supported features.add("http://jabber.org/protocol/pubsub#presence-notifications"); // Publishing items is supported (note: not valid for collection nodes) features.add("http://jabber.org/protocol/pubsub#publish"); // The publisher affiliation is supported features.add("http://jabber.org/protocol/pubsub#publisher-affiliation"); // Purging of nodes is supported features.add("http://jabber.org/protocol/pubsub#purge-nodes"); // Item retraction is supported features.add("http://jabber.org/protocol/pubsub#retract-items"); // Retrieval of current affiliations is supported features.add("http://jabber.org/protocol/pubsub#retrieve-affiliations"); // Retrieval of default node configuration is supported. features.add("http://jabber.org/protocol/pubsub#retrieve-default"); // Item retrieval is supported features.add("http://jabber.org/protocol/pubsub#retrieve-items"); // Retrieval of current subscriptions is supported. features.add("http://jabber.org/protocol/pubsub#retrieve-subscriptions"); // Subscribing and unsubscribing are supported features.add("http://jabber.org/protocol/pubsub#subscribe"); // Configuration of subscription options is supported features.add("http://jabber.org/protocol/pubsub#subscription-options"); // Default access model for nodes created on the service String modelName = getDefaultNodeConfiguration(true).getAccessModel().getName(); features.add("http://jabber.org/protocol/pubsub#default_access_model_" + modelName); } else if (name == null) { // Answer the features of a given node Node pubNode = getNode(node); if (canDiscoverNode(pubNode)) { // Answer the features of the PubSub service features.add("http://jabber.org/protocol/pubsub"); } } return features.iterator(); } public XDataFormImpl getExtendedInfo(String name, String node, JID senderJID) { if (name == null && node != null) { // Answer the extended info of a given node Node pubNode = getNode(node); if (canDiscoverNode(pubNode)) { // Get the metadata data form org.xmpp.forms.DataForm metadataForm = pubNode.getMetadataForm(); // Convert Whack data form into old data form format (will go away someday) XDataFormImpl dataForm = new XDataFormImpl(DataForm.TYPE_RESULT); for (org.xmpp.forms.FormField formField : metadataForm.getFields()) { XFormFieldImpl field = new XFormFieldImpl(formField.getVariable()); field.setLabel(formField.getLabel()); for (String value : formField.getValues()) { field.addValue(value); } dataForm.addField(field); } return dataForm; } } return null; } public boolean hasInfo(String name, String node, JID senderJID) { // Check if the service is disabled. Info is not available when disabled. if (!isServiceEnabled()) { return false; } if (name == null && node == null) { // We always have info about the Pubsub service return true; } else if (name == null) { // We only have info if the node exists return hasNode(node); } return false; } public Iterator<DiscoItem> getItems(String name, String node, JID senderJID) { // Check if the service is disabled. Info is not available when disabled. if (!isServiceEnabled()) { return null; } List<DiscoItem> answer = new ArrayList<DiscoItem>(); String serviceDomain = getServiceDomain(); if (name == null && node == null) { // Answer all first level nodes for (Node pubNode : rootCollectionNode.getNodes()) { if (canDiscoverNode(pubNode)) { final DiscoItem item = new DiscoItem( new JID(serviceDomain), pubNode.getName(), pubNode.getNodeID(), null); answer.add(item); } } } else if (name == null) { Node pubNode = getNode(node); if (pubNode != null && canDiscoverNode(pubNode)) { if (pubNode.isCollectionNode()) { // Answer all nested nodes as items for (Node nestedNode : pubNode.getNodes()) { if (canDiscoverNode(nestedNode)) { final DiscoItem item = new DiscoItem(new JID(serviceDomain), nestedNode.getName(), nestedNode.getNodeID(), null); answer.add(item); } } } else { // This is a leaf node so answer the published items which exist on the service for (PublishedItem publishedItem : pubNode.getPublishedItems()) { answer.add(new DiscoItem(new JID(serviceDomain), publishedItem.getID(), null, null)); } } } else { // Answer null to indicate that specified item was not found return null; } } return answer.iterator(); } public void broadcast(Node node, Message message, Collection<JID> jids) { // TODO Possibly use a thread pool for sending packets (based on the jids size) message.setFrom(getAddress()); for (JID jid : jids) { message.setTo(jid); message.setID( node.getNodeID() + "__" + jid.toBareJID() + "__" + StringUtils.randomString(5)); router.route(message); } } public void send(Packet packet) { router.route(packet); } public void sendNotification(Node node, Message message, JID jid) { message.setFrom(getAddress()); message.setTo(jid); message.setID( node.getNodeID() + "__" + jid.toBareJID() + "__" + StringUtils.randomString(5)); router.route(message); } public Node getNode(String nodeID) { return nodes.get(nodeID); } public Collection<Node> getNodes() { return nodes.values(); } private boolean hasNode(String nodeID) { return getNode(nodeID) != null; } public void addNode(Node node) { nodes.put(node.getNodeID(), node); } public void removeNode(String nodeID) { nodes.remove(nodeID); } private boolean canDiscoverNode(Node pubNode) { return true; } /** * Converts an array to a comma-delimitted String. * * @param array the array. * @return a comma delimtted String of the array values. */ private static String fromArray(String [] array) { StringBuilder buf = new StringBuilder(); for (int i=0; i<array.length; i++) { buf.append(array[i]); if (i != array.length-1) { buf.append(","); } } return buf.toString(); } public Map<String, Map<String, String>> getBarePresences() { return barePresences; } public Queue<PublishedItem> getItemsToAdd() { return itemsToAdd; } public Queue<PublishedItem> getItemsToDelete() { return itemsToDelete; } public AdHocCommandManager getManager() { return manager; } public PublishedItemTask getPublishedItemTask() { return publishedItemTask; } public void setPublishedItemTask(PublishedItemTask task) { publishedItemTask = task; } public Timer getTimer() { return timer; } public int getItemsTaskTimeout() { return items_task_timeout; } public void setItemsTaskTimeout(int timeout) { items_task_timeout = timeout; } public void propertySet(String property, Map<String, Object> params) { if (property.equals("xmpp.pubsub.enabled")) { boolean enabled = Boolean.parseBoolean((String)params.get("value")); // Enable/disable the service enableService(enabled); } } public void propertyDeleted(String property, Map<String, Object> params) { if (property.equals("xmpp.pubsub.enabled")) { // Enable/disable the service enableService(true); } } public void xmlPropertySet(String property, Map<String, Object> params) { // Do nothing } public void xmlPropertyDeleted(String property, Map<String, Object> params) { // Do nothing }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -