Replace edit profile field ajax page with Kotlin version
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 9 Sep 2017 08:47:40 +0000 (10:47 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sat, 9 Sep 2017 08:47:40 +0000 (10:47 +0200)
src/main/java/net/pterodactylus/sone/web/ajax/EditProfileFieldAjaxPage.java [deleted file]
src/main/kotlin/net/pterodactylus/sone/utils/Booleans.kt
src/main/kotlin/net/pterodactylus/sone/web/ajax/EditProfileFieldAjaxPage.kt [new file with mode: 0644]
src/test/kotlin/net/pterodactylus/sone/utils/BooleansTest.kt

diff --git a/src/main/java/net/pterodactylus/sone/web/ajax/EditProfileFieldAjaxPage.java b/src/main/java/net/pterodactylus/sone/web/ajax/EditProfileFieldAjaxPage.java
deleted file mode 100644 (file)
index b81cf60..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Sone - EditProfileFieldAjaxPage.java - Copyright © 2011–2016 David Roden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.pterodactylus.sone.web.ajax;
-
-import net.pterodactylus.sone.data.Profile;
-import net.pterodactylus.sone.data.Profile.Field;
-import net.pterodactylus.sone.data.Sone;
-import net.pterodactylus.sone.web.WebInterface;
-import net.pterodactylus.sone.web.page.FreenetRequest;
-
-/**
- * AJAX page that lets the user rename a profile field.
- *
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
- */
-public class EditProfileFieldAjaxPage extends JsonPage {
-
-       /**
-        * Creates a new “edit profile field” AJAX page.
-        *
-        * @param webInterface
-        *            The Sone web interface
-        */
-       public EditProfileFieldAjaxPage(WebInterface webInterface) {
-               super("editProfileField.ajax", webInterface);
-       }
-
-       //
-       // JSONPAGE METHODS
-       //
-
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       protected JsonReturnObject createJsonObject(FreenetRequest request) {
-               String fieldId = request.getHttpRequest().getParam("field");
-               Sone currentSone = getCurrentSone(request.getToadletContext());
-               Profile profile = currentSone.getProfile();
-               Field field = profile.getFieldById(fieldId);
-               if (field == null) {
-                       return createErrorJsonObject("invalid-field-id");
-               }
-               String name = request.getHttpRequest().getParam("name", "").trim();
-               if (name.length() == 0) {
-                       return createErrorJsonObject("invalid-parameter-name");
-               }
-               Field existingField = profile.getFieldByName(name);
-               if ((existingField != null) && !existingField.equals(field)) {
-                       return createErrorJsonObject("duplicate-field-name");
-               }
-               field.setName(name);
-               currentSone.setProfile(profile);
-               return createSuccessJsonObject();
-       }
-
-}
index 3202b82..bfcb319 100644 (file)
@@ -4,3 +4,8 @@ package net.pterodactylus.sone.utils
  * Returns the value of [block] if `this` is true, returns `null` otherwise.
  */
 fun <R> Boolean.ifTrue(block: () -> R): R? = if (this) block() else null
+
+/**
+ * Returns the value of [block] if `this` is false, returns `null` otherwise.
+ */
+fun <R> Boolean.ifFalse(block: () -> R): R? = if (!this) block() else null
diff --git a/src/main/kotlin/net/pterodactylus/sone/web/ajax/EditProfileFieldAjaxPage.kt b/src/main/kotlin/net/pterodactylus/sone/web/ajax/EditProfileFieldAjaxPage.kt
new file mode 100644 (file)
index 0000000..72ee005
--- /dev/null
@@ -0,0 +1,33 @@
+package net.pterodactylus.sone.web.ajax
+
+import net.pterodactylus.sone.utils.ifFalse
+import net.pterodactylus.sone.utils.parameters
+import net.pterodactylus.sone.web.WebInterface
+import net.pterodactylus.sone.web.page.FreenetRequest
+
+/**
+ * AJAX page that lets the user rename a profile field.
+ */
+class EditProfileFieldAjaxPage(webInterface: WebInterface) : JsonPage("editProfileField.ajax", webInterface) {
+
+       override fun createJsonObject(request: FreenetRequest) =
+                       getCurrentSone(request.toadletContext).profile.let { profile ->
+                               request.parameters["field"]!!
+                                               .let(profile::getFieldById)
+                                               ?.let { field ->
+                                                       request.parameters["name"]!!.trim().let { newName ->
+                                                               newName.isBlank().ifFalse {
+                                                                       try {
+                                                                               field.name = newName
+                                                                               createSuccessJsonObject().also {
+                                                                                       getCurrentSone(request.toadletContext).profile = profile
+                                                                               }
+                                                                       } catch (_: IllegalArgumentException) {
+                                                                               createErrorJsonObject("duplicate-field-name")
+                                                                       }
+                                                               }
+                                                       } ?: createErrorJsonObject("invalid-parameter-name")
+                                               } ?: createErrorJsonObject("invalid-field-id")
+                       }
+
+}
index 5e5ce51..56627c3 100644 (file)
@@ -20,4 +20,14 @@ class BooleansTest {
                assertThat(false.ifTrue { true }, nullValue())
        }
 
+       @Test
+       fun `ifFalse is executed if boolean is false`() {
+               assertThat(false.ifFalse { true }, equalTo(true))
+       }
+
+       @Test
+       fun `ifFalse is not executed if boolean is true`() {
+               assertThat(true.ifFalse { true }, nullValue())
+       }
+
 }