diff --git a/src/main/java/jjug/ErrorControllerAdvice.java b/src/main/java/jjug/ErrorControllerAdvice.java index 2edf6f2..a53bfc1 100644 --- a/src/main/java/jjug/ErrorControllerAdvice.java +++ b/src/main/java/jjug/ErrorControllerAdvice.java @@ -1,8 +1,10 @@ package jjug; -import java.nio.file.AccessDeniedException; -import java.util.NoSuchElementException; - +import jjug.conference.ConferenceClosedException; +import jjug.submission.CfpClosedException; +import jjug.submission.CfpFixedException; +import jjug.submission.UnpublishedSubmissionException; +import jjug.vote.VoteClosedException; import org.springframework.http.HttpStatus; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.stereotype.Controller; @@ -10,10 +12,8 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; -import jjug.conference.ConferenceClosedException; -import jjug.submission.CfpClosedException; -import jjug.submission.UnpublishedSubmissionException; -import jjug.vote.VoteClosedException; +import java.nio.file.AccessDeniedException; +import java.util.NoSuchElementException; @ControllerAdvice(annotations = Controller.class) public class ErrorControllerAdvice { @@ -58,4 +58,10 @@ String voteClosedException() { String conferenceClosedException() { return "conference/conferenceClosed"; } -} \ No newline at end of file + + @ExceptionHandler(CfpFixedException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + String cfpFixedException() { + return "conference/cfpFixed"; + } +} diff --git a/src/main/java/jjug/conference/enums/ConfStatus.java b/src/main/java/jjug/conference/enums/ConfStatus.java index 032d4ef..86919b3 100644 --- a/src/main/java/jjug/conference/enums/ConfStatus.java +++ b/src/main/java/jjug/conference/enums/ConfStatus.java @@ -1,11 +1,11 @@ package jjug.conference.enums; -import java.util.stream.Stream; - import jjug.DisplayMessage; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.stream.Stream; + @AllArgsConstructor @Getter public enum ConfStatus implements DisplayMessage { @@ -21,4 +21,8 @@ public static ConfStatus valueOf(int v) { return Stream.of(values()).filter(x -> x.getValue() == v).findAny() .orElseThrow(() -> new IllegalArgumentException(v + " is illegal!")); } + + public boolean isFixedCfp() { + return this.value >= SELECTION.getValue(); + } } diff --git a/src/main/java/jjug/submission/CfpFixedException.java b/src/main/java/jjug/submission/CfpFixedException.java new file mode 100644 index 0000000..7ea5584 --- /dev/null +++ b/src/main/java/jjug/submission/CfpFixedException.java @@ -0,0 +1,4 @@ +package jjug.submission; + +public class CfpFixedException extends RuntimeException { +} diff --git a/src/main/java/jjug/submission/SubmissionController.java b/src/main/java/jjug/submission/SubmissionController.java index 4776792..133301e 100644 --- a/src/main/java/jjug/submission/SubmissionController.java +++ b/src/main/java/jjug/submission/SubmissionController.java @@ -1,11 +1,12 @@ package jjug.submission; -import static java.lang.String.format; -import static jjug.submission.enums.SubmissionStatus.*; - -import java.util.Optional; -import java.util.UUID; - +import jjug.CfpUser; +import jjug.conference.Conference; +import jjug.conference.ConferenceRepository; +import jjug.speaker.Speaker; +import jjug.speaker.SpeakerRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Controller; @@ -14,13 +15,11 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jjug.CfpUser; -import jjug.conference.Conference; -import jjug.conference.ConferenceRepository; -import jjug.speaker.Speaker; -import jjug.speaker.SpeakerRepository; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import java.util.Optional; +import java.util.UUID; + +import static java.lang.String.format; +import static jjug.submission.enums.SubmissionStatus.*; @Controller @RequiredArgsConstructor @@ -108,13 +107,20 @@ String editSubmission(@PathVariable UUID submissionId, Model model, return editForm(submissionId, model, submissionForm); } Submission submission = submissionRepository.findOne(submissionId).get(); + if (submission.getConference().getConfStatus().isFixedCfp()) { + if (draft.isPresent() || withdraw.isPresent()) { + throw new CfpFixedException(); + } + } else { + submission.setSubmissionStatus(draft.map(d -> DRAFT) + .orElseGet(() -> withdraw.map(w -> WITHDRAWN).orElse(SUBMITTED))); + } + Speaker speaker = speakerRepository.findByGithub(user.getGithub()) .orElseGet(() -> Speaker.builder().github(user.getGithub()).build()); BeanUtils.copyProperties(submissionForm, speaker); BeanUtils.copyProperties(submissionForm, submission); submission.setSpeaker(speaker); - submission.setSubmissionStatus(draft.map(d -> DRAFT) - .orElseGet(() -> withdraw.map(w -> WITHDRAWN).orElse(SUBMITTED))); log.info("Edit {}", submission); submissionRepository.save(submission); return "redirect:/submissions/{submissionId}/form"; diff --git a/src/main/resources/templates/conference/cfpFixed.html b/src/main/resources/templates/conference/cfpFixed.html new file mode 100644 index 0000000..d31e49d --- /dev/null +++ b/src/main/resources/templates/conference/cfpFixed.html @@ -0,0 +1,24 @@ + + + + + + アンケート + + + + + +
+

JJUG Call for Papers

+
+
+

下書き、取下には変更できません

+
+
+ □ アンケート +
+
+ + diff --git a/src/main/resources/templates/submission/submissionForm.html b/src/main/resources/templates/submission/submissionForm.html index c8219c6..36b45fb 100644 --- a/src/main/resources/templates/submission/submissionForm.html +++ b/src/main/resources/templates/submission/submissionForm.html @@ -156,8 +156,10 @@

aaa


+ +

@@ -165,4 +167,4 @@

aaa

- \ No newline at end of file +