Skip to content

Commit de0f253

Browse files
committed
SeriesImportController.processImportSeriesForm(): handle errors from interceptor.
Fix #718
1 parent ba95fa4 commit de0f253

File tree

3 files changed

+47
-47
lines changed

3 files changed

+47
-47
lines changed

src/main/java/ru/mystamps/web/controller/SeriesController.java

Lines changed: 42 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,48 @@ protected void addYearToModel(Model model) {
496496
model.addAttribute("years", YEARS);
497497
}
498498

499+
protected static void loadErrorsFromDownloadInterceptor(
500+
NullableImageUrl form,
501+
BindingResult result,
502+
HttpServletRequest request) {
503+
504+
Object downloadResultErrorCode =
505+
request.getAttribute(DownloadImageInterceptor.ERROR_CODE_ATTR_NAME);
506+
507+
if (downloadResultErrorCode == null) {
508+
return;
509+
}
510+
511+
if (downloadResultErrorCode instanceof DownloadResult.Code) {
512+
DownloadResult.Code code = (DownloadResult.Code)downloadResultErrorCode;
513+
switch (code) {
514+
case INVALID_URL:
515+
// Url is being validated by @URL, to avoid showing an error message
516+
// twice we're skipping error from an interceptor.
517+
break;
518+
case INSUFFICIENT_PERMISSIONS:
519+
// A user without permissions has tried to download a file. It means that he
520+
// didn't specify a file but somehow provide a URL to an image. In this case,
521+
// let's show an error message that file is required.
522+
result.rejectValue(
523+
"image",
524+
"ru.mystamps.web.support.beanvalidation.NotEmptyFilename.message"
525+
);
526+
form.nullifyImageUrl();
527+
break;
528+
default:
529+
result.rejectValue(
530+
DownloadImageInterceptor.DOWNLOADED_IMAGE_FIELD_NAME,
531+
DownloadResult.class.getName() + "." + code.toString(),
532+
"Could not download image"
533+
);
534+
break;
535+
}
536+
}
537+
538+
request.removeAttribute(DownloadImageInterceptor.ERROR_CODE_ATTR_NAME);
539+
}
540+
499541
// CheckStyle: ignore LineLength for next 1 line
500542
private Map<String, ?> prepareCommonAttrsForSeriesInfo(SeriesDto series, Integer currentUserId) {
501543
Map<String, Object> model = new HashMap<>();
@@ -556,50 +598,6 @@ private void addSeriesSalesFormToModel(Model model) {
556598
model.addAttribute("buyers", groupedBuyers);
557599
}
558600

559-
// false positive on Travis CI
560-
@SuppressWarnings("PMD.UnusedPrivateMethod")
561-
private static void loadErrorsFromDownloadInterceptor(
562-
NullableImageUrl form,
563-
BindingResult result,
564-
HttpServletRequest request) {
565-
566-
Object downloadResultErrorCode =
567-
request.getAttribute(DownloadImageInterceptor.ERROR_CODE_ATTR_NAME);
568-
569-
if (downloadResultErrorCode == null) {
570-
return;
571-
}
572-
573-
if (downloadResultErrorCode instanceof DownloadResult.Code) {
574-
DownloadResult.Code code = (DownloadResult.Code)downloadResultErrorCode;
575-
switch (code) {
576-
case INVALID_URL:
577-
// Url is being validated by @URL, to avoid showing an error message
578-
// twice we're skipping error from an interceptor.
579-
break;
580-
case INSUFFICIENT_PERMISSIONS:
581-
// A user without permissions has tried to download a file. It means that he
582-
// didn't specify a file but somehow provide a URL to an image. In this case,
583-
// let's show an error message that file is required.
584-
result.rejectValue(
585-
"image",
586-
"ru.mystamps.web.support.beanvalidation.NotEmptyFilename.message"
587-
);
588-
form.nullifyImageUrl();
589-
break;
590-
default:
591-
result.rejectValue(
592-
DownloadImageInterceptor.DOWNLOADED_IMAGE_FIELD_NAME,
593-
DownloadResult.class.getName() + "." + code.toString(),
594-
"Could not download image"
595-
);
596-
break;
597-
}
598-
}
599-
600-
request.removeAttribute(DownloadImageInterceptor.ERROR_CODE_ATTR_NAME);
601-
}
602-
603601
private static void addImageFormToModel(Model model) {
604602
AddImageForm form = new AddImageForm();
605603
model.addAttribute("addImageForm", form);

src/main/java/ru/mystamps/web/controller/SeriesImportController.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.io.IOException;
2121
import java.util.Locale;
2222

23+
import javax.servlet.http.HttpServletRequest;
2324
import javax.servlet.http.HttpServletResponse;
2425
import javax.validation.Valid;
2526

@@ -141,6 +142,7 @@ public String showRequestAndImportSeriesForm(
141142
return "series/import/info";
142143
}
143144

145+
@SuppressWarnings("checkstyle:parameternumber")
144146
@PostMapping(Url.REQUEST_IMPORT_PAGE)
145147
public String processImportSeriesForm(
146148
@PathVariable("id") Integer requestId,
@@ -149,6 +151,7 @@ public String processImportSeriesForm(
149151
BindingResult result,
150152
@CurrentUser Integer currentUserId,
151153
Locale userLocale,
154+
HttpServletRequest httpRequest,
152155
HttpServletResponse httpResponse)
153156
throws IOException {
154157

@@ -163,8 +166,7 @@ public String processImportSeriesForm(
163166
return null;
164167
}
165168

166-
// @todo #709 SeriesImportController.processImportSeriesForm():
167-
// handle errors from interceptor
169+
SeriesController.loadErrorsFromDownloadInterceptor(form, result, httpRequest);
168170

169171
model.addAttribute("request", request);
170172

src/main/java/ru/mystamps/web/controller/dto/ImportSeriesForm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141

4242
@Getter
4343
@Setter
44-
public class ImportSeriesForm implements AddSeriesDto {
44+
public class ImportSeriesForm implements AddSeriesDto, NullableImageUrl {
4545

4646
// @todo #709 /series/import/request/{id}(category): add integration test for required field
4747
@NotNull

0 commit comments

Comments
 (0)