Sun, 17 May 2020 16:38:04 +0200
moves project index to separate sub path
unfortunately the current menu highlighting strategy sucks and this is the easiest way so that everything looks correct
/* * 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 org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import java.sql.SQLException; import java.util.NoSuchElementException; import java.util.Optional; @LightPITModule( bundleBaseName = "localization.users", modulePath = "teams", defaultPriority = 100 ) @WebServlet( name = "UsersModule", urlPatterns = "/teams/*" ) public final class UsersModule extends AbstractLightPITServlet { private static final Logger LOG = LoggerFactory.getLogger(UsersModule.class); @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<Integer> 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); LOG.debug("Successfully updated user {}", user.getUsername()); } catch (NoSuchElementException | NumberFormatException | SQLException ex) { // TODO: set request attribute with error text req.setAttribute("user", user); setDynamicFragment(req, "user-form"); LOG.warn("Form validation failure: {}", ex.getMessage()); LOG.debug("Details:", ex); } return ResponseType.HTML; } }