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); + } +}