org.sakaiproject.attendance.tool.pages.StudentView.java Source code

Java tutorial

Introduction

Here is the source code for org.sakaiproject.attendance.tool.pages.StudentView.java

Source

/*
 *  Copyright (c) 2017, 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.attendance.tool.pages;

import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.ResourceModel;
import org.sakaiproject.attendance.model.AttendanceRecord;
import org.sakaiproject.attendance.tool.dataproviders.AttendanceRecordProvider;
import org.sakaiproject.attendance.tool.panels.AttendanceGradePanel;
import org.sakaiproject.attendance.tool.panels.AttendanceRecordFormDataPanel;
import org.sakaiproject.attendance.tool.panels.AttendanceRecordFormHeaderPanel;
import org.sakaiproject.attendance.tool.panels.StatisticsPanel;

/**
 * StudentView is the view of a single user (a student)'s AttendanceRecords
 *
 * @author Leonardo Canessa [lcanessa1 (at) udayton (dot) edu]
 * @author David Bauer [dbauer1 (at) udayton (dot) edu]
 */
public class StudentView extends BasePage {
    private static final long serialVersionUID = 1L;
    private String studentId;
    private Long previousEventId;
    private boolean isStudent = false;
    private String returnPage = "";

    public StudentView() {
        this.studentId = sakaiProxy.getCurrentUserId();

        init();
    }

    public StudentView(String id, String fromPage) {
        this.studentId = id;
        this.returnPage = fromPage;

        init();
    }

    public StudentView(String id, Long eventId, String fromPage) {
        this.studentId = id;
        this.previousEventId = eventId;
        this.returnPage = fromPage;

        init();
    }

    private void init() {
        if (this.role != null && this.role.equals("Student")) {
            this.isStudent = true;
            hideNavigationLink(this.homepageLink);
            hideNavigationLink(this.studentOverviewLink);
            hideNavigationLink(this.settingsLink);
            hideNavigationLink(this.gradingLink);
        }

        add(new Label("student-view-hidden", "") {
            @Override
            public boolean isVisible() {
                return isStudent;
            }
        });

        add(createHeader());
        add(createGrade());
        add(createStatistics());
        add(createStudentViewHeader());
        add(createTable());
    }

    private WebMarkupContainer createHeader() {
        WebMarkupContainer header = new WebMarkupContainer("header") {
            @Override
            public boolean isVisible() {
                return !isStudent;
            }
        };
        header.setOutputMarkupPlaceholderTag(true);

        Link<Void> closeLink = new Link<Void>("close-link") {
            @Override
            public void onClick() {
                if (returnPage.equals(BasePage.STUDENT_OVERVIEW_PAGE)) {
                    setResponsePage(new StudentOverview());
                } else {
                    setResponsePage(new Overview());
                }
            }
        };

        if (returnPage.equals(BasePage.STUDENT_OVERVIEW_PAGE)) {
            closeLink.add(new Label("close-link-text",
                    new ResourceModel("attendance.event.view.link.close.student.overview")));
        } else {
            closeLink.add(
                    new Label("close-link-text", new ResourceModel("attendance.event.view.link.close.overview")));
        }

        header.add(closeLink);

        WebMarkupContainer event = new WebMarkupContainer("event") {
            @Override
            public boolean isVisible() {
                return !returnPage.equals(BasePage.STUDENT_OVERVIEW_PAGE);
            }
        };

        Link<Void> eventLink = new Link<Void>("event-link") {
            @Override
            public void onClick() {
                setResponsePage(new EventView(previousEventId, returnPage));
            }
        };

        if (!isStudent && previousEventId != null) {
            eventLink.add(
                    new Label("event-link-text", attendanceLogic.getAttendanceEvent(previousEventId).getName()));
        } else {
            eventLink.add(new Label("event-link-text", ""));
        }
        event.add(eventLink);

        header.add(event);

        Label studentName = new Label("student-name", sakaiProxy.getUserSortName(this.studentId) + " ("
                + sakaiProxy.getUserDisplayId(this.studentId) + ")");
        header.add(studentName);

        return header;
    }

    private WebMarkupContainer createGrade() {
        WebMarkupContainer grade = new WebMarkupContainer("grade") {
            @Override
            public boolean isVisible() {
                Boolean isGradeShown = attendanceLogic.getCurrentAttendanceSite().getIsGradeShown();
                return (isGradeShown == null ? false : isGradeShown) || !isStudent;
            }
        };

        AttendanceGradePanel attendanceGrade = new AttendanceGradePanel("attendance-grade",
                attendanceLogic.getAttendanceGrade(this.studentId), feedbackPanel) {
            @Override
            public boolean isEnabled() {
                return !isStudent;
            }
        };

        grade.add(attendanceGrade);

        return grade;
    }

    private StatisticsPanel createStatistics() {
        return new StatisticsPanel("statistics", returnPage, studentId, previousEventId);
    }

    private WebMarkupContainer createStudentViewHeader() {
        WebMarkupContainer studentView = new WebMarkupContainer("student-view") {
            @Override
            public boolean isVisible() {
                return isStudent;
            }
        };

        studentView.add(new Label("student-name", sakaiProxy.getUserSortName(this.studentId) + " ("
                + sakaiProxy.getUserDisplayId(this.studentId) + ")"));

        return studentView;
    }

    private WebMarkupContainer createTable() {
        WebMarkupContainer studentViewData = new WebMarkupContainer("student-view-data");

        if (!isStudent) {
            studentViewData
                    .add(new Label("take-attendance-header", getString("attendance.student.view.take.attendance")));
        } else {
            studentViewData
                    .add(new Label("take-attendance-header", getString("attendance.student.view.attendance")));
        }
        studentViewData.add(new AttendanceRecordFormHeaderPanel("header"));
        studentViewData
                .add(new Label("event-name-header", new ResourceModel("attendance.record.form.header.event")));
        studentViewData
                .add(new Label("event-date-header", new ResourceModel("attendance.record.form.header.date")));
        studentViewData.add(createData());

        return studentViewData;
    }

    private DataView<AttendanceRecord> createData() {
        DataView<AttendanceRecord> dataView = new DataView<AttendanceRecord>("records",
                new AttendanceRecordProvider(this.studentId)) {
            @Override
            protected void populateItem(final Item<AttendanceRecord> item) {
                Link<Void> eventLink = new Link<Void>("event-link") {
                    private static final long serialVersionUID = 1L;

                    public void onClick() {
                        setResponsePage(new EventView(item.getModelObject().getAttendanceEvent(), returnPage));
                    }
                };
                eventLink.add(new Label("record-name", item.getModelObject().getAttendanceEvent().getName()));
                if (isStudent) {
                    disableLink(eventLink);
                }
                item.add(eventLink);
                item.add(new Label("event-date", item.getModelObject().getAttendanceEvent().getStartDateTime()));
                item.add(new AttendanceRecordFormDataPanel("record", item.getModel(), returnPage, feedbackPanel));
            }
        };

        return dataView;
    }
}