Java tutorial
/* * 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.AttributeModifier; import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.SubmitLink; 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.Model; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.model.StringResourceModel; import org.sakaiproject.attendance.model.AttendanceEvent; import org.sakaiproject.attendance.model.AttendanceItemStats; import org.sakaiproject.attendance.model.AttendanceStatus; import org.sakaiproject.attendance.model.Status; import org.sakaiproject.attendance.tool.dataproviders.AttendanceStatusProvider; import org.sakaiproject.attendance.tool.dataproviders.EventDataProvider; import org.sakaiproject.attendance.tool.panels.EventInputPanel; import org.sakaiproject.attendance.tool.panels.PrintPanel; import java.util.Date; /** * The overview page which lists AttendanceEvents and basic statistics of each * events AttendanceRecords. * * @author David Bauer [dbauer1 (at) udayton (dot) edu] * @author Leonardo Canessa [lcanessa1 (at) udayton (dot) edu] * @author Steve Swinsburg (steve.swinsburg@gmail.com) */ public class Overview extends BasePage { private static final long serialVersionUID = 1L; PrintPanel printPanel; WebMarkupContainer printContainer; private AttendanceStatusProvider attendanceStatusProvider; private Model<String> printHiddenClass = new Model<String>("printHidden"); public Overview() { disableLink(this.homepageLink); if (this.role != null && this.role.equals("Student")) { throw new RestartResponseException(StudentView.class); } this.attendanceStatusProvider = new AttendanceStatusProvider(attendanceLogic.getCurrentAttendanceSite(), AttendanceStatusProvider.ACTIVE); createHeaders(); createTable(); this.printContainer = new WebMarkupContainer("print-container"); printContainer.setOutputMarkupId(true); this.printPanel = new PrintPanel("print-panel", new Model<>()); printContainer.add(printPanel); printContainer.add(AttributeModifier.append("class", printHiddenClass)); add(printContainer); createTakeAttendanceNow(); createAddAttendanceItem(); } private void createHeaders() { // Main header Label headerOverview = new Label("header-overview", new ResourceModel("attendance.overview.header")); String addButtonText = (new ResourceModel("attendance.add.button")).getObject(); String takeAttendanceNowText = (new ResourceModel("attendance.now.button")).getObject(); Label headerInfo = new Label("overview-header-info", new StringResourceModel( "attendance.overview.header.info", null, new Object[] { addButtonText, takeAttendanceNowText })); headerInfo.setEscapeModelStrings(false); //headers for the table Label headerEventName = new Label("header-event-name", new ResourceModel("attendance.overview.header.event.name")); Label headerEventDate = new Label("header-event-date", new ResourceModel("attendance.overview.header.event.date")); 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()))); } }; add(statusHeaders); Label headerEventEdit = new Label("header-event-edit", new ResourceModel("attendance.overview.header.event.edit")); Label headerPrintLinks = new Label("header-print-links", new ResourceModel("attendance.overview.header.print")); add(headerOverview); add(headerInfo); add(headerEventName); add(headerEventDate); add(headerEventEdit); add(headerPrintLinks); } private void createTable() { EventDataProvider eventDataProvider = new EventDataProvider(); DataView<AttendanceEvent> attendanceEventDataView = new DataView<AttendanceEvent>("events", eventDataProvider) { @Override protected void populateItem(final Item<AttendanceEvent> item) { final AttendanceEvent modelObject = item.getModelObject(); final String name = modelObject.getName(); final AttendanceItemStats itemStats = attendanceLogic.getStatsForEvent(modelObject); Link<Void> eventLink = new Link<Void>("event-link") { private static final long serialVersionUID = 1L; public void onClick() { setResponsePage(new EventView(modelObject, BasePage.OVERVIEW_PAGE)); } }; eventLink.add(new Label("event-name", name)); item.add(eventLink); item.add(new Label("event-date", modelObject.getStartDateTime())); DataView<AttendanceStatus> activeStatusStats = new DataView<AttendanceStatus>("active-status-stats", attendanceStatusProvider) { @Override protected void populateItem(Item<AttendanceStatus> item) { Status status = item.getModelObject().getStatus(); int stat = attendanceLogic.getStatsForStatus(itemStats, status); item.add(new Label("event-stats", stat)); } }; item.add(activeStatusStats); final AjaxLink eventEditLink = getAddEditWindowAjaxLink(modelObject, "event-edit-link"); eventEditLink.add(new Label("event-edit-alt", new StringResourceModel("attendance.icon.edit.alt", null, new String[] { name }))); item.add(eventEditLink); final AjaxLink printLink = new AjaxLink<Void>("print-link") { @Override public void onClick(AjaxRequestTarget ajaxRequestTarget) { printPanel = new PrintPanel("print-panel", item.getModel()); printContainer.setOutputMarkupId(true); printContainer.addOrReplace(printPanel); printHiddenClass.setObject("printVisible"); ajaxRequestTarget.add(printContainer); } }; printLink.add(new Label("event-print-alt", new StringResourceModel("attendance.icon.print.event.alt", null, new String[] { name }))); item.add(printLink); } }; add(attendanceEventDataView); // Create empty table placeholder and make visible based on empty data provider Label noEvents = new Label("no-events", getString("attendance.overview.no.items")); noEvents.setEscapeModelStrings(false); if (eventDataProvider.size() > 0) { noEvents.setVisible(false); } add(noEvents); } private void createTakeAttendanceNow() { final Form<?> takeAttendanceNowForm = new Form<Void>("take-attendance-now-form") { @Override protected void onSubmit() { AttendanceEvent newEvent = new AttendanceEvent(); newEvent.setAttendanceSite(attendanceLogic.getCurrentAttendanceSite()); newEvent.setName(new ResourceModel("attendance.now.name").getObject()); newEvent.setStartDateTime(new Date()); Long newEventId = (Long) attendanceLogic.addAttendanceEventNow(newEvent); if (newEventId != null) { newEvent = attendanceLogic.getAttendanceEvent(newEventId); setResponsePage(new EventView(newEvent, BasePage.OVERVIEW_PAGE)); } else { error(new ResourceModel("attendance.now.error").getObject()); } } }; takeAttendanceNowForm.add(new SubmitLink("take-attendance-now")); add(takeAttendanceNowForm); } private void createAddAttendanceItem() { final Form<?> addAttendanceItemForm = new Form<Void>("add-attendance-item-form"); final AjaxButton addAttendanceItem = new AjaxButton("add-attendance-item") { @Override public void onSubmit(final AjaxRequestTarget target, final Form form) { final ModalWindow window = getAddOrEditItemWindow(); window.setTitle(new ResourceModel("attendance.add.header")); window.setContent(new EventInputPanel(window.getContentId(), window, null)); window.show(target); } }; addAttendanceItem.setDefaultFormProcessing(false); addAttendanceItem.setOutputMarkupId(true); addAttendanceItemForm.add(addAttendanceItem); add(addAttendanceItemForm); } }