From e280cbaa00df256a60277ed8b3443126a9865b6e Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Sat, 8 Apr 2017 23:46:19 +0200 Subject: [PATCH] Replace edit profile field page with Kotlin version --- .../sone/web/pages/EditProfileFieldPage.java | 94 ---------------------- .../sone/web/pages/EditProfileFieldPage.kt | 40 +++++++++ .../sone/web/pages/EditProfileFieldPageTest.kt | 4 +- 3 files changed, 42 insertions(+), 96 deletions(-) delete mode 100644 src/main/java/net/pterodactylus/sone/web/pages/EditProfileFieldPage.java create mode 100644 src/main/kotlin/net/pterodactylus/sone/web/pages/EditProfileFieldPage.kt diff --git a/src/main/java/net/pterodactylus/sone/web/pages/EditProfileFieldPage.java b/src/main/java/net/pterodactylus/sone/web/pages/EditProfileFieldPage.java deleted file mode 100644 index 2bfdddf..0000000 --- a/src/main/java/net/pterodactylus/sone/web/pages/EditProfileFieldPage.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Sone - EditProfileFieldPage.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 . - */ - -package net.pterodactylus.sone.web.pages; - -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; -import net.pterodactylus.util.template.Template; -import net.pterodactylus.util.template.TemplateContext; -import net.pterodactylus.util.web.Method; - -/** - * Page that lets the user edit the name of a profile field. - * - * @author David ‘Bombe’ Roden - */ -public class EditProfileFieldPage extends SoneTemplatePage { - - /** - * Creates a new “edit profile field” page. - * - * @param template - * The template to render - * @param webInterface - * The Sone web interface - */ - public EditProfileFieldPage(Template template, WebInterface webInterface) { - super("editProfileField.html", template, "Page.EditProfileField.Title", webInterface, true); - } - - // - // SONETEMPLATEPAGE METHODS - // - - /** - * {@inheritDoc} - */ - @Override - protected void handleRequest(FreenetRequest request, TemplateContext templateContext) throws RedirectException { - Sone currentSone = getCurrentSone(request.getToadletContext()); - Profile profile = currentSone.getProfile(); - - /* get parameters from request. */ - String fieldId = request.getHttpRequest().getParam("field"); - Field field = profile.getFieldById(fieldId); - if (field == null) { - throw new RedirectException("invalid.html"); - } - - /* process the POST request. */ - if (request.getMethod() == Method.POST) { - if (request.getHttpRequest().getPartAsStringFailsafe("cancel", 4).equals("true")) { - throw new RedirectException("editProfile.html#profile-fields"); - } - fieldId = request.getHttpRequest().getPartAsStringFailsafe("field", 36); - field = profile.getFieldById(fieldId); - if (field == null) { - throw new RedirectException("invalid.html"); - } - String name = request.getHttpRequest().getPartAsStringFailsafe("name", 256); - Field existingField = profile.getFieldByName(name); - if ((existingField != null) && (!field.equals(existingField))) { - templateContext.set("duplicateFieldName", true); - } else { - if (!name.equals(field.getName())) { - field.setName(name); - currentSone.setProfile(profile); - } - throw new RedirectException("editProfile.html#profile-fields"); - } - } - - /* store current values in template. */ - templateContext.set("field", field); - } - -} diff --git a/src/main/kotlin/net/pterodactylus/sone/web/pages/EditProfileFieldPage.kt b/src/main/kotlin/net/pterodactylus/sone/web/pages/EditProfileFieldPage.kt new file mode 100644 index 0000000..8109e3a --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/web/pages/EditProfileFieldPage.kt @@ -0,0 +1,40 @@ +package net.pterodactylus.sone.web.pages + +import net.pterodactylus.sone.utils.isPOST +import net.pterodactylus.sone.web.WebInterface +import net.pterodactylus.sone.web.page.FreenetRequest +import net.pterodactylus.util.template.Template +import net.pterodactylus.util.template.TemplateContext + +/** + * Page that lets the user edit the name of a profile field. + */ +class EditProfileFieldPage(template: Template, webInterface: WebInterface): + SoneTemplatePage("editProfileField.html", template, "Page.EditProfileField.Title", webInterface, true) { + + override fun handleRequest(request: FreenetRequest, templateContext: TemplateContext) { + sessionProvider.getCurrentSone(request.toadletContext)!!.let { currentSone -> + currentSone.profile.let { profile -> + val field = profile.getFieldById(request.httpRequest.getPartAsStringFailsafe("field", 36)) ?: throw RedirectException("invalid.html") + if (request.isPOST) { + if (request.httpRequest.getPartAsStringFailsafe("cancel", 4) == "true") { + throw RedirectException("editProfile.html#profile-fields") + } + request.httpRequest.getPartAsStringFailsafe("name", 256).let { name -> + try { + if (name != field.name) { + field.name = name + currentSone.profile = profile + } + throw RedirectException("editProfile.html#profile-fields") + } catch (e: IllegalArgumentException) { + templateContext["duplicateFieldName"] = true + } + } + } + templateContext["field"] = field + } + } + } + +} diff --git a/src/test/kotlin/net/pterodactylus/sone/web/pages/EditProfileFieldPageTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/pages/EditProfileFieldPageTest.kt index 0990ece..83385d2 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/pages/EditProfileFieldPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/pages/EditProfileFieldPageTest.kt @@ -56,7 +56,7 @@ class EditProfileFieldPageTest : WebPageTest() { fun `get request with valid field stores field in template context`() { request("", GET) addHttpRequestParameter("field", field.id) - page.handleRequest(freenetRequest, templateContext) + page.processTemplate(freenetRequest, templateContext) assertThat(templateContext["field"], equalTo(field)) } @@ -96,7 +96,7 @@ class EditProfileFieldPageTest : WebPageTest() { profile.addField("New Name") addHttpRequestParameter("field", field.id) addHttpRequestParameter("name", "New Name") - page.handleRequest(freenetRequest, templateContext) + page.processTemplate(freenetRequest, templateContext) assertThat(field.name, equalTo("Name")) verify(currentSone, never()).profile = profile assertThat(templateContext["duplicateFieldName"], equalTo(true)) -- 2.7.4