Package com.anzsoft.client.XMPP.mandioca

Source Code of com.anzsoft.client.XMPP.mandioca.ServiceDiscovery$Service

package com.anzsoft.client.XMPP.mandioca;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.anzsoft.client.XMPP.XmppID;
import com.anzsoft.client.XMPP.XmppInfoQueryListener;
import com.anzsoft.client.XMPP.XmppPacket;
import com.anzsoft.client.XMPP.XmppQuery;
import com.anzsoft.client.utils.XMLHelper;
import com.google.gwt.xml.client.Document;
import com.google.gwt.xml.client.Element;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.google.gwt.xml.client.XMLParser;
import com.extjs.gxt.ui.client.data.BaseModelData;

public class ServiceDiscovery
{
 

  public class Service extends BaseModelData
  {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public Service()
    {

    }
   
    public Service(String jid, String name)
    {
      setJid(jid);
      setName(name);
    }

    public String getName()
    {
      return get("name");
    }

    public void setName(String name)
    {
      set("name", name);
    }

    public String getJid()
    {
      return get("jid");
    }

    public void setJid(String jid)
    {
      set("jid", jid);
    }

  }
 
 
  private final XmppInfoQueryListener discoListener;
  private final XmppSession session;
  public Map<String,Element> disco = new HashMap<String,Element>();
  private int info_id = 0;
  public ServiceDiscovery(final XmppSession session)
  {
    this.session = session;
    discoListener = new XmppInfoQueryListener()
    {
      public void onInfoQueryReceived(XmppPacket packet)
      {
        if(packet.getType().equals("result"))
        {
          if(packet.getID().equals("disco_item_1"))
          {
            onDiscoItems(packet);
          }
          else if(packet.getID().startsWith("disco_info_"))
          {
            onDiscoInfo(packet);
          }
        }
      }

      public void onInfoQuerySent(XmppPacket packet)
      {
       
      }
    };
    this.session.addInfoQueryListener(discoListener);
  }
 
  public void getDiscoItems()
  {
    XmppQuery query = session.getFactory().createQuery();
    query.setType(XmppQuery.TYPE_GET);
    query.setID("disco_item_1");
    XmppID jid = XmppID.parseId(session.getUser().getID());
    query.setTo(jid.getDomain());
    query.setQuery("http://jabber.org/protocol/disco#items");
    session.send(query);
  }
 
  public void getDiscoItemInfo(final String jid)
  {
    XmppQuery query = session.getFactory().createQuery();
    query.setType(XmppQuery.TYPE_GET);
    query.setID("disco_info_"+info_id);
    query.setTo(jid);
    query.setQuery("http://jabber.org/protocol/disco#info");
    session.send(query);
    info_id++;
  }
 
  private void onDiscoItems(final XmppPacket query)
  {
    Document doc = XMLParser.parse(query.toXML());
      Element queryEl = XMLHelper.queryTag(doc.getDocumentElement());
      NodeList items = queryEl.getChildNodes();
      disco.clear();
      for(int index = 0;index < items.getLength();index++)
      {
        Element item = (Element)items.item(index);
        if(!item.getTagName().equals("item")||item.getAttribute("jid") == null||item.getAttribute("node") != null)
          continue;
        getDiscoItemInfo(item.getAttribute("jid"));
      }
  }
 
  private void onDiscoInfo(final XmppPacket query)
  {
    final String jid = query.getFrom();
    Document doc = XMLParser.parse(query.toXML());
      Element queryEl = XMLHelper.queryTag(doc.getDocumentElement());
      disco.put(jid, queryEl);
  }
 
  public List<Service> getGateWays()
  {
    List<Service> services = new ArrayList<Service>();
    services.add(0,new Service("","Local jabber user"));
    for(String jid:disco.keySet())
    {
      Element el = disco.get(jid);
      if(el == null)
        continue;
      Node item = el.getElementsByTagName("identity").item(0);
      if(item == null)
        continue;
      Element elItem = (Element)item;
      if(elItem.getAttribute("category").equals("gateway"))
      {
        services.add(new Service(jid,elItem.getAttribute("name")));
      }
    }
    return services;
  }
 
  public List<Service> getSearchServices()
  {
    List<Service> services = new ArrayList<Service>();
    for(String jid:disco.keySet())
    {
      Element el = disco.get(jid);
      if(el == null)
        continue;
      NodeList items = el.getElementsByTagName("feature");
      for(int index = 0;index<items.getLength();index++)
      {
        Element item = (Element)items.item(index);
        if(item.getAttribute("var").equals("jabber:iq:search"))
        {
          Element identity = (Element) el.getElementsByTagName("identity").item(0);
          services.add(new Service(jid,identity.getAttribute("name")));
          break;
        }
      }
    }
    return services;
  }
 
  public List<Service> getMUCRoomServices()
  {
    List<Service> services = new ArrayList<Service>();
    for(String jid:disco.keySet())
    {
      Element el = disco.get(jid);
      if(el == null)
        continue;
      Node item = el.getElementsByTagName("identity").item(0);
      if(item == null)
        continue;
      Element elItem = (Element)item;
      if(elItem.getAttribute("category").equals("conference")&&elItem.getAttribute("type").equals("text"))
      {
        NodeList features = el.getElementsByTagName("feature");
        for(int index=0;index<features.getLength();index++)
        {
          Element feature = (Element) features.item(index);
          if(feature.getAttribute("var").equals("http://jabber.org/protocol/muc"))
          {
            services.add(new Service(jid,elItem.getAttribute("name")));
            break;
          }
        }
      }
    }
    return services;
  }
}
TOP

Related Classes of com.anzsoft.client.XMPP.mandioca.ServiceDiscovery$Service

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.