diff --git a/pom.xml b/pom.xml
index 90afa5c..4864011 100644
--- a/pom.xml
+++ b/pom.xml
@@ -140,6 +140,13 @@
4.4.1
+
+
+ org.apache.commons
+ commons-configuration2
+ 2.10.1
+
+
javax.activation
diff --git a/src/main/java/io/taliox/zulip/ZulipRestExecutor.java b/src/main/java/io/taliox/zulip/ZulipRestExecutor.java
index cd76252..d97797f 100644
--- a/src/main/java/io/taliox/zulip/ZulipRestExecutor.java
+++ b/src/main/java/io/taliox/zulip/ZulipRestExecutor.java
@@ -2,6 +2,14 @@
import io.taliox.zulip.calls.ZulipRestAPICall;
import io.taliox.zulip.controller.HttpController;
+import org.apache.commons.configuration2.INIConfiguration;
+import org.apache.commons.configuration2.SubnodeConfiguration;
+import org.apache.commons.configuration2.ex.ConfigurationException;
+
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
/**
* The Class ZulipRestExecutor which is responsible for executing requests and
@@ -27,6 +35,31 @@ public ZulipRestExecutor(String userName, String password, String serverURL) {
this.httpController = new HttpController(userName, password, serverURL);
}
+ /**
+ * A constructor for the Zulip REST API executor taking the file name of a zuliprc file. The information from the
+ * file is used to configure the executor.
+ *
+ * An example that will be accepted:
+ * [api]
+ * email=some@mail.com
+ * key=API_KEY
+ * site=https://your.zulip.com
+ *
+ * The Executor is responsible for communicating with your Zulip server.
+ * @param zuliprcFileName
+ * Name of the zuliprc file which can be generated by a Zulip client.
+ */
+ public ZulipRestExecutor(String zuliprcFileName) throws IOException, ConfigurationException {
+ INIConfiguration iniConfiguration = new INIConfiguration();
+ iniConfiguration.read(new FileReader(zuliprcFileName));
+ SubnodeConfiguration apiSection = iniConfiguration.getSection("api");
+ this.httpController = new HttpController(
+ apiSection.getString("email"),
+ apiSection.getString("key"),
+ apiSection.getString("site")
+ );
+ }
+
/**
* Executes a HTTP call to a Zulip server.
*
@@ -38,4 +71,4 @@ public String executeCall(ZulipRestAPICall call) {
return call.execute(this);
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/io/taliox/zulip/calls/users/PostUserStatus.java b/src/main/java/io/taliox/zulip/calls/users/PostUserStatus.java
new file mode 100644
index 0000000..0bdeb94
--- /dev/null
+++ b/src/main/java/io/taliox/zulip/calls/users/PostUserStatus.java
@@ -0,0 +1,50 @@
+package io.taliox.zulip.calls.users;
+
+import io.taliox.zulip.ZulipRestExecutor;
+import io.taliox.zulip.calls.ZulipRestAPICall;
+import org.apache.http.client.methods.HttpPost;
+
+/**
+ * Updates the status for the currently authenticated user. See the API description for details on updating the status.
+ *
+ * @see https://zulip.com/api/update-status
+ */
+public class PostUserStatus extends ZulipRestAPICall {
+
+ /**
+ * The content of the status message.
+ * @see API description
+ */
+ private final String statusText;
+ /**
+ * The name of the status emoji.
+ * @see API description
+ */
+ private final String emojiName;
+
+ /**
+ * Instantiate a new {@link PostUserStatus}.
+ *
+ * @param statusText
+ * The content of the status message. If left empty, the status message will be cleared.
+ * @param emojiName
+ * The name of the status emoji for display in the client.
+ */
+ public PostUserStatus(String statusText, String emojiName) {
+ this.statusText = statusText;
+ this.emojiName = emojiName;
+ setZulipAPIUrl("/api/v1/users/me/status");
+ }
+
+ @Override
+ public String execute(ZulipRestExecutor executor) {
+ setHttpController(executor.httpController);
+ HttpPost post = new HttpPost(this.httpController.getServer() + getZulipAPIUrl());
+ getParameters().put("status_text", this.statusText);
+ getParameters().put("emoji_name", this.emojiName);
+ return performRequest(getParameters(), post);
+ }
+}