summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2011-07-01 09:19:49 (GMT)
committerKevin Smith <git@kismith.co.uk>2011-07-01 09:19:49 (GMT)
commit2da71a8a85486a494343f1662d64fb5ae5a2a44e (patch)
tree23992f9f2a00bac23b345e5c2cc9c1194efc25be /src/com/isode/stroke/queries/Request.java
downloadstroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.zip
stroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.tar.bz2
Initial import
Diffstat (limited to 'src/com/isode/stroke/queries/Request.java')
-rw-r--r--src/com/isode/stroke/queries/Request.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/com/isode/stroke/queries/Request.java b/src/com/isode/stroke/queries/Request.java
new file mode 100644
index 0000000..df38b10
--- /dev/null
+++ b/src/com/isode/stroke/queries/Request.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2010, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2010, Remko Tron¨on.
+ * All rights reserved.
+ */
+
+package com.isode.stroke.queries;
+
+import com.isode.stroke.elements.ErrorPayload;
+import com.isode.stroke.elements.IQ;
+import com.isode.stroke.elements.IQ.Type;
+import com.isode.stroke.elements.Payload;
+import com.isode.stroke.jid.JID;
+
+/**
+ * Base class for IQ requests.
+ */
+public abstract class Request implements IQHandler {
+ protected final Type type_;
+ protected final IQRouter router_;
+ protected final JID receiver_;
+ private boolean sent_;
+ private Payload payload_;
+ private String id_;
+
+ public Request(IQ.Type type, JID receiver, IQRouter router) {
+ this(type, receiver, null, router);
+ }
+
+ public Request(IQ.Type type, JID receiver, Payload payload, IQRouter router) {
+ type_ = type;
+ router_ = router;
+ receiver_ = receiver;
+ payload_ = payload;
+ sent_ = false;
+ }
+
+ public void send() {
+ assert payload_ != null;
+ assert !sent_;
+ sent_ = true;
+
+ IQ iq = new IQ(type_);
+ iq.setTo(receiver_);
+ iq.addPayload(payload_);
+ id_ = router_.getNewIQID();
+ iq.setID(id_);
+
+ router_.addHandler(this);
+
+ router_.sendIQ(iq);
+ }
+
+ protected void setPayload(Payload payload) {
+ payload_ = payload;
+ }
+
+ protected Payload getPayload() {
+ return payload_;
+ }
+
+ protected abstract void handleResponse(Payload payload, ErrorPayload error);
+
+ public boolean handleIQ(IQ iq) {
+ boolean handled = false;
+ if (sent_ && iq.getID().equals(id_)) {
+ if (iq.getType().equals(IQ.Type.Result)) {
+ handleResponse(iq.getPayload(payload_), null);
+ } else {
+ ErrorPayload errorPayload = iq.getPayload(new ErrorPayload());
+ if (errorPayload != null) {
+ handleResponse(null, errorPayload);
+ } else {
+ handleResponse(null, new ErrorPayload(ErrorPayload.Condition.UndefinedCondition));
+ }
+ }
+ router_.removeHandler(this);
+ handled = true;
+ }
+ return handled;
+ }
+
+} \ No newline at end of file