diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MucConfigFormManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MucConfigFormManager.java index 587ff2708..1688cacb5 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MucConfigFormManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/MucConfigFormManager.java @@ -46,8 +46,30 @@ import org.jxmpp.jid.util.JidUtil; *
*/ public class MucConfigFormManager { + /** + * The constant String {@value}. + * + * @see XEP-0045 § 10. Owner Use Cases + */ public static final String MUC_ROOMCONFIG_ROOMOWNERS = "muc#roomconfig_roomowners"; + /** + * The constant String {@value}. + */ + public static final String MUC_ROOMCONFIG_MEMBERSONLY = "muc#roomconfig_membersonly"; + + /** + * The constant String {@value}. + * + * @see XEP-0045 § 7.2.6 Password-Protected Rooms + */ + public static final String MUC_ROOMCONFIG_PASSWORDPROTECTEDROOM = "muc#roomconfig_passwordprotectedroom"; + + /** + * The constant String {@value}. + */ + public static final String MUC_ROOMCONFIG_ROOMSECRET = "muc#roomconfig_roomsecret"; + private final MultiUserChat multiUserChat; private final Form answerForm; private final Listtrue
if supported, false
if not.
+ * @see #MUC_ROOMCONFIG_ROOMOWNERS
+ */
public boolean supportsRoomOwners() {
return owners != null;
}
+ /**
+ * Set the owners of the room.
+ *
+ * @param newOwners a collection of JIDs to become the new owners of the room.
+ * @return a reference to this object.
+ * @throws MucConfigurationNotSupportedException if the MUC service does not support this option.
+ * @see #MUC_ROOMCONFIG_ROOMOWNERS
+ */
public MucConfigFormManager setRoomOwners(Collection extends Jid> newOwners) throws MucConfigurationNotSupportedException {
if (!supportsRoomOwners()) {
throw new MucConfigurationNotSupportedException(MUC_ROOMCONFIG_ROOMOWNERS);
@@ -106,6 +141,114 @@ public class MucConfigFormManager {
return this;
}
+ /**
+ * Check if the room supports a members only configuration.
+ *
+ * @return true
if supported, false
if not.
+ */
+ public boolean supportsMembersOnly() {
+ return answerForm.hasField(MUC_ROOMCONFIG_MEMBERSONLY);
+ }
+
+ /**
+ * Make the room for members only.
+ *
+ * @return a reference to this object.
+ * @throws MucConfigurationNotSupportedException
+ */
+ public MucConfigFormManager makeMembersOnly() throws MucConfigurationNotSupportedException {
+ return setMembersOnly(true);
+ }
+
+ /**
+ * Set if the room is members only. Rooms are not members only per default.
+ *
+ * @param isMembersOnly if the room should be members only.
+ * @return a reference to this object.
+ * @throws MucConfigurationNotSupportedException
+ */
+ public MucConfigFormManager setMembersOnly(boolean isMembersOnly) throws MucConfigurationNotSupportedException {
+ if (!supportsMembersOnly()) {
+ throw new MucConfigurationNotSupportedException(MUC_ROOMCONFIG_MEMBERSONLY);
+ }
+ answerForm.setAnswer(MUC_ROOMCONFIG_MEMBERSONLY, isMembersOnly);
+ return this;
+ }
+
+ /**
+ * Check if the room supports password protection.
+ *
+ * @return true
if supported, false
if not.
+ */
+ public boolean supportsPasswordProtected() {
+ return answerForm.hasField(MUC_ROOMCONFIG_PASSWORDPROTECTEDROOM);
+ }
+
+ /**
+ * Set a password and make the room password protected. Users will need to supply the password
+ * to join the room.
+ *
+ * @param password the password to set.
+ * @return a reference to this object.
+ * @throws MucConfigurationNotSupportedException
+ */
+ public MucConfigFormManager setAndEnablePassword(String password)
+ throws MucConfigurationNotSupportedException {
+ return setIsPasswordProtected(true).setRoomSecret(password);
+ }
+
+ /**
+ * Make the room password protected.
+ *
+ * @return a reference to this object.
+ * @throws MucConfigurationNotSupportedException
+ */
+ public MucConfigFormManager makePasswordProtected() throws MucConfigurationNotSupportedException {
+ return setIsPasswordProtected(true);
+ }
+
+ /**
+ * Set if this room is password protected. Rooms are by default not password protected.
+ *
+ * @param isPasswordProtected
+ * @return a reference to this object.
+ * @throws MucConfigurationNotSupportedException
+ */
+ public MucConfigFormManager setIsPasswordProtected(boolean isPasswordProtected)
+ throws MucConfigurationNotSupportedException {
+ if (!supportsMembersOnly()) {
+ throw new MucConfigurationNotSupportedException(MUC_ROOMCONFIG_PASSWORDPROTECTEDROOM);
+ }
+ answerForm.setAnswer(MUC_ROOMCONFIG_PASSWORDPROTECTEDROOM, isPasswordProtected);
+ return this;
+ }
+
+ /**
+ * Set the room secret, aka the room password. If set and enabled, the password is required to
+ * join the room. Note that this does only set it by does not enable password protection. Use
+ * {@link #setAndEnablePassword(String)} to set a password and make the room protected.
+ *
+ * @param secret the secret/password.
+ * @return a reference to this object.
+ * @throws MucConfigurationNotSupportedException
+ */
+ public MucConfigFormManager setRoomSecret(String secret)
+ throws MucConfigurationNotSupportedException {
+ if (!answerForm.hasField(MUC_ROOMCONFIG_ROOMSECRET)) {
+ throw new MucConfigurationNotSupportedException(MUC_ROOMCONFIG_ROOMSECRET);
+ }
+ answerForm.setAnswer(MUC_ROOMCONFIG_ROOMSECRET, secret);
+ return this;
+ }
+
+ /**
+ * Submit the configuration as {@link Form} to the room.
+ *
+ * @throws NoResponseException if there was no response from the room.
+ * @throws XMPPErrorException
+ * @throws NotConnectedException
+ * @throws InterruptedException
+ */
public void submitConfigurationForm() throws NoResponseException, XMPPErrorException, NotConnectedException,
InterruptedException {
if (owners != null) {