diff -r 2a90d105edec -r dd0a45ae25d7 src/main/java/de/uapcore/lightpit/modules/UsersModule.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/uapcore/lightpit/modules/UsersModule.java Sat May 16 13:29:44 2020 +0200 @@ -0,0 +1,101 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2018 Mike Becker. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ +package de.uapcore.lightpit.modules; + + +import de.uapcore.lightpit.*; +import de.uapcore.lightpit.dao.DataAccessObjects; +import de.uapcore.lightpit.entities.User; + +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServletRequest; +import java.sql.SQLException; +import java.util.Optional; + +@LightPITModule( + bundleBaseName = "localization.users", + modulePath = "teams", + defaultPriority = 100 +) +@WebServlet( + name = "UsersModule", + urlPatterns = "/teams/*" +) +public final class UsersModule extends AbstractLightPITServlet { + + @RequestMapping(method = HttpMethod.GET) + public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException { + final var userDao = dao.getUserDao(); + + req.setAttribute("users", userDao.list()); + setDynamicFragment(req, "users"); + + return ResponseType.HTML; + } + + @RequestMapping(requestPath = "edit", method = HttpMethod.GET) + public ResponseType edit(HttpServletRequest req, DataAccessObjects dao) throws SQLException { + final var userDao = dao.getUserDao(); + + Optional id = getParameter(req, Integer.class, "id"); + if (id.isPresent()) { + req.setAttribute("user", Optional.ofNullable(userDao.find(id.get())).orElse(new User(-1))); + } else { + req.setAttribute("user", new User(-1)); + } + + setDynamicFragment(req, "user-form"); + + return ResponseType.HTML; + } + + @RequestMapping(requestPath = "commit", method = HttpMethod.POST) + public ResponseType commit(HttpServletRequest req, DataAccessObjects dao) { + + User user = new User(-1); + try { + user = new User(getParameter(req, Integer.class, "userid").orElseThrow()); + user.setUsername(getParameter(req, String.class, "username").orElseThrow()); + getParameter(req, String.class, "givenname").ifPresent(user::setGivenname); + getParameter(req, String.class, "lastname").ifPresent(user::setLastname); + getParameter(req, String.class, "mail").ifPresent(user::setMail); + + dao.getUserDao().saveOrUpdate(user); + + setRedirectLocation(req, "./teams/"); + setDynamicFragment(req, Constants.DYN_FRAGMENT_COMMIT_SUCCESSFUL); + } catch (NullPointerException | NumberFormatException | SQLException ex) { + // TODO: set request attribute with error text + req.setAttribute("user", user); + setDynamicFragment(req, "user-form"); + } + + return ResponseType.HTML; + } +}