Source code: org/jabber/jabberbeans/Presence.java
1 package org.jabber.jabberbeans;
2
3 import org.jabber.jabberbeans.Extension.*;
4
5 import java.lang.String;
6 import java.lang.InstantiationException;
7 import java.util.Vector;
8 import java.util.Enumeration;
9
10 /**
11 * This class is an abstraction of presence packets - both incoming and
12 * outgoing.
13 *
14 * Incoming presence packets are notifications on a resource - they are
15 * sent by the remote client's server when that client has a status change.
16 *
17 * Outgoing presence packets are of two types. You send out your presence by
18 * sending a packet to the server with your new status. The second type is a
19 * subscribe request, where you request a remote user add you to their
20 * presence notifications.
21 */
22 class Presence
23 extends ContentPacket
24 {
25 //address we received from
26 private String status;
27 private int priority;
28 private String stateShow;
29 private Vector extensions=new Vector();
30
31 public Presence (PresenceBuilder builder)
32 throws InstantiationException
33 {
34 super((PacketBuilder)builder);
35 /* TODO: detect invalid type*/
36 EPresenceType presenceType=new EPresenceType(type);
37 if (presenceType.getType()==EPresenceType.INVALID_TYPE)
38 throw new InstantiationException
39 ("Invalid or unrecognized type attribute on presence " +
40 "information.");
41 status=builder.getStatus();
42 priority=builder.getPriority();
43 if (priority<0)
44 throw new InstantiationException
45 ("Invalid (negative) priority on presence information");
46 stateShow=builder.getStateShow();
47 Enumeration e=builder.enumerateExtensions();
48 while (e.hasMoreElements())
49 {
50 Object element=e.nextElement();
51 if (!(element instanceof PresenceExtension))
52 throw new InstantiationException
53 ("Non-Presence Extension \"" +
54 element.getClass().getName() +
55 "\" passed through PresenceBuilder.");
56 extensions.addElement(element);
57 }
58 }
59
60 public String getStatus()
61 {
62 return status;
63 }
64 public int getPriority()
65 {
66 return priority;
67 }
68 public String getStateShow()
69 {
70 return stateShow;
71 }
72 public Enumeration enumerateExtensions()
73 {
74 return extensions.elements();
75 }
76
77 public String toString()
78 {
79 StringBuffer sb=new StringBuffer();
80 sb.append("<presence");
81 if (getToAddress()!=null)
82 sb.append(" to=\"" + getToAddress().toString() + "\"");
83 if (getFromAddress()!=null)
84 sb.append(" from=\"" + getFromAddress().toString() + "\"");
85 String s;
86 if (!(s=getType().toString()).equals("unavailabe"))
87 sb.append(" type=\"" + s + "\"");
88 sb.append(">");
89
90 if (!((getStatus()==null)||(getStatus().equals(""))))
91 sb.append("<status>" +
92 getStatus() +
93 "</status>");
94 if (getPriority()!=0)
95 sb.append("<priority>" +
96 new Integer(getPriority()).toString() +
97 "</priority>");
98 if (!((getStateShow()==null)||(getStateShow().equals(""))))
99 sb.append("<show>" +
100 getStateShow() +
101 "</show>");
102 Enumeration e=enumerateExtensions();
103 while (e.hasMoreElements())
104 sb.append(((Extension)e.nextElement()).toString());
105 sb.append("</presence>");
106 return new String(sb);
107 }
108 }