Thu, 15 Oct 2020 14:01:49 +0200
add components to navmenu
1.1 --- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Thu Oct 15 13:31:52 2020 +0200 1.2 +++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Thu Oct 15 14:01:49 2020 +0200 1.3 @@ -60,8 +60,10 @@ 1.4 1.5 private static final String SESSION_ATTR_SELECTED_PROJECT = fqn(ProjectsModule.class, "selected_project"); 1.6 private static final String SESSION_ATTR_SELECTED_VERSION = fqn(ProjectsModule.class, "selected_version"); 1.7 + private static final String SESSION_ATTR_SELECTED_COMPONENT = fqn(ProjectsModule.class, "selected_component"); 1.8 private static final String PARAMETER_SELECTED_PROJECT = "pid"; 1.9 private static final String PARAMETER_SELECTED_VERSION = "vid"; 1.10 + private static final String PARAMETER_SELECTED_COMPONENT = "cid"; 1.11 1.12 @Override 1.13 protected String getResourceBundleName() { 1.14 @@ -84,6 +86,7 @@ 1.15 private void populate(ProjectView viewModel, HttpServletRequest req, DataAccessObjects dao) throws SQLException { 1.16 final var projectDao = dao.getProjectDao(); 1.17 final var versionDao = dao.getVersionDao(); 1.18 + final var componentDao = dao.getComponentDao(); 1.19 1.20 projectDao.list().stream().map(ProjectInfo::new).forEach(viewModel.getProjectList()::add); 1.21 1.22 @@ -96,6 +99,7 @@ 1.23 } else { 1.24 final var info = new ProjectInfo(project); 1.25 info.setVersions(versionDao.list(project)); 1.26 + info.setComponents(componentDao.list(project)); 1.27 info.setIssueSummary(projectDao.getIssueSummary(project)); 1.28 viewModel.setProjectInfo(info); 1.29 } 1.30 @@ -103,8 +107,20 @@ 1.31 1.32 // Select Version 1.33 final int vid = syncParamWithSession(req, PARAMETER_SELECTED_VERSION, SESSION_ATTR_SELECTED_VERSION); 1.34 - if (vid >= 0) { 1.35 + if (vid > 0) { 1.36 viewModel.setVersionFilter(versionDao.find(vid)); 1.37 + } else { 1.38 + // NULL for version means: show all unassigned 1.39 + viewModel.setVersionFilter(null); 1.40 + } 1.41 + 1.42 + // Select Component 1.43 + final int cid = syncParamWithSession(req, PARAMETER_SELECTED_COMPONENT, SESSION_ATTR_SELECTED_COMPONENT); 1.44 + if (cid > 0) { 1.45 + viewModel.setComponentFilter(componentDao.find(cid)); 1.46 + } else if (cid <= 0) { 1.47 + // -1 means: filter for unassigned, null means: show all 1.48 + viewModel.setComponentFilter(new Component(-1)); 1.49 } 1.50 } 1.51
2.1 --- a/src/main/java/de/uapcore/lightpit/viewmodel/ProjectInfo.java Thu Oct 15 13:31:52 2020 +0200 2.2 +++ b/src/main/java/de/uapcore/lightpit/viewmodel/ProjectInfo.java Thu Oct 15 14:01:49 2020 +0200 2.3 @@ -1,5 +1,6 @@ 2.4 package de.uapcore.lightpit.viewmodel; 2.5 2.6 +import de.uapcore.lightpit.entities.Component; 2.7 import de.uapcore.lightpit.entities.IssueSummary; 2.8 import de.uapcore.lightpit.entities.Project; 2.9 import de.uapcore.lightpit.entities.Version; 2.10 @@ -11,6 +12,7 @@ 2.11 2.12 private final Project project; 2.13 private List<Version> versions = Collections.emptyList(); 2.14 + private List<Component> components = Collections.emptyList(); 2.15 private IssueSummary issueSummary = new IssueSummary(); 2.16 2.17 public ProjectInfo(Project project) { 2.18 @@ -29,6 +31,14 @@ 2.19 this.versions = versions; 2.20 } 2.21 2.22 + public List<Component> getComponents() { 2.23 + return components; 2.24 + } 2.25 + 2.26 + public void setComponents(List<Component> components) { 2.27 + this.components = components; 2.28 + } 2.29 + 2.30 public Version getLatestVersion() { 2.31 // expects versions to be sorted by status descending 2.32 for (var v : versions) {
3.1 --- a/src/main/java/de/uapcore/lightpit/viewmodel/ProjectView.java Thu Oct 15 13:31:52 2020 +0200 3.2 +++ b/src/main/java/de/uapcore/lightpit/viewmodel/ProjectView.java Thu Oct 15 14:01:49 2020 +0200 3.3 @@ -1,5 +1,6 @@ 3.4 package de.uapcore.lightpit.viewmodel; 3.5 3.6 +import de.uapcore.lightpit.entities.Component; 3.7 import de.uapcore.lightpit.entities.Version; 3.8 3.9 import java.util.ArrayList; 3.10 @@ -10,6 +11,7 @@ 3.11 private final List<ProjectInfo> projectList = new ArrayList<>(); 3.12 private ProjectInfo projectInfo; 3.13 private Version versionFilter; 3.14 + private Component componentFilter; 3.15 3.16 public List<ProjectInfo> getProjectList() { 3.17 return projectList; 3.18 @@ -30,4 +32,12 @@ 3.19 public void setVersionFilter(Version versionFilter) { 3.20 this.versionFilter = versionFilter; 3.21 } 3.22 + 3.23 + public Component getComponentFilter() { 3.24 + return componentFilter; 3.25 + } 3.26 + 3.27 + public void setComponentFilter(Component componentFilter) { 3.28 + this.componentFilter = componentFilter; 3.29 + } 3.30 }
4.1 --- a/src/main/resources/localization/projects.properties Thu Oct 15 13:31:52 2020 +0200 4.2 +++ b/src/main/resources/localization/projects.properties Thu Oct 15 14:01:49 2020 +0200 4.3 @@ -32,9 +32,10 @@ 4.4 4.5 no-projects=Welcome to LightPIT. Start off by creating a new project! 4.6 4.7 -menu.versions=Versions 4.8 -menu.versions.unassigned=unassigned 4.9 -menu.issues=Issues 4.10 +navmenu.versions=Versions 4.11 +navmenu.components=Components 4.12 +navmenu.unassigned=unassigned 4.13 +navmenu.all=all 4.14 4.15 name=Name 4.16 description=Description
5.1 --- a/src/main/resources/localization/projects_de.properties Thu Oct 15 13:31:52 2020 +0200 5.2 +++ b/src/main/resources/localization/projects_de.properties Thu Oct 15 14:01:49 2020 +0200 5.3 @@ -32,9 +32,10 @@ 5.4 5.5 no-projects=Wilkommen bei LightPIT. Beginnen Sie mit der Erstellung eines Projektes! 5.6 5.7 -menu.versions=Versionen 5.8 -menu.versions.unassigned=Nicht Zugewiesen 5.9 -menu.issues=Vorg\u00e4nge 5.10 +navmenu.versions=Versionen 5.11 +navmenu.components=Komponenten 5.12 +navmenu.unassigned=Nicht Zugewiesen 5.13 +navmenu.all=Alle 5.14 5.15 name=Name 5.16 description=Beschreibung
6.1 --- a/src/main/webapp/WEB-INF/jsp/project-navmenu.jsp Thu Oct 15 13:31:52 2020 +0200 6.2 +++ b/src/main/webapp/WEB-INF/jsp/project-navmenu.jsp Thu Oct 15 14:01:49 2020 +0200 6.3 @@ -38,26 +38,54 @@ 6.4 </a> 6.5 </div> 6.6 <c:if test="${isActive}"> 6.7 + <!-- VERSIONS --> 6.8 <div class="menuEntry level-1"> 6.9 <a href="projects/versions?pid=${projectInfo.project.id}"> 6.10 - <fmt:message key="menu.versions"/> 6.11 + <fmt:message key="navmenu.versions"/> 6.12 </a> 6.13 </div> 6.14 <div class="menuEntry level-2"> 6.15 - <div class="version-icon" style="background: black"></div> 6.16 + <div class="navmenu-icon" style="background: black"></div> 6.17 <a href="projects/view?pid=${projectInfo.project.id}&vid=-1"> 6.18 - <fmt:message key="menu.versions.unassigned" /> 6.19 + <fmt:message key="navmenu.unassigned" /> 6.20 </a> 6.21 </div> 6.22 <c:forEach var="version" items="${viewmodel.projectInfo.versions}"> 6.23 <c:set var="isVersionActive" value="${viewmodel.versionFilter eq version}" /> 6.24 <div class="menuEntry level-2" <c:if test="${isVersionActive}">data-active</c:if> 6.25 title="<fmt:message key="version.status.${version.status}" />"> 6.26 - <div class="version-icon version-${version.status}"></div> 6.27 + <div class="navmenu-icon version-${version.status}"></div> 6.28 <a href="projects/view?pid=${projectInfo.project.id}&vid=${version.id}"> 6.29 <c:out value="${version.name}"/> 6.30 </a> 6.31 </div> 6.32 </c:forEach> 6.33 + <!-- COMPONENTS --> 6.34 + <div class="menuEntry level-1"> 6.35 + <a href="projects/components?pid=${projectInfo.project.id}"> 6.36 + <fmt:message key="navmenu.components"/> 6.37 + </a> 6.38 + </div> 6.39 + <div class="menuEntry level-2"> 6.40 + <div class="navmenu-icon" style="background: black"></div> 6.41 + <a href="projects/view?pid=${projectInfo.project.id}&cid=0"> 6.42 + <fmt:message key="navmenu.all" /> 6.43 + </a> 6.44 + </div> 6.45 + <div class="menuEntry level-2"> 6.46 + <div class="navmenu-icon" style="background: black"></div> 6.47 + <a href="projects/view?pid=${projectInfo.project.id}&cid=-1"> 6.48 + <fmt:message key="navmenu.unassigned" /> 6.49 + </a> 6.50 + </div> 6.51 + <c:forEach var="component" items="${viewmodel.projectInfo.components}"> 6.52 + <c:set var="isComponentActive" value="${viewmodel.componentFilter eq component}" /> 6.53 + <div class="menuEntry level-2" <c:if test="${isVersionActive}">data-active</c:if> > 6.54 + <div class="navmenu-icon" style="background-color: ${component.color}"></div> 6.55 + <a href="projects/view?pid=${projectInfo.project.id}&cid=${component.id}"> 6.56 + <c:out value="${component.name}"/> 6.57 + </a> 6.58 + </div> 6.59 + </c:forEach> 6.60 </c:if> 6.61 </c:forEach>
7.1 --- a/src/main/webapp/projects.css Thu Oct 15 13:31:52 2020 +0200 7.2 +++ b/src/main/webapp/projects.css Thu Oct 15 14:01:49 2020 +0200 7.3 @@ -109,7 +109,7 @@ 7.4 background: green; 7.5 } 7.6 7.7 -div.version-icon { 7.8 +div.navmenu-icon { 7.9 display: inline-block; 7.10 width: .5em; 7.11 height: .5em;