src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java

changeset 138
e2aa673dd473
parent 137
a7e543ab0c5f
child 141
8160dfc4dbc3
equal deleted inserted replaced
137:a7e543ab0c5f 138:e2aa673dd473
72 72
73 if (pathParameters == null) 73 if (pathParameters == null)
74 return; 74 return;
75 75
76 // Select Project 76 // Select Project
77 final int pid = Functions.parseIntOrZero(pathParameters.get("project")); 77 final var project = projectDao.findByNode(pathParameters.get("project"));
78 if (pid > 0) { 78 if (project == null)
79 final var project = projectDao.find(pid); 79 return;
80 if (project != null) { 80
81 final var info = new ProjectInfo(project); 81 final var info = new ProjectInfo(project);
82 info.setVersions(versionDao.list(project)); 82 info.setVersions(versionDao.list(project));
83 info.setComponents(componentDao.list(project)); 83 info.setComponents(componentDao.list(project));
84 info.setIssueSummary(projectDao.getIssueSummary(project)); 84 info.setIssueSummary(projectDao.getIssueSummary(project));
85 viewModel.setProjectInfo(info); 85 viewModel.setProjectInfo(info);
86 }
87 }
88 86
89 // Select Version 87 // Select Version
90 final var pathParamVersion = pathParameters.get("version"); 88 final var versionNode = pathParameters.get("version");
91 if ("no-version".equals(pathParamVersion)) { 89 if ("no-version".equals(versionNode)) {
92 viewModel.setVersionFilter(ProjectView.NO_VERSION); 90 viewModel.setVersionFilter(ProjectView.NO_VERSION);
93 } else if ("all-versions".equals(pathParamVersion)) { 91 } else if ("all-versions".equals(versionNode)) {
94 viewModel.setVersionFilter(ProjectView.ALL_VERSIONS); 92 viewModel.setVersionFilter(ProjectView.ALL_VERSIONS);
95 } else { 93 } else {
96 final int vid = Functions.parseIntOrZero(pathParamVersion); 94 viewModel.setVersionFilter(versionDao.findByNode(project, versionNode));
97 if (vid > 0) {
98 viewModel.setVersionFilter(versionDao.find(vid));
99 }
100 } 95 }
101 96
102 // Select Component 97 // Select Component
103 final var pathParamComponent = pathParameters.get("component"); 98 final var componentNode = pathParameters.get("component");
104 if ("no-component".equals(pathParamComponent)) { 99 if ("no-component".equals(componentNode)) {
105 viewModel.setComponentFilter(ProjectView.NO_COMPONENT); 100 viewModel.setComponentFilter(ProjectView.NO_COMPONENT);
106 } else if ("all-components".equals(pathParamComponent)) { 101 } else if ("all-components".equals(componentNode)) {
107 viewModel.setComponentFilter(ProjectView.ALL_COMPONENTS); 102 viewModel.setComponentFilter(ProjectView.ALL_COMPONENTS);
108 } else { 103 } else {
109 final int cid = Functions.parseIntOrZero(pathParamComponent); 104 viewModel.setComponentFilter(componentDao.findByNode(project, componentNode));
110 if (cid > 0) { 105 }
111 viewModel.setComponentFilter(componentDao.find(cid)); 106 }
112 } 107
108 private static String sanitizeNode(String node, String defaultValue) {
109 String result = node == null || node.isBlank() ? defaultValue : node;
110 result = result.replace('/', '-');
111 if (result.equals(".") || result.equals("..")) {
112 return "_"+result;
113 } else {
114 return result;
113 } 115 }
114 } 116 }
115 117
116 private ResponseType forwardView(HttpServletRequest req, ProjectView viewModel, String name) { 118 private ResponseType forwardView(HttpServletRequest req, ProjectView viewModel, String name) {
117 setViewModel(req, viewModel); 119 setViewModel(req, viewModel);
168 public ResponseType commit(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException { 170 public ResponseType commit(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
169 171
170 try { 172 try {
171 final var project = new Project(getParameter(req, Integer.class, "pid").orElseThrow()); 173 final var project = new Project(getParameter(req, Integer.class, "pid").orElseThrow());
172 project.setName(getParameter(req, String.class, "name").orElseThrow()); 174 project.setName(getParameter(req, String.class, "name").orElseThrow());
175
176 final var node = getParameter(req, String.class, "node").orElse(null);
177 project.setNode(sanitizeNode(node, project.getName()));
178
173 getParameter(req, String.class, "description").ifPresent(project::setDescription); 179 getParameter(req, String.class, "description").ifPresent(project::setDescription);
174 getParameter(req, String.class, "repoUrl").ifPresent(project::setRepoUrl); 180 getParameter(req, String.class, "repoUrl").ifPresent(project::setRepoUrl);
175 getParameter(req, Integer.class, "owner").map( 181 getParameter(req, Integer.class, "owner").map(
176 ownerId -> ownerId >= 0 ? new User(ownerId) : null 182 ownerId -> ownerId >= 0 ? new User(ownerId) : null
177 ).ifPresent(project::setOwner); 183 ).ifPresent(project::setOwner);
299 305
300 @RequestMapping(requestPath = "commit-version", method = HttpMethod.POST) 306 @RequestMapping(requestPath = "commit-version", method = HttpMethod.POST)
301 public ResponseType commitVersion(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException { 307 public ResponseType commitVersion(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
302 308
303 try { 309 try {
304 final var project = new Project(getParameter(req, Integer.class, "pid").orElseThrow()); 310 final var project = dao.getProjectDao().find(getParameter(req, Integer.class, "pid").orElseThrow());
311 if (project == null) {
312 // TODO: improve error handling, because not found is not correct for this POST request
313 resp.sendError(HttpServletResponse.SC_NOT_FOUND);
314 return ResponseType.NONE;
315 }
305 final var version = new Version(getParameter(req, Integer.class, "id").orElseThrow()); 316 final var version = new Version(getParameter(req, Integer.class, "id").orElseThrow());
306 version.setName(getParameter(req, String.class, "name").orElseThrow()); 317 version.setName(getParameter(req, String.class, "name").orElseThrow());
318
319 final var node = getParameter(req, String.class, "node").orElse(null);
320 version.setNode(sanitizeNode(node, version.getName()));
321
307 getParameter(req, Integer.class, "ordinal").ifPresent(version::setOrdinal); 322 getParameter(req, Integer.class, "ordinal").ifPresent(version::setOrdinal);
308 version.setStatus(VersionStatus.valueOf(getParameter(req, String.class, "status").orElseThrow())); 323 version.setStatus(VersionStatus.valueOf(getParameter(req, String.class, "status").orElseThrow()));
309 dao.getVersionDao().saveOrUpdate(version, project); 324 dao.getVersionDao().saveOrUpdate(version, project);
310 325
311 setRedirectLocation(req, "./projects/" + project.getId() + "/versions/"); 326 setRedirectLocation(req, "./projects/" + project.getNode() + "/versions/");
312 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); 327 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
313 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) { 328 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
314 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED); 329 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
315 // TODO: implement - fix issue #21 330 // TODO: implement - fix issue #21
316 return ResponseType.NONE; 331 return ResponseType.NONE;
371 386
372 @RequestMapping(requestPath = "commit-component", method = HttpMethod.POST) 387 @RequestMapping(requestPath = "commit-component", method = HttpMethod.POST)
373 public ResponseType commitComponent(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException { 388 public ResponseType commitComponent(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
374 389
375 try { 390 try {
376 final var project = new Project(getParameter(req, Integer.class, "pid").orElseThrow()); 391 final var project = dao.getProjectDao().find(getParameter(req, Integer.class, "pid").orElseThrow());
392 if (project == null) {
393 // TODO: improve error handling, because not found is not correct for this POST request
394 resp.sendError(HttpServletResponse.SC_NOT_FOUND);
395 return ResponseType.NONE;
396 }
377 final var component = new Component(getParameter(req, Integer.class, "id").orElseThrow()); 397 final var component = new Component(getParameter(req, Integer.class, "id").orElseThrow());
378 component.setName(getParameter(req, String.class, "name").orElseThrow()); 398 component.setName(getParameter(req, String.class, "name").orElseThrow());
399
400 final var node = getParameter(req, String.class, "node").orElse(null);
401 component.setNode(sanitizeNode(node, component.getName()));
402
379 component.setColor(getParameter(req, WebColor.class, "color").orElseThrow()); 403 component.setColor(getParameter(req, WebColor.class, "color").orElseThrow());
380 getParameter(req, Integer.class, "ordinal").ifPresent(component::setOrdinal); 404 getParameter(req, Integer.class, "ordinal").ifPresent(component::setOrdinal);
381 getParameter(req, Integer.class, "lead").map( 405 getParameter(req, Integer.class, "lead").map(
382 userid -> userid >= 0 ? new User(userid) : null 406 userid -> userid >= 0 ? new User(userid) : null
383 ).ifPresent(component::setLead); 407 ).ifPresent(component::setLead);
384 getParameter(req, String.class, "description").ifPresent(component::setDescription); 408 getParameter(req, String.class, "description").ifPresent(component::setDescription);
385 409
386 dao.getComponentDao().saveOrUpdate(component, project); 410 dao.getComponentDao().saveOrUpdate(component, project);
387 411
388 setRedirectLocation(req, "./projects/" + project.getId() + "/components/"); 412 setRedirectLocation(req, "./projects/" + project.getNode() + "/components/");
389 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); 413 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
390 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) { 414 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
391 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED); 415 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
392 // TODO: implement - fix issue #21 416 // TODO: implement - fix issue #21
393 return ResponseType.NONE; 417 return ResponseType.NONE;
459 if (componentId.isPresent()) { 483 if (componentId.isPresent()) {
460 component = dao.getComponentDao().find(componentId.get()); 484 component = dao.getComponentDao().find(componentId.get());
461 } else { 485 } else {
462 component = null; 486 component = null;
463 } 487 }
464 issue.setProject(new Project(getParameter(req, Integer.class, "pid").orElseThrow())); 488 final var project = dao.getProjectDao().find(getParameter(req, Integer.class, "pid").orElseThrow());
489 if (project == null) {
490 // TODO: improve error handling, because not found is not correct for this POST request
491 resp.sendError(HttpServletResponse.SC_NOT_FOUND);
492 return ResponseType.NONE;
493 }
494 issue.setProject(project);
465 getParameter(req, String.class, "category").map(IssueCategory::valueOf).ifPresent(issue::setCategory); 495 getParameter(req, String.class, "category").map(IssueCategory::valueOf).ifPresent(issue::setCategory);
466 getParameter(req, String.class, "status").map(IssueStatus::valueOf).ifPresent(issue::setStatus); 496 getParameter(req, String.class, "status").map(IssueStatus::valueOf).ifPresent(issue::setStatus);
467 issue.setSubject(getParameter(req, String.class, "subject").orElseThrow()); 497 issue.setSubject(getParameter(req, String.class, "subject").orElseThrow());
468 issue.setComponent(component); 498 issue.setComponent(component);
469 getParameter(req, Integer.class, "assignee").map(userid -> { 499 getParameter(req, Integer.class, "assignee").map(userid -> {
491 ).ifPresent(issue::setResolvedVersions); 521 ).ifPresent(issue::setResolvedVersions);
492 522
493 dao.getIssueDao().saveOrUpdate(issue, issue.getProject()); 523 dao.getIssueDao().saveOrUpdate(issue, issue.getProject());
494 524
495 // TODO: fix issue #14 525 // TODO: fix issue #14
496 setRedirectLocation(req, "./projects/" + issue.getProject().getId() + "/all-components/all-versions/issues/"); 526 setRedirectLocation(req, "./projects/" + issue.getProject().getNode() + "/all-components/all-versions/issues/");
497 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); 527 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
498 528
499 return ResponseType.HTML; 529 return ResponseType.HTML;
500 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) { 530 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
501 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED); 531 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
530 } 560 }
531 561
532 dao.getIssueDao().saveComment(issueComment); 562 dao.getIssueDao().saveComment(issueComment);
533 563
534 // TODO: fix redirect location (e.g. after fixing #24) 564 // TODO: fix redirect location (e.g. after fixing #24)
535 setRedirectLocation(req, "./projects/" + issue.getProject().getId()+"/issues/"+issue.getId()+"/edit"); 565 setRedirectLocation(req, "./projects/" + issue.getProject().getNode()+"/issues/"+issue.getId()+"/edit");
536 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL); 566 setContentPage(req, Constants.JSP_COMMIT_SUCCESSFUL);
537 567
538 return ResponseType.HTML; 568 return ResponseType.HTML;
539 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) { 569 } catch (NoSuchElementException | IllegalArgumentException | SQLException ex) {
540 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED); 570 resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);

mercurial