diff --git a/src/main/java/edu/ksu/canvas/impl/BaseImpl.java b/src/main/java/edu/ksu/canvas/impl/BaseImpl.java index 2d8a21c2..fb6e31d8 100644 --- a/src/main/java/edu/ksu/canvas/impl/BaseImpl.java +++ b/src/main/java/edu/ksu/canvas/impl/BaseImpl.java @@ -125,6 +125,10 @@ protected String encode(String value) { return UrlEscapers.urlPathSegmentEscaper().escape(value); } + protected String buildCanvasUrl(String canvasMethod) { + return buildCanvasUrl(canvasMethod, Collections.emptyMap()); + } + protected String buildCanvasUrl(String canvasMethod, Map> parameters) { Map> allParameters = new HashMap<>(); allParameters.putAll(parameters); diff --git a/src/main/java/edu/ksu/canvas/impl/SubmissionImpl.java b/src/main/java/edu/ksu/canvas/impl/SubmissionImpl.java index d38d36de..8f1d8f8a 100644 --- a/src/main/java/edu/ksu/canvas/impl/SubmissionImpl.java +++ b/src/main/java/edu/ksu/canvas/impl/SubmissionImpl.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Optional; +import edu.ksu.canvas.requestOptions.SubmissionOptions; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -141,4 +142,11 @@ protected Class objectType() { return Submission.class; } + @Override + public Response submitAssignment(SubmissionOptions options) throws IOException { + String url = buildCanvasUrl("courses/" + options.getCourseId() + "/assignments/" + options.getAssignmentId() + "/submissions"); + + LOG.debug(String.format("Submitting assignment: POST %s", url)); + return canvasMessenger.sendToCanvas(oauthToken, url, options.getOptionsMap()); + } } diff --git a/src/main/java/edu/ksu/canvas/interfaces/SubmissionWriter.java b/src/main/java/edu/ksu/canvas/interfaces/SubmissionWriter.java index c661e1fa..2e44c1f7 100644 --- a/src/main/java/edu/ksu/canvas/interfaces/SubmissionWriter.java +++ b/src/main/java/edu/ksu/canvas/interfaces/SubmissionWriter.java @@ -3,7 +3,9 @@ import edu.ksu.canvas.model.Progress; import edu.ksu.canvas.model.assignment.Submission; +import edu.ksu.canvas.net.Response; import edu.ksu.canvas.requestOptions.MultipleSubmissionsOptions; +import edu.ksu.canvas.requestOptions.SubmissionOptions; import java.io.IOException; import java.util.Optional; @@ -29,4 +31,13 @@ public interface SubmissionWriter extends CanvasWriter gradeMultipleSubmissionsByCourse(MultipleSubmissionsOptions options) throws IOException; + + /** + * Submit an assignment + * + * @param options Parameters object containing parameters such as: userId, submissionType, url, textComment. + * @return The response from Canvas + * @throws IOException If there is an error talking to Canvas + */ + Response submitAssignment(SubmissionOptions options) throws IOException; } diff --git a/src/main/java/edu/ksu/canvas/requestOptions/SubmissionOptions.java b/src/main/java/edu/ksu/canvas/requestOptions/SubmissionOptions.java new file mode 100644 index 00000000..7e42ff4b --- /dev/null +++ b/src/main/java/edu/ksu/canvas/requestOptions/SubmissionOptions.java @@ -0,0 +1,48 @@ +package edu.ksu.canvas.requestOptions; + +import org.apache.commons.lang3.StringUtils; + +/** + * Submission options to submit an assignment + *

+ * See Submit an Assignment + * for more details. + */ +public class SubmissionOptions extends BaseOptions { + private final String courseId; + private final String assignmentId; + + public SubmissionOptions(String courseId, String assignmentId) { + if (StringUtils.isBlank(courseId)) { + throw new IllegalArgumentException("courseId must not be null or blank"); + } + if (StringUtils.isBlank(assignmentId)) { + throw new IllegalArgumentException("assignmentId must not be null or blank"); + } + this.courseId = courseId; + this.assignmentId = assignmentId; + } + + public SubmissionOptions userId(String parameter) { + addSingleItem("submission[user_id]", parameter); + return this; + } + + public SubmissionOptions url(String parameter) { + addSingleItem("submission[url]", parameter); + return this; + } + + public SubmissionOptions textComment(String parameter) { + addSingleItem("comment[text_comment]", parameter); + return this; + } + + public SubmissionOptions submissionType(String parameter) { + addSingleItem("submission[submission_type]", parameter); + return this; + } + + public String getCourseId() { return courseId; } + public String getAssignmentId() { return assignmentId; } +} \ No newline at end of file