1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2025-09-09 17:19:39 +02:00

Enable PacketExtensions for IQs

This is actually only part one, i.e. with this commit if the user adds a
PacketExtension to an IQ it will be included in IQ.toXml(). Which was
previously only the case if the IQ subclass explicitly included packet
extensions.

The second part of the change is to change the IQ provider, so that
packet extensions are automatically parsed.

Cases where PacketExtensions are used for Message and IQ are slightly
changed. The IQ sublcass now only has a field with this
PacketExtension (see for example
bytestreams.ibb.packet.DataPacketExtension).

Also changed hoxt API: Removed unnecessary indirection and made the
API more Smack idiomatic.
This commit is contained in:
Florian Schmaus 2014-11-07 21:12:01 +01:00
parent a9c798f3bb
commit 9e797c1b17
93 changed files with 1347 additions and 1438 deletions

View file

@ -781,13 +781,7 @@ public class AgentSession {
}
else if (packet instanceof OfferRevokeProvider.OfferRevokePacket) {
// Acknowledge the IQ set.
IQ reply = new IQ() {
public String getChildElementXML() {
return null;
}
};
reply.setPacketID(packet.getPacketID());
reply.setType(IQ.Type.result);
IQ reply = IQ.createResultIQ((OfferRevokeProvider.OfferRevokePacket) packet);
connection.sendPacket(reply);
fireOfferRevokeEvent((OfferRevokeProvider.OfferRevokePacket)packet);
@ -962,12 +956,7 @@ public class AgentSession {
public void sendRoomInvitation(RoomInvitation.Type type, String invitee, String sessionID, String reason) throws NoResponseException, XMPPErrorException, NotConnectedException
{
final RoomInvitation invitation = new RoomInvitation(type, invitee, sessionID, reason);
IQ iq = new IQ() {
public String getChildElementXML() {
return invitation.toXML();
}
};
IQ iq = new RoomInvitation.RoomInvitationIQ(invitation);
iq.setType(IQ.Type.set);
iq.setTo(workgroupJID);
iq.setFrom(connection.getUser());
@ -1004,12 +993,7 @@ public class AgentSession {
public void sendRoomTransfer(RoomTransfer.Type type, String invitee, String sessionID, String reason) throws NoResponseException, XMPPErrorException, NotConnectedException
{
final RoomTransfer transfer = new RoomTransfer(type, invitee, sessionID, reason);
IQ iq = new IQ() {
public String getChildElementXML() {
return transfer.toXML();
}
};
IQ iq = new RoomTransfer.RoomTransferIQ(transfer);
iq.setType(IQ.Type.set);
iq.setTo(workgroupJID);
iq.setFrom(connection.getUser());

View file

@ -194,13 +194,16 @@ public class Offer {
private class RejectPacket extends IQ {
RejectPacket(String workgroup) {
super("offer-reject", "http://jabber.org/protocol/workgroup");
this.setTo(workgroup);
this.setType(IQ.Type.set);
}
public String getChildElementXML() {
return "<offer-reject id=\"" + Offer.this.getSessionID() +
"\" xmlns=\"http://jabber.org/protocol/workgroup" + "\"/>";
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.attribute("id", Offer.this.getSessionID());
xml.setEmptyElement();
return xml;
}
}
@ -210,13 +213,16 @@ public class Offer {
private class AcceptPacket extends IQ {
AcceptPacket(String workgroup) {
super("offer-accept", "http://jabber.org/protocol/workgroup");
this.setTo(workgroup);
this.setType(IQ.Type.set);
}
public String getChildElementXML() {
return "<offer-accept id=\"" + Offer.this.getSessionID() +
"\" xmlns=\"http://jabber.org/protocol/workgroup" + "\"/>";
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.attribute("id", Offer.this.getSessionID());
xml.setEmptyElement();
return xml;
}
}

View file

@ -22,15 +22,20 @@ import java.io.IOException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.SimpleIQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
public class OfferConfirmation extends IQ {
public class OfferConfirmation extends SimpleIQ {
private String userJID;
private long sessionID;
public OfferConfirmation() {
super("offer-confirmation", "http://jabber.org/protocol/workgroup");
}
public String getUserJID() {
return userJID;
}
@ -53,13 +58,6 @@ public class OfferConfirmation extends IQ {
con.sendPacket(packet);
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<offer-confirmation xmlns=\"http://jabber.org/protocol/workgroup\">");
buf.append("</offer-confirmation>");
return buf.toString();
}
public static class Provider extends IQProvider<OfferConfirmation> {
@Override
@ -103,14 +101,18 @@ public class OfferConfirmation extends IQ {
String roomName;
NotifyServicePacket(String workgroup, String roomName) {
super("offer-confirmation", "http://jabber.org/protocol/workgroup");
this.setTo(workgroup);
this.setType(IQ.Type.result);
this.roomName = roomName;
}
public String getChildElementXML() {
return "<offer-confirmation roomname=\"" + roomName + "\" xmlns=\"http://jabber.org/protocol/workgroup" + "\"/>";
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.attribute("roomname", roomName);
xml.setEmptyElement();
return xml;
}
}

View file

@ -20,13 +20,13 @@ package org.jivesoftware.smackx.workgroup.ext.forms;
import java.io.IOException;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.SimpleIQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
public class WorkgroupForm extends IQ {
public class WorkgroupForm extends SimpleIQ {
/**
* Element name of the packet extension.
@ -38,15 +38,8 @@ public class WorkgroupForm extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
// Add packet extensions, if any are defined.
buf.append(getExtensionsXML());
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
public WorkgroupForm() {
super(ELEMENT_NAME, NAMESPACE);
}
/**

View file

@ -33,34 +33,6 @@ import java.util.List;
* to one or more jids and therefore retrievable.
*/
public class AgentChatHistory extends IQ {
private String agentJID;
private int maxSessions;
private long startDate;
private List<AgentChatSession> agentChatSessions = new ArrayList<AgentChatSession>();
public AgentChatHistory(String agentJID, int maxSessions, Date startDate) {
this.agentJID = agentJID;
this.maxSessions = maxSessions;
this.startDate = startDate.getTime();
}
public AgentChatHistory(String agentJID, int maxSessions) {
this.agentJID = agentJID;
this.maxSessions = maxSessions;
this.startDate = 0;
}
public AgentChatHistory() {
}
public void addChatSession(AgentChatSession chatSession) {
agentChatSessions.add(chatSession);
}
public Collection<AgentChatSession> getAgentChatSessions() {
return agentChatSessions;
}
/**
* Element name of the packet extension.
@ -72,19 +44,45 @@ public class AgentChatHistory extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
private String agentJID;
private int maxSessions;
private long startDate;
buf.append("<").append(ELEMENT_NAME).append(" xmlns=");
buf.append('"');
buf.append(NAMESPACE);
buf.append('"');
private List<AgentChatSession> agentChatSessions = new ArrayList<AgentChatSession>();
public AgentChatHistory(String agentJID, int maxSessions, Date startDate) {
this();
this.agentJID = agentJID;
this.maxSessions = maxSessions;
this.startDate = startDate.getTime();
}
public AgentChatHistory(String agentJID, int maxSessions) {
this();
this.agentJID = agentJID;
this.maxSessions = maxSessions;
this.startDate = 0;
}
public AgentChatHistory() {
super(ELEMENT_NAME, NAMESPACE);
}
public void addChatSession(AgentChatSession chatSession) {
agentChatSessions.add(chatSession);
}
public Collection<AgentChatSession> getAgentChatSessions() {
return agentChatSessions;
}
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append(" agentJID=\"" + agentJID + "\"");
buf.append(" maxSessions=\"" + maxSessions + "\"");
buf.append(" startDate=\"" + startDate + "\"");
buf.append("></").append(ELEMENT_NAME).append("> ");
return buf.toString();
buf.setEmptyElement();
return buf;
}
/**

View file

@ -43,6 +43,10 @@ public class ChatMetadata extends IQ {
private String sessionID;
public ChatMetadata() {
super(ELEMENT_NAME, NAMESPACE);
}
public String getSessionID() {
return sessionID;
}
@ -62,15 +66,12 @@ public class ChatMetadata extends IQ {
return map;
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.rightAngleBracket();
buf.append("<sessionID>").append(getSessionID()).append("</sessionID>");
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}
/**

View file

@ -33,10 +33,24 @@ import org.xmlpull.v1.XmlPullParser;
*/
public class Macros extends IQ {
/**
* Element name of the packet extension.
*/
public static final String ELEMENT_NAME = "macros";
/**
* Namespace of the packet extension.
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
private MacroGroup rootGroup;
private boolean personal;
private MacroGroup personalMacroGroup;
public Macros() {
super(ELEMENT_NAME, NAMESPACE);
}
public MacroGroup getRootGroup() {
return rootGroup;
}
@ -61,21 +75,10 @@ public class Macros extends IQ {
this.personalMacroGroup = personalMacroGroup;
}
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.rightAngleBracket();
/**
* Element name of the packet extension.
*/
public static final String ELEMENT_NAME = "macros";
/**
* Namespace of the packet extension.
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
if (isPersonal()) {
buf.append("<personal>true</personal>");
}
@ -84,9 +87,8 @@ public class Macros extends IQ {
buf.append(StringUtils.escapeForXML(getPersonalMacroGroup().toXML()));
buf.append("</personalMacro>");
}
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}
/**

View file

@ -21,7 +21,6 @@ import java.io.IOException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.util.XmlStringBuilder;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@ -40,6 +39,9 @@ public class ChatNotes extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public ChatNotes() {
super(ELEMENT_NAME, NAMESPACE);
}
private String sessionID;
private String notes;
@ -60,18 +62,17 @@ public class ChatNotes extends IQ {
this.notes = notes;
}
public String getChildElementXML() {
XmlStringBuilder buf = new XmlStringBuilder();
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.rightAngleBracket();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
buf.append("<sessionID>").append(getSessionID()).append("</sessionID>");
if (getNotes() != null) {
buf.element("notes", getNotes());
}
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}
/**

View file

@ -42,6 +42,10 @@ public class AgentInfo extends IQ {
private String jid;
private String name;
public AgentInfo() {
super(ELEMENT_NAME, NAMESPACE);
}
/**
* Returns the Agent's jid.
*
@ -80,19 +84,18 @@ public class AgentInfo extends IQ {
this.name = name;
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.rightAngleBracket();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
if (jid != null) {
buf.append("<jid>").append(getJid()).append("</jid>");
}
if (name != null) {
buf.append("<name>").append(getName()).append("</name>");
}
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}
/**

View file

@ -50,6 +50,7 @@ public class AgentStatusRequest extends IQ {
private Set<Item> agents;
public AgentStatusRequest() {
super(ELEMENT_NAME, NAMESPACE);
agents = new HashSet<Item>();
}
@ -69,9 +70,9 @@ public class AgentStatusRequest extends IQ {
return NAMESPACE;
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.rightAngleBracket();
synchronized (agents) {
for (Iterator<Item> i=agents.iterator(); i.hasNext(); ) {
Item item = (Item) i.next();
@ -84,8 +85,7 @@ public class AgentStatusRequest extends IQ {
buf.append("</agent>");
}
}
buf.append("</").append(this.getElementName()).append("> ");
return buf.toString();
return buf;
}
public static class Item {

View file

@ -40,6 +40,10 @@ public class AgentWorkgroups extends IQ {
private String agentJID;
private List<String> workgroups;
private AgentWorkgroups() {
super("workgroups", "http://jabber.org/protocol/workgroup");
}
/**
* Creates an AgentWorkgroups request for the given agent. This IQ will be sent and an answer
* will be received with the jid of the workgroups where the agent can work.
@ -47,6 +51,7 @@ public class AgentWorkgroups extends IQ {
* @param agentJID the id of the agent to get his workgroups.
*/
public AgentWorkgroups(String agentJID) {
this();
this.agentJID = agentJID;
this.workgroups = new ArrayList<String>();
}
@ -59,6 +64,7 @@ public class AgentWorkgroups extends IQ {
* @param workgroups the list of workgroup JIDs where the agent can work.
*/
public AgentWorkgroups(String agentJID, List<String> workgroups) {
this();
this.agentJID = agentJID;
this.workgroups = workgroups;
}
@ -76,21 +82,16 @@ public class AgentWorkgroups extends IQ {
return Collections.unmodifiableList(workgroups);
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<workgroups xmlns=\"http://jabber.org/protocol/workgroup\" jid=\"")
.append(agentJID)
.append("\">");
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.attribute("jid", agentJID).rightAngleBracket();
for (Iterator<String> it=workgroups.iterator(); it.hasNext();) {
String workgroupJID = it.next();
buf.append("<workgroup jid=\"" + workgroupJID + "\"/>");
}
buf.append("</workgroups>");
return buf.toString();
return buf;
}
/**

View file

@ -34,6 +34,10 @@ public class DepartQueuePacket extends IQ {
private String user;
private DepartQueuePacket() {
super("depart-queue", "http://jabber.org/protocol/workgroup");
}
/**
* Creates a depart queue request packet to the specified workgroup.
*
@ -51,6 +55,7 @@ public class DepartQueuePacket extends IQ {
* @param user the user to make depart from the queue.
*/
public DepartQueuePacket(String workgroup, String user) {
this();
this.user = user;
setTo(workgroup);
@ -58,16 +63,14 @@ public class DepartQueuePacket extends IQ {
setFrom(user);
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder("<depart-queue xmlns=\"http://jabber.org/protocol/workgroup\"");
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.rightAngleBracket();
if (this.user != null) {
buf.append("><jid>").append(this.user).append("</jid></depart-queue>");
}
else {
buf.append("/>");
buf.append("<jid>").append(this.user).append("</jid>");
}
return buf.toString();
return buf;
}
}

View file

@ -55,27 +55,19 @@ public class MonitorPacket extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getElementName() {
return ELEMENT_NAME;
public MonitorPacket() {
super(ELEMENT_NAME, NAMESPACE);
}
public String getNamespace() {
return NAMESPACE;
}
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.rightAngleBracket();
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=");
buf.append('"');
buf.append(NAMESPACE);
buf.append('"');
buf.append(">");
if (sessionID != null) {
buf.append("<makeOwner sessionID=\""+sessionID+"\"></makeOwner>");
}
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}

View file

@ -60,6 +60,7 @@ public class OccupantsInfo extends IQ {
private final Set<OccupantInfo> occupants;
public OccupantsInfo(String roomID) {
super(ELEMENT_NAME, NAMESPACE);
this.roomID = roomID;
this.occupants = new HashSet<OccupantInfo>();
}
@ -76,9 +77,8 @@ public class OccupantsInfo extends IQ {
return Collections.unmodifiableSet(occupants);
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE);
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append("\" roomID=\"").append(roomID).append("\">");
synchronized (occupants) {
for (OccupantInfo occupant : occupants) {
@ -98,8 +98,7 @@ public class OccupantsInfo extends IQ {
buf.append("</occupant>");
}
}
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}
public static class OccupantInfo {

View file

@ -122,6 +122,7 @@ public class OfferRequestProvider extends IQProvider<IQ> {
public OfferRequestPacket(String userJID, String userID, int timeout, Map<String, List<String>> metaData,
String sessionID, OfferContent content)
{
super("offer", "http://jabber.org/protocol/workgroup");
this.userJID = userJID;
this.userID = userID;
this.timeout = timeout;
@ -182,11 +183,10 @@ public class OfferRequestProvider extends IQProvider<IQ> {
return this.metaData;
}
public String getChildElementXML () {
StringBuilder buf = new StringBuilder();
buf.append("<offer xmlns=\"http://jabber.org/protocol/workgroup\" jid=\"").append(userJID).append("\">");
buf.append("<timeout>").append(timeout).append("</timeout>");
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append(" jid=\"").append(userJID).append("\">");
buf.append("<timeout>").append(Integer.toString(timeout)).append("</timeout>");
if (sessionID != null) {
buf.append('<').append(SessionID.ELEMENT_NAME);
@ -206,9 +206,7 @@ public class OfferRequestProvider extends IQProvider<IQ> {
buf.append(UserID.NAMESPACE).append("\"/>");
}
buf.append("</offer>");
return buf.toString();
return buf;
}
}
}

View file

@ -73,6 +73,7 @@ public class OfferRevokeProvider extends IQProvider<IQ> {
private String reason;
public OfferRevokePacket (String userJID, String userID, String cause, String sessionID) {
super("offer-revoke", "http://jabber.org/protocol/workgroup");
this.userJID = userJID;
this.userID = userID;
this.reason = cause;
@ -95,9 +96,9 @@ public class OfferRevokeProvider extends IQProvider<IQ> {
return this.sessionID;
}
public String getChildElementXML () {
StringBuilder buf = new StringBuilder();
buf.append("<offer-revoke xmlns=\"http://jabber.org/protocol/workgroup\" jid=\"").append(userID).append("\">");
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append(" jid=\"").append(userID).append("\">");
if (reason != null) {
buf.append("<reason>").append(reason).append("</reason>");
}
@ -107,8 +108,7 @@ public class OfferRevokeProvider extends IQProvider<IQ> {
if (userID != null) {
buf.append(new UserID(userID).toXML());
}
buf.append("</offer-revoke>");
return buf.toString();
return buf;
}
}
}

View file

@ -19,8 +19,11 @@ package org.jivesoftware.smackx.workgroup.packet;
import java.io.IOException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.IQ.IQChildElementXmlStringBuilder;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.XmlStringBuilder;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@ -101,11 +104,15 @@ public class RoomInvitation implements PacketExtension {
return sessionID;
}
public String toXML() {
StringBuilder buf = new StringBuilder();
@Override
public XmlStringBuilder toXML() {
XmlStringBuilder xml = getIQChildElementBuilder(new IQChildElementXmlStringBuilder(this));
xml.closeElement(this);
return xml;
}
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE);
buf.append("\" type=\"").append(type).append("\">");
public IQ.IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append("\" type=\"").append(type.name()).append("\">");
buf.append("<session xmlns=\"http://jivesoftware.com/protocol/workgroup\" id=\"").append(sessionID).append("\"></session>");
if (invitee != null) {
buf.append("<invitee>").append(invitee).append("</invitee>");
@ -116,10 +123,8 @@ public class RoomInvitation implements PacketExtension {
if (reason != null) {
buf.append("<reason>").append(reason).append("</reason>");
}
// Add packet extensions, if any are defined.
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}
/**
@ -141,6 +146,18 @@ public class RoomInvitation implements PacketExtension {
workgroup
}
public static class RoomInvitationIQ extends IQ {
private final RoomInvitation roomInvitation;
public RoomInvitationIQ(RoomInvitation roomInvitation) {
super(ELEMENT_NAME, NAMESPACE);
this.roomInvitation = roomInvitation;
}
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
return roomInvitation.getIQChildElementBuilder(xml);
}
}
public static class Provider extends PacketExtensionProvider<RoomInvitation> {
@Override

View file

@ -19,8 +19,11 @@ package org.jivesoftware.smackx.workgroup.packet;
import java.io.IOException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.IQ.IQChildElementXmlStringBuilder;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.XmlStringBuilder;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@ -101,11 +104,15 @@ public class RoomTransfer implements PacketExtension {
return sessionID;
}
public String toXML() {
StringBuilder buf = new StringBuilder();
@Override
public XmlStringBuilder toXML() {
XmlStringBuilder xml = getIQChildElementBuilder(new IQChildElementXmlStringBuilder(this));
xml.closeElement(this);
return xml;
}
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE);
buf.append("\" type=\"").append(type).append("\">");
public IQ.IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append("\" type=\"").append(type.name()).append("\">");
buf.append("<session xmlns=\"http://jivesoftware.com/protocol/workgroup\" id=\"").append(sessionID).append("\"></session>");
if (invitee != null) {
buf.append("<invitee>").append(invitee).append("</invitee>");
@ -116,10 +123,8 @@ public class RoomTransfer implements PacketExtension {
if (reason != null) {
buf.append("<reason>").append(reason).append("</reason>");
}
// Add packet extensions, if any are defined.
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}
/**
@ -141,6 +146,18 @@ public class RoomTransfer implements PacketExtension {
workgroup
}
public static class RoomTransferIQ extends IQ {
private final RoomTransfer roomTransfer;
public RoomTransferIQ(RoomTransfer roomTransfer) {
super(ELEMENT_NAME, NAMESPACE);
this.roomTransfer = roomTransfer;
}
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
return roomTransfer.getIQChildElementBuilder(xml);
}
}
public static class Provider extends PacketExtensionProvider<RoomTransfer> {
@Override

View file

@ -42,8 +42,7 @@ public class Transcript extends IQ {
* @param sessionID the id of the session to get the conversation transcript.
*/
public Transcript(String sessionID) {
this.sessionID = sessionID;
this.packets = new ArrayList<Packet>();
this(sessionID, new ArrayList<Packet>());
}
/**
@ -54,6 +53,7 @@ public class Transcript extends IQ {
* @param packets the list of messages and presences send to the room.
*/
public Transcript(String sessionID, List<Packet> packets) {
super("transcript", "http://jabber.org/protocol/workgroup");
this.sessionID = sessionID;
this.packets = packets;
}
@ -77,10 +77,9 @@ public class Transcript extends IQ {
return Collections.unmodifiableList(packets);
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<transcript xmlns=\"http://jivesoftware.com/protocol/workgroup\" sessionID=\"")
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append(" sessionID=\"")
.append(sessionID)
.append("\">");
@ -89,8 +88,6 @@ public class Transcript extends IQ {
buf.append(packet.toXML());
}
buf.append("</transcript>");
return buf.toString();
return buf;
}
}

View file

@ -20,7 +20,7 @@ package org.jivesoftware.smackx.workgroup.packet;
import java.io.IOException;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.SimpleIQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.xmlpull.v1.XmlPullParser;
@ -32,7 +32,7 @@ import org.xmlpull.v1.XmlPullParserException;
*
* @author Gaston Dombiak
*/
public class TranscriptSearch extends IQ {
public class TranscriptSearch extends SimpleIQ {
/**
* Element name of the packet extension.
@ -44,16 +44,9 @@ public class TranscriptSearch extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
// Add packet extensions, if any are defined.
buf.append(getExtensionsXML());
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
}
public TranscriptSearch() {
super(ELEMENT_NAME, NAMESPACE);
}
/**
* An IQProvider for TranscriptSearch packets.

View file

@ -50,8 +50,7 @@ public class Transcripts extends IQ {
* @param userID the id of the user to get his conversations transcripts.
*/
public Transcripts(String userID) {
this.userID = userID;
this.summaries = new ArrayList<Transcripts.TranscriptSummary>();
this(userID, new ArrayList<Transcripts.TranscriptSummary>());
}
/**
@ -62,6 +61,7 @@ public class Transcripts extends IQ {
* @param summaries the list of TranscriptSummaries.
*/
public Transcripts(String userID, List<Transcripts.TranscriptSummary> summaries) {
super("transcripts", "http://jabber.org/protocol/workgroup");
this.userID = userID;
this.summaries = summaries;
}
@ -90,10 +90,9 @@ public class Transcripts extends IQ {
return Collections.unmodifiableList(summaries);
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<transcripts xmlns=\"http://jivesoftware.com/protocol/workgroup\" userID=\"")
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append(" userID=\"")
.append(userID)
.append("\">");
@ -101,9 +100,7 @@ public class Transcripts extends IQ {
buf.append(transcriptSummary.toXML());
}
buf.append("</transcripts>");
return buf.toString();
return buf;
}
/**

View file

@ -49,11 +49,23 @@ public class ChatSettings extends IQ {
private String key;
private int type = -1;
/**
* Element name of the packet extension.
*/
public static final String ELEMENT_NAME = "chat-settings";
/**
* Namespace of the packet extension.
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public ChatSettings() {
super(ELEMENT_NAME, NAMESPACE);
settings = new ArrayList<ChatSetting>();
}
public ChatSettings(String key) {
this();
setKey(key);
}
@ -94,24 +106,8 @@ public class ChatSettings extends IQ {
return null;
}
/**
* Element name of the packet extension.
*/
public static final String ELEMENT_NAME = "chat-settings";
/**
* Namespace of the packet extension.
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=");
buf.append('"');
buf.append(NAMESPACE);
buf.append('"');
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
if (key != null) {
buf.append(" key=\"" + key + "\"");
}
@ -119,9 +115,8 @@ public class ChatSettings extends IQ {
if (type != -1) {
buf.append(" type=\"" + type + "\"");
}
buf.append("></").append(ELEMENT_NAME).append("> ");
return buf.toString();
buf.setEmptyElement();
return buf;
}
/**

View file

@ -60,22 +60,19 @@ public class GenericSettings extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
public GenericSettings() {
super(ELEMENT_NAME, NAMESPACE);
}
buf.append("<").append(ELEMENT_NAME).append(" xmlns=");
buf.append('"');
buf.append(NAMESPACE);
buf.append('"');
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.append(">");
if (ModelUtil.hasLength(getQuery())) {
buf.append("<query>" + getQuery() + "</query>");
}
buf.append("</").append(ELEMENT_NAME).append("> ");
return buf.toString();
return buf;
}
/**
* Packet extension provider for SoundSetting Packets.
*/

View file

@ -20,12 +20,12 @@ package org.jivesoftware.smackx.workgroup.settings;
import java.io.IOException;
import org.jivesoftware.smackx.workgroup.util.ModelUtil;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.SimpleIQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
public class OfflineSettings extends IQ {
public class OfflineSettings extends SimpleIQ {
private String redirectURL;
private String offlineText;
@ -96,18 +96,10 @@ public class OfflineSettings extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=");
buf.append('"');
buf.append(NAMESPACE);
buf.append('"');
buf.append("></").append(ELEMENT_NAME).append("> ");
return buf.toString();
public OfflineSettings() {
super(ELEMENT_NAME, NAMESPACE);
}
/**
* Packet extension provider for AgentStatusRequest packets.
*/

View file

@ -19,12 +19,12 @@ package org.jivesoftware.smackx.workgroup.settings;
import java.io.IOException;
import org.jivesoftware.smackx.workgroup.util.ModelUtil;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.SimpleIQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
public class SearchSettings extends IQ {
public class SearchSettings extends SimpleIQ {
private String forumsLocation;
private String kbLocation;
@ -67,18 +67,10 @@ public class SearchSettings extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=");
buf.append('"');
buf.append(NAMESPACE);
buf.append('"');
buf.append("></").append(ELEMENT_NAME).append("> ");
return buf.toString();
public SearchSettings() {
super(ELEMENT_NAME, NAMESPACE);
}
/**
* Packet extension provider for AgentStatusRequest packets.
*/

View file

@ -19,13 +19,13 @@ package org.jivesoftware.smackx.workgroup.settings;
import java.io.IOException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.SimpleIQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.util.stringencoder.Base64;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
public class SoundSettings extends IQ {
public class SoundSettings extends SimpleIQ {
private String outgoingSound;
private String incomingSound;
@ -57,18 +57,10 @@ public class SoundSettings extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<").append(ELEMENT_NAME).append(" xmlns=");
buf.append('"');
buf.append(NAMESPACE);
buf.append('"');
buf.append("></").append(ELEMENT_NAME).append("> ");
return buf.toString();
public SoundSettings() {
super(ELEMENT_NAME, NAMESPACE);
}
/**
* Packet extension provider for SoundSetting Packets.
*/

View file

@ -75,18 +75,17 @@ public class WorkgroupProperties extends IQ {
*/
public static final String NAMESPACE = "http://jivesoftware.com/protocol/workgroup";
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
public WorkgroupProperties() {
super(ELEMENT_NAME, NAMESPACE);
}
buf.append("<").append(ELEMENT_NAME).append(" xmlns=");
buf.append('"');
buf.append(NAMESPACE);
buf.append('"');
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
if (ModelUtil.hasLength(getJid())) {
buf.append("jid=\"" + getJid() + "\" ");
}
buf.append("></").append(ELEMENT_NAME).append("> ");
return buf.toString();
buf.setEmptyElement();
return buf;
}
/**

View file

@ -577,6 +577,7 @@ public class Workgroup {
private DataForm form;
public JoinQueuePacket(String workgroup, Form answerForm, String userID) {
super("join-queue", "http://jabber.org/protocol/workgroup");
this.userID = userID;
setTo(workgroup);
@ -586,10 +587,9 @@ public class Workgroup {
addExtension(form);
}
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<join-queue xmlns=\"http://jabber.org/protocol/workgroup\">");
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) {
buf.rightAngleBracket();
buf.append("<queue-notifications/>");
// Add the user unique identification if the session is anonymous
if (connection.isAnonymous()) {
@ -599,9 +599,7 @@ public class Workgroup {
// Append data form text
buf.append(form.toXML());
buf.append("</join-queue>");
return buf.toString();
return buf;
}
}