diff -r dd0a45ae25d7 -r 67a02e79b7a1 src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java --- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Sat May 16 13:29:44 2020 +0200 +++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Sat May 16 15:11:07 2020 +0200 @@ -39,6 +39,8 @@ import java.sql.SQLException; import java.util.Optional; +import static de.uapcore.lightpit.Functions.fqn; + @LightPITModule( bundleBaseName = "localization.projects", modulePath = "projects", @@ -50,10 +52,31 @@ ) public final class ProjectsModule extends AbstractLightPITServlet { + public static final String SESSION_ATTR_SELECTED_PROJECT = fqn(ProjectsModule.class, "selected-project"); + @RequestMapping(method = HttpMethod.GET) public ResponseType index(HttpServletRequest req, DataAccessObjects dao) throws SQLException { - req.setAttribute("projects", dao.getProjectDao().list()); + final var projectList = dao.getProjectDao().list(); + req.setAttribute("projects", projectList); setDynamicFragment(req, "projects"); + setStylesheet(req, "projects"); + + final var session = req.getSession(); + final var projectSelection = getParameter(req, Integer.class, "select"); + if (projectSelection.isPresent()) { + final var selectedId = projectSelection.get(); + for (var proj : projectList) { + if (proj.getId() == selectedId) { + session.setAttribute(SESSION_ATTR_SELECTED_PROJECT, proj); + break; + } + } + } else { + final var selectedProject = session.getAttribute(SESSION_ATTR_SELECTED_PROJECT); + if (selectedProject == null) { + projectList.stream().findFirst().ifPresent(proj -> session.setAttribute(SESSION_ATTR_SELECTED_PROJECT, proj)); + } + } return ResponseType.HTML; }