org.sakaiproject.ddo.tool.pages.DropOffForm.java Source code

Java tutorial

Introduction

Here is the source code for org.sakaiproject.ddo.tool.pages.DropOffForm.java

Source

/*
 *  Copyright (c) 2016, University of Dayton
 *
 *  Licensed under the Educational Community License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *              http://opensource.org/licenses/ecl2
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package org.sakaiproject.ddo.tool.pages;

import org.apache.wicket.extensions.yui.calendar.DatePicker;
import org.apache.wicket.extensions.markup.html.form.DateTextField;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.*;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.Model;

import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.util.lang.Bytes;
import org.sakaiproject.coursemanagement.api.Section;
import org.sakaiproject.ddo.model.Submission;
import org.sakaiproject.ddo.model.SubmissionFile;
import org.sakaiproject.user.api.User;

import java.io.Serializable;
import java.text.MessageFormat;
import java.util.*;

/**
 * @author David P. Bauer (dbauer1@udayton.edu)
 */
public class DropOffForm extends BasePage {

    private final CheckBox primaryLanguageIsEnglish;
    private final TextField<String> primaryLanguage;
    private final TextField<String> assignmentTitle;
    private final TextArea<String> instructorRequirements;
    private final DateTextField dueDate;
    private final DropDownChoice<String> courseTitle;
    private final DropDownChoice<String> instructors;
    private final TextArea<String> feedbackFocus;

    private final TextField<String> courseOther;
    private final TextField<String> instructorNameOther;
    private final TextField<String> instructorEmailOther;
    private final CheckBox notifyInstructor;

    private final CheckBox receipt;

    private final FileUploadField uploadField;

    private final Date date = new Date();

    public DropOffForm() {
        disableLink(studentOverviewLink);

        // create the form
        final Form<?> dropOffForm = new Form<Void>("dropOffForm") {
            /**
             * @see org.apache.wicket.markup.html.form.Form#onSubmit()
             */
            @Override
            protected void onSubmit() {
                String currentUserId = sakaiProxy.getCurrentUserId();

                String notifyName = "";
                String notifyEmail = "";

                Submission s = new Submission();

                s.setPrimaryLanguageIsEnglish(primaryLanguageIsEnglish.getModelObject());
                s.setPrimaryLanguage(primaryLanguage.getModelObject());
                s.setAssignmentTitle(assignmentTitle.getModelObject());
                s.setInstructorRequirements(instructorRequirements.getModelObject());
                s.setDueDate(dueDate.getModelObject());

                if (courseTitle.getModelObject().equals("Other")) {
                    s.setCourseTitle(courseOther.getModelObject());
                } else {
                    s.setCourseTitle(courseTitle.getModelObject());
                }

                if (instructors.getModelObject().equals("Other")) {
                    String instructor = instructorNameOther.getModelObject() + " ("
                            + instructorEmailOther.getModelObject() + ")";
                    s.setInstructor(instructor);
                    notifyEmail = instructorEmailOther.getModelObject();
                } else {
                    s.setInstructor(instructors.getModelObject());
                    notifyEmail = sakaiProxy.getUserEmail(instructors.getModelObject());
                }

                s.setFeedbackFocus(feedbackFocus.getModelObject());

                FileUpload file = uploadField.getFileUpload();

                if (file == null) {
                    error(getString("error.null_file"));
                } else if (file.getSize() == 0) {
                    error(getString("error.empty_file"));
                } else if (!Arrays.asList(SubmissionFile.AcceptableMimeTypes).contains(file.getContentType())) {
                    error(getString("error.unacceptable_filetype"));
                } else {

                    String mimeType = file.getContentType();
                    String fileName = file.getClientFileName();

                    //ok so get bytes of file uploaded
                    byte[] documentBytes = file.getBytes();

                    //create resource id
                    String documentRef = sakaiProxy.getDocumentResourcePath(fileName);

                    if (!sakaiProxy.saveFile(documentRef, currentUserId, fileName, mimeType, documentBytes)) {
                        error(getString("error.save"));
                        return;
                    } else {
                        s.setDocumentRef(documentRef);
                    }

                    s.setSubmittedBy(currentUserId);
                    s.setStatus(Submission.STATUS_WAITING);

                    if (projectLogic.addSubmission(s)) {
                        if (notifyInstructor.getModelObject())
                            sakaiProxy.sendNotificationToInstructor(notifyEmail, currentUserId, s);
                        if (receipt.getModelObject())
                            sakaiProxy.sendReceipt(currentUserId, s);
                        getSession().info(getString("success.save_submission"));
                        setResponsePage(new StudentOverview());
                    } else {
                        error(getString("error.save_submission"));
                    }
                }
            }
        };

        final String userid = sakaiProxy.getCurrentUserId();

        dropOffForm.setMaxSize(Bytes.megabytes(15));
        add(dropOffForm);

        dropOffForm
                .add(primaryLanguageIsEnglish = new CheckBox("primaryLanguageIsEnglish", Model.of(Boolean.TRUE)));
        dropOffForm.add(primaryLanguage = new TextField<String>("primaryLanguage", new Model<String>()));
        dropOffForm.add(assignmentTitle = new TextField<String>("assignmentTitle", new Model<String>()));
        dropOffForm
                .add(instructorRequirements = new TextArea<String>("instructorRequirements", new Model<String>()));

        Set<String> sectionsSet = sakaiProxy.getCurrentSectionsForCurrentUser();
        List<String> sectionsList = new ArrayList<String>();

        if (!sectionsSet.isEmpty()) {
            sectionsList = new ArrayList<String>(sectionsSet);
        }
        sectionsList.add("Other");

        DropDownChoice<String> sDD = new DropDownChoice<String>("courseTitle", new Model<String>(), sectionsList,
                new IChoiceRenderer<String>() {
                    @Override
                    public Object getDisplayValue(String section) {
                        if (section.equals("Other")) {
                            return "Other";
                        } else {
                            return sakaiProxy.getCourseOfferingTitleForSection(section);
                        }
                    }

                    @Override
                    public String getIdValue(String section, int i) {
                        return section;
                    }
                });

        dropOffForm.add(courseTitle = sDD);

        Set<String> instructorSet = sakaiProxy.getCurrentInstructorsForCurrentUser();
        List<String> instructorList = new ArrayList<String>();

        if (!instructorSet.isEmpty()) {
            instructorList = new ArrayList<String>(instructorSet);
        }
        instructorList.add("Other");

        DropDownChoice<String> iDD = new DropDownChoice<String>("instructors", new Model<String>(), instructorList,
                new IChoiceRenderer<String>() {
                    @Override
                    public Object getDisplayValue(String userId) {
                        if (userId.equals("Other")) {
                            return "Other";
                        } else {
                            return sakaiProxy.getUserDisplayName(userId);
                        }
                    }

                    @Override
                    public String getIdValue(String userId, int i) {
                        return userId;
                    }
                });

        dropOffForm.add(instructors = iDD);

        dropOffForm.add(courseOther = new TextField<String>("courseOther", new Model<String>()));
        dropOffForm.add(instructorNameOther = new TextField<String>("instructorNameOther", new Model<String>()));
        dropOffForm.add(instructorEmailOther = new TextField<String>("instructorEmailOther", new Model<String>()));
        dropOffForm.add(notifyInstructor = new CheckBox("notifyInstructor", Model.of(Boolean.FALSE)));
        dropOffForm.add(receipt = new CheckBox("receipt", Model.of(Boolean.TRUE)));

        dropOffForm.add(feedbackFocus = new TextArea<String>("feedbackFocus", new Model<String>()));

        dueDate = new DateTextField("dueDate", new PropertyModel<Date>(this, "date"));
        DatePicker datePicker = new DatePicker();
        datePicker.setShowOnFieldClick(true);
        datePicker.setAutoHide(true);
        dueDate.add(datePicker);
        dropOffForm.add(dueDate);

        assignmentTitle.setRequired(true);
        instructors.setRequired(true);
        courseTitle.setRequired(true);
        dueDate.setRequired(true);

        dropOffForm.add(uploadField = new FileUploadField("uploadField"));
        uploadField.setRequired(true);

        dropOffForm.add(
                new Label("max", MessageFormat.format(getString("dropoff.form.max"), dropOffForm.getMaxSize())));

        Link<Void> cancel = new Link<Void>("cancelLink") {
            public void onClick() {
                setResponsePage(new StudentOverview());
            }
        };
        dropOffForm.add(cancel);

        Link<Void> cancel2 = new Link<Void>("cancelLink2") {
            public void onClick() {
                setResponsePage(new StudentOverview());
            }
        };
        add(cancel2);

        SubmitLink submit = new SubmitLink("submitLink");
        dropOffForm.add(submit);

        dropOffForm.add(new Label("displayName", sakaiProxy.getCurrentUserDisplayName()));
        dropOffForm.add(new Label("email", sakaiProxy.getUserEmail(userid)));
        dropOffForm.add(new Label("username", sakaiProxy.getUserDisplayId(userid)));
    }

}