org.sakaiproject.attendance.tool.pages.panels.StatisticsPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.sakaiproject.attendance.tool.pages.panels.StatisticsPanel.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.attendance.tool.pages.panels;

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.AttendanceEvent;
import org.sakaiproject.attendance.model.AttendanceStatus;
import org.sakaiproject.attendance.model.Status;
import org.sakaiproject.attendance.tool.dataproviders.AttendanceStatusProvider;
import org.sakaiproject.attendance.tool.pages.EventView;
import org.sakaiproject.attendance.tool.pages.StudentView;

import java.util.Map;

/**
 * StatisticsPanel shows statistics of AttendanceRecord statuses for an AttendanceEvent or for a User
 *
 * @author Leonardo Canessa [lcanessa1 (at) udayton (dot) edu]
 * @author David Bauer [dbauer1 (at) udayton (dot) edu]
 */
public class StatisticsPanel extends BasePanel {
    private static final long serialVersionUID = 1L;

    private AttendanceEvent attendanceEvent;
    private String userId;
    private String fromPage;
    private Long previousEventId;

    private Map<Status, Integer> stats;

    public StatisticsPanel(String id, String fromPage, AttendanceEvent aE) {
        super(id);
        this.attendanceEvent = aE;
        init(fromPage);
    }

    public StatisticsPanel(String id, String fromPage, String userID, Long eId) {
        super(id);
        this.userId = userID;
        this.previousEventId = eId;
        init(fromPage);
    }

    private void init(String fromPage) {
        setOutputMarkupPlaceholderTag(true);
        this.fromPage = fromPage;
        add(createTable());
    }

    private WebMarkupContainer createTable() {
        WebMarkupContainer infoContainer = new WebMarkupContainer("info-container");
        infoContainer.add(createRefreshLink());
        infoContainer.setOutputMarkupId(true);

        if (attendanceEvent != null) {
            infoContainer.add(new Label("item-info-header", new ResourceModel("attendance.event.view.item.info")));
            stats = attendanceLogic.getStatsForEvent(attendanceEvent);
        } else {
            infoContainer
                    .add(new Label("item-info-header", new ResourceModel("attendance.student.view.item.info")));
            stats = attendanceLogic.getStatsForUser(userId);
        }

        AttendanceStatusProvider attendanceStatusProvider = new AttendanceStatusProvider(
                attendanceLogic.getCurrentAttendanceSite(), AttendanceStatusProvider.ACTIVE);

        DataView<AttendanceStatus> statusHeaders = new DataView<AttendanceStatus>("status-headers",
                attendanceStatusProvider) {
            @Override
            protected void populateItem(Item<AttendanceStatus> item) {
                item.add(new Label("header-status-name", getStatusString(item.getModelObject().getStatus())));
            }
        };
        infoContainer.add(statusHeaders);

        DataView<AttendanceStatus> activeStatusStats = new DataView<AttendanceStatus>("active-status-stats",
                attendanceStatusProvider) {
            @Override
            protected void populateItem(Item<AttendanceStatus> item) {
                item.add(new Label("stats", stats.get(item.getModelObject().getStatus())));
            }
        };
        infoContainer.add(activeStatusStats);

        infoContainer.add(new Label("info", new ResourceModel("attendance.statistics.info")));

        return infoContainer;
    }

    private Link<Void> createRefreshLink() {
        Link<Void> refreshPage = new Link<Void>("refreshPage") {
            public void onClick() {
                if (attendanceEvent != null) {
                    setResponsePage(new EventView(attendanceEvent, fromPage));
                } else {
                    setResponsePage(new StudentView(userId, previousEventId, fromPage));
                }
            }
        };
        return refreshPage;
    }
}