diff --git a/src/main/java/com/twilio/sdk/resource/factory/QueueFactory.java b/src/main/java/com/twilio/sdk/resource/factory/QueueFactory.java new file mode 100644 index 0000000000..c7499d47fa --- /dev/null +++ b/src/main/java/com/twilio/sdk/resource/factory/QueueFactory.java @@ -0,0 +1,11 @@ +package com.twilio.sdk.resource.factory; + +import java.util.Map; + +import com.twilio.sdk.TwilioRestException; +import com.twilio.sdk.resource.instance.Queue; + +public interface QueueFactory { + + public Queue create(Map params) throws TwilioRestException; +} diff --git a/src/main/java/com/twilio/sdk/resource/instance/Member.java b/src/main/java/com/twilio/sdk/resource/instance/Member.java new file mode 100644 index 0000000000..043a379ec5 --- /dev/null +++ b/src/main/java/com/twilio/sdk/resource/instance/Member.java @@ -0,0 +1,82 @@ +package com.twilio.sdk.resource.instance; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import com.twilio.sdk.TwilioRestClient; +import com.twilio.sdk.TwilioRestException; +import com.twilio.sdk.TwilioRestResponse; +import com.twilio.sdk.resource.InstanceResource; + +public class Member extends InstanceResource { + private final static String QUEUE_SID = "QueueSid"; + private final static String CALL_SID = "CallSid"; + private final static String DATE_ENQUEUED = "DateEnqueued"; + private final static String WAIT_TIME = "WaitTime"; + private final static String POSITION = "Position"; + + public final static String QUEUE_FRONT = "Front"; + + public Member(final TwilioRestClient client, final String queueSid, + final String callSid) { + super(client); + this.setProperty(Member.QUEUE_SID, queueSid); + this.setProperty(Member.CALL_SID, callSid); + } + + public Member(final TwilioRestClient client, final String queueSid) { + this(client, queueSid, Member.QUEUE_FRONT); + } + + public Member(final TwilioRestClient client, final Map properties) { + super(client, properties); + } + + public String getQueueSid() { + return this.getProperty(Member.QUEUE_SID); + } + + public String getCallSid() { + return this.getProperty(Member.CALL_SID); + } + + public Date getDateEnqueued() { + final SimpleDateFormat format = new SimpleDateFormat( + "EEE, dd MMM yyyy HH:mm:ss Z"); + try { + return format.parse(this.getProperty(Member.DATE_ENQUEUED)); + } catch (ParseException e) { + return null; + } + } + + public String getWaitTime() { + return this.getProperty(Member.WAIT_TIME); + } + + public String getPosition() { + return this.getProperty(Member.POSITION); + } + + @Override + protected String getResourceLocation() { + return "/" + TwilioRestClient.DEFAULT_VERSION + "/Accounts/" + + this.getRequestAccountSid() + "/Queues/" + this.getQueueSid() + + "/Members/" + this.getCallSid() + ".json"; + } + + public Member dequeue(final String url, final String method) throws TwilioRestException { + Map vars = new HashMap(); + vars.put("url", url); + vars.put("method", method); + TwilioRestResponse response = this.getClient().safeRequest( + this.getResourceLocation(), "POST", vars); + + Member member = new Member(this.getClient(), response.toMap()); + member.setRequestAccountSid(this.getRequestAccountSid()); + return member; + } +} diff --git a/src/main/java/com/twilio/sdk/resource/instance/Queue.java b/src/main/java/com/twilio/sdk/resource/instance/Queue.java new file mode 100644 index 0000000000..cf8101e2ee --- /dev/null +++ b/src/main/java/com/twilio/sdk/resource/instance/Queue.java @@ -0,0 +1,71 @@ +package com.twilio.sdk.resource.instance; + +import java.util.HashMap; +import java.util.Map; + +import com.twilio.sdk.TwilioRestClient; +import com.twilio.sdk.TwilioRestException; +import com.twilio.sdk.resource.InstanceResource; +import com.twilio.sdk.resource.list.MemberList; + +public class Queue extends InstanceResource { + private final static String SID = "Sid"; + private final static String FRIENDLY_NAME = "FriendlyName"; + private final static String CURRENT_SIZE = "CurrentSize"; + private final static String MAX_SIZE = "MaxSize"; + private final static String AVERAGE_WAIT_TIME = "AverageWaitTime"; + + public Queue(final TwilioRestClient client, final String sid) { + super(client); + this.setProperty(Queue.SID, sid); + } + + public Queue(TwilioRestClient client, Map params) { + super(client, params); + } + + public String getSid() { + return this.getProperty(Queue.SID); + } + + public String getFriendlyName() { + return this.getProperty(Queue.FRIENDLY_NAME); + } + + public String getCurrentSize() { + return this.getProperty(Queue.CURRENT_SIZE); + } + + public String getMaxSize() { + return this.getProperty(Queue.MAX_SIZE); + } + + public String getAverageWaitTime() { + return this.getProperty(Queue.AVERAGE_WAIT_TIME); + } + + public MemberList getMembers() { + MemberList list = new MemberList(this.getClient(), this.getSid()); + list.setRequestAccountSid(this.getRequestAccountSid()); + return list; + } + + @Override + protected String getResourceLocation() { + return "/" + TwilioRestClient.DEFAULT_VERSION + "/Accounts/" + + this.getRequestAccountSid() + "/Queues/" + this.getSid() + + ".json"; + } + + public void setFriendlyName(final String friendlyName) throws TwilioRestException { + Map vars = new HashMap(); + vars.put(Queue.FRIENDLY_NAME, friendlyName); + this.getClient().safeRequest(this.getResourceLocation(), "POST", vars); + } + + public void setMaxSize(final String maxSize) throws TwilioRestException { + Map vars = new HashMap(); + vars.put(Queue.MAX_SIZE, maxSize); + this.getClient().safeRequest(this.getResourceLocation(), "POST", vars); + } +} diff --git a/src/main/java/com/twilio/sdk/resource/list/QueueList.java b/src/main/java/com/twilio/sdk/resource/list/QueueList.java new file mode 100644 index 0000000000..3211cde6dc --- /dev/null +++ b/src/main/java/com/twilio/sdk/resource/list/QueueList.java @@ -0,0 +1,46 @@ +package com.twilio.sdk.resource.list; + +import java.util.Map; + +import com.twilio.sdk.TwilioRestClient; +import com.twilio.sdk.TwilioRestException; +import com.twilio.sdk.TwilioRestResponse; +import com.twilio.sdk.resource.ListResource; +import com.twilio.sdk.resource.factory.QueueFactory; +import com.twilio.sdk.resource.instance.Queue; + +public class QueueList extends ListResource implements QueueFactory { + + public QueueList(final TwilioRestClient client) { + super(client); + } + + public QueueList(final TwilioRestClient client, + final Map filters) { + super(client, filters); + } + + @Override + public Queue create(Map params) throws TwilioRestException { + TwilioRestResponse response = this.getClient().safeRequest( + this.getResourceLocation(), "POST", params); + return makeNew(this.getClient(), response.toMap()); + } + + @Override + protected Queue makeNew(TwilioRestClient client, Map params) { + return new Queue(client, params); + } + + @Override + protected String getListKey() { + return "queues"; + } + + @Override + protected String getResourceLocation() { + return "/" + TwilioRestClient.DEFAULT_VERSION + "/Accounts/" + + this.getRequestAccountSid() + "/Queues.json"; + } + +} diff --git a/src/main/java/com/twilio/sdk/verbs/Dial.java b/src/main/java/com/twilio/sdk/verbs/Dial.java index 01d1a5e4c6..20fd46f45a 100644 --- a/src/main/java/com/twilio/sdk/verbs/Dial.java +++ b/src/main/java/com/twilio/sdk/verbs/Dial.java @@ -33,17 +33,7 @@ * The Class Dial. */ public class Dial extends Verb { - - /** - * Instantiates a new dial. - */ - public Dial() { - super(V_DIAL, null); - this.allowedVerbs = new ArrayList(); - this.allowedVerbs.add(Verb.V_NUMBER); - this.allowedVerbs.add(Verb.V_CONFERENCE); - } - + /** * Instantiates a new dial. * @@ -54,6 +44,14 @@ public Dial(String number) { this.allowedVerbs = new ArrayList(); this.allowedVerbs.add(Verb.V_NUMBER); this.allowedVerbs.add(Verb.V_CONFERENCE); + this.allowedVerbs.add(Verb.V_QUEUE); + } + + /** + * Instantiates a new dial. + */ + public Dial() { + this(null); } /** diff --git a/src/main/java/com/twilio/sdk/verbs/Enqueue.java b/src/main/java/com/twilio/sdk/verbs/Enqueue.java new file mode 100644 index 0000000000..a0900d0929 --- /dev/null +++ b/src/main/java/com/twilio/sdk/verbs/Enqueue.java @@ -0,0 +1,24 @@ +package com.twilio.sdk.verbs; + +public class Enqueue extends Verb { + + public Enqueue(final String queueName) { + super(Verb.V_ENQUEUE, queueName); + } + + public void setAction(final String action) { + this.set("action", action); + } + + public void setMethod(final String method) { + this.set("method", method); + } + + public void setWaitUrl(final String waitUrl) { + this.set("waitUrl", waitUrl); + } + + public void setWaitUrlMethod(final String waitUrlMethod) { + this.set("waitUrlMethod", waitUrlMethod); + } +} diff --git a/src/main/java/com/twilio/sdk/verbs/Leave.java b/src/main/java/com/twilio/sdk/verbs/Leave.java new file mode 100644 index 0000000000..20af4649bf --- /dev/null +++ b/src/main/java/com/twilio/sdk/verbs/Leave.java @@ -0,0 +1,8 @@ +package com.twilio.sdk.verbs; + +public class Leave extends Verb { + + public Leave() { + super(Verb.V_LEAVE, null); + } +} diff --git a/src/main/java/com/twilio/sdk/verbs/Queue.java b/src/main/java/com/twilio/sdk/verbs/Queue.java new file mode 100644 index 0000000000..237f7f06df --- /dev/null +++ b/src/main/java/com/twilio/sdk/verbs/Queue.java @@ -0,0 +1,16 @@ +package com.twilio.sdk.verbs; + +public class Queue extends Verb { + + public Queue(final String queueName) { + super(Verb.V_QUEUE, queueName); + } + + public void setUrl(final String url) { + this.set("url", url); + } + + public void setMethod(final String method) { + this.set("method", method); + } +} diff --git a/src/main/java/com/twilio/sdk/verbs/Verb.java b/src/main/java/com/twilio/sdk/verbs/Verb.java index ce220d7f33..4421b194af 100644 --- a/src/main/java/com/twilio/sdk/verbs/Verb.java +++ b/src/main/java/com/twilio/sdk/verbs/Verb.java @@ -85,6 +85,12 @@ public class Verb { /** The Constant V_CONFERENCE. */ public static final String V_CONFERENCE = "Conference"; + public static final String V_QUEUE = "Queue"; + + public static final String V_ENQUEUE = "Enqueue"; + + public static final String V_LEAVE = "Leave"; + /** The Constant V_SMS. */ public static final String V_SMS = "Sms";