From 6a2977caca73afd3de0b644a9a13f507b4240638 Mon Sep 17 00:00:00 2001 From: Benoit Corne Date: Mon, 27 Jul 2015 13:25:48 +0200 Subject: [PATCH] ENH adding some more details about users rights adding feature #18 as requested deprecating SlackBot class (it is now a user returning true to isBot) increasing version to release a java 7 bytecode compatible version. Change-Id: I99e8233e38eba2dc9b343ec3a2b6750e565163da --- build.gradle | 2 +- .../ullink/slack/simpleslackapi/SlackBot.java | 1 + .../slack/simpleslackapi/SlackPersona.java | 8 +- .../slack/simpleslackapi/SlackUser.java | 4 +- .../impl/AbstractSlackSessionImpl.java | 13 ++- .../simpleslackapi/impl/SlackBotImpl.java | 31 +----- .../impl/SlackJSONParsingUtils.java | 28 ++++-- .../impl/SlackJSONSessionStatusParser.java | 10 -- .../simpleslackapi/impl/SlackPersonaImpl.java | 94 +++++++++++++++++++ .../simpleslackapi/impl/SlackUserImpl.java | 57 ++--------- .../impl/SlackWebSocketSessionImpl.java | 2 - .../impl/TestAbstractSlackSessionImpl.java | 18 ++-- .../impl/TestSlackJSONMessageParser.java | 6 +- .../TestSlackJSONSessionStatusParser.java | 3 +- src/test/resources/test_json.json | 52 +++++++--- 15 files changed, 197 insertions(+), 132 deletions(-) create mode 100644 src/main/java/com/ullink/slack/simpleslackapi/impl/SlackPersonaImpl.java diff --git a/build.gradle b/build.gradle index 8cf4392c..e25c23f5 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ targetCompatibility = 1.7 group = 'com.ullink.slack' archivesBaseName = 'simpleslackapi' -version = '0.4.3' +version = '0.4.4' task javadocJar(type: Jar) { diff --git a/src/main/java/com/ullink/slack/simpleslackapi/SlackBot.java b/src/main/java/com/ullink/slack/simpleslackapi/SlackBot.java index 47825e31..b9790c85 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/SlackBot.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/SlackBot.java @@ -1,5 +1,6 @@ package com.ullink.slack.simpleslackapi; +@Deprecated public interface SlackBot extends SlackPersona { } diff --git a/src/main/java/com/ullink/slack/simpleslackapi/SlackPersona.java b/src/main/java/com/ullink/slack/simpleslackapi/SlackPersona.java index dc87d14d..524c2a5e 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/SlackPersona.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/SlackPersona.java @@ -7,6 +7,12 @@ public enum SlackPresence { UNKNOWN, ACTIVE, AWAY, AUTO } String getId(); String getUserName(); - + String getUserMail(); boolean isDeleted(); + boolean isAdmin(); + boolean isOwner(); + boolean isPrimaryOwner(); + boolean isRestricted(); + boolean isUltraRestricted(); + boolean isBot(); } diff --git a/src/main/java/com/ullink/slack/simpleslackapi/SlackUser.java b/src/main/java/com/ullink/slack/simpleslackapi/SlackUser.java index 6fc25c0d..1bc62a02 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/SlackUser.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/SlackUser.java @@ -1,7 +1,5 @@ package com.ullink.slack.simpleslackapi; -public interface SlackUser extends SlackPersona +public interface SlackUser extends SlackPersona, SlackBot { - String getRealName(); - String getUserMail(); } diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/AbstractSlackSessionImpl.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/AbstractSlackSessionImpl.java index a146acc9..99b2f2a7 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/AbstractSlackSessionImpl.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/AbstractSlackSessionImpl.java @@ -22,7 +22,6 @@ abstract class AbstractSlackSessionImpl implements SlackSession protected Map channels = new HashMap<>(); protected Map users = new HashMap<>(); - protected Map bots = new HashMap<>(); protected SlackPersona sessionPersona; protected List channelArchiveListener = new ArrayList(); @@ -52,9 +51,16 @@ public Collection getUsers() } @Override + @Deprecated public Collection getBots() { - return new ArrayList<>(bots.values()); + ArrayList toReturn = new ArrayList<>(); + for(SlackUser user : users.values()) { + if (user.isBot()) { + toReturn.add(user); + } + } + return toReturn; } @Override @@ -124,9 +130,10 @@ public SlackPersona sessionPersona() } @Override + @Deprecated public SlackBot findBotById(String botId) { - return bots.get(botId); + return users.get(botId); } @Override diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackBotImpl.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackBotImpl.java index 41188cf6..3db2312b 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackBotImpl.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackBotImpl.java @@ -2,35 +2,12 @@ import com.ullink.slack.simpleslackapi.SlackBot; -class SlackBotImpl implements SlackBot +@Deprecated +class SlackBotImpl extends SlackPersonaImpl implements SlackBot { - - private String id; - private String name; - private boolean deleted; - - SlackBotImpl(String id, String name, boolean deleted) - { - this.id = id; - this.name = name; - this.deleted = deleted; - } - - @Override - public String getId() + SlackBotImpl(String id, String userName, String realName, String userMail, boolean deleted, boolean admin, boolean owner, boolean primaryOwner, boolean restricted, boolean ultraRestricted) { - return id; + super(id, userName, realName, userMail, deleted, admin, owner, primaryOwner, restricted, ultraRestricted, true); } - @Override - public String getUserName() - { - return name; - } - - @Override - public boolean isDeleted() - { - return deleted; - } } diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONParsingUtils.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONParsingUtils.java index 61f7eedd..8937c370 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONParsingUtils.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONParsingUtils.java @@ -13,27 +13,35 @@ private SlackJSONParsingUtils() // Helper class } - static final SlackUserImpl buildSlackUser(JSONObject jsonUser) + static final SlackUser buildSlackUser(JSONObject jsonUser) { String id = (String) jsonUser.get("id"); String name = (String) jsonUser.get("name"); String realName = (String) jsonUser.get("real_name"); - Boolean deleted = (Boolean) jsonUser.get("deleted"); - if(deleted == null) deleted = false; + Boolean deleted = ifNullFalse(jsonUser,"deleted"); + Boolean admin = ifNullFalse(jsonUser,"is_admin"); + Boolean owner = ifNullFalse(jsonUser,"is_owner"); + Boolean primaryOwner = ifNullFalse(jsonUser,"is_primary_owner"); + Boolean restricted = ifNullFalse(jsonUser,"is_restricted"); + Boolean ultraRestricted = ifNullFalse(jsonUser,"is_ultra_restricted"); + Boolean bot = ifNullFalse(jsonUser,"is_bot"); JSONObject profileJSON = (JSONObject) jsonUser.get("profile"); String email = ""; - if(profileJSON != null) { + if (profileJSON != null) + { email = (String) profileJSON.get("email"); } - return new SlackUserImpl(id, name, realName, email, deleted); + return new SlackUserImpl(id, name, realName, email, deleted, admin, owner, primaryOwner, restricted, ultraRestricted, bot); } - static final SlackBotImpl buildSlackBot(JSONObject jsonBot) + private static Boolean ifNullFalse(JSONObject jsonUser, String field) { - String id = (String) jsonBot.get("id"); - String name = (String) jsonBot.get("name"); - Boolean deleted = (Boolean) jsonBot.get("deleted"); - return new SlackBotImpl(id, name, deleted); + Boolean deleted = (Boolean) jsonUser.get(field); + if (deleted == null) + { + deleted = false; + } + return deleted; } static final SlackChannelImpl buildSlackChannel(JSONObject jsonChannel, Map knownUsersById) diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONSessionStatusParser.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONSessionStatusParser.java index 2ad4b52e..ca70a158 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONSessionStatusParser.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONSessionStatusParser.java @@ -79,16 +79,6 @@ void parse() throws ParseException users.put(slackUser.getId(), slackUser); } - JSONArray botsJson = (JSONArray) jsonResponse.get("bots"); - - for (Object jsonObject : botsJson) - { - JSONObject jsonBot = (JSONObject) jsonObject; - SlackBot slackBot = SlackJSONParsingUtils.buildSlackBot(jsonBot); - LOGGER.debug("slack bot found : " + slackBot.getId()); - bots.put(slackBot.getId(), slackBot); - } - JSONArray channelsJson = (JSONArray) jsonResponse.get("channels"); for (Object jsonObject : channelsJson) diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackPersonaImpl.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackPersonaImpl.java new file mode 100644 index 00000000..5fd2abc7 --- /dev/null +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackPersonaImpl.java @@ -0,0 +1,94 @@ +package com.ullink.slack.simpleslackapi.impl; + +import com.ullink.slack.simpleslackapi.SlackPersona; + +class SlackPersonaImpl implements SlackPersona +{ + final String id; + final String userName; + final String realName; + final String userMail; + final boolean deleted; + final boolean admin; + final boolean owner; + final boolean primaryOwner; + final boolean restricted; + final boolean ultraRestricted; + final boolean bot; + + SlackPersonaImpl(String id, String userName, String realName, String userMail, boolean deleted, boolean admin, boolean owner, boolean primaryOwner, boolean restricted, boolean ultraRestricted, boolean bot) + { + this.id = id; + this.userName = userName; + this.realName = realName; + this.userMail = userMail; + this.deleted = deleted; + this.admin = admin; + this.owner = owner; + this.primaryOwner = primaryOwner; + this.restricted = restricted; + this.ultraRestricted = ultraRestricted; + this.bot = bot; + } + + @Override + public String getId() + { + return id; + } + + @Override + public String getUserName() + { + return userName; + } + + @Override + public boolean isDeleted() + { + return deleted; + } + + @Override + public boolean isAdmin() + { + return admin; + } + + @Override + public boolean isOwner() + { + return owner; + } + + @Override + public boolean isPrimaryOwner() + { + return primaryOwner; + } + + @Override + public boolean isRestricted() + { + return restricted; + } + + @Override + public boolean isUltraRestricted() + { + return ultraRestricted; + } + + @Override + public boolean isBot() + { + return bot; + } + + @Override + public String getUserMail() + { + return userMail; + } + +} diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackUserImpl.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackUserImpl.java index bddacc8f..955bc49f 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackUserImpl.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackUserImpl.java @@ -2,63 +2,20 @@ import com.ullink.slack.simpleslackapi.SlackUser; -class SlackUserImpl implements SlackUser +class SlackUserImpl extends SlackPersonaImpl implements SlackUser { - String id; + String id; @Override - public String toString() { - return "SlackUserImpl{" + - "id='" + id + '\'' + - ", userName='" + userName + '\'' + - ", realName='" + realName + '\'' + - ", userMail='" + userMail + '\'' + - ", isDeleted=" + isDeleted + - '}'; - } - - String userName; - String realName; - String userMail; - boolean isDeleted; - - SlackUserImpl(String id, String userName, String realName, String userMail, boolean isDeleted) - { - this.id = id; - this.userName = userName; - this.realName = realName; - this.isDeleted = isDeleted; - this.userMail = userMail; - } - - @Override - public String getId() - { - return id; - } - - @Override - public String getUserName() - { - return userName; - } - - @Override - public String getRealName() + public String toString() { - return realName; + return "SlackUserImpl{" + "id='" + id + '\'' + ", userName='" + userName + '\'' + ", realName='" + realName + '\'' + ", userMail='" + userMail + '\'' + ", isDeleted=" + deleted + '\'' + ", isAdmin=" + admin + '\'' + ", isOwner=" + + owner + '\'' + ", isPrimaryOwner=" + primaryOwner + '\'' + ", isRestricted=" + restricted + '\'' + ", isUltraRestricted=" + ultraRestricted + '}'; } - @Override - public boolean isDeleted() - { - return isDeleted; - } - - @Override - public String getUserMail() + SlackUserImpl(String id, String userName, String realName, String userMail, boolean deleted, boolean admin, boolean owner, boolean primaryOwner, boolean restricted, boolean ultraRestricted, boolean bot) { - return userMail; + super(id, userName, realName, userMail, deleted, admin, owner, primaryOwner, restricted, ultraRestricted, bot); } } diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackWebSocketSessionImpl.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackWebSocketSessionImpl.java index f3674a23..7ba56d45 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackWebSocketSessionImpl.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackWebSocketSessionImpl.java @@ -167,11 +167,9 @@ private void connectImpl() throws IOException, ClientProtocolException, ConnectE throw new ConnectException(sessionParser.getError()); } users = sessionParser.getUsers(); - bots = sessionParser.getBots(); channels = sessionParser.getChannels(); sessionPersona = sessionParser.getSessionPersona(); LOGGER.info(users.size() + " users found on this session"); - LOGGER.info(bots.size() + " bots found on this session"); LOGGER.info(channels.size() + " channels found on this session"); String wssurl = sessionParser.getWebSocketURL(); diff --git a/src/test/java/com/ullink/slack/simpleslackapi/impl/TestAbstractSlackSessionImpl.java b/src/test/java/com/ullink/slack/simpleslackapi/impl/TestAbstractSlackSessionImpl.java index 6b73bc8a..41fdcd4a 100644 --- a/src/test/java/com/ullink/slack/simpleslackapi/impl/TestAbstractSlackSessionImpl.java +++ b/src/test/java/com/ullink/slack/simpleslackapi/impl/TestAbstractSlackSessionImpl.java @@ -23,15 +23,15 @@ public void connect() channels.put("channelid4",new SlackChannelImpl("channelid4", "testchannel4", "topicchannel4", "topicchannel4", false)); channels.put("channelid5",new SlackChannelImpl("channelid5", "testchannel5", "topicchannel5", "topicchannel5", false)); - users.put("userid1",new SlackUserImpl("userid1", "username1", "realname1","userid1@my.mail", false)); - users.put("userid2",new SlackUserImpl("userid2", "username2", "realname2","userid2@my.mail", false)); - users.put("userid3",new SlackUserImpl("userid3", "username3", "realname3","userid3@my.mail", true)); - users.put("userid4",new SlackUserImpl("userid4", "username4", "realname4","userid4@my.mail", false)); - users.put("userid5",new SlackUserImpl("userid5", "username5", "realname4","userid5@my.mail", true)); - - bots.put("botid1",new SlackBotImpl("botid1", "botname1", false)); - bots.put("botid2",new SlackBotImpl("botid2", "botname2", false)); - bots.put("botid3",new SlackBotImpl("botid3", "botname2", true)); + users.put("userid1",new SlackUserImpl("userid1", "username1", "realname1","userid1@my.mail", false,false,false,false,false,false, false)); + users.put("userid2",new SlackUserImpl("userid2", "username2", "realname2","userid2@my.mail", false,false,false,false,false,false, false)); + users.put("userid3",new SlackUserImpl("userid3", "username3", "realname3","userid3@my.mail", true,false,false,false,false,false, false)); + users.put("userid4",new SlackUserImpl("userid4", "username4", "realname4","userid4@my.mail", false,false,false,false,false,false, false)); + users.put("userid5",new SlackUserImpl("userid5", "username5", "realname4","userid5@my.mail", true,false,false,false,false,false, false)); + + users.put("botid1",new SlackUserImpl("botid1", "botname1", "real bot name 1", null,false,false,false,false,false,false,true)); + users.put("botid2",new SlackUserImpl("botid2", "botname2", "real bot name 2", null,false,false,false,false,false,false,true)); + users.put("botid3",new SlackUserImpl("botid3", "botname3", "real bot name 3", null, true,false,false,false,false,false,true)); } diff --git a/src/test/java/com/ullink/slack/simpleslackapi/impl/TestSlackJSONMessageParser.java b/src/test/java/com/ullink/slack/simpleslackapi/impl/TestSlackJSONMessageParser.java index 53690aea..2deeceac 100644 --- a/src/test/java/com/ullink/slack/simpleslackapi/impl/TestSlackJSONMessageParser.java +++ b/src/test/java/com/ullink/slack/simpleslackapi/impl/TestSlackJSONMessageParser.java @@ -41,9 +41,9 @@ public void setup() @Override public void connect() { - SlackUser user1 = new SlackUserImpl("TESTUSER1", "test user 1", "", "", false); - SlackUser user2 = new SlackUserImpl("TESTUSER2", "test user 2", "", "", false); - SlackUser user3 = new SlackUserImpl("TESTUSER3", "test user 3", "", "", false); + SlackUser user1 = new SlackUserImpl("TESTUSER1", "test user 1", "", "", false,false,false,false,false,false, false); + SlackUser user2 = new SlackUserImpl("TESTUSER2", "test user 2", "", "", false,false,false,false,false,false, false); + SlackUser user3 = new SlackUserImpl("TESTUSER3", "test user 3", "", "", false,false,false,false,false,false, false); users.put(user1.getId(), user1); users.put(user2.getId(), user2); users.put(user3.getId(), user3); diff --git a/src/test/java/com/ullink/slack/simpleslackapi/impl/TestSlackJSONSessionStatusParser.java b/src/test/java/com/ullink/slack/simpleslackapi/impl/TestSlackJSONSessionStatusParser.java index 5fe31ded..186c8564 100644 --- a/src/test/java/com/ullink/slack/simpleslackapi/impl/TestSlackJSONSessionStatusParser.java +++ b/src/test/java/com/ullink/slack/simpleslackapi/impl/TestSlackJSONSessionStatusParser.java @@ -23,8 +23,7 @@ public void testParsingSessionDescription() throws Exception SlackJSONSessionStatusParser parser = new SlackJSONSessionStatusParser(strBuilder.toString()); parser.parse(); Assertions.assertThat(parser.getChannels()).containsOnlyKeys("CHANNELID1","CHANNELID2","CHANNELID3","GROUPID1"); - Assertions.assertThat(parser.getUsers()).containsOnlyKeys("USERID1","USERID2","USERID3","USERID4"); - Assertions.assertThat(parser.getBots()).containsOnlyKeys("BOTID1","BOTID2"); + Assertions.assertThat(parser.getUsers()).containsOnlyKeys("USERID1","USERID2","USERID3","USERID4","BOTID1","BOTID2"); Assertions.assertThat(parser.getWebSocketURL()).isEqualTo("wss://mywebsocketurl"); } } diff --git a/src/test/resources/test_json.json b/src/test/resources/test_json.json index a81b3b97..0534fd19 100644 --- a/src/test/resources/test_json.json +++ b/src/test/resources/test_json.json @@ -192,24 +192,54 @@ "is_bot": false, "has_files": false, "presence": "away" - } - ], - "bots": [ + }, { "id": "BOTID1", - "name": "testbotname1", + "name": "botid1", "deleted": false, - "icons": { - "image_48": "https:\/\/myimagehost.com\/mytestimage.png" - } + "status": null, + "color": "a72f79", + "profile" : { + "email": "userid4@my.email" + }, + "real_name": "Test User 4", + "skype": null, + "phone": null, + "tz": "Europe\/Amsterdam", + "tz_label": "Central European Summer Time", + "tz_offset": 7200, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "has_files": false, + "presence": "away" }, { "id": "BOTID2", - "name": "testbotname2", + "name": "botid2", "deleted": false, - "icons": { - "image_48": "https:\/\/myimagehost.com\/mytestimage.png" - } + "status": null, + "color": "a72f79", + "profile" : { + "email": "userid4@my.email" + }, + "real_name": "Test User 4", + "skype": null, + "phone": null, + "tz": "Europe\/Amsterdam", + "tz_label": "Central European Summer Time", + "tz_offset": 7200, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "is_bot": true, + "has_files": false, + "presence": "away" } ], "svn_rev": "26838",